mirror of
https://github.com/SimpleMobileTools/Simple-Clock.git
synced 2025-04-06 22:51:05 +02:00
adding some UI improvements to dayless alarms
This commit is contained in:
parent
9b55486462
commit
b0c8dfe535
@ -8,12 +8,15 @@ import com.simplemobiletools.clock.R
|
|||||||
import com.simplemobiletools.clock.activities.SimpleActivity
|
import com.simplemobiletools.clock.activities.SimpleActivity
|
||||||
import com.simplemobiletools.clock.extensions.config
|
import com.simplemobiletools.clock.extensions.config
|
||||||
import com.simplemobiletools.clock.extensions.dbHelper
|
import com.simplemobiletools.clock.extensions.dbHelper
|
||||||
|
import com.simplemobiletools.clock.extensions.getAlarmSelectedDaysString
|
||||||
import com.simplemobiletools.clock.extensions.getFormattedTime
|
import com.simplemobiletools.clock.extensions.getFormattedTime
|
||||||
import com.simplemobiletools.clock.interfaces.ToggleAlarmInterface
|
import com.simplemobiletools.clock.interfaces.ToggleAlarmInterface
|
||||||
import com.simplemobiletools.clock.models.Alarm
|
import com.simplemobiletools.clock.models.Alarm
|
||||||
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
|
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
|
||||||
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
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 com.simplemobiletools.commons.views.MyRecyclerView
|
||||||
import kotlinx.android.synthetic.main.item_alarm.view.*
|
import kotlinx.android.synthetic.main.item_alarm.view.*
|
||||||
import java.util.*
|
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.text = activity.getFormattedTime(alarm.timeInMinutes * 60, false, true)
|
||||||
alarm_time.setTextColor(textColor)
|
alarm_time.setTextColor(textColor)
|
||||||
|
|
||||||
alarm_days.text = activity.getSelectedDaysString(alarm.days)
|
alarm_days.text = activity.getAlarmSelectedDaysString(alarm.days)
|
||||||
alarm_days.setTextColor(textColor)
|
alarm_days.setTextColor(textColor)
|
||||||
|
|
||||||
alarm_label.text = alarm.label
|
alarm_label.text = alarm.label
|
||||||
|
@ -9,6 +9,8 @@ import com.simplemobiletools.clock.R
|
|||||||
import com.simplemobiletools.clock.activities.SimpleActivity
|
import com.simplemobiletools.clock.activities.SimpleActivity
|
||||||
import com.simplemobiletools.clock.extensions.*
|
import com.simplemobiletools.clock.extensions.*
|
||||||
import com.simplemobiletools.clock.helpers.PICK_AUDIO_FILE_INTENT_ID
|
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.clock.models.Alarm
|
||||||
import com.simplemobiletools.commons.dialogs.SelectAlarmSoundDialog
|
import com.simplemobiletools.commons.dialogs.SelectAlarmSoundDialog
|
||||||
import com.simplemobiletools.commons.extensions.*
|
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
|
val day = activity.layoutInflater.inflate(R.layout.alarm_day, edit_alarm_days_holder, false) as TextView
|
||||||
day.text = dayLetters[it]
|
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.background = getProperDayDrawable(isDayChecked)
|
||||||
|
|
||||||
day.setTextColor(if (isDayChecked) context.config.backgroundColor else textColor)
|
day.setTextColor(if (isDayChecked) context.config.backgroundColor else textColor)
|
||||||
day.setOnClickListener {
|
day.setOnClickListener {
|
||||||
|
if (alarm.days < 0) {
|
||||||
|
alarm.days = 0
|
||||||
|
}
|
||||||
|
|
||||||
val selectDay = alarm.days and pow == 0
|
val selectDay = alarm.days and pow == 0
|
||||||
if (selectDay) {
|
if (selectDay) {
|
||||||
alarm.days = alarm.days.addBit(pow)
|
alarm.days = alarm.days.addBit(pow)
|
||||||
@ -94,9 +100,12 @@ class EditAlarmDialog(val activity: SimpleActivity, val alarm: Alarm, val callba
|
|||||||
.create().apply {
|
.create().apply {
|
||||||
activity.setupDialogStuff(view, this) {
|
activity.setupDialogStuff(view, this) {
|
||||||
getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {
|
getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {
|
||||||
if (alarm.days == 0) {
|
if (alarm.days <= 0) {
|
||||||
activity.toast(R.string.no_days_selected)
|
alarm.days = if (alarm.timeInMinutes > getCurrentDayMinutes()) {
|
||||||
return@setOnClickListener
|
TODAY_BIT
|
||||||
|
} else {
|
||||||
|
TOMORROW_BIT
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
alarm.label = view.edit_alarm_label.value
|
alarm.label = view.edit_alarm_label.value
|
||||||
@ -145,19 +154,21 @@ class EditAlarmDialog(val activity: SimpleActivity, val alarm: Alarm, val callba
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun checkDaylessAlarm() {
|
private fun checkDaylessAlarm() {
|
||||||
if (alarm.days == 0) {
|
if (alarm.days <= 0) {
|
||||||
val calendar = Calendar.getInstance()
|
val textId = if (alarm.timeInMinutes > getCurrentDayMinutes()) {
|
||||||
val currentMinutesOfDay = calendar.get(Calendar.HOUR_OF_DAY) * 60 + calendar.get(Calendar.MINUTE)
|
|
||||||
|
|
||||||
val textId = if (alarm.timeInMinutes > currentMinutesOfDay) {
|
|
||||||
R.string.tomorrow
|
|
||||||
} else {
|
|
||||||
R.string.today
|
R.string.today
|
||||||
|
} else {
|
||||||
|
R.string.tomorrow
|
||||||
}
|
}
|
||||||
|
|
||||||
view.edit_alarm_dayless_label.text = "(${activity.getString(textId)})"
|
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 {
|
private fun getProperDayDrawable(selected: Boolean): Drawable {
|
||||||
|
@ -392,3 +392,11 @@ fun Context.checkAlarmsWithDeletedSoundUri(uri: String) {
|
|||||||
dbHelper.updateAlarm(it)
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -12,6 +12,7 @@ import com.simplemobiletools.clock.adapters.AlarmsAdapter
|
|||||||
import com.simplemobiletools.clock.dialogs.EditAlarmDialog
|
import com.simplemobiletools.clock.dialogs.EditAlarmDialog
|
||||||
import com.simplemobiletools.clock.extensions.*
|
import com.simplemobiletools.clock.extensions.*
|
||||||
import com.simplemobiletools.clock.helpers.DEFAULT_ALARM_MINUTES
|
import com.simplemobiletools.clock.helpers.DEFAULT_ALARM_MINUTES
|
||||||
|
import com.simplemobiletools.clock.helpers.getNextDayBit
|
||||||
import com.simplemobiletools.clock.interfaces.ToggleAlarmInterface
|
import com.simplemobiletools.clock.interfaces.ToggleAlarmInterface
|
||||||
import com.simplemobiletools.clock.models.Alarm
|
import com.simplemobiletools.clock.models.Alarm
|
||||||
import com.simplemobiletools.commons.extensions.toast
|
import com.simplemobiletools.commons.extensions.toast
|
||||||
@ -19,7 +20,6 @@ import com.simplemobiletools.commons.extensions.updateTextColors
|
|||||||
import com.simplemobiletools.commons.models.AlarmSound
|
import com.simplemobiletools.commons.models.AlarmSound
|
||||||
import kotlinx.android.synthetic.main.fragment_alarm.view.*
|
import kotlinx.android.synthetic.main.fragment_alarm.view.*
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.math.pow
|
|
||||||
|
|
||||||
class AlarmFragment : Fragment(), ToggleAlarmInterface {
|
class AlarmFragment : Fragment(), ToggleAlarmInterface {
|
||||||
private var alarms = ArrayList<Alarm>()
|
private var alarms = ArrayList<Alarm>()
|
||||||
@ -60,12 +60,7 @@ class AlarmFragment : Fragment(), ToggleAlarmInterface {
|
|||||||
alarm_fab.setOnClickListener {
|
alarm_fab.setOnClickListener {
|
||||||
val newAlarm = context.createNewAlarm(DEFAULT_ALARM_MINUTES, 0)
|
val newAlarm = context.createNewAlarm(DEFAULT_ALARM_MINUTES, 0)
|
||||||
newAlarm.isEnabled = true
|
newAlarm.isEnabled = true
|
||||||
|
newAlarm.days = getNextDayBit()
|
||||||
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()
|
|
||||||
|
|
||||||
openEditAlarm(newAlarm)
|
openEditAlarm(newAlarm)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package com.simplemobiletools.clock.helpers
|
|||||||
|
|
||||||
import com.simplemobiletools.clock.models.MyTimeZone
|
import com.simplemobiletools.clock.models.MyTimeZone
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
import kotlin.math.pow
|
||||||
|
|
||||||
// shared preferences
|
// shared preferences
|
||||||
const val SHOW_SECONDS = "show_seconds"
|
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_LAP_TIME = 2
|
||||||
const val SORT_BY_TOTAL_TIME = 4
|
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 getDefaultTimeZoneTitle(id: Int) = getAllTimeZones().firstOrNull { it.id == id }?.title ?: ""
|
||||||
|
|
||||||
fun getMSTillNextMinute(): Long {
|
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(
|
fun getAllTimeZones() = arrayListOf(
|
||||||
MyTimeZone(1, "GMT-11:00 Midway", "Pacific/Midway"),
|
MyTimeZone(1, "GMT-11:00 Midway", "Pacific/Midway"),
|
||||||
MyTimeZone(2, "GMT-10:00 Honolulu", "Pacific/Honolulu"),
|
MyTimeZone(2, "GMT-10:00 Honolulu", "Pacific/Honolulu"),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user