|
@@ -19,19 +19,25 @@ package com.afollestad.materialdialogs.datetime
|
|
|
|
|
|
import androidx.annotation.CheckResult
|
|
|
import com.afollestad.materialdialogs.MaterialDialog
|
|
|
+import com.afollestad.materialdialogs.WhichButton.POSITIVE
|
|
|
+import com.afollestad.materialdialogs.actions.setActionButtonEnabled
|
|
|
+import com.afollestad.materialdialogs.callbacks.onDismiss
|
|
|
import com.afollestad.materialdialogs.customview.customView
|
|
|
+import com.afollestad.materialdialogs.datetime.internal.TimeChangeListener
|
|
|
import com.afollestad.materialdialogs.datetime.utils.getTimePicker
|
|
|
import com.afollestad.materialdialogs.datetime.utils.hour
|
|
|
+import com.afollestad.materialdialogs.datetime.utils.isFutureTime
|
|
|
import com.afollestad.materialdialogs.datetime.utils.minute
|
|
|
import com.afollestad.materialdialogs.datetime.utils.toCalendar
|
|
|
-import java.util.Calendar
|
|
|
import com.afollestad.materialdialogs.utils.MDUtil.isLandscape
|
|
|
+import java.util.Calendar
|
|
|
|
|
|
/**
|
|
|
* Makes the dialog a time picker.
|
|
|
*/
|
|
|
fun MaterialDialog.timePicker(
|
|
|
currentTime: Calendar? = null,
|
|
|
+ requireFutureTime: Boolean = false,
|
|
|
show24HoursView: Boolean = true,
|
|
|
timeCallback: DateTimeCallback = null
|
|
|
): MaterialDialog {
|
|
@@ -41,13 +47,19 @@ fun MaterialDialog.timePicker(
|
|
|
dialogWrapContent = windowContext.isLandscape()
|
|
|
)
|
|
|
|
|
|
- getTimePicker().apply {
|
|
|
+ with(getTimePicker()) {
|
|
|
setIs24HourView(show24HoursView)
|
|
|
-
|
|
|
if (currentTime != null) {
|
|
|
hour(currentTime.get(Calendar.HOUR_OF_DAY))
|
|
|
minute(currentTime.get(Calendar.MINUTE))
|
|
|
}
|
|
|
+ setOnTimeChangedListener { _, _, _ ->
|
|
|
+ val isFutureTime = isFutureTime()
|
|
|
+ setActionButtonEnabled(
|
|
|
+ POSITIVE,
|
|
|
+ !requireFutureTime || isFutureTime
|
|
|
+ )
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
positiveButton(android.R.string.ok) {
|
|
@@ -55,6 +67,17 @@ fun MaterialDialog.timePicker(
|
|
|
}
|
|
|
negativeButton(android.R.string.cancel)
|
|
|
|
|
|
+ if (requireFutureTime) {
|
|
|
+ val changeListener = TimeChangeListener(windowContext, getTimePicker()) {
|
|
|
+ val isFutureTime = it.isFutureTime()
|
|
|
+ setActionButtonEnabled(
|
|
|
+ POSITIVE,
|
|
|
+ !requireFutureTime || isFutureTime
|
|
|
+ )
|
|
|
+ }
|
|
|
+ onDismiss { changeListener.dispose() }
|
|
|
+ }
|
|
|
+
|
|
|
return this
|
|
|
}
|
|
|
|