diff --git a/android/app/src/main/java/com/eddy/atomrelay/MainActivity.kt b/android/app/src/main/java/com/eddy/atomrelay/MainActivity.kt index d032a7f..e67457e 100644 --- a/android/app/src/main/java/com/eddy/atomrelay/MainActivity.kt +++ b/android/app/src/main/java/com/eddy/atomrelay/MainActivity.kt @@ -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)