1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
package ca.allanwang.kau.kpref.activity.items
import android.view.View
import ca.allanwang.kau.colorpicker.CircleView
import ca.allanwang.kau.colorpicker.ColorBuilder
import ca.allanwang.kau.colorpicker.ColorContract
import ca.allanwang.kau.colorpicker.colorPickerDialog
import ca.allanwang.kau.kpref.activity.GlobalOptions
import ca.allanwang.kau.kpref.activity.R
/**
* Created by Allan Wang on 2017-06-07.
*
* ColorPicker preference
* When a color is successfully selected in the dialog, it will be saved as an int
*/
open class KPrefColorPicker(open val builder: KPrefColorContract) : KPrefItemBase<Int>(builder) {
override fun onPostBindView(viewHolder: ViewHolder, textColor: Int?, accentColor: Int?) {
super.onPostBindView(viewHolder, textColor, accentColor)
builder.apply {
titleRes = core.titleRes
colorCallback = {
pref = it
}
}
if (builder.showPreview) {
val preview = viewHolder.bindInnerView<CircleView>(R.layout.kau_pref_color)
preview.setBackgroundColor(pref)
preview.withBorder = true
builder.apply {
colorCallback = {
pref = it
if (builder.showPreview)
preview.setBackgroundColor(it)
}
}
}
}
override fun defaultOnClick(itemView: View, innerContent: View?): Boolean {
builder.apply {
defaultColor = pref //update color
}
itemView.context.colorPickerDialog(builder).show()
return true
}
/**
* Extension of the base contract and [ColorContract] along with a showPreview option
*/
interface KPrefColorContract : BaseContract<Int>, ColorContract {
var showPreview: Boolean
}
/**
* Default implementation of [KPrefColorContract]
*/
class KPrefColorBuilder(globalOptions: GlobalOptions,
override var titleRes: Int,
getter: () -> Int,
setter: (value: Int) -> Unit
) : KPrefColorContract, BaseContract<Int> by BaseBuilder<Int>(globalOptions, titleRes, getter, setter),
ColorContract by ColorBuilder() {
override var showPreview: Boolean = true
}
override fun getType(): Int = R.id.kau_item_pref_color_picker
}
|