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