Request alarm permissions for sleep timer

This commit is contained in:
tomaThomas 2024-10-11 17:38:32 +02:00
parent 2bcce6977d
commit df58f7a17b
No known key found for this signature in database
GPG key ID: DEE963DC84059108
4 changed files with 55 additions and 10 deletions

View file

@ -15,6 +15,7 @@
package code.name.monkey.retromusic.activities package code.name.monkey.retromusic.activities
import android.Manifest.permission.BLUETOOTH_CONNECT import android.Manifest.permission.BLUETOOTH_CONNECT
import android.app.AlarmManager
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.content.res.ColorStateList import android.content.res.ColorStateList
@ -24,6 +25,7 @@ import android.provider.Settings
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat
import androidx.core.content.getSystemService
import androidx.core.net.toUri import androidx.core.net.toUri
import androidx.core.text.parseAsHtml import androidx.core.text.parseAsHtml
import androidx.core.view.isVisible import androidx.core.view.isVisible
@ -67,6 +69,11 @@ class PermissionActivity : AbsMusicServiceActivity() {
BLUETOOTH_PERMISSION_REQUEST BLUETOOTH_PERMISSION_REQUEST
) )
} }
binding.alarmPermission.show()
binding.alarmPermission.setButtonClick {
val intent = Intent(Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM)
startActivity(intent)
}
} else { } else {
binding.audioPermission.setNumber("2") binding.audioPermission.setNumber("2")
} }
@ -124,6 +131,11 @@ class PermissionActivity : AbsMusicServiceActivity() {
binding.bluetoothPermission.checkImage.imageTintList = binding.bluetoothPermission.checkImage.imageTintList =
ColorStateList.valueOf(accentColor()) ColorStateList.valueOf(accentColor())
} }
if (hasAlarmPermission()) {
binding.alarmPermission.checkImage.isVisible = true
binding.alarmPermission.checkImage.imageTintList =
ColorStateList.valueOf(accentColor())
}
} }
} }
@ -143,4 +155,9 @@ class PermissionActivity : AbsMusicServiceActivity() {
private fun hasAudioPermission(): Boolean { private fun hasAudioPermission(): Boolean {
return Settings.System.canWrite(this) return Settings.System.canWrite(this)
} }
@RequiresApi(Build.VERSION_CODES.S)
private fun hasAlarmPermission(): Boolean {
return getSystemService<AlarmManager>()?.canScheduleExactAlarms() == true
}
} }

View file

@ -19,9 +19,11 @@ import android.app.Dialog
import android.app.PendingIntent import android.app.PendingIntent
import android.content.DialogInterface import android.content.DialogInterface
import android.content.Intent import android.content.Intent
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.CountDownTimer import android.os.CountDownTimer
import android.os.SystemClock import android.os.SystemClock
import android.provider.Settings
import android.widget.CheckBox import android.widget.CheckBox
import android.widget.SeekBar import android.widget.SeekBar
import android.widget.TextView import android.widget.TextView
@ -129,17 +131,27 @@ class SleepTimerDialog : DialogFragment() {
SystemClock.elapsedRealtime() + minutes * 60 * 1000 SystemClock.elapsedRealtime() + minutes * 60 * 1000
PreferenceUtil.nextSleepTimerElapsedRealTime = nextSleepTimerElapsedTime.toInt() PreferenceUtil.nextSleepTimerElapsedRealTime = nextSleepTimerElapsedTime.toInt()
val am = requireContext().getSystemService<AlarmManager>() val am = requireContext().getSystemService<AlarmManager>()
am?.setExact(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
nextSleepTimerElapsedTime,
pi
)
Toast.makeText( if (VersionUtils.hasS() && am?.canScheduleExactAlarms() != true) {
requireContext(), Toast.makeText(
requireContext().resources.getString(R.string.sleep_timer_set, minutes), requireContext(),
Toast.LENGTH_SHORT requireContext().resources.getString(R.string.sleep_timer_no_permission),
).show() Toast.LENGTH_SHORT
).show()
val intent = Intent(Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM)
startActivity(intent)
} else {
am?.setExact(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
nextSleepTimerElapsedTime,
pi
)
Toast.makeText(
requireContext(),
requireContext().resources.getString(R.string.sleep_timer_set, minutes),
Toast.LENGTH_SHORT
).show()
}
} }
} }
setView(binding.root) setView(binding.root)

View file

@ -78,6 +78,19 @@
app:permissionTitleNumber="3" app:permissionTitleNumber="3"
app:permissionTitleSubTitle="@string/ringtone_summary" app:permissionTitleSubTitle="@string/ringtone_summary"
tools:visibility="visible" /> tools:visibility="visible" />
<code.name.monkey.retromusic.views.PermissionItem
android:id="@+id/alarm_permission"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="@integer/permission_layout_weight"
android:visibility="gone"
app:permissionButtonTitle="@string/grant_access"
app:permissionIcon="@drawable/ic_phonelink_ring"
app:permissionTitle="@string/permission_alarm_title"
app:permissionTitleNumber="4"
app:permissionTitleSubTitle="@string/permission_alarm_summary"
tools:visibility="visible" />
</LinearLayout> </LinearLayout>
</ScrollView> </ScrollView>

View file

@ -456,6 +456,8 @@
<string name="retro_music_pro">Retro Music Pro</string> <string name="retro_music_pro">Retro Music Pro</string>
<string name="ringtone_summary">The app needs permission to access your device settings in order to set music as Ringtone</string> <string name="ringtone_summary">The app needs permission to access your device settings in order to set music as Ringtone</string>
<string name="ringtone_title">Ringtone (Optional)</string> <string name="ringtone_title">Ringtone (Optional)</string>
<string name="permission_alarm_summary">The app needs permission to schedule exact alarms to set sleep timers</string>
<string name="permission_alarm_title">Alarm (Optional)</string>
<string name="saf_delete_failed">File delete failed: %s</string> <string name="saf_delete_failed">File delete failed: %s</string>
<!-- SAF --> <!-- SAF -->
<string name="saf_error_uri">Can\'t get SAF URI</string> <string name="saf_error_uri">Can\'t get SAF URI</string>
@ -563,4 +565,5 @@
<string name="you_will_be_forwarded_to_the_issue_tracker_website">You will be forwarded to the issue tracker website.</string> <string name="you_will_be_forwarded_to_the_issue_tracker_website">You will be forwarded to the issue tracker website.</string>
<string name="your_account_data_is_only_used_for_authentication">Your account data is only used for authentication.</string> <string name="your_account_data_is_only_used_for_authentication">Your account data is only used for authentication.</string>
<string name="could_not_write_tags_to_file">Could not write tags to the music file!</string> <string name="could_not_write_tags_to_file">Could not write tags to the music file!</string>
<string name="sleep_timer_no_permission">No permission to schedule alarms, please allow Retro Music.</string>
</resources> </resources>