Simplify permission flow: standard ActivityCompat pattern with one-shot guard

This commit is contained in:
eddy 2026-07-29 22:04:46 +02:00
commit a025e66b61

View file

@ -4,6 +4,7 @@ package com.eddy.atomrelay
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Color
import android.net.Uri
import android.os.Bundle
import android.os.Handler
import android.os.Looper
@ -30,7 +31,7 @@ class MainActivity : AppCompatActivity(), BleCallbacks {
private lateinit var relay1Button: Button
private lateinit var relay2Button: Button
private var lastTheme: String? = null
private var permissionsRequested = false
private var triedPermissions = false
override fun onStatusChanged(status: BleStatus) {
when (status) {
@ -56,6 +57,11 @@ class MainActivity : AppCompatActivity(), BleCallbacks {
BleStatus.BluetoothDisabled -> statusText.text = getString(R.string.status_bluetooth_disabled)
BleStatus.PermissionsDenied -> {
statusText.text = getString(R.string.status_permissions_denied)
statusText.setOnClickListener {
val intent = Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
intent.data = Uri.fromParts("package", packageName, null)
startActivity(intent)
}
relay1Button.isEnabled = false
relay2Button.isEnabled = false
}
@ -101,7 +107,7 @@ class MainActivity : AppCompatActivity(), BleCallbacks {
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_SETTINGS && resultCode == SettingsActivity.RESULT_SCAN) {
permissionsRequested = false
triedPermissions = false
manager.disconnect()
manager.resetTriedAddresses()
manager.updateKeys()
@ -120,9 +126,9 @@ class MainActivity : AppCompatActivity(), BleCallbacks {
loadButtonLabel(relay1Button, PrefsHelper.PREF_LABEL1, R.string.button_hold)
loadButtonLabel(relay2Button, PrefsHelper.PREF_LABEL2, R.string.button_hold)
if (!manager.hasPermissions()) {
if (!permissionsRequested) {
permissionsRequested = true
requestPermissions()
if (!triedPermissions) {
triedPermissions = true
ActivityCompat.requestPermissions(this, manager.getRequiredPermissions(), 1)
}
return
}
@ -144,7 +150,7 @@ class MainActivity : AppCompatActivity(), BleCallbacks {
if (grantResults.all { it == PackageManager.PERMISSION_GRANTED }) {
manager.startScan()
} else {
permissionsRequested = false
triedPermissions = false
onStatusChanged(BleStatus.PermissionsDenied)
}
}
@ -204,11 +210,6 @@ class MainActivity : AppCompatActivity(), BleCallbacks {
button.text = if (label.isNullOrEmpty()) getString(fallbackResId) else label
}
private fun requestPermissions() {
val perms = manager.getRequiredPermissions()
ActivityCompat.requestPermissions(this, perms, 1)
}
override fun onDestroy() {
super.onDestroy()
handler.removeCallbacksAndMessages(null)