Skip to content

Commit

Permalink
Handle the back navigation manually in the QuickEditor (#524)
Browse files Browse the repository at this point in the history
* Handle the back navigation manually in the QuickEditor

* Replace other navigation calls with navigateAndClean
  • Loading branch information
AdamGrzybkowski authored Jan 10, 2025
1 parent 43ea4e2 commit 9e2ea9c
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import androidx.navigation.compose.composable
import androidx.navigation.compose.navigation
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument
import androidx.navigation.navOptions
import com.gravatar.quickeditor.QuickEditorContainer
import com.gravatar.quickeditor.ui.alttext.AltTextPage
import com.gravatar.quickeditor.ui.avatarpicker.AvatarPicker
Expand Down Expand Up @@ -53,9 +52,9 @@ internal fun GravatarQuickEditorPage(
composable(route = QuickEditorPage.SPLASH.name) {
SplashPage(email = gravatarQuickEditorParams.email) { isAuthorized ->
if (isAuthorized) {
navController.navigate(QuickEditorPage.EDITOR.name)
navController.navigateAndClean(QuickEditorPage.EDITOR.name)
} else {
navController.navigate(QuickEditorPage.OAUTH.name)
navController.navigateAndClean(QuickEditorPage.OAUTH.name)
}
}
}
Expand All @@ -64,15 +63,19 @@ internal fun GravatarQuickEditorPage(
oAuthParams = oAuthParams,
email = gravatarQuickEditorParams.email,
onAuthError = { onDismiss(GravatarQuickEditorDismissReason.OauthFailed) },
onAuthSuccess = { navController.navigate(QuickEditorPage.EDITOR.name) },
onAuthSuccess = {
navController.navigateAndClean(QuickEditorPage.EDITOR.name)
},
)
}
addAvatarPickerGraph(
gravatarQuickEditorParams = gravatarQuickEditorParams,
handleExpiredSession = true,
navController = navController,
onAvatarSelected = onAvatarSelected,
onSessionExpired = { navController.navigate(QuickEditorPage.OAUTH.name) },
onSessionExpired = {
navController.navigateAndClean(QuickEditorPage.OAUTH.name)
},
)
}
}
Expand Down Expand Up @@ -116,7 +119,7 @@ internal fun GravatarQuickEditorPage(
email = gravatarQuickEditorParams.email,
token = authToken,
) {
navController.navigate(QuickEditorPage.EDITOR.name)
navController.navigateAndClean(QuickEditorPage.EDITOR.name)
}
}
addAvatarPickerGraph(
Expand Down Expand Up @@ -150,9 +153,6 @@ private fun NavGraphBuilder.addAvatarPickerGraph(
val encodedUrl = URLEncoder.encode(avatarUrl, StandardCharsets.UTF_8.toString())
navController.navigate(
route = "${EditorNavDestinations.ALT_TEXT.name}/$email/$avatarId/$altText/$encodedUrl",
navOptions = navOptions {
popUpTo(EditorNavDestinations.AVATAR_SELECTION.name) { saveState = true }
},
)
},
)
Expand Down Expand Up @@ -180,3 +180,10 @@ private fun NavGraphBuilder.addAvatarPickerGraph(
}
}
}

private fun NavHostController.navigateAndClean(route: String) {
navigate(route = route) {
popUpTo(graph.startDestinationId) { inclusive = true }
}
graph.setStartDestination(route)
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.gravatar.quickeditor.ui.editor.bottomsheet

import android.content.res.Configuration
import android.graphics.Color
import androidx.activity.compose.BackHandler
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.isSystemInDarkTheme
Expand Down Expand Up @@ -35,6 +36,7 @@ import androidx.window.core.layout.WindowHeightSizeClass
import com.composables.core.LocalModalWindow
import com.composables.core.ModalBottomSheet
import com.composables.core.ModalBottomSheetState
import com.composables.core.ModalSheetProperties
import com.composables.core.Scrim
import com.composables.core.Sheet
import com.composables.core.SheetDetent
Expand Down Expand Up @@ -151,7 +153,13 @@ private fun GravatarModalBottomSheet(
GravatarTheme {
ModalBottomSheet(
state = modalBottomSheetState,
properties = ModalSheetProperties(dismissOnBackPress = false),
) {
BackHandler {
coroutineScope.launch {
modalBottomSheetState.animateTo(Hidden)
}
}
// Modal content must be taking the uiMode from Activity and doesn't respect
// the above set CompositionLocalProvider
CompositionLocalProvider(
Expand Down

0 comments on commit 9e2ea9c

Please sign in to comment.