mirror of
https://github.com/szkolny-eu/szkolny-android.git
synced 2025-02-21 14:04:45 +01:00
[UI] Replace material date pickers with the DatePickerDialog. Add time picker to time dropdown.
This commit is contained in:
parent
d855118610
commit
af3b6f3a97
@ -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()
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -13,6 +13,9 @@
|
||||
|
||||
<color name="dividerColor">#3e7f7f7f</color>
|
||||
|
||||
<color name="mdtp_accent_color">#2196f3</color>
|
||||
<color name="mdtp_accent_color_dark">#64b5f6</color>
|
||||
|
||||
|
||||
<!-- LIGHT THEME -->
|
||||
<color name="windowBackgroundLight">#ffffffff</color>
|
||||
|
@ -1267,4 +1267,5 @@
|
||||
<string name="card_type_timetable">Plan lekcji</string>
|
||||
<string name="card_type_grades">Ostatnie oceny</string>
|
||||
<string name="card_type_events">Najbliższe wydarzenia</string>
|
||||
<string name="dialog_event_manual_time_choose">Wybierz godzinę</string>
|
||||
</resources>
|
||||
|
@ -88,6 +88,8 @@
|
||||
|
||||
<style name="AppTheme" parent="NavView" />
|
||||
|
||||
<style name="mdtp_ActionButton.Text" parent="Widget.MaterialComponents.Button.TextButton.Dialog"/>
|
||||
|
||||
<!-- Base application theme. -->
|
||||
<style name="AppTheme.Light" parent="NavView.Light">
|
||||
<item name="colorPrimary">#2196f3</item>
|
||||
@ -123,6 +125,7 @@
|
||||
<item name="halfHourDividerColor">#e0e0e0</item>
|
||||
|
||||
<item name="materialAlertDialogTheme">@style/AppTheme.MaterialAlertDialog</item>
|
||||
<item name="mdtp_theme_dark">false</item>
|
||||
</style>
|
||||
<style name="AppTheme.Dark" parent="NavView.Dark">
|
||||
<item name="colorPrimary">#64b5f6</item>
|
||||
@ -158,6 +161,7 @@
|
||||
<item name="halfHourDividerColor">#40ffffff</item>
|
||||
|
||||
<item name="materialAlertDialogTheme">@style/AppTheme.MaterialAlertDialog</item>
|
||||
<item name="mdtp_theme_dark">true</item>
|
||||
</style>
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user