mirror of
https://github.com/SimpleMobileTools/Simple-Clock.git
synced 2025-06-05 22:19:17 +02:00
Make alarms created by Intent single shot if created without UI
This commit is contained in:
@ -142,6 +142,7 @@ class IntentHandlerActivity : SimpleActivity() {
|
|||||||
} else {
|
} else {
|
||||||
TOMORROW_BIT
|
TOMORROW_BIT
|
||||||
}
|
}
|
||||||
|
newAlarm.oneShot = true
|
||||||
}
|
}
|
||||||
|
|
||||||
ensureBackgroundThread {
|
ensureBackgroundThread {
|
||||||
|
@ -275,8 +275,20 @@ class ReminderActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun finishActivity() {
|
private fun finishActivity() {
|
||||||
if (!wasAlarmSnoozed && alarm != null && alarm!!.days > 0) {
|
if (!wasAlarmSnoozed && alarm != null) {
|
||||||
scheduleNextAlarm(alarm!!, false)
|
cancelAlarmClock(alarm!!)
|
||||||
|
if (alarm!!.days > 0) {
|
||||||
|
scheduleNextAlarm(alarm!!, false)
|
||||||
|
}
|
||||||
|
if (alarm!!.days < 0) {
|
||||||
|
if (alarm!!.oneShot) {
|
||||||
|
alarm!!.isEnabled = false
|
||||||
|
dbHelper.deleteAlarms(arrayListOf(alarm!!))
|
||||||
|
} else {
|
||||||
|
dbHelper.updateAlarmEnabledState(alarm!!.id, false)
|
||||||
|
}
|
||||||
|
updateWidgets()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
destroyEffects()
|
destroyEffects()
|
||||||
|
@ -157,6 +157,7 @@ class EditAlarmDialog(val activity: SimpleActivity, val alarm: Alarm, val onDism
|
|||||||
|
|
||||||
alarm.label = binding.editAlarm.value
|
alarm.label = binding.editAlarm.value
|
||||||
alarm.isEnabled = true
|
alarm.isEnabled = true
|
||||||
|
alarm.oneShot = false
|
||||||
|
|
||||||
var alarmId = alarm.id
|
var alarmId = alarm.id
|
||||||
activity.handleFullScreenNotificationsPermission { granted ->
|
activity.handleFullScreenNotificationsPermission { granted ->
|
||||||
|
@ -87,14 +87,22 @@ class AlarmFragment : Fragment(), ToggleAlarmInterface {
|
|||||||
}
|
}
|
||||||
context?.getEnabledAlarms { enabledAlarms ->
|
context?.getEnabledAlarms { enabledAlarms ->
|
||||||
if (enabledAlarms.isNullOrEmpty()) {
|
if (enabledAlarms.isNullOrEmpty()) {
|
||||||
|
val removedAlarms = mutableListOf<Alarm>()
|
||||||
alarms.forEach {
|
alarms.forEach {
|
||||||
if (it.days == TODAY_BIT && it.isEnabled && it.timeInMinutes <= getCurrentDayMinutes()) {
|
if (it.days == TODAY_BIT && it.isEnabled && it.timeInMinutes <= getCurrentDayMinutes()) {
|
||||||
it.isEnabled = false
|
it.isEnabled = false
|
||||||
ensureBackgroundThread {
|
ensureBackgroundThread {
|
||||||
context?.dbHelper?.updateAlarmEnabledState(it.id, false)
|
if (it.oneShot) {
|
||||||
|
it.isEnabled = false
|
||||||
|
context?.dbHelper?.deleteAlarms(arrayListOf(it))
|
||||||
|
removedAlarms.add(it)
|
||||||
|
} else {
|
||||||
|
context?.dbHelper?.updateAlarmEnabledState(it.id, false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
alarms.removeAll(removedAlarms)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -131,6 +139,10 @@ class AlarmFragment : Fragment(), ToggleAlarmInterface {
|
|||||||
val alarm = alarms.firstOrNull { it.id == id } ?: return@handleFullScreenNotificationsPermission
|
val alarm = alarms.firstOrNull { it.id == id } ?: return@handleFullScreenNotificationsPermission
|
||||||
alarm.isEnabled = isEnabled
|
alarm.isEnabled = isEnabled
|
||||||
checkAlarmState(alarm)
|
checkAlarmState(alarm)
|
||||||
|
if (!alarm.isEnabled && alarm.oneShot) {
|
||||||
|
requireContext().dbHelper.deleteAlarms(arrayListOf(alarm))
|
||||||
|
setupAlarms()
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
requireActivity().toast(com.simplemobiletools.commons.R.string.unknown_error_occurred)
|
requireActivity().toast(com.simplemobiletools.commons.R.string.unknown_error_occurred)
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,12 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||||||
private val COL_SOUND_TITLE = "sound_title"
|
private val COL_SOUND_TITLE = "sound_title"
|
||||||
private val COL_SOUND_URI = "sound_uri"
|
private val COL_SOUND_URI = "sound_uri"
|
||||||
private val COL_LABEL = "label"
|
private val COL_LABEL = "label"
|
||||||
|
private val COL_ONE_SHOT = "one_shot"
|
||||||
|
|
||||||
private val mDb = writableDatabase
|
private val mDb = writableDatabase
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val DB_VERSION = 1
|
private const val DB_VERSION = 2
|
||||||
const val DB_NAME = "alarms.db"
|
const val DB_NAME = "alarms.db"
|
||||||
var dbInstance: DBHelper? = null
|
var dbInstance: DBHelper? = null
|
||||||
|
|
||||||
@ -47,7 +48,13 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||||||
insertInitialAlarms(db)
|
insertInitialAlarms(db)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {}
|
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
|
||||||
|
var version = oldVersion
|
||||||
|
if (version == 1 && newVersion > version) {
|
||||||
|
db.execSQL("ALTER TABLE $ALARMS_TABLE_NAME ADD COLUMN $COL_ONE_SHOT INTEGER NOT NULL DEFAULT 0")
|
||||||
|
version++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun insertInitialAlarms(db: SQLiteDatabase) {
|
private fun insertInitialAlarms(db: SQLiteDatabase) {
|
||||||
val weekDays = MONDAY_BIT or TUESDAY_BIT or WEDNESDAY_BIT or THURSDAY_BIT or FRIDAY_BIT
|
val weekDays = MONDAY_BIT or TUESDAY_BIT or WEDNESDAY_BIT or THURSDAY_BIT or FRIDAY_BIT
|
||||||
@ -102,6 +109,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||||||
put(COL_SOUND_TITLE, alarm.soundTitle)
|
put(COL_SOUND_TITLE, alarm.soundTitle)
|
||||||
put(COL_SOUND_URI, alarm.soundUri)
|
put(COL_SOUND_URI, alarm.soundUri)
|
||||||
put(COL_LABEL, alarm.label)
|
put(COL_LABEL, alarm.label)
|
||||||
|
put(COL_ONE_SHOT, alarm.oneShot)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,7 +117,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||||||
|
|
||||||
fun getAlarms(): ArrayList<Alarm> {
|
fun getAlarms(): ArrayList<Alarm> {
|
||||||
val alarms = ArrayList<Alarm>()
|
val alarms = ArrayList<Alarm>()
|
||||||
val cols = arrayOf(COL_ID, COL_TIME_IN_MINUTES, COL_DAYS, COL_IS_ENABLED, COL_VIBRATE, COL_SOUND_TITLE, COL_SOUND_URI, COL_LABEL)
|
val cols = arrayOf(COL_ID, COL_TIME_IN_MINUTES, COL_DAYS, COL_IS_ENABLED, COL_VIBRATE, COL_SOUND_TITLE, COL_SOUND_URI, COL_LABEL, COL_ONE_SHOT)
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
try {
|
try {
|
||||||
cursor = mDb.query(ALARMS_TABLE_NAME, cols, null, null, null, null, null)
|
cursor = mDb.query(ALARMS_TABLE_NAME, cols, null, null, null, null, null)
|
||||||
@ -124,8 +132,9 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||||||
val soundTitle = cursor.getStringValue(COL_SOUND_TITLE)
|
val soundTitle = cursor.getStringValue(COL_SOUND_TITLE)
|
||||||
val soundUri = cursor.getStringValue(COL_SOUND_URI)
|
val soundUri = cursor.getStringValue(COL_SOUND_URI)
|
||||||
val label = cursor.getStringValue(COL_LABEL)
|
val label = cursor.getStringValue(COL_LABEL)
|
||||||
|
val oneShot = cursor.getIntValue(COL_ONE_SHOT) == 1
|
||||||
|
|
||||||
val alarm = Alarm(id, timeInMinutes, days, isEnabled, vibrate, soundTitle, soundUri, label)
|
val alarm = Alarm(id, timeInMinutes, days, isEnabled, vibrate, soundTitle, soundUri, label, oneShot)
|
||||||
alarms.add(alarm)
|
alarms.add(alarm)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
continue
|
continue
|
||||||
|
@ -8,5 +8,6 @@ data class Alarm(
|
|||||||
var vibrate: Boolean,
|
var vibrate: Boolean,
|
||||||
var soundTitle: String,
|
var soundTitle: String,
|
||||||
var soundUri: String,
|
var soundUri: String,
|
||||||
var label: String
|
var label: String,
|
||||||
|
var oneShot: Boolean = false
|
||||||
)
|
)
|
||||||
|
@ -27,7 +27,12 @@ class DismissAlarmReceiver : BroadcastReceiver() {
|
|||||||
context.cancelAlarmClock(alarm)
|
context.cancelAlarmClock(alarm)
|
||||||
scheduleNextAlarm(alarm, context)
|
scheduleNextAlarm(alarm, context)
|
||||||
if (alarm.days < 0) {
|
if (alarm.days < 0) {
|
||||||
context.dbHelper.updateAlarmEnabledState(alarm.id, false)
|
if (alarm.oneShot) {
|
||||||
|
alarm.isEnabled = false
|
||||||
|
context.dbHelper.deleteAlarms(arrayListOf(alarm))
|
||||||
|
} else {
|
||||||
|
context.dbHelper.updateAlarmEnabledState(alarm.id, false)
|
||||||
|
}
|
||||||
context.updateWidgets()
|
context.updateWidgets()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,12 @@ class HideAlarmReceiver : BroadcastReceiver() {
|
|||||||
ensureBackgroundThread {
|
ensureBackgroundThread {
|
||||||
val alarm = context.dbHelper.getAlarmWithId(id)
|
val alarm = context.dbHelper.getAlarmWithId(id)
|
||||||
if (alarm != null && alarm.days < 0) {
|
if (alarm != null && alarm.days < 0) {
|
||||||
context.dbHelper.updateAlarmEnabledState(alarm.id, false)
|
if (alarm.oneShot) {
|
||||||
|
alarm.isEnabled = false
|
||||||
|
context.dbHelper.deleteAlarms(arrayListOf(alarm))
|
||||||
|
} else {
|
||||||
|
context.dbHelper.updateAlarmEnabledState(alarm.id, false)
|
||||||
|
}
|
||||||
context.updateWidgets()
|
context.updateWidgets()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user