use a nicer time picker with material theme

This commit is contained in:
tibbi 2023-01-08 11:55:06 +01:00
parent b8296fbe58
commit fd6d03db6f
3 changed files with 135 additions and 29 deletions

View File

@ -20,6 +20,8 @@ import android.view.WindowManager
import android.view.inputmethod.EditorInfo
import android.widget.ImageView
import android.widget.RelativeLayout
import com.google.android.material.timepicker.MaterialTimePicker
import com.google.android.material.timepicker.TimeFormat
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.simplemobiletools.calendar.pro.R
@ -1359,14 +1361,34 @@ class EventActivity : SimpleActivity() {
private fun setupStartTime() {
hideKeyboard()
TimePickerDialog(
this,
getTimePickerDialogTheme(),
startTimeSetListener,
mEventStartDateTime.hourOfDay,
mEventStartDateTime.minuteOfHour,
config.use24HourFormat
).show()
if (config.isUsingSystemTheme) {
val timeFormat = if (config.use24HourFormat) {
TimeFormat.CLOCK_24H
} else {
TimeFormat.CLOCK_12H
}
val timePicker = MaterialTimePicker.Builder()
.setTimeFormat(timeFormat)
.setHour(mEventStartDateTime.hourOfDay)
.setMinute(mEventStartDateTime.minuteOfHour)
.build()
timePicker.addOnPositiveButtonClickListener {
timeSet(timePicker.hour, timePicker.minute, true)
}
timePicker.show(supportFragmentManager, "")
} else {
TimePickerDialog(
this,
getTimePickerDialogTheme(),
startTimeSetListener,
mEventStartDateTime.hourOfDay,
mEventStartDateTime.minuteOfHour,
config.use24HourFormat
).show()
}
}
private fun setupEndDate() {
@ -1382,14 +1404,34 @@ class EventActivity : SimpleActivity() {
private fun setupEndTime() {
hideKeyboard()
TimePickerDialog(
this,
getTimePickerDialogTheme(),
endTimeSetListener,
mEventEndDateTime.hourOfDay,
mEventEndDateTime.minuteOfHour,
config.use24HourFormat
).show()
if (config.isUsingSystemTheme) {
val timeFormat = if (config.use24HourFormat) {
TimeFormat.CLOCK_24H
} else {
TimeFormat.CLOCK_12H
}
val timePicker = MaterialTimePicker.Builder()
.setTimeFormat(timeFormat)
.setHour(mEventEndDateTime.hourOfDay)
.setMinute(mEventEndDateTime.minuteOfHour)
.build()
timePicker.addOnPositiveButtonClickListener {
timeSet(timePicker.hour, timePicker.minute, false)
}
timePicker.show(supportFragmentManager, "")
} else {
TimePickerDialog(
this,
getTimePickerDialogTheme(),
endTimeSetListener,
mEventEndDateTime.hourOfDay,
mEventEndDateTime.minuteOfHour,
config.use24HourFormat
).show()
}
}
private val startDateSetListener = DatePickerDialog.OnDateSetListener { view, year, monthOfYear, dayOfMonth ->

View File

@ -8,12 +8,15 @@ import android.media.AudioManager
import android.media.RingtoneManager
import android.os.Bundle
import android.widget.Toast
import com.google.android.material.timepicker.MaterialTimePicker
import com.google.android.material.timepicker.TimeFormat
import com.simplemobiletools.calendar.pro.R
import com.simplemobiletools.calendar.pro.dialogs.SelectCalendarsDialog
import com.simplemobiletools.calendar.pro.dialogs.SelectEventTypeDialog
import com.simplemobiletools.calendar.pro.dialogs.SelectQuickFilterEventTypesDialog
import com.simplemobiletools.calendar.pro.extensions.*
import com.simplemobiletools.calendar.pro.helpers.*
import com.simplemobiletools.calendar.pro.helpers.Formatter
import com.simplemobiletools.calendar.pro.models.EventType
import com.simplemobiletools.commons.dialogs.*
import com.simplemobiletools.commons.extensions.*
@ -24,6 +27,7 @@ import kotlinx.android.synthetic.main.activity_settings.*
import org.joda.time.DateTime
import java.io.File
import java.io.InputStream
import java.text.SimpleDateFormat
import java.util.*
import kotlin.system.exitProcess
@ -579,7 +583,17 @@ class SettingsActivity : SimpleActivity() {
}
}
private fun getHoursString(hours: Int) = String.format("%02d:00", hours)
private fun getHoursString(hours: Int): String {
return if (config.use24HourFormat) {
String.format("%02d:00", hours)
} else {
val calendar = Calendar.getInstance()
calendar.set(Calendar.HOUR_OF_DAY, hours)
calendar.set(Calendar.MINUTE, 0)
val format = SimpleDateFormat("hh.mm aa")
format.format(calendar.time)
}
}
private fun setupDisplayPastEvents() {
var displayPastEvents = config.displayPastEvents
@ -715,14 +729,36 @@ class SettingsActivity : SimpleActivity() {
}
val currentDateTime = DateTime.now()
TimePickerDialog(
this,
getTimePickerDialogTheme(),
timeListener,
currentDateTime.hourOfDay,
currentDateTime.minuteOfHour,
config.use24HourFormat
).show()
if (config.isUsingSystemTheme) {
val timeFormat = if (config.use24HourFormat) {
TimeFormat.CLOCK_24H
} else {
TimeFormat.CLOCK_12H
}
val timePicker = MaterialTimePicker.Builder()
.setTimeFormat(timeFormat)
.setHour(currentDateTime.hourOfDay)
.setMinute(currentDateTime.minuteOfHour)
.build()
timePicker.addOnPositiveButtonClickListener {
config.defaultStartTime = timePicker.hour * 60 + timePicker.minute
updateDefaultStartTimeText()
}
timePicker.show(supportFragmentManager, "")
} else {
TimePickerDialog(
this,
getTimePickerDialogTheme(),
timeListener,
currentDateTime.hourOfDay,
currentDateTime.minuteOfHour,
config.use24HourFormat
).show()
}
}
}
}
@ -735,7 +771,8 @@ class SettingsActivity : SimpleActivity() {
else -> {
val hours = config.defaultStartTime / 60
val minutes = config.defaultStartTime % 60
settings_default_start_time.text = String.format("%02d:%02d", hours, minutes)
val dateTime = DateTime.now().withHourOfDay(hours).withMinuteOfHour(minutes)
settings_default_start_time.text = Formatter.getTime(this, dateTime)
}
}
}

View File

@ -7,6 +7,8 @@ import android.graphics.Color
import android.os.Bundle
import android.view.WindowManager
import androidx.core.content.ContextCompat
import com.google.android.material.timepicker.MaterialTimePicker
import com.google.android.material.timepicker.TimeFormat
import com.simplemobiletools.calendar.pro.R
import com.simplemobiletools.calendar.pro.dialogs.*
import com.simplemobiletools.calendar.pro.extensions.*
@ -538,9 +540,34 @@ class TaskActivity : SimpleActivity() {
private fun setupTime() {
hideKeyboard()
TimePickerDialog(
this, getTimePickerDialogTheme(), timeSetListener, mTaskDateTime.hourOfDay, mTaskDateTime.minuteOfHour, config.use24HourFormat
).show()
if (config.isUsingSystemTheme) {
val timeFormat = if (config.use24HourFormat) {
TimeFormat.CLOCK_24H
} else {
TimeFormat.CLOCK_12H
}
val timePicker = MaterialTimePicker.Builder()
.setTimeFormat(timeFormat)
.setHour(mTaskDateTime.hourOfDay)
.setMinute(mTaskDateTime.minuteOfHour)
.build()
timePicker.addOnPositiveButtonClickListener {
timeSet(timePicker.hour, timePicker.minute)
}
timePicker.show(supportFragmentManager, "")
} else {
TimePickerDialog(
this,
getTimePickerDialogTheme(),
timeSetListener,
mTaskDateTime.hourOfDay,
mTaskDateTime.minuteOfHour,
config.use24HourFormat
).show()
}
}
private val dateSetListener = DatePickerDialog.OnDateSetListener { _, year, monthOfYear, dayOfMonth ->