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

View File

@ -9,6 +9,7 @@ import androidx.activity.ComponentActivity
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.annotation.RequiresApi
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
@ -37,14 +38,16 @@ import androidx.compose.ui.unit.dp
class AboutActivity : ComponentActivity() { class AboutActivity : ComponentActivity() {
private val backInvokedCallback = OnBackInvokedCallback { private var backInvokedCallback: OnBackInvokedCallback? = null
goBack() private lateinit var onBackPressedCallback: OnBackPressedCallback
}
private val onBackPressedCallback = object : OnBackPressedCallback(true) { @RequiresApi(33)
override fun handleOnBackPressed() { private fun registerBackInvokedCallback() {
goBack() backInvokedCallback = OnBackInvokedCallback { goBack() }
} onBackInvokedDispatcher.registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_DEFAULT,
backInvokedCallback!!
)
} }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -54,12 +57,15 @@ class AboutActivity : ComponentActivity() {
enableEdgeToEdge() enableEdgeToEdge()
if (Build.VERSION.SDK_INT >= 33) if (Build.VERSION.SDK_INT >= 33)
onBackInvokedDispatcher.registerOnBackInvokedCallback( registerBackInvokedCallback()
OnBackInvokedDispatcher.PRIORITY_DEFAULT, else {
backInvokedCallback onBackPressedCallback = object : OnBackPressedCallback(true) {
) override fun handleOnBackPressed() {
else goBack()
}
}
onBackPressedDispatcher.addCallback(this, onBackPressedCallback) onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
Utils.addActivity("about") Utils.addActivity("about")
@ -128,10 +134,11 @@ class AboutActivity : ComponentActivity() {
override fun onDestroy() { override fun onDestroy() {
if (Build.VERSION.SDK_INT >= 33) { if (Build.VERSION.SDK_INT >= 33) {
onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback) if (backInvokedCallback != null)
} else { onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback!!)
onBackPressedCallback.remove()
} }
else
onBackPressedCallback.remove()
super.onDestroy() super.onDestroy()
} }

View File

@ -10,6 +10,7 @@ import androidx.activity.ComponentActivity
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.annotation.RequiresApi
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
@ -136,14 +137,16 @@ class AccountActivity : ComponentActivity() {
private val showAlert = mutableStateOf(false) private val showAlert = mutableStateOf(false)
private val showStun = mutableStateOf(false) private val showStun = mutableStateOf(false)
private val backInvokedCallback = OnBackInvokedCallback { private var backInvokedCallback: OnBackInvokedCallback? = null
goBack() private lateinit var onBackPressedCallback: OnBackPressedCallback
}
private val onBackPressedCallback = object : OnBackPressedCallback(true) { @RequiresApi(33)
override fun handleOnBackPressed() { private fun registerBackInvokedCallback() {
goBack() backInvokedCallback = OnBackInvokedCallback { goBack() }
} onBackInvokedDispatcher.registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_DEFAULT,
backInvokedCallback!!
)
} }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -153,12 +156,15 @@ class AccountActivity : ComponentActivity() {
enableEdgeToEdge() enableEdgeToEdge()
if (Build.VERSION.SDK_INT >= 33) if (Build.VERSION.SDK_INT >= 33)
onBackInvokedDispatcher.registerOnBackInvokedCallback( registerBackInvokedCallback()
OnBackInvokedDispatcher.PRIORITY_DEFAULT, else {
backInvokedCallback onBackPressedCallback = object : OnBackPressedCallback(true) {
) override fun handleOnBackPressed() {
else goBack()
}
}
onBackPressedDispatcher.addCallback(this, onBackPressedCallback) onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
aor = intent.getStringExtra("aor")!! aor = intent.getStringExtra("aor")!!
@ -1234,7 +1240,6 @@ class AccountActivity : ComponentActivity() {
} }
} }
@OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun AskPassword(ctx: Context) { fun AskPassword(ctx: Context) {
if (showPasswordDialog.value) if (showPasswordDialog.value)
@ -1632,10 +1637,11 @@ class AccountActivity : ComponentActivity() {
override fun onDestroy() { override fun onDestroy() {
if (Build.VERSION.SDK_INT >= 33) { if (Build.VERSION.SDK_INT >= 33) {
onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback) if (backInvokedCallback != null)
} else { onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback!!)
onBackPressedCallback.remove()
} }
else
onBackPressedCallback.remove()
super.onDestroy() super.onDestroy()
} }

View File

@ -11,6 +11,7 @@ import androidx.activity.ComponentActivity
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.annotation.RequiresApi
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
@ -85,14 +86,16 @@ class AccountsActivity : ComponentActivity() {
private val alertMessage = mutableStateOf("") private val alertMessage = mutableStateOf("")
private val showAlert = mutableStateOf(false) private val showAlert = mutableStateOf(false)
private val backInvokedCallback = OnBackInvokedCallback { private var backInvokedCallback: OnBackInvokedCallback? = null
goBack() private lateinit var onBackPressedCallback: OnBackPressedCallback
}
private val onBackPressedCallback = object : OnBackPressedCallback(true) { @RequiresApi(33)
override fun handleOnBackPressed() { private fun registerBackInvokedCallback() {
goBack() backInvokedCallback = OnBackInvokedCallback { goBack() }
} onBackInvokedDispatcher.registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_DEFAULT,
backInvokedCallback!!
)
} }
public override fun onCreate(savedInstanceState: Bundle?) { public override fun onCreate(savedInstanceState: Bundle?) {
@ -102,12 +105,15 @@ class AccountsActivity : ComponentActivity() {
enableEdgeToEdge() enableEdgeToEdge()
if (Build.VERSION.SDK_INT >= 33) if (Build.VERSION.SDK_INT >= 33)
onBackInvokedDispatcher.registerOnBackInvokedCallback( registerBackInvokedCallback()
OnBackInvokedDispatcher.PRIORITY_DEFAULT, else {
backInvokedCallback onBackPressedCallback = object : OnBackPressedCallback(true) {
) override fun handleOnBackPressed() {
else goBack()
}
}
onBackPressedDispatcher.addCallback(this, onBackPressedCallback) onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
val title = String.format(getString(R.string.accounts)) val title = String.format(getString(R.string.accounts))
@ -482,10 +488,11 @@ class AccountsActivity : ComponentActivity() {
override fun onDestroy() { override fun onDestroy() {
if (Build.VERSION.SDK_INT >= 33) { if (Build.VERSION.SDK_INT >= 33) {
onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback) if (backInvokedCallback != null)
} else { onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback!!)
onBackPressedCallback.remove()
} }
else
onBackPressedCallback.remove()
super.onDestroy() super.onDestroy()
} }

View File

@ -12,6 +12,7 @@ import androidx.activity.ComponentActivity
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.annotation.RequiresApi
import androidx.compose.foundation.Canvas import androidx.compose.foundation.Canvas
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.foundation.background import androidx.compose.foundation.background
@ -64,14 +65,16 @@ class AndroidContactActivity : ComponentActivity() {
private var color = 0 private var color = 0
private val backInvokedCallback = OnBackInvokedCallback { private var backInvokedCallback: OnBackInvokedCallback? = null
goBack() private lateinit var onBackPressedCallback: OnBackPressedCallback
}
private val onBackPressedCallback = object : OnBackPressedCallback(true) { @RequiresApi(33)
override fun handleOnBackPressed() { private fun registerBackInvokedCallback() {
goBack() backInvokedCallback = OnBackInvokedCallback { goBack() }
} onBackInvokedDispatcher.registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_DEFAULT,
backInvokedCallback!!
)
} }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -81,12 +84,15 @@ class AndroidContactActivity : ComponentActivity() {
enableEdgeToEdge() enableEdgeToEdge()
if (Build.VERSION.SDK_INT >= 33) if (Build.VERSION.SDK_INT >= 33)
onBackInvokedDispatcher.registerOnBackInvokedCallback( registerBackInvokedCallback()
OnBackInvokedDispatcher.PRIORITY_DEFAULT, else {
backInvokedCallback onBackPressedCallback = object : OnBackPressedCallback(true) {
) override fun handleOnBackPressed() {
else goBack()
}
}
onBackPressedDispatcher.addCallback(this, onBackPressedCallback) onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
aor = intent.getStringExtra("aor")!! aor = intent.getStringExtra("aor")!!
name = intent.getStringExtra("name")!! name = intent.getStringExtra("name")!!
@ -283,10 +289,11 @@ class AndroidContactActivity : ComponentActivity() {
override fun onDestroy() { override fun onDestroy() {
if (Build.VERSION.SDK_INT >= 33) { if (Build.VERSION.SDK_INT >= 33) {
onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback) if (backInvokedCallback != null)
} else { onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback!!)
onBackPressedCallback.remove()
} }
else
onBackPressedCallback.remove()
super.onDestroy() super.onDestroy()
} }

View File

@ -8,6 +8,7 @@ import androidx.activity.ComponentActivity
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.annotation.RequiresApi
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
@ -80,14 +81,16 @@ class AudioActivity : ComponentActivity() {
private val alertMessage = mutableStateOf("") private val alertMessage = mutableStateOf("")
private val showAlert = mutableStateOf(false) private val showAlert = mutableStateOf(false)
private val backInvokedCallback = OnBackInvokedCallback { private var backInvokedCallback: OnBackInvokedCallback? = null
goBack() private lateinit var onBackPressedCallback: OnBackPressedCallback
}
private val onBackPressedCallback = object : OnBackPressedCallback(true) { @RequiresApi(33)
override fun handleOnBackPressed() { private fun registerBackInvokedCallback() {
goBack() backInvokedCallback = OnBackInvokedCallback { goBack() }
} onBackInvokedDispatcher.registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_DEFAULT,
backInvokedCallback!!
)
} }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -97,12 +100,15 @@ class AudioActivity : ComponentActivity() {
enableEdgeToEdge() enableEdgeToEdge()
if (Build.VERSION.SDK_INT >= 33) if (Build.VERSION.SDK_INT >= 33)
onBackInvokedDispatcher.registerOnBackInvokedCallback( registerBackInvokedCallback()
OnBackInvokedDispatcher.PRIORITY_DEFAULT, else {
backInvokedCallback onBackPressedCallback = object : OnBackPressedCallback(true) {
) override fun handleOnBackPressed() {
else goBack()
}
}
onBackPressedDispatcher.addCallback(this, onBackPressedCallback) onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
val title = String.format(getString(R.string.configuration)) val title = String.format(getString(R.string.configuration))
@ -657,10 +663,11 @@ class AudioActivity : ComponentActivity() {
override fun onDestroy() { override fun onDestroy() {
if (Build.VERSION.SDK_INT >= 33) { if (Build.VERSION.SDK_INT >= 33) {
onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback) if (backInvokedCallback != null)
} else { onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback!!)
onBackPressedCallback.remove()
} }
else
onBackPressedCallback.remove()
super.onDestroy() super.onDestroy()
} }

View File

@ -22,6 +22,7 @@ import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.RequiresApi
import androidx.compose.foundation.Canvas import androidx.compose.foundation.Canvas
import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
@ -108,14 +109,16 @@ class BaresipContactActivity : ComponentActivity() {
private val textAvatarColor = mutableIntStateOf(0) private val textAvatarColor = mutableIntStateOf(0)
private val imageAvatarUri = mutableStateOf("") private val imageAvatarUri = mutableStateOf("")
private val backInvokedCallback = OnBackInvokedCallback { private var backInvokedCallback: OnBackInvokedCallback? = null
goBack() private lateinit var onBackPressedCallback: OnBackPressedCallback
}
private val onBackPressedCallback = object : OnBackPressedCallback(true) { @RequiresApi(33)
override fun handleOnBackPressed() { private fun registerBackInvokedCallback() {
goBack() backInvokedCallback = OnBackInvokedCallback { goBack() }
} onBackInvokedDispatcher.registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_DEFAULT,
backInvokedCallback!!
)
} }
public override fun onCreate(savedInstanceState: Bundle?) { public override fun onCreate(savedInstanceState: Bundle?) {
@ -125,12 +128,15 @@ class BaresipContactActivity : ComponentActivity() {
enableEdgeToEdge() enableEdgeToEdge()
if (Build.VERSION.SDK_INT >= 33) if (Build.VERSION.SDK_INT >= 33)
onBackInvokedDispatcher.registerOnBackInvokedCallback( registerBackInvokedCallback()
OnBackInvokedDispatcher.PRIORITY_DEFAULT, else {
backInvokedCallback onBackPressedCallback = object : OnBackPressedCallback(true) {
) override fun handleOnBackPressed() {
else goBack()
}
}
onBackPressedDispatcher.addCallback(this, onBackPressedCallback) onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
val title: String val title: String
@ -702,10 +708,11 @@ class BaresipContactActivity : ComponentActivity() {
override fun onDestroy() { override fun onDestroy() {
if (Build.VERSION.SDK_INT >= 33) { if (Build.VERSION.SDK_INT >= 33) {
onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback) if (backInvokedCallback != null)
} else { onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback!!)
onBackPressedCallback.remove()
} }
else
onBackPressedCallback.remove()
super.onDestroy() super.onDestroy()
} }

View File

@ -12,6 +12,7 @@ import androidx.activity.ComponentActivity
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.annotation.RequiresApi
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
@ -70,14 +71,16 @@ class CallDetailsActivity : ComponentActivity() {
private val encPlayer = MediaPlayer() private val encPlayer = MediaPlayer()
private var position = 0 private var position = 0
private val backInvokedCallback = OnBackInvokedCallback { private var backInvokedCallback: OnBackInvokedCallback? = null
goBack() private lateinit var onBackPressedCallback: OnBackPressedCallback
}
private val onBackPressedCallback = object : OnBackPressedCallback(true) { @RequiresApi(33)
override fun handleOnBackPressed() { private fun registerBackInvokedCallback() {
goBack() backInvokedCallback = OnBackInvokedCallback { goBack() }
} onBackInvokedDispatcher.registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_DEFAULT,
backInvokedCallback!!
)
} }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -87,12 +90,15 @@ class CallDetailsActivity : ComponentActivity() {
enableEdgeToEdge() enableEdgeToEdge()
if (Build.VERSION.SDK_INT >= 33) if (Build.VERSION.SDK_INT >= 33)
onBackInvokedDispatcher.registerOnBackInvokedCallback( registerBackInvokedCallback()
OnBackInvokedDispatcher.PRIORITY_DEFAULT, else {
backInvokedCallback onBackPressedCallback = object : OnBackPressedCallback(true) {
) override fun handleOnBackPressed() {
else goBack()
}
}
onBackPressedDispatcher.addCallback(this, onBackPressedCallback) onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
aor = intent.getStringExtra("aor")!! aor = intent.getStringExtra("aor")!!
account = Account.ofAor(aor)!! account = Account.ofAor(aor)!!
@ -377,10 +383,11 @@ class CallDetailsActivity : ComponentActivity() {
override fun onDestroy() { override fun onDestroy() {
if (Build.VERSION.SDK_INT >= 33) { if (Build.VERSION.SDK_INT >= 33) {
onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback) if (backInvokedCallback != null)
} else { onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback!!)
onBackPressedCallback.remove()
} }
else
onBackPressedCallback.remove()
super.onDestroy() super.onDestroy()
} }

View File

@ -12,6 +12,7 @@ import androidx.activity.ComponentActivity
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.annotation.RequiresApi
import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.foundation.background import androidx.compose.foundation.background
@ -73,14 +74,16 @@ class CallsActivity : ComponentActivity() {
private var aor = "" private var aor = ""
private val backInvokedCallback = OnBackInvokedCallback { private var backInvokedCallback: OnBackInvokedCallback? = null
goBack() private lateinit var onBackPressedCallback: OnBackPressedCallback
}
private val onBackPressedCallback = object : OnBackPressedCallback(true) { @RequiresApi(33)
override fun handleOnBackPressed() { private fun registerBackInvokedCallback() {
goBack() backInvokedCallback = OnBackInvokedCallback { goBack() }
} onBackInvokedDispatcher.registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_DEFAULT,
backInvokedCallback!!
)
} }
public override fun onCreate(savedInstanceState: Bundle?) { public override fun onCreate(savedInstanceState: Bundle?) {
@ -90,12 +93,15 @@ class CallsActivity : ComponentActivity() {
enableEdgeToEdge() enableEdgeToEdge()
if (Build.VERSION.SDK_INT >= 33) if (Build.VERSION.SDK_INT >= 33)
onBackInvokedDispatcher.registerOnBackInvokedCallback( registerBackInvokedCallback()
OnBackInvokedDispatcher.PRIORITY_DEFAULT, else {
backInvokedCallback onBackPressedCallback = object : OnBackPressedCallback(true) {
) override fun handleOnBackPressed() {
else goBack()
}
}
onBackPressedDispatcher.addCallback(this, onBackPressedCallback) onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
val title = String.format(getString(R.string.call_history)) val title = String.format(getString(R.string.call_history))
@ -463,10 +469,11 @@ class CallsActivity : ComponentActivity() {
override fun onDestroy() { override fun onDestroy() {
if (Build.VERSION.SDK_INT >= 33) { if (Build.VERSION.SDK_INT >= 33) {
onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback) if (backInvokedCallback != null)
} else { onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback!!)
onBackPressedCallback.remove()
} }
else
onBackPressedCallback.remove()
super.onDestroy() super.onDestroy()
} }

View File

@ -14,6 +14,7 @@ import androidx.activity.ComponentActivity
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.annotation.RequiresApi
import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
@ -101,14 +102,16 @@ class ChatActivity : ComponentActivity() {
private var unsentMessage = "" private var unsentMessage = ""
private var keyboardController: SoftwareKeyboardController? = null private var keyboardController: SoftwareKeyboardController? = null
private val backInvokedCallback = OnBackInvokedCallback { private var backInvokedCallback: OnBackInvokedCallback? = null
goBack() private lateinit var onBackPressedCallback: OnBackPressedCallback
}
private val onBackPressedCallback = object : OnBackPressedCallback(true) { @RequiresApi(33)
override fun handleOnBackPressed() { private fun registerBackInvokedCallback() {
goBack() backInvokedCallback = OnBackInvokedCallback { goBack() }
} onBackInvokedDispatcher.registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_DEFAULT,
backInvokedCallback!!
)
} }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -118,12 +121,15 @@ class ChatActivity : ComponentActivity() {
enableEdgeToEdge() enableEdgeToEdge()
if (Build.VERSION.SDK_INT >= 33) if (Build.VERSION.SDK_INT >= 33)
onBackInvokedDispatcher.registerOnBackInvokedCallback( registerBackInvokedCallback()
OnBackInvokedDispatcher.PRIORITY_DEFAULT, else {
backInvokedCallback onBackPressedCallback = object : OnBackPressedCallback(true) {
) override fun handleOnBackPressed() {
else goBack()
}
}
onBackPressedDispatcher.addCallback(this, onBackPressedCallback) onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
aor = intent.getStringExtra("aor")!! aor = intent.getStringExtra("aor")!!
peerUri = intent.getStringExtra("peer")!! peerUri = intent.getStringExtra("peer")!!
@ -637,10 +643,11 @@ class ChatActivity : ComponentActivity() {
override fun onDestroy() { override fun onDestroy() {
if (Build.VERSION.SDK_INT >= 33) { if (Build.VERSION.SDK_INT >= 33) {
onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback) if (backInvokedCallback != null)
} else { onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback!!)
onBackPressedCallback.remove()
} }
else
onBackPressedCallback.remove()
super.onDestroy() super.onDestroy()
} }

View File

@ -14,8 +14,8 @@ import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.RequiresApi
import androidx.compose.animation.animateContentSize import androidx.compose.animation.animateContentSize
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
@ -102,14 +102,16 @@ class ChatsActivity: ComponentActivity() {
private val alertMessage = mutableStateOf("") private val alertMessage = mutableStateOf("")
private val showAlert = mutableStateOf(false) private val showAlert = mutableStateOf(false)
private val backInvokedCallback = OnBackInvokedCallback { private var backInvokedCallback: OnBackInvokedCallback? = null
goBack() private lateinit var onBackPressedCallback: OnBackPressedCallback
}
private val onBackPressedCallback = object : OnBackPressedCallback(true) { @RequiresApi(33)
override fun handleOnBackPressed() { private fun registerBackInvokedCallback() {
goBack() backInvokedCallback = OnBackInvokedCallback { goBack() }
} onBackInvokedDispatcher.registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_DEFAULT,
backInvokedCallback!!
)
} }
public override fun onCreate(savedInstanceState: Bundle?) { public override fun onCreate(savedInstanceState: Bundle?) {
@ -119,12 +121,15 @@ class ChatsActivity: ComponentActivity() {
enableEdgeToEdge() enableEdgeToEdge()
if (Build.VERSION.SDK_INT >= 33) if (Build.VERSION.SDK_INT >= 33)
onBackInvokedDispatcher.registerOnBackInvokedCallback( registerBackInvokedCallback()
OnBackInvokedDispatcher.PRIORITY_DEFAULT, else {
backInvokedCallback onBackPressedCallback = object : OnBackPressedCallback(true) {
) override fun handleOnBackPressed() {
else goBack()
}
}
onBackPressedDispatcher.addCallback(this, onBackPressedCallback) onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
aor = intent.extras!!.getString("aor")!! aor = intent.extras!!.getString("aor")!!
Utils.addActivity("chats,$aor") Utils.addActivity("chats,$aor")
@ -285,7 +290,6 @@ class ChatsActivity: ComponentActivity() {
) )
} }
@OptIn(ExperimentalFoundationApi::class)
@Composable @Composable
fun Chats(ctx: Context, account: Account) { fun Chats(ctx: Context, account: Account) {
@ -475,7 +479,7 @@ class ChatsActivity: ComponentActivity() {
val showDialog = remember { mutableStateOf(false) } val showDialog = remember { mutableStateOf(false) }
val items = remember { mutableStateOf(listOf<String>()) } val items = remember { mutableStateOf(listOf<String>()) }
val itemAction = remember { mutableStateOf<(Int) -> Unit>({ index -> {} }) } val itemAction = remember { mutableStateOf<(Int) -> Unit>({ _ -> run {} }) }
SelectableAlertDialog( SelectableAlertDialog(
openDialog = showDialog, openDialog = showDialog,
@ -609,7 +613,7 @@ class ChatsActivity: ComponentActivity() {
modifier = Modifier.padding(end = 4.dp), modifier = Modifier.padding(end = 4.dp),
onClick = { onClick = {
showSuggestions = false showSuggestions = false
var peerText = newPeer.trim() val peerText = newPeer.trim()
if (peerText.isNotEmpty()) { if (peerText.isNotEmpty()) {
val uris = Contact.contactUris(peerText) val uris = Contact.contactUris(peerText)
if (uris.isEmpty()) if (uris.isEmpty())
@ -684,10 +688,11 @@ class ChatsActivity: ComponentActivity() {
override fun onDestroy() { override fun onDestroy() {
if (Build.VERSION.SDK_INT >= 33) { if (Build.VERSION.SDK_INT >= 33) {
onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback) if (backInvokedCallback != null)
} else { onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback!!)
onBackPressedCallback.remove()
} }
else
onBackPressedCallback.remove()
super.onDestroy() super.onDestroy()
} }

View File

@ -8,6 +8,7 @@ import androidx.activity.ComponentActivity
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.annotation.RequiresApi
import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
@ -68,14 +69,16 @@ class CodecsActivity : ComponentActivity() {
private val alertMessage = mutableStateOf("") private val alertMessage = mutableStateOf("")
private val showAlert = mutableStateOf(false) private val showAlert = mutableStateOf(false)
private val backInvokedCallback = OnBackInvokedCallback { private var backInvokedCallback: OnBackInvokedCallback? = null
goBack() private lateinit var onBackPressedCallback: OnBackPressedCallback
}
private val onBackPressedCallback = object : OnBackPressedCallback(true) { @RequiresApi(33)
override fun handleOnBackPressed() { private fun registerBackInvokedCallback() {
goBack() backInvokedCallback = OnBackInvokedCallback { goBack() }
} onBackInvokedDispatcher.registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_DEFAULT,
backInvokedCallback!!
)
} }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -85,12 +88,15 @@ class CodecsActivity : ComponentActivity() {
enableEdgeToEdge() enableEdgeToEdge()
if (Build.VERSION.SDK_INT >= 33) if (Build.VERSION.SDK_INT >= 33)
onBackInvokedDispatcher.registerOnBackInvokedCallback( registerBackInvokedCallback()
OnBackInvokedDispatcher.PRIORITY_DEFAULT, else {
backInvokedCallback onBackPressedCallback = object : OnBackPressedCallback(true) {
) override fun handleOnBackPressed() {
else goBack()
}
}
onBackPressedDispatcher.addCallback(this, onBackPressedCallback) onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
aor = intent.getStringExtra("aor")!! aor = intent.getStringExtra("aor")!!
media = intent.getStringExtra("media")!! media = intent.getStringExtra("media")!!
@ -368,10 +374,11 @@ class CodecsActivity : ComponentActivity() {
override fun onDestroy() { override fun onDestroy() {
if (Build.VERSION.SDK_INT >= 33) { if (Build.VERSION.SDK_INT >= 33) {
onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback) if (backInvokedCallback != null)
} else { onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback!!)
onBackPressedCallback.remove()
} }
else
onBackPressedCallback.remove()
super.onDestroy() super.onDestroy()
} }
} }

View File

@ -130,14 +130,16 @@ class ConfigActivity : ComponentActivity() {
private val onNegativeClicked = mutableStateOf({}) private val onNegativeClicked = mutableStateOf({})
private val showDialog = mutableStateOf(false) private val showDialog = mutableStateOf(false)
private val backInvokedCallback = OnBackInvokedCallback { private var backInvokedCallback: OnBackInvokedCallback? = null
goBack() private lateinit var onBackPressedCallback: OnBackPressedCallback
}
private val onBackPressedCallback = object : OnBackPressedCallback(true) { @RequiresApi(33)
override fun handleOnBackPressed() { private fun registerBackInvokedCallback() {
goBack() backInvokedCallback = OnBackInvokedCallback { goBack() }
} onBackInvokedDispatcher.registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_DEFAULT,
backInvokedCallback!!
)
} }
private val certificateRequest = private val certificateRequest =
@ -207,12 +209,15 @@ class ConfigActivity : ComponentActivity() {
enableEdgeToEdge() enableEdgeToEdge()
if (Build.VERSION.SDK_INT >= 33) if (Build.VERSION.SDK_INT >= 33)
onBackInvokedDispatcher.registerOnBackInvokedCallback( registerBackInvokedCallback()
OnBackInvokedDispatcher.PRIORITY_DEFAULT, else {
backInvokedCallback onBackPressedCallback = object : OnBackPressedCallback(true) {
) override fun handleOnBackPressed() {
else goBack()
}
}
onBackPressedDispatcher.addCallback(this, onBackPressedCallback) onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
val title = String.format(getString(R.string.configuration)) val title = String.format(getString(R.string.configuration))
@ -1245,7 +1250,7 @@ class ConfigActivity : ComponentActivity() {
baresipService.action = "Stop Content Observer" baresipService.action = "Stop Content Observer"
} }
"android" -> { "android" -> {
BaresipService.baresipContacts.value = mutableListOf<Contact.BaresipContact>() BaresipService.baresipContacts.value = mutableListOf()
Contact.loadAndroidContacts(this) Contact.loadAndroidContacts(this)
baresipService.action = "Start Content Observer" baresipService.action = "Start Content Observer"
} }
@ -1297,10 +1302,11 @@ class ConfigActivity : ComponentActivity() {
override fun onDestroy() { override fun onDestroy() {
if (Build.VERSION.SDK_INT >= 33) { if (Build.VERSION.SDK_INT >= 33) {
onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback) if (backInvokedCallback != null)
} else { onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback!!)
onBackPressedCallback.remove()
} }
else
onBackPressedCallback.remove()
super.onDestroy() super.onDestroy()
} }

View File

@ -15,6 +15,7 @@ import androidx.activity.OnBackPressedCallback
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.RequiresApi
import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.foundation.background import androidx.compose.foundation.background
@ -74,14 +75,16 @@ class ContactsActivity : ComponentActivity() {
private var newAndroidName: String? = null private var newAndroidName: String? = null
private var lastClick: Long = 0 private var lastClick: Long = 0
private val backInvokedCallback = OnBackInvokedCallback { private var backInvokedCallback: OnBackInvokedCallback? = null
goBack() private lateinit var onBackPressedCallback: OnBackPressedCallback
}
private val onBackPressedCallback = object : OnBackPressedCallback(true) { @RequiresApi(33)
override fun handleOnBackPressed() { private fun registerBackInvokedCallback() {
goBack() backInvokedCallback = OnBackInvokedCallback { goBack() }
} onBackInvokedDispatcher.registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_DEFAULT,
backInvokedCallback!!
)
} }
private val contactRequest = private val contactRequest =
@ -99,12 +102,15 @@ class ContactsActivity : ComponentActivity() {
enableEdgeToEdge() enableEdgeToEdge()
if (Build.VERSION.SDK_INT >= 33) if (Build.VERSION.SDK_INT >= 33)
onBackInvokedDispatcher.registerOnBackInvokedCallback( registerBackInvokedCallback()
OnBackInvokedDispatcher.PRIORITY_DEFAULT, else {
backInvokedCallback onBackPressedCallback = object : OnBackPressedCallback(true) {
) override fun handleOnBackPressed() {
else goBack()
}
}
onBackPressedDispatcher.addCallback(this, onBackPressedCallback) onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
val title = String.format(getString(R.string.contacts)) val title = String.format(getString(R.string.contacts))
@ -434,10 +440,11 @@ class ContactsActivity : ComponentActivity() {
override fun onDestroy() { override fun onDestroy() {
if (Build.VERSION.SDK_INT >= 33) { if (Build.VERSION.SDK_INT >= 33) {
onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback) if (backInvokedCallback != null)
} else { onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback!!)
onBackPressedCallback.remove()
} }
else
onBackPressedCallback.remove()
super.onDestroy() super.onDestroy()
} }

View File

@ -243,14 +243,18 @@ class MainActivity : ComponentActivity() {
val items = mutableStateOf(listOf<String>()) val items = mutableStateOf(listOf<String>())
private val itemAction = mutableStateOf<(Int) -> Unit>({ _ -> run {} }) private val itemAction = mutableStateOf<(Int) -> Unit>({ _ -> run {} })
private val backInvokedCallback = OnBackInvokedCallback { private var backInvokedCallback: OnBackInvokedCallback? = null
moveTaskToBack(true) private lateinit var onBackPressedCallback: OnBackPressedCallback
}
private val onBackPressedCallback = object : OnBackPressedCallback(true) { @RequiresApi(33)
override fun handleOnBackPressed() { private fun registerBackInvokedCallback() {
backInvokedCallback = OnBackInvokedCallback {
moveTaskToBack(true) moveTaskToBack(true)
} }
onBackInvokedDispatcher.registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_DEFAULT,
backInvokedCallback!!
)
} }
@SuppressLint("ClickableViewAccessibility") @SuppressLint("ClickableViewAccessibility")
@ -260,13 +264,16 @@ class MainActivity : ComponentActivity() {
enableEdgeToEdge() enableEdgeToEdge()
if (Build.VERSION.SDK_INT >= 33) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU)
onBackInvokedDispatcher.registerOnBackInvokedCallback( registerBackInvokedCallback()
OnBackInvokedDispatcher.PRIORITY_DEFAULT, else {
backInvokedCallback onBackPressedCallback = object : OnBackPressedCallback(true) {
) override fun handleOnBackPressed() {
else moveTaskToBack(true)
}
}
onBackPressedDispatcher.addCallback(this, onBackPressedCallback) onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
val extraAction = intent.getStringExtra("action") val extraAction = intent.getStringExtra("action")
Log.d(TAG, "Main onCreate ${intent.action}/${intent.data}/$extraAction") Log.d(TAG, "Main onCreate ${intent.action}/${intent.data}/$extraAction")
@ -2079,10 +2086,11 @@ class MainActivity : ComponentActivity() {
Log.d(TAG, "Main onDestroy") Log.d(TAG, "Main onDestroy")
if (Build.VERSION.SDK_INT >= 33) { if (Build.VERSION.SDK_INT >= 33) {
onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback) if (backInvokedCallback != null)
} else { onBackInvokedDispatcher.unregisterOnBackInvokedCallback(backInvokedCallback!!)
onBackPressedCallback.remove()
} }
else
onBackPressedCallback.remove()
this.unregisterReceiver(screenEventReceiver) this.unregisterReceiver(screenEventReceiver)