aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/kotlin/com/pitchedapps/frost/preferences/PreferenceView.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/preferences/PreferenceView.kt')
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/preferences/PreferenceView.kt73
1 files changed, 73 insertions, 0 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/preferences/PreferenceView.kt b/app/src/main/kotlin/com/pitchedapps/frost/preferences/PreferenceView.kt
new file mode 100644
index 00000000..60c3bb9d
--- /dev/null
+++ b/app/src/main/kotlin/com/pitchedapps/frost/preferences/PreferenceView.kt
@@ -0,0 +1,73 @@
+package com.pitchedapps.frost.preferences
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.support.annotation.ColorInt
+import android.view.View
+import android.widget.CheckBox
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.TextView
+import butterknife.ButterKnife
+import com.pitchedapps.frost.R
+import com.pitchedapps.frost.utils.bindView
+import com.pitchedapps.frost.utils.toDrawable
+
+@SuppressLint("ViewConstructor")
+/**
+ * Created by Allan Wang on 2017-06-06.
+ */
+open class PreferenceView<T>(
+ context: Context, builder: PrefItem<T>, themeBuilder: ThemeBuilder?
+) : LinearLayout(context) {
+
+ val iconFrame: LinearLayout by bindView(R.id.icon_frame)
+ val icon: ImageView by bindView(R.id.icon)
+ val title: TextView by bindView(R.id.title)
+ val desc: TextView by bindView(R.id.summary)
+ val checkbox: CheckBox by bindView(R.id.checkbox)
+ val key = builder.key
+ private val getter = builder.getter
+ private val setter = builder.setter
+ var pref: T
+ get() = getter.invoke(key)
+ set(value) {
+ setter.invoke(key, value)
+ }
+ val original = pref
+ val hasChanged: Boolean
+ get() = original == pref
+
+ init {
+ ButterKnife.bind(this)
+ title.text = builder.title
+ desc.text = builder.description
+ if (builder.iicon == null) iconFrame.visibility = View.GONE
+ else icon.setImageDrawable(builder.iicon.toDrawable(context, sizeDp = 48))
+ if (themeBuilder != null) {
+ with(themeBuilder) {
+ if (textColor != null) setTextColor(textColor)
+ if (accentColor != null) setAccentColor(accentColor)
+ }
+ }
+ setClick(builder.onClick)
+ }
+
+ fun setClick(listener: (key: String, current: T, callback: (T) -> Unit) -> Unit) {
+ viewWithClick().setOnClickListener {
+ listener.invoke(key, pref, { pref = it })
+ }
+ }
+
+ open fun viewWithClick(): View = this
+
+ open fun setTextColor(@ColorInt color: Int) {
+ title.setTextColor(color)
+ desc.setTextColor(color)
+ desc.alpha = 0.7f
+ }
+
+ //Accent color is not needed for basic prefs
+ open fun setAccentColor(@ColorInt color: Int) {}
+
+} \ No newline at end of file