fix deserialzeClass storing in the wrong preference

This commit is contained in:
Finnley Somdahl 2024-02-02 08:36:20 -06:00
parent cbdd1a2538
commit 10ae66d1d0

View file

@ -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)