mirror of
https://github.com/szkolny-eu/szkolny-android.git
synced 2025-02-22 14:34:44 +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() {
|
private fun saveEvent() {
|
||||||
val date = b.dateDropdown.getSelected() as? Date
|
val date = b.dateDropdown.getSelected() as? Date
|
||||||
val startTimePair = b.timeDropdown.getSelected() as? Pair<*, *>
|
val timeSelected = b.timeDropdown.getSelected()
|
||||||
val startTime = startTimePair?.first as? Time
|
|
||||||
val teamId = b.teamDropdown.getSelected() as? Long
|
val teamId = b.teamDropdown.getSelected() as? Long
|
||||||
val type = b.typeDropdown.selected?.id
|
val type = b.typeDropdown.selected?.id
|
||||||
val topic = b.topic.text?.toString()
|
val topic = b.topic.text?.toString()
|
||||||
val subjectId = b.subjectDropdown.getSelected() as? Long
|
val subjectId = b.subjectDropdown.getSelected() as? Long
|
||||||
val teacherId = b.teacherDropdown.getSelected() as? Long
|
val teacherId = b.teacherDropdown.getSelected()
|
||||||
|
|
||||||
val share = b.shareSwitch.isChecked
|
val share = b.shareSwitch.isChecked
|
||||||
|
|
||||||
@ -387,6 +386,11 @@ class EventManualDialog(
|
|||||||
isError = true
|
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) {
|
if (share && teamId == null) {
|
||||||
b.teamDropdown.error = app.getString(R.string.dialog_event_manual_team_choose)
|
b.teamDropdown.error = app.getString(R.string.dialog_event_manual_team_choose)
|
||||||
isError = true
|
isError = true
|
||||||
@ -402,6 +406,11 @@ class EventManualDialog(
|
|||||||
isError = true
|
isError = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val startTime = if (timeSelected == 0L)
|
||||||
|
null
|
||||||
|
else
|
||||||
|
(timeSelected as? Pair<*, *>)?.first as? Time
|
||||||
|
|
||||||
if (isError) return
|
if (isError) return
|
||||||
|
|
||||||
val id = System.currentTimeMillis()
|
val id = System.currentTimeMillis()
|
||||||
|
@ -18,8 +18,8 @@ import androidx.appcompat.app.AlertDialog
|
|||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.cardview.widget.CardView
|
import androidx.cardview.widget.CardView
|
||||||
import androidx.core.content.FileProvider
|
import androidx.core.content.FileProvider
|
||||||
import com.google.android.material.datepicker.MaterialDatePicker
|
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
|
import com.wdullaer.materialdatetimepicker.date.DatePickerDialog
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import org.greenrobot.eventbus.EventBus
|
import org.greenrobot.eventbus.EventBus
|
||||||
import org.greenrobot.eventbus.Subscribe
|
import org.greenrobot.eventbus.Subscribe
|
||||||
@ -116,19 +116,17 @@ class GenerateBlockTimetableDialog(
|
|||||||
}}
|
}}
|
||||||
|
|
||||||
private fun selectDate() {
|
private fun selectDate() {
|
||||||
MaterialDatePicker.Builder
|
val date = Date.getToday()
|
||||||
.datePicker()
|
DatePickerDialog
|
||||||
.setSelection(Date.getToday().inMillis)
|
.newInstance({ _, year, monthOfYear, dayOfMonth ->
|
||||||
.build()
|
val dateSelected = Date(year, monthOfYear, dayOfMonth)
|
||||||
|
generateBlockTimetable(dateSelected.weekStart, dateSelected.weekEnd)
|
||||||
|
}, date.year, date.month, date.day)
|
||||||
.apply {
|
.apply {
|
||||||
addOnPositiveButtonClickListener { dateInMillis ->
|
accentColor = R.attr.colorPrimary.resolveAttr(this@GenerateBlockTimetableDialog.activity)
|
||||||
dismiss()
|
show(this@GenerateBlockTimetableDialog.activity.supportFragmentManager, "DatePickerDialog")
|
||||||
val selectedDate = Date.fromMillis(dateInMillis)
|
|
||||||
generateBlockTimetable(selectedDate.weekStart, selectedDate.weekEnd)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.show(activity.supportFragmentManager, "MaterialDatePicker")
|
|
||||||
}
|
|
||||||
|
|
||||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||||
fun onApiTaskFinishedEvent(event: ApiTaskFinishedEvent) {
|
fun onApiTaskFinishedEvent(event: ApiTaskFinishedEvent) {
|
||||||
|
@ -16,16 +16,17 @@ import android.view.ViewGroup
|
|||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.viewpager.widget.ViewPager
|
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
|
||||||
import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial.Icon2
|
import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial.Icon2
|
||||||
import com.mikepenz.iconics.typeface.library.szkolny.font.SzkolnyFont
|
import com.mikepenz.iconics.typeface.library.szkolny.font.SzkolnyFont
|
||||||
|
import com.wdullaer.materialdatetimepicker.date.DatePickerDialog
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import pl.szczodrzynski.edziennik.App
|
import pl.szczodrzynski.edziennik.App
|
||||||
import pl.szczodrzynski.edziennik.MainActivity
|
import pl.szczodrzynski.edziennik.MainActivity
|
||||||
import pl.szczodrzynski.edziennik.R
|
import pl.szczodrzynski.edziennik.R
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
|
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
|
||||||
import pl.szczodrzynski.edziennik.databinding.FragmentTimetableV2Binding
|
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.event.EventManualDialog
|
||||||
import pl.szczodrzynski.edziennik.ui.dialogs.timetable.GenerateBlockTimetableDialog
|
import pl.szczodrzynski.edziennik.ui.dialogs.timetable.GenerateBlockTimetableDialog
|
||||||
import pl.szczodrzynski.edziennik.utils.models.Date
|
import pl.szczodrzynski.edziennik.utils.models.Date
|
||||||
@ -169,16 +170,15 @@ class TimetableFragment : Fragment(), CoroutineScope {
|
|||||||
.withIcon(SzkolnyFont.Icon.szf_calendar_today_outline)
|
.withIcon(SzkolnyFont.Icon.szf_calendar_today_outline)
|
||||||
.withOnClickListener(View.OnClickListener {
|
.withOnClickListener(View.OnClickListener {
|
||||||
activity.bottomSheet.close()
|
activity.bottomSheet.close()
|
||||||
MaterialDatePicker.Builder
|
val date = Date.getToday()
|
||||||
.datePicker()
|
DatePickerDialog
|
||||||
.setSelection(Date.getToday().inMillis)
|
.newInstance({ _, year, monthOfYear, dayOfMonth ->
|
||||||
.build()
|
val dateSelected = Date(year, monthOfYear, dayOfMonth)
|
||||||
.apply {
|
|
||||||
addOnPositiveButtonClickListener { dateInMillis ->
|
|
||||||
val dateSelected = Date.fromMillis(dateInMillis)
|
|
||||||
b.tabLayout.setCurrentItem(items.indexOfFirst { it == dateSelected }, true)
|
b.tabLayout.setCurrentItem(items.indexOfFirst { it == dateSelected }, true)
|
||||||
}
|
}, date.year, date.month, date.day)
|
||||||
show(this@TimetableFragment.activity.supportFragmentManager, "MaterialDatePicker")
|
.apply {
|
||||||
|
accentColor = R.attr.colorPrimary.resolveAttr(this@TimetableFragment.activity)
|
||||||
|
show(this@TimetableFragment.activity.supportFragmentManager, "DatePickerDialog")
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
BottomSheetPrimaryItem(true)
|
BottomSheetPrimaryItem(true)
|
||||||
|
@ -10,13 +10,14 @@ import android.util.AttributeSet
|
|||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.lifecycle.Observer
|
import androidx.lifecycle.Observer
|
||||||
import com.google.android.material.datepicker.MaterialDatePicker
|
import com.wdullaer.materialdatetimepicker.date.DatePickerDialog
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import pl.szczodrzynski.edziennik.R
|
import pl.szczodrzynski.edziennik.R
|
||||||
import pl.szczodrzynski.edziennik.data.db.AppDb
|
import pl.szczodrzynski.edziennik.data.db.AppDb
|
||||||
import pl.szczodrzynski.edziennik.data.db.full.LessonFull
|
import pl.szczodrzynski.edziennik.data.db.full.LessonFull
|
||||||
import pl.szczodrzynski.edziennik.observeOnce
|
import pl.szczodrzynski.edziennik.observeOnce
|
||||||
|
import pl.szczodrzynski.edziennik.resolveAttr
|
||||||
import pl.szczodrzynski.edziennik.utils.TextInputDropDown
|
import pl.szczodrzynski.edziennik.utils.TextInputDropDown
|
||||||
import pl.szczodrzynski.edziennik.utils.models.Date
|
import pl.szczodrzynski.edziennik.utils.models.Date
|
||||||
import pl.szczodrzynski.edziennik.utils.models.Week
|
import pl.szczodrzynski.edziennik.utils.models.Week
|
||||||
@ -176,23 +177,18 @@ class DateDropdown : TextInputDropDown {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun pickerDialog() {
|
fun pickerDialog() {
|
||||||
MaterialDatePicker.Builder
|
val date = getSelected() as? Date ?: Date.getToday()
|
||||||
.datePicker()
|
|
||||||
.setSelection(
|
DatePickerDialog
|
||||||
if (selected?.tag is Date)
|
.newInstance({ _, year, monthOfYear, dayOfMonth ->
|
||||||
(selected?.tag as Date).inMillis
|
val dateSelected = Date(year, monthOfYear, dayOfMonth)
|
||||||
else
|
|
||||||
Date.getToday().inMillis
|
|
||||||
)
|
|
||||||
.build()
|
|
||||||
.apply {
|
|
||||||
addOnPositiveButtonClickListener {
|
|
||||||
val dateSelected = Date.fromMillis(it)
|
|
||||||
selectDate(dateSelected)
|
selectDate(dateSelected)
|
||||||
onDateSelected?.invoke(dateSelected, null)
|
onDateSelected?.invoke(dateSelected, null)
|
||||||
}
|
}, date.year, date.month, date.day)
|
||||||
|
.apply {
|
||||||
this@DateDropdown.activity ?: return@apply
|
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.content.ContextWrapper
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import com.wdullaer.materialdatetimepicker.time.TimePickerDialog
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
@ -174,19 +175,19 @@ class TimeDropdown : TextInputDropDown {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun pickerDialog() {
|
fun pickerDialog() {
|
||||||
/*MaterialDatePicker.Builder
|
val time = (getSelected() as? Pair<*, *>)?.first as? Time ?: Time.getNow()
|
||||||
.datePicker()
|
|
||||||
.setSelection((selectedId?.let { Date.fromValue(it.toInt()) }
|
TimePickerDialog
|
||||||
?: Date.getToday()).inMillis)
|
.newInstance({ _, hourOfDay, minute, second ->
|
||||||
.build()
|
val timeSelected = Time(hourOfDay, minute, second)
|
||||||
|
selectTime(timeSelected)
|
||||||
|
onTimeSelected?.invoke(timeSelected, null, null)
|
||||||
|
}, time.hour, time.minute, 0, true)
|
||||||
.apply {
|
.apply {
|
||||||
addOnPositiveButtonClickListener {
|
this@TimeDropdown.activity ?: return@apply
|
||||||
val dateSelected = Date.fromMillis(it)
|
accentColor = R.attr.colorPrimary.resolveAttr(this@TimeDropdown.activity)
|
||||||
selectDate(dateSelected)
|
show(this@TimeDropdown.activity!!.supportFragmentManager, "TimePickerDialog")
|
||||||
}
|
}
|
||||||
this@DateDropdown.activity ?: return@apply
|
|
||||||
show(this@DateDropdown.activity!!.supportFragmentManager, "MaterialDatePicker")
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun selectTime(time: Time) {
|
fun selectTime(time: Time) {
|
||||||
@ -208,12 +209,13 @@ class TimeDropdown : TextInputDropDown {
|
|||||||
* Get the currently selected time.
|
* Get the currently selected time.
|
||||||
* ### Returns:
|
* ### Returns:
|
||||||
* - null if no valid time is selected
|
* - 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]
|
* - 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]
|
* - [LessonRange] - the selected lesson range object, if [displayMode] == [DISPLAY_LESSON_RANGES]
|
||||||
*/
|
*/
|
||||||
fun getSelected(): Any? {
|
fun getSelected(): Any? {
|
||||||
return when (val tag = selected?.tag) {
|
return when (val tag = selected?.tag) {
|
||||||
0L -> null
|
0L -> 0L
|
||||||
is LessonFull ->
|
is LessonFull ->
|
||||||
if (tag.displayStartTime != null)
|
if (tag.displayStartTime != null)
|
||||||
tag.displayStartTime!! to tag.displayEndTime
|
tag.displayStartTime!! to tag.displayEndTime
|
||||||
|
@ -13,6 +13,9 @@
|
|||||||
|
|
||||||
<color name="dividerColor">#3e7f7f7f</color>
|
<color name="dividerColor">#3e7f7f7f</color>
|
||||||
|
|
||||||
|
<color name="mdtp_accent_color">#2196f3</color>
|
||||||
|
<color name="mdtp_accent_color_dark">#64b5f6</color>
|
||||||
|
|
||||||
|
|
||||||
<!-- LIGHT THEME -->
|
<!-- LIGHT THEME -->
|
||||||
<color name="windowBackgroundLight">#ffffffff</color>
|
<color name="windowBackgroundLight">#ffffffff</color>
|
||||||
|
@ -1267,4 +1267,5 @@
|
|||||||
<string name="card_type_timetable">Plan lekcji</string>
|
<string name="card_type_timetable">Plan lekcji</string>
|
||||||
<string name="card_type_grades">Ostatnie oceny</string>
|
<string name="card_type_grades">Ostatnie oceny</string>
|
||||||
<string name="card_type_events">Najbliższe wydarzenia</string>
|
<string name="card_type_events">Najbliższe wydarzenia</string>
|
||||||
|
<string name="dialog_event_manual_time_choose">Wybierz godzinę</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -88,6 +88,8 @@
|
|||||||
|
|
||||||
<style name="AppTheme" parent="NavView" />
|
<style name="AppTheme" parent="NavView" />
|
||||||
|
|
||||||
|
<style name="mdtp_ActionButton.Text" parent="Widget.MaterialComponents.Button.TextButton.Dialog"/>
|
||||||
|
|
||||||
<!-- Base application theme. -->
|
<!-- Base application theme. -->
|
||||||
<style name="AppTheme.Light" parent="NavView.Light">
|
<style name="AppTheme.Light" parent="NavView.Light">
|
||||||
<item name="colorPrimary">#2196f3</item>
|
<item name="colorPrimary">#2196f3</item>
|
||||||
@ -123,6 +125,7 @@
|
|||||||
<item name="halfHourDividerColor">#e0e0e0</item>
|
<item name="halfHourDividerColor">#e0e0e0</item>
|
||||||
|
|
||||||
<item name="materialAlertDialogTheme">@style/AppTheme.MaterialAlertDialog</item>
|
<item name="materialAlertDialogTheme">@style/AppTheme.MaterialAlertDialog</item>
|
||||||
|
<item name="mdtp_theme_dark">false</item>
|
||||||
</style>
|
</style>
|
||||||
<style name="AppTheme.Dark" parent="NavView.Dark">
|
<style name="AppTheme.Dark" parent="NavView.Dark">
|
||||||
<item name="colorPrimary">#64b5f6</item>
|
<item name="colorPrimary">#64b5f6</item>
|
||||||
@ -158,6 +161,7 @@
|
|||||||
<item name="halfHourDividerColor">#40ffffff</item>
|
<item name="halfHourDividerColor">#40ffffff</item>
|
||||||
|
|
||||||
<item name="materialAlertDialogTheme">@style/AppTheme.MaterialAlertDialog</item>
|
<item name="materialAlertDialogTheme">@style/AppTheme.MaterialAlertDialog</item>
|
||||||
|
<item name="mdtp_theme_dark">true</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user