Use natigateup() instead of popBackStack() on contact screens

This commit is contained in:
Juha Heinanen
2025-12-29 09:14:27 +02:00
parent 412a67a44f
commit 026ac1d9ba
3 changed files with 17 additions and 40 deletions
@@ -74,7 +74,7 @@ private fun ContactScreen(ctx: Context, viewModel: ViewModel, navController: Nav
val contact = Contact.androidContact(name) val contact = Contact.androidContact(name)
if (contact == null) { if (contact == null) {
Log.e(TAG, "No Android contact found with name $name") Log.e(TAG, "No Android contact found with name $name")
navController.popBackStack() navController.navigateUp()
} }
Scaffold( Scaffold(
modifier = Modifier.fillMaxSize().imePadding(), modifier = Modifier.fillMaxSize().imePadding(),
@@ -99,12 +99,7 @@ private fun ContactScreen(ctx: Context, viewModel: ViewModel, navController: Nav
@Composable @Composable
private fun TopAppBar(title: String, navController: NavController) { private fun TopAppBar(title: String, navController: NavController) {
TopAppBar( TopAppBar(
title = { title = { Text(text = title, fontWeight = FontWeight.Bold) },
Text(
text = title,
fontWeight = FontWeight.Bold
)
},
colors = TopAppBarDefaults.topAppBarColors( colors = TopAppBarDefaults.topAppBarColors(
containerColor = MaterialTheme.colorScheme.primary, containerColor = MaterialTheme.colorScheme.primary,
navigationIconContentColor = MaterialTheme.colorScheme.onPrimary, navigationIconContentColor = MaterialTheme.colorScheme.onPrimary,
@@ -112,7 +107,7 @@ private fun TopAppBar(title: String, navController: NavController) {
), ),
windowInsets = WindowInsets(0, 0, 0, 0), windowInsets = WindowInsets(0, 0, 0, 0),
navigationIcon = { navigationIcon = {
IconButton(onClick = { navController.popBackStack() }) { IconButton(onClick = { navController.navigateUp() }) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack, imageVector = Icons.AutoMirrored.Filled.ArrowBack,
contentDescription = "Back", contentDescription = "Back",
@@ -52,7 +52,6 @@ import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
@@ -125,7 +124,6 @@ private fun ContactScreen(
) { ) {
val ctx = LocalContext.current val ctx = LocalContext.current
var clicks by remember { mutableIntStateOf(0) }
var screenState by remember { mutableStateOf(ScreenState()) } var screenState by remember { mutableStateOf(ScreenState()) }
val title = if (screenState.new) val title = if (screenState.new)
@@ -171,31 +169,23 @@ private fun ContactScreen(
} }
val onBack: () -> Unit = { val onBack: () -> Unit = {
clicks++
if (clicks == 1) {
screenState.tmpAvatarFile?.let { tempFile -> screenState.tmpAvatarFile?.let { tempFile ->
if (tempFile.exists()) { if (tempFile.exists()) {
Log.d(TAG, "Back pressed, deleting temp avatar: ${tempFile.name}") Log.d(TAG, "Back pressed, deleting temp avatar: ${tempFile.name}")
Utils.deleteFile(tempFile) Utils.deleteFile(tempFile)
} }
} }
navController.popBackStack() navController.navigateUp()
}
} }
val onCheck: () -> Unit = { val onCheck: () -> Unit = {
clicks++
if (clicks == 1) {
val result = checkOnClick( val result = checkOnClick(
ctx = ctx, ctx = ctx,
currentState = screenState, currentState = screenState,
uriOrNameArg = uriOrNameArg, uriOrNameArg = uriOrNameArg,
) )
if (result) if (result)
navController.popBackStack() navController.navigateUp()
else
clicks = 0
}
} }
BackHandler(enabled = true) { BackHandler(enabled = true) {
@@ -9,7 +9,6 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsets
@@ -17,6 +16,7 @@ import androidx.compose.foundation.layout.asPaddingValues
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.layout.statusBars
@@ -38,11 +38,8 @@ import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
@@ -80,7 +77,6 @@ fun NavGraphBuilder.contactsScreenRoute(
private fun ContactsScreen(navController: NavController, viewModel: ViewModel) { private fun ContactsScreen(navController: NavController, viewModel: ViewModel) {
val ctx = LocalContext.current val ctx = LocalContext.current
var navigationClicks by remember { mutableIntStateOf(0) }
Scaffold( Scaffold(
modifier = Modifier.fillMaxSize().imePadding(), modifier = Modifier.fillMaxSize().imePadding(),
@@ -108,11 +104,7 @@ private fun ContactsScreen(navController: NavController, viewModel: ViewModel) {
), ),
navigationIcon = { navigationIcon = {
IconButton( IconButton(
onClick = { onClick = { navController.navigateUp() }
navigationClicks++
if (navigationClicks == 1)
navController.popBackStack()
}
) { ) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack, imageVector = Icons.AutoMirrored.Filled.ArrowBack,