Merge pull request 'fix: use Activity Result API instead of deprecated methods' (#23) from fix/minor-android-issues into main
All checks were successful
CI / build (push) Successful in 1m22s

This commit is contained in:
eddy 2026-08-04 18:41:26 +02:00
commit 91739002ef

View file

@ -2,7 +2,6 @@
package nl.eddydevink.sylda package nl.eddydevink.sylda
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Color import android.graphics.Color
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
@ -13,14 +12,13 @@ import android.widget.Button
import android.widget.ImageButton import android.widget.ImageButton
import android.widget.TextView import android.widget.TextView
import android.widget.Toast import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
class MainActivity : AppCompatActivity(), BleCallbacks { class MainActivity : AppCompatActivity(), BleCallbacks {
companion object { companion object {
private const val REQUEST_SETTINGS = 1
private const val POST_SETTINGS_RESCAN_MS = 500L private const val POST_SETTINGS_RESCAN_MS = 500L
private const val ON_RESUME_SCAN_DELAY_MS = 300L private const val ON_RESUME_SCAN_DELAY_MS = 300L
} }
@ -34,6 +32,25 @@ class MainActivity : AppCompatActivity(), BleCallbacks {
private var lastTheme: String? = null private var lastTheme: String? = null
private var triedPermissions = false 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) { override fun onStatusChanged(status: BleStatus) {
when (status) { when (status) {
BleStatus.Connected -> { BleStatus.Connected -> {
@ -99,10 +116,10 @@ class MainActivity : AppCompatActivity(), BleCallbacks {
val settingsContainer = findViewById<android.view.View>(R.id.settingsContainer) val settingsContainer = findViewById<android.view.View>(R.id.settingsContainer)
settingsContainer.setOnClickListener { settingsContainer.setOnClickListener {
startActivityForResult(Intent(this, SettingsActivity::class.java), REQUEST_SETTINGS) settingsLauncher.launch(Intent(this, SettingsActivity::class.java))
} }
findViewById<ImageButton>(R.id.settingsButton).setOnClickListener { findViewById<ImageButton>(R.id.settingsButton).setOnClickListener {
startActivityForResult(Intent(this, SettingsActivity::class.java), REQUEST_SETTINGS) settingsLauncher.launch(Intent(this, SettingsActivity::class.java))
} }
setupRelayButton() setupRelayButton()
setupRelay2Button() setupRelay2Button()
@ -110,18 +127,6 @@ class MainActivity : AppCompatActivity(), BleCallbacks {
relay2Button.isEnabled = true 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() { override fun onResume() {
super.onResume() super.onResume()
val current = PrefsHelper.getPrefs(this).getString(PrefsHelper.PREF_THEME, "system") ?: "system" val current = PrefsHelper.getPrefs(this).getString(PrefsHelper.PREF_THEME, "system") ?: "system"
@ -135,7 +140,7 @@ class MainActivity : AppCompatActivity(), BleCallbacks {
if (!manager.hasPermissions()) { if (!manager.hasPermissions()) {
if (!triedPermissions) { if (!triedPermissions) {
triedPermissions = true triedPermissions = true
ActivityCompat.requestPermissions(this, manager.getRequiredPermissions(), 1) permissionLauncher.launch(manager.getRequiredPermissions())
} }
return return
} }
@ -150,19 +155,6 @@ class MainActivity : AppCompatActivity(), BleCallbacks {
manager.stopScan() manager.stopScan()
} }
@Deprecated("Deprecated in Java")
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, 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() { private fun setupRelayButton() {
relay1Button.setOnClickListener(null) relay1Button.setOnClickListener(null)
loadButtonLabel(relay1Button, PrefsHelper.PREF_LABEL1, R.string.button_hold) loadButtonLabel(relay1Button, PrefsHelper.PREF_LABEL1, R.string.button_hold)
@ -230,7 +222,7 @@ class MainActivity : AppCompatActivity(), BleCallbacks {
if (isFinishing || isDestroyed || !lifecycle.currentState.isAtLeast(androidx.lifecycle.Lifecycle.State.RESUMED)) return@runOnUiThread if (isFinishing || isDestroyed || !lifecycle.currentState.isAtLeast(androidx.lifecycle.Lifecycle.State.RESUMED)) return@runOnUiThread
if (espVersion.isNotEmpty() && espVersion != appVersion) { if (espVersion.isNotEmpty() && espVersion != appVersion) {
Toast.makeText(this, getString(R.string.ota_update_available), Toast.LENGTH_SHORT).show() Toast.makeText(this, getString(R.string.ota_update_available), Toast.LENGTH_SHORT).show()
startActivityForResult(Intent(this, SettingsActivity::class.java), REQUEST_SETTINGS) settingsLauncher.launch(Intent(this, SettingsActivity::class.java))
} }
} }
} }