From 5a99391ab847292ecac93e671d0814877a1d3b8e Mon Sep 17 00:00:00 2001 From: Joseph Roque Date: Wed, 14 Feb 2024 23:23:55 -0800 Subject: [PATCH] refactor(android): move MatchPlayEditor to sheet --- .../navigation/graph/BottomSheetGraph.kt | 12 ++++++++++++ .../navigation/graph/OverviewGraph.kt | 12 ------------ .../feature/gameseditor/GamesEditorViewModel.kt | 9 +++++++-- .../feature/matchplayeditor/MatchPlayEditorScreen.kt | 4 ---- .../navigation/MatchPlayEditorNavigation.kt | 6 ++++-- .../matchplayeditor/ui/MatchPlayEditorTopBar.kt | 7 +++---- .../ui/src/main/res/values/strings.xml | 4 ++-- 7 files changed, 28 insertions(+), 26 deletions(-) diff --git a/android/app/src/main/java/ca/josephroque/bowlingcompanion/navigation/graph/BottomSheetGraph.kt b/android/app/src/main/java/ca/josephroque/bowlingcompanion/navigation/graph/BottomSheetGraph.kt index 979d7b58e..6e49c97b5 100644 --- a/android/app/src/main/java/ca/josephroque/bowlingcompanion/navigation/graph/BottomSheetGraph.kt +++ b/android/app/src/main/java/ca/josephroque/bowlingcompanion/navigation/graph/BottomSheetGraph.kt @@ -9,6 +9,7 @@ import ca.josephroque.bowlingcompanion.feature.accessoriesoverview.navigation.ac import ca.josephroque.bowlingcompanion.feature.gameseditor.navigation.gamesSettingsScreen import ca.josephroque.bowlingcompanion.feature.gameseditor.navigation.navigateToGamesEditor import ca.josephroque.bowlingcompanion.feature.gameseditor.navigation.scoresListScreen +import ca.josephroque.bowlingcompanion.feature.matchplayeditor.navigation.matchPlayEditorScreen import ca.josephroque.bowlingcompanion.feature.overview.navigation.navigateToQuickPlayOnboarding import ca.josephroque.bowlingcompanion.feature.overview.navigation.quickPlay import ca.josephroque.bowlingcompanion.feature.overview.navigation.quickPlayOnboarding @@ -99,4 +100,15 @@ fun NavGraphBuilder.bottomSheetGraph(navController: NavController) { midGameStatisticsDetailsScreen( onBackPressed = navController::popBackStack, ) + matchPlayEditorScreen( + onBackPressed = navController::popBackStack, + onEditOpponent = { opponent, result -> + navController.navigateToResourcePickerForResult( + selectedIds = opponent?.let { setOf(it) } ?: emptySet(), + limit = 1, + navResultCallback = result, + resourceType = ResourcePickerType.BOWLER, + ) + }, + ) } diff --git a/android/app/src/main/java/ca/josephroque/bowlingcompanion/navigation/graph/OverviewGraph.kt b/android/app/src/main/java/ca/josephroque/bowlingcompanion/navigation/graph/OverviewGraph.kt index 6e6f9dcdb..47a7a90c8 100644 --- a/android/app/src/main/java/ca/josephroque/bowlingcompanion/navigation/graph/OverviewGraph.kt +++ b/android/app/src/main/java/ca/josephroque/bowlingcompanion/navigation/graph/OverviewGraph.kt @@ -23,7 +23,6 @@ import ca.josephroque.bowlingcompanion.feature.leaguedetails.navigation.navigate import ca.josephroque.bowlingcompanion.feature.leagueform.navigation.leagueFormScreen import ca.josephroque.bowlingcompanion.feature.leagueform.navigation.navigateToLeagueForm import ca.josephroque.bowlingcompanion.feature.leagueform.navigation.navigateToNewLeagueForm -import ca.josephroque.bowlingcompanion.feature.matchplayeditor.navigation.matchPlayEditorScreen import ca.josephroque.bowlingcompanion.feature.matchplayeditor.navigation.navigateToMatchPlayEditor import ca.josephroque.bowlingcompanion.feature.onboarding.navigation.navigateToOnboarding import ca.josephroque.bowlingcompanion.feature.onboarding.navigation.onboardingScreen @@ -207,17 +206,6 @@ fun NavGraphBuilder.overviewGraph( statisticPickerScreen( onDismissWithResult = navController::popBackStackWithResult, ) - matchPlayEditorScreen( - onBackPressed = navController::popBackStack, - onEditOpponent = { opponent, result -> - navController.navigateToResourcePickerForResult( - selectedIds = opponent?.let { setOf(it) } ?: emptySet(), - limit = 1, - navResultCallback = result, - resourceType = ResourcePickerType.BOWLER, - ) - }, - ) statisticsDetailsScreen( onBackPressed = navController::popBackStack, ) diff --git a/android/feature/gameseditor/src/main/java/ca/josephroque/bowlingcompanion/feature/gameseditor/GamesEditorViewModel.kt b/android/feature/gameseditor/src/main/java/ca/josephroque/bowlingcompanion/feature/gameseditor/GamesEditorViewModel.kt index 675002c9a..3ab39bd99 100644 --- a/android/feature/gameseditor/src/main/java/ca/josephroque/bowlingcompanion/feature/gameseditor/GamesEditorViewModel.kt +++ b/android/feature/gameseditor/src/main/java/ca/josephroque/bowlingcompanion/feature/gameseditor/GamesEditorViewModel.kt @@ -464,6 +464,7 @@ class GamesEditorViewModel @Inject constructor( return } + isGameDetailsSheetVisible.value = false sendEvent( GamesEditorScreenEvent.EditGear( gameDetailsState.value.gear.selectedGear.map(GearListItem::id).toSet(), @@ -477,6 +478,7 @@ class GamesEditorViewModel @Inject constructor( return } + isGameDetailsSheetVisible.value = false val gameDetails = gameDetailsState.value sendEvent( GamesEditorScreenEvent.EditLanes( @@ -492,10 +494,10 @@ class GamesEditorViewModel @Inject constructor( return } - val gameDetails = gameDetailsState.value + isGameDetailsSheetVisible.value = false sendEvent( GamesEditorScreenEvent.EditAlley( - alleyId = gameDetails.alley.selectedAlley?.id, + alleyId = gameDetailsState.value.alley.selectedAlley?.id, ), ) } @@ -506,6 +508,7 @@ class GamesEditorViewModel @Inject constructor( return } + isGameDetailsSheetVisible.value = false sendEvent(GamesEditorScreenEvent.EditMatchPlay(currentGameId.value)) } @@ -545,6 +548,7 @@ class GamesEditorViewModel @Inject constructor( return } + isGameDetailsSheetVisible.value = false sendEvent( GamesEditorScreenEvent.EditRolledBall(gamesEditorState.value.rollEditor.selectedBall?.id), ) @@ -556,6 +560,7 @@ class GamesEditorViewModel @Inject constructor( return } + isGameDetailsSheetVisible.value = false val gameDetails = gameDetailsState.value gamesEditorState.updateGamesEditor(gameDetails.gameId) { it.copy( diff --git a/android/feature/matchplayeditor/src/main/java/ca/josephroque/bowlingcompanion/feature/matchplayeditor/MatchPlayEditorScreen.kt b/android/feature/matchplayeditor/src/main/java/ca/josephroque/bowlingcompanion/feature/matchplayeditor/MatchPlayEditorScreen.kt index a44d83c33..592a58aeb 100644 --- a/android/feature/matchplayeditor/src/main/java/ca/josephroque/bowlingcompanion/feature/matchplayeditor/MatchPlayEditorScreen.kt +++ b/android/feature/matchplayeditor/src/main/java/ca/josephroque/bowlingcompanion/feature/matchplayeditor/MatchPlayEditorScreen.kt @@ -70,10 +70,6 @@ private fun MatchPlayEditorScreen( Scaffold( topBar = { MatchPlayEditorTopBar( - gameIndex = when (state) { - MatchPlayEditorScreenUiState.Loading -> 0 - is MatchPlayEditorScreenUiState.Loaded -> state.matchPlayEditor.gameIndex - }, onAction = { onAction(MatchPlayEditorScreenUiAction.MatchPlayEditor(it)) }, scrollBehavior = scrollBehavior, ) diff --git a/android/feature/matchplayeditor/src/main/java/ca/josephroque/bowlingcompanion/feature/matchplayeditor/navigation/MatchPlayEditorNavigation.kt b/android/feature/matchplayeditor/src/main/java/ca/josephroque/bowlingcompanion/feature/matchplayeditor/navigation/MatchPlayEditorNavigation.kt index eb9ec764a..18635b49c 100644 --- a/android/feature/matchplayeditor/src/main/java/ca/josephroque/bowlingcompanion/feature/matchplayeditor/navigation/MatchPlayEditorNavigation.kt +++ b/android/feature/matchplayeditor/src/main/java/ca/josephroque/bowlingcompanion/feature/matchplayeditor/navigation/MatchPlayEditorNavigation.kt @@ -4,22 +4,24 @@ import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions import androidx.navigation.NavType -import androidx.navigation.compose.composable import androidx.navigation.navArgument import ca.josephroque.bowlingcompanion.core.navigation.NavResultCallback import ca.josephroque.bowlingcompanion.core.navigation.Route import ca.josephroque.bowlingcompanion.feature.matchplayeditor.MatchPlayEditorRoute +import com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi +import com.google.accompanist.navigation.material.bottomSheet import java.util.UUID fun NavController.navigateToMatchPlayEditor(gameId: UUID, navOptions: NavOptions? = null) { this.navigate(Route.EditMatchPlay.createRoute(gameId), navOptions) } +@OptIn(ExperimentalMaterialNavigationApi::class) fun NavGraphBuilder.matchPlayEditorScreen( onBackPressed: () -> Unit, onEditOpponent: (UUID?, NavResultCallback>) -> Unit, ) { - composable( + bottomSheet( route = Route.EditMatchPlay.route, arguments = listOf( navArgument(Route.EditMatchPlay.ARG_GAME) { type = NavType.StringType }, diff --git a/android/feature/matchplayeditor/ui/src/main/java/ca/josephroque/bowlingcompanion/feature/matchplayeditor/ui/MatchPlayEditorTopBar.kt b/android/feature/matchplayeditor/ui/src/main/java/ca/josephroque/bowlingcompanion/feature/matchplayeditor/ui/MatchPlayEditorTopBar.kt index 5bf0f407c..5fd8f6b78 100644 --- a/android/feature/matchplayeditor/ui/src/main/java/ca/josephroque/bowlingcompanion/feature/matchplayeditor/ui/MatchPlayEditorTopBar.kt +++ b/android/feature/matchplayeditor/ui/src/main/java/ca/josephroque/bowlingcompanion/feature/matchplayeditor/ui/MatchPlayEditorTopBar.kt @@ -8,23 +8,22 @@ import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource -import ca.josephroque.bowlingcompanion.core.designsystem.components.BackButton +import ca.josephroque.bowlingcompanion.core.designsystem.components.CloseButton @OptIn(ExperimentalMaterial3Api::class) @Composable fun MatchPlayEditorTopBar( - gameIndex: Int, onAction: (MatchPlayEditorUiAction) -> Unit, scrollBehavior: TopAppBarScrollBehavior, ) { TopAppBar( title = { Text( - text = stringResource(R.string.match_play_editor_title, gameIndex + 1), + text = stringResource(R.string.match_play_editor_title), ) }, navigationIcon = { - BackButton(onClick = { onAction(MatchPlayEditorUiAction.BackClicked) }) + CloseButton(onClick = { onAction(MatchPlayEditorUiAction.BackClicked) }) }, actions = { TextButton(onClick = { onAction(MatchPlayEditorUiAction.DoneClicked) }) { diff --git a/android/feature/matchplayeditor/ui/src/main/res/values/strings.xml b/android/feature/matchplayeditor/ui/src/main/res/values/strings.xml index c67497412..0c478759d 100644 --- a/android/feature/matchplayeditor/ui/src/main/res/values/strings.xml +++ b/android/feature/matchplayeditor/ui/src/main/res/values/strings.xml @@ -1,6 +1,6 @@ - - Game %1$d Match Play + + Match Play Opponent None