diff --git a/android/app/src/main/java/nl/eddydevink/sylda/MainActivity.kt b/android/app/src/main/java/nl/eddydevink/sylda/MainActivity.kt index e18839c..8f73a52 100644 --- a/android/app/src/main/java/nl/eddydevink/sylda/MainActivity.kt +++ b/android/app/src/main/java/nl/eddydevink/sylda/MainActivity.kt @@ -2,6 +2,7 @@ package nl.eddydevink.sylda import android.content.Intent +import android.content.pm.PackageManager import android.graphics.Color import android.net.Uri import android.os.Bundle @@ -12,13 +13,14 @@ import android.widget.Button import android.widget.ImageButton import android.widget.TextView import android.widget.Toast -import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity +import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat class MainActivity : AppCompatActivity(), BleCallbacks { companion object { + private const val REQUEST_SETTINGS = 1 private const val POST_SETTINGS_RESCAN_MS = 500L private const val ON_RESUME_SCAN_DELAY_MS = 300L } @@ -32,25 +34,6 @@ class MainActivity : AppCompatActivity(), BleCallbacks { private var lastTheme: String? = null private var triedPermissions = false - private val settingsLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> - if (result.resultCode == SettingsActivity.RESULT_SCAN) { - triedPermissions = false - manager.disconnect() - manager.resetTriedAddresses() - manager.updateKeys() - handler.postDelayed({ manager.startScan() }, POST_SETTINGS_RESCAN_MS) - } - } - - private val permissionLauncher = registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { grants -> - if (grants.values.all { it }) { - manager.startScan() - } else { - triedPermissions = false - onStatusChanged(BleStatus.PermissionsDenied) - } - } - override fun onStatusChanged(status: BleStatus) { when (status) { BleStatus.Connected -> { @@ -116,10 +99,10 @@ class MainActivity : AppCompatActivity(), BleCallbacks { val settingsContainer = findViewById(R.id.settingsContainer) settingsContainer.setOnClickListener { - settingsLauncher.launch(Intent(this, SettingsActivity::class.java)) + startActivityForResult(Intent(this, SettingsActivity::class.java), REQUEST_SETTINGS) } findViewById(R.id.settingsButton).setOnClickListener { - settingsLauncher.launch(Intent(this, SettingsActivity::class.java)) + startActivityForResult(Intent(this, SettingsActivity::class.java), REQUEST_SETTINGS) } setupRelayButton() setupRelay2Button() @@ -127,6 +110,18 @@ class MainActivity : AppCompatActivity(), BleCallbacks { relay2Button.isEnabled = true } + @Deprecated("Deprecated in Java") + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (requestCode == REQUEST_SETTINGS && resultCode == SettingsActivity.RESULT_SCAN) { + triedPermissions = false + manager.disconnect() + manager.resetTriedAddresses() + manager.updateKeys() + handler.postDelayed({ manager.startScan() }, POST_SETTINGS_RESCAN_MS) + } + } + override fun onResume() { super.onResume() val current = PrefsHelper.getPrefs(this).getString(PrefsHelper.PREF_THEME, "system") ?: "system" @@ -140,7 +135,7 @@ class MainActivity : AppCompatActivity(), BleCallbacks { if (!manager.hasPermissions()) { if (!triedPermissions) { triedPermissions = true - permissionLauncher.launch(manager.getRequiredPermissions()) + ActivityCompat.requestPermissions(this, manager.getRequiredPermissions(), 1) } return } @@ -155,6 +150,19 @@ class MainActivity : AppCompatActivity(), BleCallbacks { manager.stopScan() } + @Deprecated("Deprecated in Java") + override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + if (requestCode == 1) { + if (grantResults.all { it == PackageManager.PERMISSION_GRANTED }) { + manager.startScan() + } else { + triedPermissions = false + onStatusChanged(BleStatus.PermissionsDenied) + } + } + } + private fun setupRelayButton() { relay1Button.setOnClickListener(null) loadButtonLabel(relay1Button, PrefsHelper.PREF_LABEL1, R.string.button_hold) @@ -222,7 +230,7 @@ class MainActivity : AppCompatActivity(), BleCallbacks { if (isFinishing || isDestroyed || !lifecycle.currentState.isAtLeast(androidx.lifecycle.Lifecycle.State.RESUMED)) return@runOnUiThread if (espVersion.isNotEmpty() && espVersion != appVersion) { Toast.makeText(this, getString(R.string.ota_update_available), Toast.LENGTH_SHORT).show() - settingsLauncher.launch(Intent(this, SettingsActivity::class.java)) + startActivityForResult(Intent(this, SettingsActivity::class.java), REQUEST_SETTINGS) } } }