diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/activities/ReminderActivity.kt b/app/src/main/kotlin/com/simplemobiletools/clock/activities/ReminderActivity.kt index a73389d1..96bd67fb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/activities/ReminderActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/activities/ReminderActivity.kt @@ -238,7 +238,7 @@ class ReminderActivity : SimpleActivity() { } private fun finishActivity() { - if (alarm != null) { + if (alarm != null && alarm!!.days > 0) { scheduleNextAlarm(alarm!!, false) } diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/dialogs/EditAlarmDialog.kt b/app/src/main/kotlin/com/simplemobiletools/clock/dialogs/EditAlarmDialog.kt index e79d40e3..4ed2fca8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/dialogs/EditAlarmDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/dialogs/EditAlarmDialog.kt @@ -11,6 +11,7 @@ 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.helpers.getCurrentDayMinutes import com.simplemobiletools.clock.models.Alarm import com.simplemobiletools.commons.dialogs.SelectAlarmSoundDialog import com.simplemobiletools.commons.extensions.* @@ -166,11 +167,6 @@ class EditAlarmDialog(val activity: SimpleActivity, val alarm: Alarm, val callba 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 { val drawableId = if (selected) R.drawable.circle_background_filled else R.drawable.circle_background_stroke val drawable = activity.resources.getDrawable(drawableId) diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Context.kt index 1d10e458..d0d5c57c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Context.kt @@ -81,20 +81,37 @@ fun Context.createNewAlarm(timeInMinutes: Int, weekDays: Int): Alarm { fun Context.scheduleNextAlarm(alarm: Alarm, showToast: Boolean) { val calendar = Calendar.getInstance() calendar.firstDayOfWeek = Calendar.MONDAY - for (i in 0..7) { - val currentDay = (calendar.get(Calendar.DAY_OF_WEEK) + 5) % 7 - val isCorrectDay = alarm.days and 2.0.pow(currentDay).toInt() != 0 - val currentTimeInMinutes = calendar.get(Calendar.HOUR_OF_DAY) * 60 + calendar.get(Calendar.MINUTE) - if (isCorrectDay && (alarm.timeInMinutes > currentTimeInMinutes || i > 0)) { - val triggerInMinutes = alarm.timeInMinutes - currentTimeInMinutes + (i * DAY_MINUTES) - setupAlarmClock(alarm, triggerInMinutes * 60 - calendar.get(Calendar.SECOND)) + val currentTimeInMinutes = getCurrentDayMinutes() - if (showToast) { - showRemainingTimeMessage(triggerInMinutes) + if (alarm.days == TODAY_BIT) { + val triggerInMinutes = alarm.timeInMinutes - currentTimeInMinutes + setupAlarmClock(alarm, triggerInMinutes * 60 - calendar.get(Calendar.SECOND)) + + if (showToast) { + showRemainingTimeMessage(triggerInMinutes) + } + } else if (alarm.days == TOMORROW_BIT) { + val triggerInMinutes = alarm.timeInMinutes - currentTimeInMinutes + DAY_MINUTES + setupAlarmClock(alarm, triggerInMinutes * 60 - calendar.get(Calendar.SECOND)) + + if (showToast) { + showRemainingTimeMessage(triggerInMinutes) + } + } else { + for (i in 0..7) { + val currentDay = (calendar.get(Calendar.DAY_OF_WEEK) + 5) % 7 + val isCorrectDay = alarm.days and 2.0.pow(currentDay).toInt() != 0 + if (isCorrectDay && (alarm.timeInMinutes > currentTimeInMinutes || i > 0)) { + val triggerInMinutes = alarm.timeInMinutes - currentTimeInMinutes + (i * DAY_MINUTES) + setupAlarmClock(alarm, triggerInMinutes * 60 - calendar.get(Calendar.SECOND)) + + if (showToast) { + showRemainingTimeMessage(triggerInMinutes) + } + break + } else { + calendar.add(Calendar.DAY_OF_MONTH, 1) } - break - } else { - calendar.add(Calendar.DAY_OF_MONTH, 1) } } } @@ -224,7 +241,10 @@ fun Context.showAlarmNotification(alarm: Alarm) { val notification = getAlarmNotification(pendingIntent, alarm) val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.notify(alarm.id, notification) - scheduleNextAlarm(alarm, false) + + if (alarm.days > 0) { + scheduleNextAlarm(alarm, false) + } } @SuppressLint("NewApi") diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/fragments/AlarmFragment.kt b/app/src/main/kotlin/com/simplemobiletools/clock/fragments/AlarmFragment.kt index a3b161b6..b42d3f7a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/fragments/AlarmFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/fragments/AlarmFragment.kt @@ -12,7 +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.helpers.getTomorrowBit import com.simplemobiletools.clock.interfaces.ToggleAlarmInterface import com.simplemobiletools.clock.models.Alarm import com.simplemobiletools.commons.extensions.toast @@ -60,7 +60,7 @@ class AlarmFragment : Fragment(), ToggleAlarmInterface { alarm_fab.setOnClickListener { val newAlarm = context.createNewAlarm(DEFAULT_ALARM_MINUTES, 0) newAlarm.isEnabled = true - newAlarm.days = getNextDayBit() + newAlarm.days = getTomorrowBit() openEditAlarm(newAlarm) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Constants.kt index 33a7c6cd..ba58439f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Constants.kt @@ -80,19 +80,18 @@ 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 { +fun getTomorrowBit(): 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 getCurrentDayMinutes(): Int { + val calendar = Calendar.getInstance() + return calendar.get(Calendar.HOUR_OF_DAY) * 60 + calendar.get(Calendar.MINUTE) +} + fun getAllTimeZones() = arrayListOf( MyTimeZone(1, "GMT-11:00 Midway", "Pacific/Midway"), MyTimeZone(2, "GMT-10:00 Honolulu", "Pacific/Honolulu"),