Skip to content

Commit 2b230fe

Browse files
committed
Add settings and Percent
1 parent 16c07b6 commit 2b230fe

File tree

4 files changed

+155
-0
lines changed

4 files changed

+155
-0
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.omega_r.base.simple
2+
3+
import com.omega_r.base.settings.BaseSettings
4+
import com.omega_r.base.settings.SettingStorage
5+
6+
class Settings(setting: SettingStorage): BaseSettings(setting) {
7+
8+
var firstLaunch by provideBoolean(key = "jklh", defaultValue = false, label = "possim")
9+
10+
11+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.omega_r.base.settings
2+
3+
import com.omega_r.base.enitity.Percent
4+
import kotlin.properties.ReadWriteProperty
5+
6+
open class BaseSettings(private val setting: SettingStorage) {
7+
8+
protected fun provideBoolean(
9+
key: String,
10+
defaultValue: Boolean,
11+
label: String,
12+
description: String = ""
13+
) = run {
14+
setting.provide(
15+
Setting.BooleanSetting(
16+
key = key,
17+
defaultValue = defaultValue,
18+
label = label,
19+
description = description
20+
)
21+
)
22+
}
23+
24+
protected fun provideString(
25+
key: String,
26+
defaultValue: String,
27+
label: String,
28+
description: String = ""
29+
) = run {
30+
setting.provide(
31+
Setting.StringSetting(
32+
key = key,
33+
defaultValue = defaultValue,
34+
label = label,
35+
description = description
36+
)
37+
)
38+
}
39+
40+
protected fun providePercent(
41+
key: String,
42+
defaultValue: Percent,
43+
label: String,
44+
description: String = ""
45+
) = run {
46+
setting.provide(
47+
Setting.PercentSetting(
48+
key = key,
49+
defaultValue = defaultValue,
50+
label = label,
51+
description = description
52+
)
53+
)
54+
}
55+
56+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.omega_r.base.settings
2+
3+
import android.content.SharedPreferences
4+
import com.omega_r.base.enitity.Percent
5+
import com.omega_r.base.enitity.PercentModel
6+
import com.omega_r.base.enitity.toPercent
7+
8+
sealed class Setting<T>(
9+
val key: String,
10+
val defaultValue: T,
11+
val label: String,
12+
val description: String
13+
) {
14+
15+
internal abstract fun getValue(sharedPreferences: SharedPreferences): T
16+
17+
internal abstract fun setValue(editor: SharedPreferences.Editor, value: T)
18+
19+
open class BooleanSetting(key: String, defaultValue: Boolean, label: String, description: String) :
20+
Setting<Boolean>(key = key, defaultValue = defaultValue, label = label, description = description) {
21+
22+
override fun getValue(sharedPreferences: SharedPreferences): Boolean {
23+
return sharedPreferences.getBoolean(key, defaultValue)
24+
}
25+
26+
override fun setValue(editor: SharedPreferences.Editor, value: Boolean) {
27+
editor.putBoolean(key, value)
28+
}
29+
30+
}
31+
32+
open class StringSetting(key: String, defaultValue: String, label: String, description: String) :
33+
Setting<String>(key = key, defaultValue = defaultValue, label = label, description = description) {
34+
override fun getValue(sharedPreferences: SharedPreferences): String {
35+
return sharedPreferences.getString(key, defaultValue) ?: defaultValue
36+
}
37+
38+
override fun setValue(editor: SharedPreferences.Editor, value: String) {
39+
editor.putString(key, value)
40+
}
41+
}
42+
43+
open class PercentSetting(key: String, defaultValue: Percent, label: String, description: String) :
44+
Setting<Percent>(key = key, defaultValue = defaultValue, label = label, description = description) {
45+
46+
private companion object {
47+
private val percentModel = PercentModel(0f, 100f)
48+
}
49+
50+
override fun getValue(sharedPreferences: SharedPreferences): Percent {
51+
return sharedPreferences.getFloat(key, defaultValue.toFloat(percentModel)).toPercent(percentModel)
52+
}
53+
54+
override fun setValue(editor: SharedPreferences.Editor, value: Percent) {
55+
editor.putFloat(key, value.toFloat(percentModel))
56+
}
57+
}
58+
59+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.omega_r.base.settings
2+
3+
import android.content.SharedPreferences
4+
import androidx.core.content.edit
5+
import kotlin.properties.ReadWriteProperty
6+
import kotlin.reflect.KProperty
7+
8+
class SettingStorage(private val sharedPreferences: SharedPreferences){
9+
10+
operator fun <T> get(setting: Setting<T>): T {
11+
return setting.getValue(sharedPreferences)
12+
}
13+
14+
operator fun <T> set(setting: Setting<T>, newValue: T) {
15+
sharedPreferences.edit {
16+
setting.setValue(this, newValue)
17+
}
18+
}
19+
20+
fun <T> provide(setting: Setting<T>): ReadWriteProperty<Any, T> = Property(setting)
21+
22+
private inner class Property<T>(private val setting: Setting<T>): ReadWriteProperty<Any, T> {
23+
override fun getValue(thisRef: Any, property: KProperty<*>): T = get(setting)
24+
25+
override fun setValue(thisRef: Any, property: KProperty<*>, value: T) = set(setting, value)
26+
27+
}
28+
29+
}

0 commit comments

Comments
 (0)