Simplify permission flow: standard ActivityCompat pattern with one-shot guard
This commit is contained in:
parent
ecdd693ffa
commit
a025e66b61
1 changed files with 12 additions and 11 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue