setup preferences

This commit is contained in:
Owen LeJeune
2022-02-14 09:47:29 -05:00
parent 5523aa6e89
commit b69cfff94b
5 changed files with 72 additions and 5 deletions

View File

@@ -3,6 +3,7 @@ package com.owenlejeune.tvtime
import android.app.Application import android.app.Application
import com.facebook.stetho.Stetho import com.facebook.stetho.Stetho
import com.owenlejeune.tvtime.di.modules.networkModule import com.owenlejeune.tvtime.di.modules.networkModule
import com.owenlejeune.tvtime.di.modules.preferencesModule
import org.koin.android.ext.koin.androidContext import org.koin.android.ext.koin.androidContext
import org.koin.android.ext.koin.androidLogger import org.koin.android.ext.koin.androidLogger
import org.koin.core.context.startKoin import org.koin.core.context.startKoin
@@ -19,7 +20,10 @@ class TvTimeApplication: Application() {
if (BuildConfig.DEBUG) Level.ERROR else Level.NONE if (BuildConfig.DEBUG) Level.ERROR else Level.NONE
) )
androidContext(this@TvTimeApplication) androidContext(this@TvTimeApplication)
modules(networkModule) modules(
networkModule,
preferencesModule
)
} }
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {

View File

@@ -2,10 +2,15 @@ package com.owenlejeune.tvtime.di.modules
import com.owenlejeune.tvtime.BuildConfig import com.owenlejeune.tvtime.BuildConfig
import com.owenlejeune.tvtime.api.* import com.owenlejeune.tvtime.api.*
import com.owenlejeune.tvtime.preferences.AppPreferences
import org.koin.dsl.module import org.koin.dsl.module
val networkModule = module { val networkModule = module {
single { if (BuildConfig.DEBUG) DebugHttpClient() else ProdHttpClient() } single { if (BuildConfig.DEBUG) DebugHttpClient() else ProdHttpClient() }
single<Converter> { GsonConverter() } single<Converter> { GsonConverter() }
single { (baseUrl: String) -> Client(baseUrl) } single { (baseUrl: String) -> Client(baseUrl) }
}
val preferencesModule = module {
single { AppPreferences(get()) }
} }

View File

@@ -0,0 +1,53 @@
package com.owenlejeune.tvtime.preferences
import android.content.Context
import android.content.SharedPreferences
class AppPreferences(context: Context) {
companion object {
private val PREF_FILE = "tvtime_shared_preferences"
private val USE_PREFERENCES = "use_android_12_colors"
}
private val preferences: SharedPreferences = context.getSharedPreferences(PREF_FILE, Context.MODE_PRIVATE)
// val usePreferences: MutableState<Boolean>
var usePreferences: Boolean
get() = preferences.getBoolean(USE_PREFERENCES, false)
set(value) { preferences.put(USE_PREFERENCES, value) }
private fun SharedPreferences.put(key: String, value: Any?) {
edit().apply {
when (value) {
is Boolean -> putBoolean(key, value)
is Int -> putInt(key, value)
is Long -> putLong(key, value)
is Float -> putFloat(key, value)
is String -> putString(key, value)
}
apply()
}
}
// private fun <T> SharedPreferences.get(key: String, java: Class<T>): T {
//
// }
//
// inner class PrefsMutableState<T>(val key: String): MutableState<T> {
// override var value: T
// get() = preferences.get(key, T::class.java)
// set(value) { preferences.put(key, value) }
//
// override fun component1(): T {
// TODO("Not yet implemented")
// }
//
// override fun component2(): (T) -> Unit {
// TODO("Not yet implemented")
// }
//
// }
}

View File

@@ -68,6 +68,7 @@ fun TopLevelSwitch(
) )
CustomSwitch( CustomSwitch(
modifier = Modifier.padding(40.dp, 12.dp), modifier = Modifier.padding(40.dp, 12.dp),
switchState = checkedState,
onCheckChanged = { isChecked -> onCheckChanged = { isChecked ->
checkedState.value = isChecked checkedState.value = isChecked
onCheckChanged(isChecked) onCheckChanged(isChecked)

View File

@@ -6,20 +6,24 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import com.owenlejeune.tvtime.preferences.AppPreferences
import com.owenlejeune.tvtime.ui.components.PaletteView import com.owenlejeune.tvtime.ui.components.PaletteView
import com.owenlejeune.tvtime.ui.components.TopLevelSwitch import com.owenlejeune.tvtime.ui.components.TopLevelSwitch
import org.koin.java.KoinJavaComponent.get
@Composable @Composable
fun SettingsTab() { fun SettingsTab(preferences: AppPreferences = get(AppPreferences::class.java)) {
Column(modifier = Modifier.fillMaxSize()) { Column(modifier = Modifier.fillMaxSize()) {
val showPalette = remember { mutableStateOf(false) } val usePreferences = remember { mutableStateOf(preferences.usePreferences) }
TopLevelSwitch( TopLevelSwitch(
text = "Show Palette", text = "Show Palette",
checkedState = usePreferences,
onCheckChanged = { isChecked -> onCheckChanged = { isChecked ->
showPalette.value = isChecked usePreferences.value = isChecked
preferences.usePreferences = isChecked
} }
) )
if (showPalette.value) { if (usePreferences.value) {
PaletteView() PaletteView()
} }
} }