aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/kotlin/com/pitchedapps/frost/preferences/PreferenceBuilder.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/preferences/PreferenceBuilder.kt')
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/preferences/PreferenceBuilder.kt65
1 files changed, 65 insertions, 0 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/preferences/PreferenceBuilder.kt b/app/src/main/kotlin/com/pitchedapps/frost/preferences/PreferenceBuilder.kt
new file mode 100644
index 00000000..f49eac8f
--- /dev/null
+++ b/app/src/main/kotlin/com/pitchedapps/frost/preferences/PreferenceBuilder.kt
@@ -0,0 +1,65 @@
+package com.pitchedapps.frost.preferences
+
+import android.content.Context
+import android.support.annotation.ColorInt
+import android.support.annotation.ColorRes
+import android.support.annotation.StringRes
+import com.mikepenz.iconics.typeface.IIcon
+import com.pitchedapps.frost.utils.toColor
+import com.pitchedapps.frost.utils.toString
+
+/**
+ * Created by Allan Wang on 2017-06-06.
+ */
+//fun Context.preference(setup: PreferenceBuild)
+
+@DslMarker
+annotation class PreferenceMarker
+
+@PreferenceMarker
+enum class PreferenceType() {
+ HEADER, TEXT, CHECKBOX;
+
+ fun <T> createView(builder: PrefItem<T>) {
+
+ }
+}
+
+@PreferenceMarker
+class PrefFrame(val context: Context, val theme: ThemeBuilder? = null, builder: PrefFrameBuilder.() -> Unit)
+
+@PreferenceMarker
+class PrefFrameBuilder() {
+ val items: MutableList<PrefItem<*>> = mutableListOf()
+
+ fun <T> item(item: PrefItem<T>) {
+ items.add(item)
+ }
+}
+
+@PreferenceMarker
+class ThemeBuilder(context: Context, @ColorInt text: Int? = null, @ColorRes textRes: Int? = null,
+ @ColorInt accent: Int? = null, @ColorRes accentRes: Int? = null,
+ @ColorInt background: Int? = null, @ColorRes backgroundRes: Int? = null) {
+ val textColor = text ?: textRes?.toColor(context)
+ val accentColor = accent ?: accentRes?.toColor(context)
+ val backgroundColor = background ?: backgroundRes?.toColor(context)
+}
+
+@PreferenceMarker
+class PrefItem<T>(
+ context: Context,
+ val key: String,
+ title: String? = null,
+ @StringRes titleRes: Int? = null,
+ description: String? = null,
+ @StringRes descriptionRes: Int? = null,
+ val onClick: (key: String, current: T, callback: (T) -> Unit) -> Unit,
+ val iicon: IIcon? = null,
+ val getter: (key: String) -> T,
+ val setter: (key: String, value: T) -> Unit
+) {
+ val title: String = titleRes?.toString(context) ?: title ?: ""
+ val description: String = descriptionRes?.toString(context) ?: description ?: ""
+ val originalValue: T by lazy { getter.invoke(key) }
+}