11package org.fossify.notes.activities
22
3+ import android.app.AlarmManager
34import android.content.Intent
45import android.net.Uri
56import android.os.Bundle
@@ -11,11 +12,13 @@ import kotlinx.serialization.SerializationException
1112import kotlinx.serialization.encodeToString
1213import kotlinx.serialization.json.Json
1314import org.fossify.commons.dialogs.ConfirmationDialog
15+ import org.fossify.commons.dialogs.PermissionRequiredDialog
1416import org.fossify.commons.dialogs.RadioGroupDialog
1517import org.fossify.commons.dialogs.SecurityDialog
1618import org.fossify.commons.extensions.*
1719import org.fossify.commons.helpers.*
1820import org.fossify.commons.models.RadioItem
21+ import org.fossify.notes.BuildConfig
1922import org.fossify.notes.R
2023import org.fossify.notes.databinding.ActivitySettingsBinding
2124import org.fossify.notes.dialogs.ExportNotesDialog
@@ -368,13 +371,15 @@ class SettingsActivity : SimpleActivity() {
368371 binding.settingsEnableAutomaticBackupsHolder.setOnClickListener {
369372 val wasBackupDisabled = ! config.autoBackup
370373 if (wasBackupDisabled) {
371- ManageAutoBackupsDialog (
372- activity = this ,
373- onSuccess = {
374- enableOrDisableAutomaticBackups(true )
375- scheduleNextAutomaticBackup()
376- }
377- )
374+ maybeRequestExactAlarmPermission {
375+ ManageAutoBackupsDialog (
376+ activity = this ,
377+ onSuccess = {
378+ enableOrDisableAutomaticBackups(true )
379+ scheduleNextAutomaticBackup()
380+ }
381+ )
382+ }
378383 } else {
379384 cancelScheduledAutomaticBackup()
380385 enableOrDisableAutomaticBackups(false )
@@ -400,6 +405,25 @@ class SettingsActivity : SimpleActivity() {
400405 binding.settingsManageAutomaticBackupsHolder.beVisibleIf(enable)
401406 }
402407
408+ private fun maybeRequestExactAlarmPermission (callback : () -> Unit = {}) {
409+ if (isSPlus()) {
410+ val alarmManager: AlarmManager = getSystemService(ALARM_SERVICE ) as AlarmManager
411+ if (alarmManager.canScheduleExactAlarms()) {
412+ callback()
413+ } else {
414+ PermissionRequiredDialog (
415+ activity = this ,
416+ textId = R .string.allow_alarm_automatic_backups,
417+ positiveActionCallback = {
418+ openRequestExactAlarmSettings(BuildConfig .APPLICATION_ID )
419+ },
420+ )
421+ }
422+ } else {
423+ callback()
424+ }
425+ }
426+
403427 private fun setupAppPasswordProtection () {
404428 binding.settingsAppPasswordProtection.isChecked = config.isAppPasswordProtectionOn
405429 binding.settingsAppPasswordProtectionHolder.setOnClickListener {
0 commit comments