diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventManualDialog.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventManualDialog.kt
index 29f1162a..88611f1b 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventManualDialog.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventManualDialog.kt
@@ -365,13 +365,12 @@ class EventManualDialog(
private fun saveEvent() {
val date = b.dateDropdown.getSelected() as? Date
- val startTimePair = b.timeDropdown.getSelected() as? Pair<*, *>
- val startTime = startTimePair?.first as? Time
+ val timeSelected = b.timeDropdown.getSelected()
val teamId = b.teamDropdown.getSelected() as? Long
val type = b.typeDropdown.selected?.id
val topic = b.topic.text?.toString()
val subjectId = b.subjectDropdown.getSelected() as? Long
- val teacherId = b.teacherDropdown.getSelected() as? Long
+ val teacherId = b.teacherDropdown.getSelected()
val share = b.shareSwitch.isChecked
@@ -387,6 +386,11 @@ class EventManualDialog(
isError = true
}
+ if (timeSelected == null || timeSelected !is Pair<*, *>) {
+ b.dateDropdown.error = app.getString(R.string.dialog_event_manual_time_choose)
+ isError = true
+ }
+
if (share && teamId == null) {
b.teamDropdown.error = app.getString(R.string.dialog_event_manual_team_choose)
isError = true
@@ -402,6 +406,11 @@ class EventManualDialog(
isError = true
}
+ val startTime = if (timeSelected == 0L)
+ null
+ else
+ (timeSelected as? Pair<*, *>)?.first as? Time
+
if (isError) return
val id = System.currentTimeMillis()
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/timetable/GenerateBlockTimetableDialog.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/timetable/GenerateBlockTimetableDialog.kt
index 23f6ba66..aefd16f9 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/timetable/GenerateBlockTimetableDialog.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/timetable/GenerateBlockTimetableDialog.kt
@@ -18,8 +18,8 @@ import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.cardview.widget.CardView
import androidx.core.content.FileProvider
-import com.google.android.material.datepicker.MaterialDatePicker
import com.google.android.material.dialog.MaterialAlertDialogBuilder
+import com.wdullaer.materialdatetimepicker.date.DatePickerDialog
import kotlinx.coroutines.*
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
@@ -116,18 +116,16 @@ class GenerateBlockTimetableDialog(
}}
private fun selectDate() {
- MaterialDatePicker.Builder
- .datePicker()
- .setSelection(Date.getToday().inMillis)
- .build()
+ val date = Date.getToday()
+ DatePickerDialog
+ .newInstance({ _, year, monthOfYear, dayOfMonth ->
+ val dateSelected = Date(year, monthOfYear, dayOfMonth)
+ generateBlockTimetable(dateSelected.weekStart, dateSelected.weekEnd)
+ }, date.year, date.month, date.day)
.apply {
- addOnPositiveButtonClickListener { dateInMillis ->
- dismiss()
- val selectedDate = Date.fromMillis(dateInMillis)
- generateBlockTimetable(selectedDate.weekStart, selectedDate.weekEnd)
- }
+ accentColor = R.attr.colorPrimary.resolveAttr(this@GenerateBlockTimetableDialog.activity)
+ show(this@GenerateBlockTimetableDialog.activity.supportFragmentManager, "DatePickerDialog")
}
- .show(activity.supportFragmentManager, "MaterialDatePicker")
}
@Subscribe(threadMode = ThreadMode.MAIN)
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/TimetableFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/TimetableFragment.kt
index 158f3549..52441e25 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/TimetableFragment.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/TimetableFragment.kt
@@ -16,16 +16,17 @@ import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.viewpager.widget.ViewPager
-import com.google.android.material.datepicker.MaterialDatePicker
import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial
import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial.Icon2
import com.mikepenz.iconics.typeface.library.szkolny.font.SzkolnyFont
+import com.wdullaer.materialdatetimepicker.date.DatePickerDialog
import kotlinx.coroutines.*
import pl.szczodrzynski.edziennik.App
import pl.szczodrzynski.edziennik.MainActivity
import pl.szczodrzynski.edziennik.R
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
import pl.szczodrzynski.edziennik.databinding.FragmentTimetableV2Binding
+import pl.szczodrzynski.edziennik.resolveAttr
import pl.szczodrzynski.edziennik.ui.dialogs.event.EventManualDialog
import pl.szczodrzynski.edziennik.ui.dialogs.timetable.GenerateBlockTimetableDialog
import pl.szczodrzynski.edziennik.utils.models.Date
@@ -169,16 +170,15 @@ class TimetableFragment : Fragment(), CoroutineScope {
.withIcon(SzkolnyFont.Icon.szf_calendar_today_outline)
.withOnClickListener(View.OnClickListener {
activity.bottomSheet.close()
- MaterialDatePicker.Builder
- .datePicker()
- .setSelection(Date.getToday().inMillis)
- .build()
+ val date = Date.getToday()
+ DatePickerDialog
+ .newInstance({ _, year, monthOfYear, dayOfMonth ->
+ val dateSelected = Date(year, monthOfYear, dayOfMonth)
+ b.tabLayout.setCurrentItem(items.indexOfFirst { it == dateSelected }, true)
+ }, date.year, date.month, date.day)
.apply {
- addOnPositiveButtonClickListener { dateInMillis ->
- val dateSelected = Date.fromMillis(dateInMillis)
- b.tabLayout.setCurrentItem(items.indexOfFirst { it == dateSelected }, true)
- }
- show(this@TimetableFragment.activity.supportFragmentManager, "MaterialDatePicker")
+ accentColor = R.attr.colorPrimary.resolveAttr(this@TimetableFragment.activity)
+ show(this@TimetableFragment.activity.supportFragmentManager, "DatePickerDialog")
}
}),
BottomSheetPrimaryItem(true)
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/views/DateDropdown.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/views/DateDropdown.kt
index c5377c6e..b6fbad95 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/views/DateDropdown.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/views/DateDropdown.kt
@@ -10,13 +10,14 @@ import android.util.AttributeSet
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Observer
-import com.google.android.material.datepicker.MaterialDatePicker
+import com.wdullaer.materialdatetimepicker.date.DatePickerDialog
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import pl.szczodrzynski.edziennik.R
import pl.szczodrzynski.edziennik.data.db.AppDb
import pl.szczodrzynski.edziennik.data.db.full.LessonFull
import pl.szczodrzynski.edziennik.observeOnce
+import pl.szczodrzynski.edziennik.resolveAttr
import pl.szczodrzynski.edziennik.utils.TextInputDropDown
import pl.szczodrzynski.edziennik.utils.models.Date
import pl.szczodrzynski.edziennik.utils.models.Week
@@ -176,23 +177,18 @@ class DateDropdown : TextInputDropDown {
}
fun pickerDialog() {
- MaterialDatePicker.Builder
- .datePicker()
- .setSelection(
- if (selected?.tag is Date)
- (selected?.tag as Date).inMillis
- else
- Date.getToday().inMillis
- )
- .build()
+ val date = getSelected() as? Date ?: Date.getToday()
+
+ DatePickerDialog
+ .newInstance({ _, year, monthOfYear, dayOfMonth ->
+ val dateSelected = Date(year, monthOfYear, dayOfMonth)
+ selectDate(dateSelected)
+ onDateSelected?.invoke(dateSelected, null)
+ }, date.year, date.month, date.day)
.apply {
- addOnPositiveButtonClickListener {
- val dateSelected = Date.fromMillis(it)
- selectDate(dateSelected)
- onDateSelected?.invoke(dateSelected, null)
- }
this@DateDropdown.activity ?: return@apply
- show(this@DateDropdown.activity!!.supportFragmentManager, "MaterialDatePicker")
+ accentColor = R.attr.colorPrimary.resolveAttr(this@DateDropdown.activity)
+ show(this@DateDropdown.activity!!.supportFragmentManager, "DatePickerDialog")
}
}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/views/TimeDropdown.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/views/TimeDropdown.kt
index 14892d3e..08eda003 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/views/TimeDropdown.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/views/TimeDropdown.kt
@@ -8,6 +8,7 @@ import android.content.Context
import android.content.ContextWrapper
import android.util.AttributeSet
import androidx.appcompat.app.AppCompatActivity
+import com.wdullaer.materialdatetimepicker.time.TimePickerDialog
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import pl.szczodrzynski.edziennik.*
@@ -174,19 +175,19 @@ class TimeDropdown : TextInputDropDown {
}
fun pickerDialog() {
- /*MaterialDatePicker.Builder
- .datePicker()
- .setSelection((selectedId?.let { Date.fromValue(it.toInt()) }
- ?: Date.getToday()).inMillis)
- .build()
+ val time = (getSelected() as? Pair<*, *>)?.first as? Time ?: Time.getNow()
+
+ TimePickerDialog
+ .newInstance({ _, hourOfDay, minute, second ->
+ val timeSelected = Time(hourOfDay, minute, second)
+ selectTime(timeSelected)
+ onTimeSelected?.invoke(timeSelected, null, null)
+ }, time.hour, time.minute, 0, true)
.apply {
- addOnPositiveButtonClickListener {
- val dateSelected = Date.fromMillis(it)
- selectDate(dateSelected)
- }
- this@DateDropdown.activity ?: return@apply
- show(this@DateDropdown.activity!!.supportFragmentManager, "MaterialDatePicker")
- }*/
+ this@TimeDropdown.activity ?: return@apply
+ accentColor = R.attr.colorPrimary.resolveAttr(this@TimeDropdown.activity)
+ show(this@TimeDropdown.activity!!.supportFragmentManager, "TimePickerDialog")
+ }
}
fun selectTime(time: Time) {
@@ -208,12 +209,13 @@ class TimeDropdown : TextInputDropDown {
* Get the currently selected time.
* ### Returns:
* - null if no valid time is selected
+ * - 0L if 'all day' is selected
* - a [Pair] of [Time] and [Time]? - the selected time object, if [displayMode] == [DISPLAY_LESSONS] or [showCustomTime]
* - [LessonRange] - the selected lesson range object, if [displayMode] == [DISPLAY_LESSON_RANGES]
*/
fun getSelected(): Any? {
return when (val tag = selected?.tag) {
- 0L -> null
+ 0L -> 0L
is LessonFull ->
if (tag.displayStartTime != null)
tag.displayStartTime!! to tag.displayEndTime
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 5d04d97c..a5e975f1 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -13,6 +13,9 @@
#3e7f7f7f
+ #2196f3
+ #64b5f6
+
#ffffffff
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index a8ef2af8..6175c664 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1267,4 +1267,5 @@
Plan lekcji
Ostatnie oceny
Najbliższe wydarzenia
+ Wybierz godzinę
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 6e97f2e9..52f26f20 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -88,6 +88,8 @@
+
+