@@ -13,44 +13,46 @@ import nl.giejay.android.tv.immich.shared.prefs.PreferenceManager.sharedPreferen
1313
1414
1515sealed class PrefScreen (val title : String , val key : String , val children : List <PrefCategory >, val onViewCreated : (PreferenceManager ) -> Unit = {}){
16- fun findByKey (key : String ): Pref <* , * >? {
16+ fun findByKey (key : String ): Pref <* , * , * >? {
1717 return children.firstNotNullOfOrNull { it.findByKey(key) }
1818 }
1919}
2020
21- data class PrefCategory (val title : String , val children : List <Pref <* , * >>){
22- fun findByKey (key : String ): Pref <* , * >? {
21+ data class PrefCategory (val title : String , val children : List <Pref <* , * , * >>){
22+ fun findByKey (key : String ): Pref <* , * , * >? {
2323 return children.find { it.key() == key }
2424 }
2525}
2626
27- sealed class Pref <T , PREF : Preference >(val defaultValue : T , val title : String , val summary : String ) {
27+ sealed class Pref <T , PREF : Preference , PREFTYPE >(val defaultValue : T , val title : String , val summary : String ) {
2828 open fun key () = javaClass.simpleName.lowercase()
2929 abstract fun save (sharedPreferences : SharedPreferences , value : T )
30- open fun parse (any : Any? ): T {
31- return any as T
30+ open fun fromPrefValue (prefValue : PREFTYPE ): T {
31+ // by default stored pref value and the type of the Pref is the same, but it can differ with for example ListPreferences<Int>
32+ // stored by String values
33+ return prefValue as T
3234 }
3335
3436 open fun onClick (context : Context , controller : NavController ): Boolean {
3537 // can be implemented by children
3638 return false
3739 }
3840
39- open fun parseDefaultValue (value : T ): Any = value as Any
41+ open fun toPrefValue (value : T ): PREFTYPE = value as PREFTYPE
4042
4143 fun createPreference (context : Context ): PREF {
4244 val createPref = createPref(context)
4345 createPref.key = key()
4446 createPref.title = title
45- createPref.setDefaultValue(parseDefaultValue (defaultValue))
47+ createPref.setDefaultValue(toPrefValue (defaultValue))
4648 createPref.summary = summary
4749 return createPref
4850 }
4951
5052 abstract fun createPref (context : Context ): PREF
5153}
5254
53- sealed class NotUserEditableStringPref (title : String , summary : String ): Pref<String, Preference>(" " , title, summary){
55+ sealed class NotUserEditableStringPref (title : String , summary : String ): Pref<String, Preference, String >(" " , title, summary){
5456 override fun save (sharedPreferences : SharedPreferences , value : String ) {
5557 sharedPreference.edit().putString(key(), value).apply ()
5658 }
@@ -60,7 +62,7 @@ sealed class NotUserEditableStringPref(title: String, summary: String): Pref<Str
6062 }
6163}
6264
63- sealed class ActionPref (title : String , summary : String , val onClick : (Context , NavController ) -> Boolean ): Pref<String, Preference>(" " , title, summary){
65+ sealed class ActionPref (title : String , summary : String , val onClick : (Context , NavController ) -> Boolean ): Pref<String, Preference, String >(" " , title, summary){
6466 override fun save (sharedPreferences : SharedPreferences , value : String ) {
6567
6668 }
@@ -77,16 +79,16 @@ sealed class ActionPref(title: String, summary: String, val onClick: (Context, N
7779}
7880
7981sealed class EnumPref <T : Enum <T >>(defaultValue : T , title : String , summary : String ,
80- val titlesResourceId : Int , val valuesResourceId : Int ) : Pref<T, ListPreference>(defaultValue, title, summary) {
82+ val titlesResourceId : Int , val valuesResourceId : Int ) : Pref<T, ListPreference, String >(defaultValue, title, summary) {
8183 override fun save (sharedPreferences : SharedPreferences , value : T ) {
8284 sharedPreferences.edit().putString(key(), value.toString()).apply ()
8385 }
8486
85- override fun parseDefaultValue (value : T ): Any {
87+ override fun toPrefValue (value : T ): String {
8688 return value.toString()
8789 }
8890
89- abstract override fun parse ( any : Any? ): T
91+ abstract override fun fromPrefValue ( prefValue : String ): T
9092
9193 override fun createPref (context : Context ): ListPreference {
9294 val listPreference = ListPreference (context)
@@ -97,7 +99,7 @@ sealed class EnumPref<T : Enum<T>>(defaultValue: T, title: String, summary: Stri
9799 }
98100}
99101
100- sealed class BooleanPref (defaultValue : Boolean , title : String , summary : String ) : Pref<Boolean, CheckBoxPreference>(defaultValue, title, summary) {
102+ sealed class BooleanPref (defaultValue : Boolean , title : String , summary : String ) : Pref<Boolean, CheckBoxPreference, Boolean >(defaultValue, title, summary) {
101103 override fun save (sharedPreferences : SharedPreferences , value : Boolean ) {
102104 sharedPreference.edit().putBoolean(key(), value).apply ()
103105 }
@@ -107,7 +109,7 @@ sealed class BooleanPref(defaultValue: Boolean, title: String, summary: String)
107109 }
108110}
109111
110- sealed class StringPref (defaultValue : String , title : String , summary : String ) : Pref<String, EditTextPreference>(defaultValue, title, summary) {
112+ sealed class StringPref (defaultValue : String , title : String , summary : String ) : Pref<String, EditTextPreference, String >(defaultValue, title, summary) {
111113 override fun save (sharedPreferences : SharedPreferences , value : String ) {
112114 sharedPreference.edit().putString(key(), value).apply ()
113115 }
@@ -117,7 +119,7 @@ sealed class StringPref(defaultValue: String, title: String, summary: String) :
117119 }
118120}
119121
120- sealed class StringSetPref (defaultValue : Set <String >, title : String , summary : String ) : Pref<Set<String>, ListPreference>(defaultValue,
122+ sealed class StringSetPref (defaultValue : Set <String >, title : String , summary : String ) : Pref<Set<String>, ListPreference, Set<String> >(defaultValue,
121123 title,
122124 summary) {
123125 override fun save (sharedPreferences : SharedPreferences , value : Set <String >) {
@@ -129,7 +131,7 @@ sealed class StringSetPref(defaultValue: Set<String>, title: String, summary: St
129131 }
130132}
131133
132- sealed class IntSeekbarPref (defaultValue : Int , title : String , summary : String ) : Pref<Int, SeekBarPreference>(defaultValue, title, summary) {
134+ sealed class IntSeekbarPref (defaultValue : Int , title : String , summary : String ) : Pref<Int, SeekBarPreference, Int >(defaultValue, title, summary) {
133135 override fun save (sharedPreferences : SharedPreferences , value : Int ) {
134136 sharedPreference.edit().putInt(key(), value).apply ()
135137 }
@@ -140,15 +142,19 @@ sealed class IntSeekbarPref(defaultValue: Int, title: String, summary: String) :
140142}
141143
142144sealed class IntListPref (defaultValue : Int , title : String , summary : String ,
143- val titlesResourceId : Int , val valuesResourceId : Int ) : Pref<Int, ListPreference>(defaultValue, title, summary) {
145+ val titlesResourceId : Int , val valuesResourceId : Int ) : Pref<Int, ListPreference, String >(defaultValue, title, summary) {
144146 override fun save (sharedPreferences : SharedPreferences , value : Int ) {
145147 sharedPreference.edit().putString(key(), value.toString()).apply ()
146148 }
147149
148- override fun parseDefaultValue (value : Int ): String {
150+ override fun toPrefValue (value : Int ): String {
149151 return value.toString()
150152 }
151153
154+ override fun fromPrefValue (prefValue : String ): Int {
155+ return prefValue.toInt()
156+ }
157+
152158 override fun createPref (context : Context ): ListPreference {
153159 val listPreference = ListPreference (context)
154160 listPreference.setEntries(titlesResourceId)
0 commit comments