fix deserialzeClass storing in the wrong preference
This commit is contained in:
parent
cbdd1a2538
commit
10ae66d1d0
1 changed files with 16 additions and 11 deletions
|
@ -45,7 +45,7 @@ object PrefManager {
|
||||||
is String -> putString(prefName.name, value)
|
is String -> putString(prefName.name, value)
|
||||||
is Set<*> -> convertAndPutStringSet(prefName.name, value)
|
is Set<*> -> convertAndPutStringSet(prefName.name, value)
|
||||||
null -> remove(prefName.name)
|
null -> remove(prefName.name)
|
||||||
else -> serialzeClass(prefName.name, value)
|
else -> serializeClass(prefName.name, value, prefName.data.prefLocation)
|
||||||
}
|
}
|
||||||
apply()
|
apply()
|
||||||
}
|
}
|
||||||
|
@ -62,7 +62,7 @@ object PrefManager {
|
||||||
Long::class -> pref.getLong(prefName.name, default as Long) as T
|
Long::class -> pref.getLong(prefName.name, default as Long) as T
|
||||||
String::class -> pref.getString(prefName.name, default as String?) as T
|
String::class -> pref.getString(prefName.name, default as String?) as T
|
||||||
Set::class -> convertFromStringSet(pref.getStringSet(prefName.name, null), default) as T
|
Set::class -> convertFromStringSet(pref.getStringSet(prefName.name, null), default) as T
|
||||||
List::class -> deserialzeClass(prefName.name, default) as T
|
List::class -> deserializeClass(prefName.name, default, prefName.data.prefLocation) as T
|
||||||
else -> throw IllegalArgumentException("Type not supported")
|
else -> throw IllegalArgumentException("Type not supported")
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
@ -81,7 +81,7 @@ object PrefManager {
|
||||||
Long::class -> pref.getLong(prefName.name, prefName.data.default as Long) as T
|
Long::class -> pref.getLong(prefName.name, prefName.data.default as Long) as T
|
||||||
String::class -> pref.getString(prefName.name, prefName.data.default as String?) as T
|
String::class -> pref.getString(prefName.name, prefName.data.default as String?) as T
|
||||||
Set::class -> convertFromStringSet(pref.getStringSet(prefName.name, null), prefName.data.default) as T
|
Set::class -> convertFromStringSet(pref.getStringSet(prefName.name, null), prefName.data.default) as T
|
||||||
List::class -> deserialzeClass(prefName.name, prefName.data.default) as T
|
List::class -> deserializeClass(prefName.name, prefName.data.default, prefName.data.prefLocation) as T
|
||||||
else -> throw IllegalArgumentException("Type not supported")
|
else -> throw IllegalArgumentException("Type not supported")
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
@ -100,7 +100,7 @@ object PrefManager {
|
||||||
Long::class -> pref.getLong(prefName.name, default as Long) as T?
|
Long::class -> pref.getLong(prefName.name, default as Long) as T?
|
||||||
String::class -> pref.getString(prefName.name, default as String?) as T?
|
String::class -> pref.getString(prefName.name, default as String?) as T?
|
||||||
Set::class -> convertFromStringSet(pref.getStringSet(prefName.name, null), default) as T?
|
Set::class -> convertFromStringSet(pref.getStringSet(prefName.name, null), default) as T?
|
||||||
else -> deserialzeClass(prefName.name, default)
|
else -> deserializeClass(prefName.name, default, prefName.data.prefLocation)
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
default
|
default
|
||||||
|
@ -134,7 +134,7 @@ object PrefManager {
|
||||||
is Long -> irrelevantPreferences!!.getLong(key, default) as T?
|
is Long -> irrelevantPreferences!!.getLong(key, default) as T?
|
||||||
is String -> irrelevantPreferences!!.getString(key, default) as T?
|
is String -> irrelevantPreferences!!.getString(key, default) as T?
|
||||||
is Set<*> -> convertFromStringSet(irrelevantPreferences!!.getStringSet(key, null), default) as T?
|
is Set<*> -> convertFromStringSet(irrelevantPreferences!!.getStringSet(key, null), default) as T?
|
||||||
else -> deserialzeClass(key, default)
|
else -> deserializeClass(key, default, Location.Irrelevant)
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
default
|
default
|
||||||
|
@ -160,7 +160,7 @@ object PrefManager {
|
||||||
is String -> putString(key, value as String)
|
is String -> putString(key, value as String)
|
||||||
is Set<*> -> convertAndPutStringSet(key, value)
|
is Set<*> -> convertAndPutStringSet(key, value)
|
||||||
null -> remove(key)
|
null -> remove(key)
|
||||||
else -> serialzeClass(key, value)
|
else -> serializeClass(key, value, Location.Irrelevant)
|
||||||
}
|
}
|
||||||
apply()
|
apply()
|
||||||
}
|
}
|
||||||
|
@ -255,6 +255,7 @@ object PrefManager {
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
fun importAllPrefs(prefs: Map<String, *>, prefLocation: Location) {
|
fun importAllPrefs(prefs: Map<String, *>, prefLocation: Location) {
|
||||||
val pref = getPrefLocation(prefLocation)
|
val pref = getPrefLocation(prefLocation)
|
||||||
|
var hadError = false
|
||||||
with(pref.edit()) {
|
with(pref.edit()) {
|
||||||
prefs.forEach { (key, value) ->
|
prefs.forEach { (key, value) ->
|
||||||
when (value) {
|
when (value) {
|
||||||
|
@ -266,10 +267,12 @@ object PrefManager {
|
||||||
is HashSet<*> -> putStringSet(key, value as Set<String>)
|
is HashSet<*> -> putStringSet(key, value as Set<String>)
|
||||||
is ArrayList<*> -> putStringSet(key, arrayListToSet(value))
|
is ArrayList<*> -> putStringSet(key, arrayListToSet(value))
|
||||||
is Set<*> -> putStringSet(key, value as Set<String>)
|
is Set<*> -> putStringSet(key, value as Set<String>)
|
||||||
else -> snackString("Error importing preference: Type not supported")
|
else -> hadError = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
apply()
|
apply()
|
||||||
|
if (hadError) snackString("Error importing preferences")
|
||||||
|
else snackString("Preferences imported")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -327,7 +330,8 @@ object PrefManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun <T> serialzeClass(key: String, value: T){
|
private fun <T> serializeClass(key: String, value: T, location: Location){
|
||||||
|
val pref = getPrefLocation(location)
|
||||||
try {
|
try {
|
||||||
val bos = ByteArrayOutputStream()
|
val bos = ByteArrayOutputStream()
|
||||||
ObjectOutputStream(bos).use { oos ->
|
ObjectOutputStream(bos).use { oos ->
|
||||||
|
@ -335,16 +339,17 @@ object PrefManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
val serialized = Base64.encodeToString(bos.toByteArray(), Base64.DEFAULT)
|
val serialized = Base64.encodeToString(bos.toByteArray(), Base64.DEFAULT)
|
||||||
irrelevantPreferences!!.edit().putString(key, serialized).apply()
|
pref.edit().putString(key, serialized).apply()
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
snackString("Error serializing preference: ${e.message}")
|
snackString("Error serializing preference: ${e.message}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
private fun <T> deserialzeClass(key: String, default: T?): T? {
|
private fun <T> deserializeClass(key: String, default: T?, location: Location): T? {
|
||||||
return try {
|
return try {
|
||||||
val serialized = irrelevantPreferences!!.getString(key, null)
|
val pref = getPrefLocation(location)
|
||||||
|
val serialized = pref.getString(key, null)
|
||||||
if (serialized != null) {
|
if (serialized != null) {
|
||||||
val data = Base64.decode(serialized, Base64.DEFAULT)
|
val data = Base64.decode(serialized, Base64.DEFAULT)
|
||||||
val bis = ByteArrayInputStream(data)
|
val bis = ByteArrayInputStream(data)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue