adding some UI improvements to dayless alarms

This commit is contained in:
tibbi 2020-11-05 10:44:19 +01:00
parent 9b55486462
commit b0c8dfe535
5 changed files with 144 additions and 110 deletions

View File

@ -8,12 +8,15 @@ import com.simplemobiletools.clock.R
import com.simplemobiletools.clock.activities.SimpleActivity
import com.simplemobiletools.clock.extensions.config
import com.simplemobiletools.clock.extensions.dbHelper
import com.simplemobiletools.clock.extensions.getAlarmSelectedDaysString
import com.simplemobiletools.clock.extensions.getFormattedTime
import com.simplemobiletools.clock.interfaces.ToggleAlarmInterface
import com.simplemobiletools.clock.models.Alarm
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.extensions.beVisibleIf
import com.simplemobiletools.commons.extensions.isVisible
import com.simplemobiletools.commons.extensions.toast
import com.simplemobiletools.commons.views.MyRecyclerView
import kotlinx.android.synthetic.main.item_alarm.view.*
import java.util.*
@ -90,7 +93,7 @@ class AlarmsAdapter(activity: SimpleActivity, var alarms: ArrayList<Alarm>, val
alarm_time.text = activity.getFormattedTime(alarm.timeInMinutes * 60, false, true)
alarm_time.setTextColor(textColor)
alarm_days.text = activity.getSelectedDaysString(alarm.days)
alarm_days.text = activity.getAlarmSelectedDaysString(alarm.days)
alarm_days.setTextColor(textColor)
alarm_label.text = alarm.label

View File

@ -9,6 +9,8 @@ import com.simplemobiletools.clock.R
import com.simplemobiletools.clock.activities.SimpleActivity
import com.simplemobiletools.clock.extensions.*
import com.simplemobiletools.clock.helpers.PICK_AUDIO_FILE_INTENT_ID
import com.simplemobiletools.clock.helpers.TODAY_BIT
import com.simplemobiletools.clock.helpers.TOMORROW_BIT
import com.simplemobiletools.clock.models.Alarm
import com.simplemobiletools.commons.dialogs.SelectAlarmSoundDialog
import com.simplemobiletools.commons.extensions.*
@ -68,11 +70,15 @@ class EditAlarmDialog(val activity: SimpleActivity, val alarm: Alarm, val callba
val day = activity.layoutInflater.inflate(R.layout.alarm_day, edit_alarm_days_holder, false) as TextView
day.text = dayLetters[it]
val isDayChecked = alarm.days and pow != 0
val isDayChecked = alarm.days > 0 && alarm.days and pow != 0
day.background = getProperDayDrawable(isDayChecked)
day.setTextColor(if (isDayChecked) context.config.backgroundColor else textColor)
day.setOnClickListener {
if (alarm.days < 0) {
alarm.days = 0
}
val selectDay = alarm.days and pow == 0
if (selectDay) {
alarm.days = alarm.days.addBit(pow)
@ -94,9 +100,12 @@ class EditAlarmDialog(val activity: SimpleActivity, val alarm: Alarm, val callba
.create().apply {
activity.setupDialogStuff(view, this) {
getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {
if (alarm.days == 0) {
activity.toast(R.string.no_days_selected)
return@setOnClickListener
if (alarm.days <= 0) {
alarm.days = if (alarm.timeInMinutes > getCurrentDayMinutes()) {
TODAY_BIT
} else {
TOMORROW_BIT
}
}
alarm.label = view.edit_alarm_label.value
@ -145,19 +154,21 @@ class EditAlarmDialog(val activity: SimpleActivity, val alarm: Alarm, val callba
}
private fun checkDaylessAlarm() {
if (alarm.days == 0) {
val calendar = Calendar.getInstance()
val currentMinutesOfDay = calendar.get(Calendar.HOUR_OF_DAY) * 60 + calendar.get(Calendar.MINUTE)
val textId = if (alarm.timeInMinutes > currentMinutesOfDay) {
R.string.tomorrow
} else {
if (alarm.days <= 0) {
val textId = if (alarm.timeInMinutes > getCurrentDayMinutes()) {
R.string.today
} else {
R.string.tomorrow
}
view.edit_alarm_dayless_label.text = "(${activity.getString(textId)})"
}
view.edit_alarm_dayless_label.beVisibleIf(alarm.days == 0)
view.edit_alarm_dayless_label.beVisibleIf(alarm.days <= 0)
}
private fun getCurrentDayMinutes(): Int {
val calendar = Calendar.getInstance()
return calendar.get(Calendar.HOUR_OF_DAY) * 60 + calendar.get(Calendar.MINUTE)
}
private fun getProperDayDrawable(selected: Boolean): Drawable {

View File

@ -392,3 +392,11 @@ fun Context.checkAlarmsWithDeletedSoundUri(uri: String) {
dbHelper.updateAlarm(it)
}
}
fun Context.getAlarmSelectedDaysString(bitMask: Int): String {
return when (bitMask) {
TODAY_BIT -> getString(R.string.today)
TOMORROW_BIT -> getString(R.string.tomorrow)
else -> getSelectedDaysString(bitMask)
}
}

View File

@ -12,6 +12,7 @@ import com.simplemobiletools.clock.adapters.AlarmsAdapter
import com.simplemobiletools.clock.dialogs.EditAlarmDialog
import com.simplemobiletools.clock.extensions.*
import com.simplemobiletools.clock.helpers.DEFAULT_ALARM_MINUTES
import com.simplemobiletools.clock.helpers.getNextDayBit
import com.simplemobiletools.clock.interfaces.ToggleAlarmInterface
import com.simplemobiletools.clock.models.Alarm
import com.simplemobiletools.commons.extensions.toast
@ -19,7 +20,6 @@ import com.simplemobiletools.commons.extensions.updateTextColors
import com.simplemobiletools.commons.models.AlarmSound
import kotlinx.android.synthetic.main.fragment_alarm.view.*
import java.util.*
import kotlin.math.pow
class AlarmFragment : Fragment(), ToggleAlarmInterface {
private var alarms = ArrayList<Alarm>()
@ -60,12 +60,7 @@ class AlarmFragment : Fragment(), ToggleAlarmInterface {
alarm_fab.setOnClickListener {
val newAlarm = context.createNewAlarm(DEFAULT_ALARM_MINUTES, 0)
newAlarm.isEnabled = true
val calendar = Calendar.getInstance()
calendar.add(Calendar.DAY_OF_WEEK, 1) // set the next alarm to the next day by default
val dayOfWeek = (calendar.get(Calendar.DAY_OF_WEEK) + 5) % 7
newAlarm.days = 2.0.pow(dayOfWeek).toInt()
newAlarm.days = getNextDayBit()
openEditAlarm(newAlarm)
}
}

View File

@ -2,6 +2,7 @@ package com.simplemobiletools.clock.helpers
import com.simplemobiletools.clock.models.MyTimeZone
import java.util.*
import kotlin.math.pow
// shared preferences
const val SHOW_SECONDS = "show_seconds"
@ -47,6 +48,9 @@ const val SORT_BY_LAP = 1
const val SORT_BY_LAP_TIME = 2
const val SORT_BY_TOTAL_TIME = 4
const val TODAY_BIT = -1
const val TOMORROW_BIT = -2
fun getDefaultTimeZoneTitle(id: Int) = getAllTimeZones().firstOrNull { it.id == id }?.title ?: ""
fun getMSTillNextMinute(): Long {
@ -76,6 +80,19 @@ fun formatTime(showSeconds: Boolean, use24HourFormat: Boolean, hours: Int, minut
}
}
fun getTodayBit(): Int {
val calendar = Calendar.getInstance()
val dayOfWeek = (calendar.get(Calendar.DAY_OF_WEEK) + 5) % 7
return 2.0.pow(dayOfWeek).toInt()
}
fun getNextDayBit(): Int {
val calendar = Calendar.getInstance()
calendar.add(Calendar.DAY_OF_WEEK, 1)
val dayOfWeek = (calendar.get(Calendar.DAY_OF_WEEK) + 5) % 7
return 2.0.pow(dayOfWeek).toInt()
}
fun getAllTimeZones() = arrayListOf(
MyTimeZone(1, "GMT-11:00 Midway", "Pacific/Midway"),
MyTimeZone(2, "GMT-10:00 Honolulu", "Pacific/Honolulu"),