package ca.allanwang.kau.kpref.activity.items import android.app.TimePickerDialog import android.widget.TimePicker import ca.allanwang.kau.kpref.activity.GlobalOptions import ca.allanwang.kau.kpref.activity.KClick import ca.allanwang.kau.kpref.activity.R import java.util.* /** * Created by Allan Wang on 2017-06-14. * * Text preference * Holds a textview to display data on the right * This is still a generic preference * */ open class KPrefTimePicker(override val builder: KPrefTimeContract) : KPrefText(builder) { interface KPrefTimeContract : KPrefText.KPrefTextContract, TimePickerDialog.OnTimeSetListener { var use24HourFormat: Boolean } override fun KClick.defaultOnClick() { val (hour, min) = pref.splitTime TimePickerDialog(itemView.context, builder, hour, min, builder.use24HourFormat).show() } /** * Default implementation of [KPrefTimeContract] */ class KPrefTimeBuilder( globalOptions: GlobalOptions, titleId: Int, getter: () -> Int, setter: (value: Int) -> Unit ) : KPrefTimeContract, BaseContract by BaseBuilder(globalOptions, titleId, getter, setter) { override var use24HourFormat: Boolean = false override fun onTimeSet(view: TimePicker, hourOfDay: Int, minute: Int) { setter((hourOfDay to minute).mergeTime) reloadSelf() } override var textGetter: (Int) -> String? = { val (hour, min) = it.splitTime if (use24HourFormat) String.format(Locale.CANADA, "%d:%02d", hour, min) else String.format(Locale.CANADA, "%d:%02d %s", hour % 12, min, if (hour >= 12) "PM" else "AM") } } override fun getType(): Int = R.id.kau_item_pref_time_picker } private val Int.splitTime: Pair get() = Pair(this / 100, this % 100) private val Pair.mergeTime: Int get() = first * 100 + second