Fixed back press action for API < 33 compatibility

This commit is contained in:
Juha Heinanen
2025-04-19 09:50:32 +03:00
parent 1ffd69c9d4
commit 68d3ef3699
14 changed files with 310 additions and 215 deletions
@@ -22,6 +22,7 @@ import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.RequiresApi
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.Image
@@ -108,14 +109,16 @@ class BaresipContactActivity : ComponentActivity() {
private val textAvatarColor = mutableIntStateOf(0)
private val imageAvatarUri = mutableStateOf("")
private val backInvokedCallback = OnBackInvokedCallback {
goBack()
}
private var backInvokedCallback: OnBackInvokedCallback? = null
private lateinit var onBackPressedCallback: OnBackPressedCallback
private val onBackPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
goBack()
}
@RequiresApi(33)
private fun registerBackInvokedCallback() {
backInvokedCallback = OnBackInvokedCallback { goBack() }
onBackInvokedDispatcher.registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_DEFAULT,
backInvokedCallback!!
)
}
public override fun onCreate(savedInstanceState: Bundle?) {
@@ -125,12 +128,15 @@ class BaresipContactActivity : ComponentActivity() {
enableEdgeToEdge()
if (Build.VERSION.SDK_INT >= 33)
onBackInvokedDispatcher.registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_DEFAULT,
backInvokedCallback
)
else
registerBackInvokedCallback()
else {
onBackPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
goBack()
}
}
onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
val title: String
@@ -702,10 +708,11 @@ class BaresipContactActivity : ComponentActivity() {
override fun onDestroy() {
if (Build.VERSION.SDK_INT >= 33) {
onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback)
} else {
onBackPressedCallback.remove()
if (backInvokedCallback != null)
onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback!!)
}
else
onBackPressedCallback.remove()
super.onDestroy()
}