Răsfoiți Sursa

WIP integrate afollestad/date-picker lib

Aidan Follestad 5 ani în urmă
părinte
comite
968fd57b7e

+ 1 - 0
color/src/main/java/com/afollestad/materialdialogs/color/CustomPageViewSet.kt

@@ -112,6 +112,7 @@ internal class CustomPageViewSet(private val dialog: MaterialDialog) {
 
 private fun MaterialDialog.getPageCustomView() = findViewById<View?>(R.id.colorArgbPage)
 
+@Suppress("DEPRECATION")
 private fun SeekBar.tint(color: Int) {
   progressDrawable.setColorFilter(color, SRC_IN)
   thumb.setColorFilter(color, SRC_IN)

+ 1 - 0
datetime/build.gradle

@@ -32,6 +32,7 @@ dependencies {
   implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:' + versions.kotlin
 
   implementation 'com.afollestad:viewpagerdots:' + versions.dotsIndicator
+  implementation 'com.afollestad:date-picker:' + versions.datePicker
 
   implementation project(':core')
 }

+ 11 - 17
datetime/src/main/java/com/afollestad/materialdialogs/datetime/DatePickerExt.kt

@@ -17,6 +17,7 @@
 
 package com.afollestad.materialdialogs.datetime
 
+import android.R.string
 import androidx.annotation.CheckResult
 import com.afollestad.materialdialogs.MaterialDialog
 import com.afollestad.materialdialogs.WhichButton.POSITIVE
@@ -26,7 +27,6 @@ import com.afollestad.materialdialogs.customview.customView
 import com.afollestad.materialdialogs.datetime.internal.TimeChangeListener
 import com.afollestad.materialdialogs.datetime.utils.getDatePicker
 import com.afollestad.materialdialogs.datetime.utils.isFutureDate
-import com.afollestad.materialdialogs.datetime.utils.toCalendar
 import com.afollestad.materialdialogs.utils.MDUtil.isLandscape
 import java.util.Calendar
 
@@ -46,18 +46,12 @@ fun MaterialDialog.datePicker(
       dialogWrapContent = windowContext.isLandscape()
   )
 
-  if (minDate != null) {
-    getDatePicker().minDate = minDate.timeInMillis
-  }
-  if (maxDate != null) {
-    getDatePicker().maxDate = maxDate.timeInMillis
-  }
-  if (currentDate != null) {
-    getDatePicker().init(
-        currentDate.get(Calendar.YEAR),
-        currentDate.get(Calendar.MONTH),
-        currentDate.get(Calendar.DAY_OF_MONTH)
-    ) { _, _, _, _ ->
+  getDatePicker().apply {
+    minDate?.let { setMinDate(it) }
+    maxDate?.let { setMaxDate(it) }
+    currentDate?.let { setDate(it) }
+
+    onDateChanged {
       val isFutureDate = getDatePicker().isFutureDate()
       setActionButtonEnabled(
           POSITIVE,
@@ -66,10 +60,10 @@ fun MaterialDialog.datePicker(
     }
   }
 
-  positiveButton(android.R.string.ok) {
-    dateCallback?.invoke(it, getDatePicker().toCalendar())
+  positiveButton(string.ok) {
+    dateCallback?.invoke(it, getDatePicker().getDate()!!)
   }
-  negativeButton(android.R.string.cancel)
+  negativeButton(string.cancel)
 
   if (requireFutureDate) {
     val changeListener = TimeChangeListener(windowContext, getDatePicker()) {
@@ -89,5 +83,5 @@ fun MaterialDialog.datePicker(
  * Gets the currently selected date from a date picker dialog.
  */
 @CheckResult fun MaterialDialog.selectedDate(): Calendar {
-  return getDatePicker().toCalendar()
+  return getDatePicker().getDate()!!
 }

+ 5 - 16
datetime/src/main/java/com/afollestad/materialdialogs/datetime/DateTimePickerExt.kt

@@ -65,15 +65,11 @@ fun MaterialDialog.dateTimePicker(
     setDotTint(resolveColor(windowContext, attr = attr.textColorPrimary))
   }
 
-  minDateTime?.let { getDatePicker().minDate = it.timeInMillis }
-
-  with(getDatePicker()) {
-    init(
-        currentDateTime?.get(Calendar.YEAR) ?: year,
-        currentDateTime?.get(Calendar.MONTH) ?: month,
-        currentDateTime?.get(Calendar.DAY_OF_MONTH) ?: dayOfMonth
-    ) { _, _, _, _ ->
-      val futureTime = isFutureTime(this, getTimePicker())
+  getDatePicker().apply {
+    minDateTime?.let { setMinDate(it) }
+    currentDateTime?.let { setDate(it) }
+    onDateChanged {
+      val futureTime = isFutureTime(getDatePicker(), getTimePicker())
       setActionButtonEnabled(
           POSITIVE, !requireFutureDateTime || futureTime
       )
@@ -85,7 +81,6 @@ fun MaterialDialog.dateTimePicker(
 
   getTimePicker().apply {
     setIs24HourView(show24HoursView)
-
     hour(currentDateTime?.get(Calendar.HOUR_OF_DAY) ?: 12)
     minute(currentDateTime?.get(Calendar.MINUTE) ?: 0)
 
@@ -98,12 +93,6 @@ fun MaterialDialog.dateTimePicker(
     }
   }
 
-  val futureTime = isFutureTime(getDatePicker(), getTimePicker())
-  setActionButtonEnabled(
-      POSITIVE,
-      !requireFutureDateTime || futureTime
-  )
-
   positiveButton(android.R.string.ok) {
     val selectedTime = toCalendar(getDatePicker(), getTimePicker())
     dateTimeCallback?.invoke(it, selectedTime)

+ 6 - 13
datetime/src/main/java/com/afollestad/materialdialogs/datetime/utils/DateTimeExt.kt

@@ -15,8 +15,8 @@
  */
 package com.afollestad.materialdialogs.datetime.utils
 
-import android.widget.DatePicker
 import android.widget.TimePicker
+import com.afollestad.date.DatePicker
 import java.util.Calendar
 import java.util.GregorianCalendar
 
@@ -36,11 +36,7 @@ internal fun TimePicker.isFutureTime(): Boolean {
 
 internal fun DatePicker.isFutureDate(): Boolean {
   val now = Calendar.getInstance()
-  return toCalendar().timeInMillis >= now.timeInMillis
-}
-
-internal fun DatePicker.toCalendar(): Calendar {
-  return GregorianCalendar(year, month, dayOfMonth, 0, 0, 1)
+  return getDate()!!.timeInMillis >= now.timeInMillis
 }
 
 internal fun TimePicker.toCalendar(): Calendar {
@@ -58,11 +54,8 @@ internal fun toCalendar(
   datePicker: DatePicker,
   timePicker: TimePicker
 ): Calendar {
-  return GregorianCalendar(
-      datePicker.year,
-      datePicker.month,
-      datePicker.dayOfMonth,
-      timePicker.hour(),
-      timePicker.minute()
-  )
+  return datePicker.getDate()!!.apply {
+    set(Calendar.HOUR_OF_DAY, timePicker.hour())
+    set(Calendar.MINUTE, timePicker.minute())
+  }
 }

+ 1 - 1
datetime/src/main/java/com/afollestad/materialdialogs/datetime/utils/ViewExt.kt

@@ -18,9 +18,9 @@
 package com.afollestad.materialdialogs.datetime.utils
 
 import android.os.Build
-import android.widget.DatePicker
 import android.widget.TimePicker
 import androidx.viewpager.widget.ViewPager
+import com.afollestad.date.DatePicker
 import com.afollestad.materialdialogs.MaterialDialog
 import com.afollestad.materialdialogs.datetime.R
 import com.afollestad.viewpagerdots.DotsIndicator

+ 2 - 1
datetime/src/main/res/layout/md_datetime_picker_date.xml

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<DatePicker xmlns:android="http://schemas.android.com/apk/res/android"
+<com.afollestad.date.DatePicker
+    xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/datetimeDatePicker"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" />

+ 2 - 1
dependencies.gradle

@@ -25,5 +25,6 @@ ext.versions = [
 
     // afollestad
     assent              : '2.3.0',
-    dotsIndicator       : '1.0.0'
+    dotsIndicator       : '1.0.0',
+    datePicker          : '0.2.1'
 ]

+ 1 - 0
sample/build.gradle

@@ -17,6 +17,7 @@ android {
 
   packagingOptions {
     exclude 'META-INF/atomicfu.kotlin_module'
+    exclude 'META-INF/library_release.kotlin_module'
   }
 }