diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt index e165d6ac5..916806546 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt @@ -36,10 +36,8 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext import androidx.core.util.Consumer -import androidx.navigation.NavDestination.Companion.hasRoute import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable -import androidx.navigation.compose.currentBackStackEntryAsState import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.service.crashreports.DisplayCrashMessages import com.vitorpamplona.amethyst.service.relayClient.notifyCommand.compose.DisplayNotifyMessages @@ -140,221 +138,11 @@ fun AppNavigation( accountViewModel: AccountViewModel, accountSessionManager: AccountSessionManager, ) { + println("AABBCC AppNavigation Begins") val nav = rememberNav() - val navBackStackEntry by nav.controller.currentBackStackEntryAsState() - val isTabPagerRoute = - navBackStackEntry?.destination?.let { dest -> - dest.hasRoute() || dest.hasRoute() - } ?: false - val drawerGesturesEnabled = - !isTabPagerRoute || - nav.drawerState.isOpen || - nav.drawerState.targetValue != nav.drawerState.currentValue - - AccountSwitcherAndLeftDrawerLayout(accountViewModel, accountSessionManager, nav, drawerGesturesEnabled) { - NavHost( - navController = nav.controller, - startDestination = Route.Home, - enterTransition = { fadeIn(animationSpec = tween(200)) }, - exitTransition = { fadeOut(animationSpec = tween(200)) }, - ) { - composable { HomeScreen(accountViewModel, nav) } - composable { MessagesScreen(accountViewModel, nav) } - composable { VideoScreen(accountViewModel, nav) } - composable { DiscoverScreen(accountViewModel, nav) } - composable { NotificationScreen(accountViewModel, nav) } - composable { ChessLobbyScreen(accountViewModel, nav) } - - composableFromEnd { WalletScreen(accountViewModel, nav) } - composableFromEnd { WalletSendScreen(accountViewModel, nav) } - composableFromEnd { WalletReceiveScreen(accountViewModel, nav) } - composableFromEnd { WalletTransactionsScreen(accountViewModel, nav) } - - composableFromEnd { ListOfPeopleListsScreen(accountViewModel, nav) } - composableFromEndArgs { PeopleListScreen(it.dTag, accountViewModel, nav) } - composableFromEndArgs { FollowPackScreen(it.dTag, accountViewModel, nav) } - composableFromBottomArgs { FollowListAndPackAndUserScreen(it.userToAdd, accountViewModel, nav) } - - composableFromBottomArgs { PeopleListMetadataScreen(it.dTag, accountViewModel, nav) } - composableFromBottomArgs { FollowPackMetadataScreen(it.dTag, accountViewModel, nav) } - - composableFromEnd { ListOfBookmarkGroupsScreen(accountViewModel, nav) } - composableFromEndArgs { BookmarkGroupScreen(it.dTag, it.bookmarkType, accountViewModel, nav) } - composableFromBottomArgs { BookmarkGroupMetadataScreen(it.dTag, accountViewModel, nav) } - composableFromBottomArgs { PostBookmarkListManagementScreen(it.postId, accountViewModel, nav) } - composableFromBottomArgs { ArticleBookmarkListManagementScreen(Address(it.kind, it.pubKeyHex, it.dTag), accountViewModel, nav) } - - composableFromBottomArgs { ShowQRScreen(it.pubkey, accountViewModel, nav) } - - composableFromBottomArgs { PayViaIntentScreen(it.paymentId, accountViewModel, nav) } - - composableFromBottomArgs { NewUserMetadataScreen(nav, accountViewModel) } - composable { SearchScreen(accountViewModel, nav) } - - composableFromEnd { AllSettingsScreen(accountViewModel, nav) } - composableFromEnd { AccountBackupScreen(accountViewModel, nav) } - composableFromEnd { SecurityFiltersScreen(accountViewModel, nav) } - composableFromEnd { PrivacyOptionsScreen(nav) } - composableFromEnd { NamecoinSettingsScreen(nav) } - composableFromEnd { OtsSettingsScreen(nav) } - composableFromEnd { BookmarkListScreen(accountViewModel, nav) } - composableFromEnd { WebBookmarksScreen(accountViewModel, nav) } - composableFromEnd { DraftListScreen(accountViewModel, nav) } - composableFromEnd { SettingsScreen(accountViewModel, nav) } - composableFromEnd { UserSettingsScreen(accountViewModel, nav) } - composableFromEnd { ReactionsSettingsScreen(accountViewModel, nav) } - composableFromEnd { ImportFollowListSelectUserScreen(accountViewModel, nav) } - composableFromEndArgs { - ImportFollowListPickFollowsScreen(it.userHex, accountViewModel, nav) - } - - composableFromEndArgs { NIP47SetupScreen(accountViewModel, nav, it.nip47) } - composableFromEndArgs { UpdateZapAmountScreen(accountViewModel, nav, it.nip47) } - composableFromEndArgs { AllRelayListScreen(accountViewModel, nav) } - composableFromEnd { EventSyncScreen(accountViewModel, nav) } - composableFromEndArgs { AllMediaServersScreen(accountViewModel, nav) } - composableFromEndArgs { UpdateReactionTypeScreen(accountViewModel, nav) } - - composableFromEndArgs { DvmContentDiscoveryScreen(it.id, accountViewModel, nav) } - composableFromEndArgs { ProfileScreen(it.id, accountViewModel, nav) } - composableFromEndArgs { ThreadScreen(it.id, accountViewModel, nav) } - composableFromEndArgs { HashtagScreen(it, accountViewModel, nav) } - composableFromEndArgs { GeoHashScreen(it, accountViewModel, nav) } - composableFromEndArgs { RelayFeedScreen(it, accountViewModel, nav) } - composableFromEndArgs { ChessGameScreen(it.gameId, accountViewModel, nav) } - composableFromEndArgs { RelayInformationScreen(it.url, accountViewModel, nav) } - composableFromEndArgs { CommunityScreen(Address(it.kind, it.pubKeyHex, it.dTag), accountViewModel, nav) } - composableFromEndArgs { FollowPackFeedScreen(Address(it.kind, it.pubKeyHex, it.dTag), accountViewModel, nav) } - - composableFromEndArgs { ChatroomScreen(it.toKey(), it.message, it.replyId, it.draftId, it.expiresDays, accountViewModel, nav) } - composableFromEndArgs { ChatroomByAuthorScreen(it.id, null, accountViewModel, nav) } - - composableFromEndArgs { - PublicChatChannelScreen(it.id, it.draftId, it.replyTo, accountViewModel, nav) - } - - composableFromEndArgs { - LiveActivityChannelScreen( - Address(it.kind, it.pubKeyHex, it.dTag), - draftId = it.draftId, - replyToId = it.replyTo, - accountViewModel, - nav, - ) - } - - composableFromEndArgs { - EphemeralChatScreen( - id = it.id, - relayUrl = it.relayUrl, - draftId = it.draftId, - replyToId = it.replyTo, - accountViewModel = accountViewModel, - nav = nav, - ) - } - - composableFromBottomArgs { ChannelMetadataScreen(it.id, accountViewModel, nav) } - composableFromBottomArgs { NewEphemeralChatScreen(accountViewModel, nav) } - composableFromBottomArgs { NewGroupDMScreen(it.message, it.attachment, accountViewModel, nav) } - - composableArgs { LoadRedirectScreen(it.id, accountViewModel, nav) } - - composableFromBottomArgs { - GeoHashPostScreen( - geohash = it.geohash, - message = it.message, - attachment = it.attachment, - replyId = it.replyTo, - quoteId = it.quote, - draftId = it.draft, - accountViewModel, - nav, - ) - } - - composableFromBottomArgs { - NewPublicMessageScreen( - to = it.toKey(), - replyId = it.replyId, - draftId = it.draftId, - accountViewModel = accountViewModel, - nav = nav, - ) - } - - composableFromBottomArgs { - HashtagPostScreen( - hashtag = it.hashtag, - message = it.message, - attachment = it.attachment, - replyId = it.replyTo, - quoteId = it.quote, - draftId = it.draft, - accountViewModel, - nav, - ) - } - - composableFromBottomArgs { - ReplyCommentPostScreen( - replyId = it.replyTo, - message = it.message, - attachment = it.attachment, - quoteId = it.quote, - draftId = it.draft, - accountViewModel, - nav, - ) - } - - composableFromBottomArgs { - NewProductScreen( - message = it.message, - attachment = it.attachment, - quoteId = it.quote, - draftId = it.draft, - accountViewModel, - nav, - ) - } - - composableFromBottomArgs { - LongFormPostScreen( - draftId = it.draft, - versionId = it.version, - accountViewModel = accountViewModel, - nav = nav, - ) - } - - composableFromBottomArgs { - ShortNotePostScreen( - message = it.message, - attachment = it.attachment, - baseReplyToId = it.baseReplyTo, - quoteId = it.quote, - forkId = it.fork, - versionId = it.version, - draftId = it.draft, - accountViewModel = accountViewModel, - nav = nav, - ) - } - - composableFromBottomArgs { - VoiceReplyScreen( - replyToNoteId = it.replyToNoteId, - recordingFilePath = it.recordingFilePath, - mimeType = it.mimeType, - duration = it.duration, - amplitudesJson = it.amplitudes, - accountViewModel = accountViewModel, - nav = nav, - ) - } - } + AccountSwitcherAndLeftDrawerLayout(accountViewModel, accountSessionManager, nav) { + BuildNavigation(accountViewModel, nav) } NavigateIfIntentRequested(nav, accountViewModel, accountSessionManager) @@ -363,6 +151,216 @@ fun AppNavigation( DisplayNotifyMessages(accountViewModel, nav) DisplayCrashMessages(accountViewModel, nav) DisplayBroadcastProgress(accountViewModel) + println("AABBCC AppNavigation Ends") +} + +@Composable +fun BuildNavigation( + accountViewModel: AccountViewModel, + nav: Nav, +) { + NavHost( + navController = nav.controller, + startDestination = Route.Home, + enterTransition = { fadeIn(animationSpec = tween(200)) }, + exitTransition = { fadeOut(animationSpec = tween(200)) }, + ) { + composable { HomeScreen(accountViewModel, nav) } + composable { MessagesScreen(accountViewModel, nav) } + composable { VideoScreen(accountViewModel, nav) } + composable { DiscoverScreen(accountViewModel, nav) } + composable { NotificationScreen(accountViewModel, nav) } + composable { ChessLobbyScreen(accountViewModel, nav) } + + composableFromEnd { WalletScreen(accountViewModel, nav) } + composableFromEnd { WalletSendScreen(accountViewModel, nav) } + composableFromEnd { WalletReceiveScreen(accountViewModel, nav) } + composableFromEnd { WalletTransactionsScreen(accountViewModel, nav) } + + composableFromEnd { ListOfPeopleListsScreen(accountViewModel, nav) } + composableFromEndArgs { PeopleListScreen(it.dTag, accountViewModel, nav) } + composableFromEndArgs { FollowPackScreen(it.dTag, accountViewModel, nav) } + composableFromBottomArgs { FollowListAndPackAndUserScreen(it.userToAdd, accountViewModel, nav) } + + composableFromBottomArgs { PeopleListMetadataScreen(it.dTag, accountViewModel, nav) } + composableFromBottomArgs { FollowPackMetadataScreen(it.dTag, accountViewModel, nav) } + + composableFromEnd { ListOfBookmarkGroupsScreen(accountViewModel, nav) } + composableFromEndArgs { BookmarkGroupScreen(it.dTag, it.bookmarkType, accountViewModel, nav) } + composableFromBottomArgs { BookmarkGroupMetadataScreen(it.dTag, accountViewModel, nav) } + composableFromBottomArgs { PostBookmarkListManagementScreen(it.postId, accountViewModel, nav) } + composableFromBottomArgs { ArticleBookmarkListManagementScreen(Address(it.kind, it.pubKeyHex, it.dTag), accountViewModel, nav) } + + composableFromBottomArgs { ShowQRScreen(it.pubkey, accountViewModel, nav) } + + composableFromBottomArgs { PayViaIntentScreen(it.paymentId, accountViewModel, nav) } + + composableFromBottomArgs { NewUserMetadataScreen(nav, accountViewModel) } + composable { SearchScreen(accountViewModel, nav) } + + composableFromEnd { AllSettingsScreen(accountViewModel, nav) } + composableFromEnd { AccountBackupScreen(accountViewModel, nav) } + composableFromEnd { SecurityFiltersScreen(accountViewModel, nav) } + composableFromEnd { PrivacyOptionsScreen(nav) } + composableFromEnd { NamecoinSettingsScreen(nav) } + composableFromEnd { OtsSettingsScreen(nav) } + composableFromEnd { BookmarkListScreen(accountViewModel, nav) } + composableFromEnd { WebBookmarksScreen(accountViewModel, nav) } + composableFromEnd { DraftListScreen(accountViewModel, nav) } + composableFromEnd { SettingsScreen(accountViewModel, nav) } + composableFromEnd { UserSettingsScreen(accountViewModel, nav) } + composableFromEnd { ReactionsSettingsScreen(accountViewModel, nav) } + composableFromEnd { ImportFollowListSelectUserScreen(accountViewModel, nav) } + composableFromEndArgs { + ImportFollowListPickFollowsScreen(it.userHex, accountViewModel, nav) + } + + composableFromEndArgs { NIP47SetupScreen(accountViewModel, nav, it.nip47) } + composableFromEndArgs { UpdateZapAmountScreen(accountViewModel, nav, it.nip47) } + composableFromEndArgs { AllRelayListScreen(accountViewModel, nav) } + composableFromEnd { EventSyncScreen(accountViewModel, nav) } + composableFromEndArgs { AllMediaServersScreen(accountViewModel, nav) } + composableFromEndArgs { UpdateReactionTypeScreen(accountViewModel, nav) } + + composableFromEndArgs { DvmContentDiscoveryScreen(it.id, accountViewModel, nav) } + composableFromEndArgs { ProfileScreen(it.id, accountViewModel, nav) } + composableFromEndArgs { ThreadScreen(it.id, accountViewModel, nav) } + composableFromEndArgs { HashtagScreen(it, accountViewModel, nav) } + composableFromEndArgs { GeoHashScreen(it, accountViewModel, nav) } + composableFromEndArgs { RelayFeedScreen(it, accountViewModel, nav) } + composableFromEndArgs { ChessGameScreen(it.gameId, accountViewModel, nav) } + composableFromEndArgs { RelayInformationScreen(it.url, accountViewModel, nav) } + composableFromEndArgs { CommunityScreen(Address(it.kind, it.pubKeyHex, it.dTag), accountViewModel, nav) } + composableFromEndArgs { FollowPackFeedScreen(Address(it.kind, it.pubKeyHex, it.dTag), accountViewModel, nav) } + + composableFromEndArgs { ChatroomScreen(it.toKey(), it.message, it.replyId, it.draftId, it.expiresDays, accountViewModel, nav) } + composableFromEndArgs { ChatroomByAuthorScreen(it.id, null, accountViewModel, nav) } + + composableFromEndArgs { + PublicChatChannelScreen(it.id, it.draftId, it.replyTo, accountViewModel, nav) + } + + composableFromEndArgs { + LiveActivityChannelScreen( + Address(it.kind, it.pubKeyHex, it.dTag), + draftId = it.draftId, + replyToId = it.replyTo, + accountViewModel, + nav, + ) + } + + composableFromEndArgs { + EphemeralChatScreen( + id = it.id, + relayUrl = it.relayUrl, + draftId = it.draftId, + replyToId = it.replyTo, + accountViewModel = accountViewModel, + nav = nav, + ) + } + + composableFromBottomArgs { ChannelMetadataScreen(it.id, accountViewModel, nav) } + composableFromBottomArgs { NewEphemeralChatScreen(accountViewModel, nav) } + composableFromBottomArgs { NewGroupDMScreen(it.message, it.attachment, accountViewModel, nav) } + + composableArgs { LoadRedirectScreen(it.id, accountViewModel, nav) } + + composableFromBottomArgs { + GeoHashPostScreen( + geohash = it.geohash, + message = it.message, + attachment = it.attachment, + replyId = it.replyTo, + quoteId = it.quote, + draftId = it.draft, + accountViewModel, + nav, + ) + } + + composableFromBottomArgs { + NewPublicMessageScreen( + to = it.toKey(), + replyId = it.replyId, + draftId = it.draftId, + accountViewModel = accountViewModel, + nav = nav, + ) + } + + composableFromBottomArgs { + HashtagPostScreen( + hashtag = it.hashtag, + message = it.message, + attachment = it.attachment, + replyId = it.replyTo, + quoteId = it.quote, + draftId = it.draft, + accountViewModel, + nav, + ) + } + + composableFromBottomArgs { + ReplyCommentPostScreen( + replyId = it.replyTo, + message = it.message, + attachment = it.attachment, + quoteId = it.quote, + draftId = it.draft, + accountViewModel, + nav, + ) + } + + composableFromBottomArgs { + NewProductScreen( + message = it.message, + attachment = it.attachment, + quoteId = it.quote, + draftId = it.draft, + accountViewModel, + nav, + ) + } + + composableFromBottomArgs { + LongFormPostScreen( + draftId = it.draft, + versionId = it.version, + accountViewModel = accountViewModel, + nav = nav, + ) + } + + composableFromBottomArgs { + ShortNotePostScreen( + message = it.message, + attachment = it.attachment, + baseReplyToId = it.baseReplyTo, + quoteId = it.quote, + forkId = it.fork, + versionId = it.version, + draftId = it.draft, + accountViewModel = accountViewModel, + nav = nav, + ) + } + + composableFromBottomArgs { + VoiceReplyScreen( + replyToNoteId = it.replyToNoteId, + recordingFilePath = it.recordingFilePath, + mimeType = it.mimeType, + duration = it.duration, + amplitudesJson = it.amplitudes, + accountViewModel = accountViewModel, + nav = nav, + ) + } + } } @Composable diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountSwitcherAndLeftDrawerLayout.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountSwitcherAndLeftDrawerLayout.kt index 8dc7d01f9..246beb2fc 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountSwitcherAndLeftDrawerLayout.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountSwitcherAndLeftDrawerLayout.kt @@ -37,9 +37,12 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalConfiguration +import androidx.navigation.NavDestination.Companion.hasRoute +import androidx.navigation.compose.currentBackStackEntryAsState import com.vitorpamplona.amethyst.ui.navigation.drawer.AccountSwitchBottomSheet import com.vitorpamplona.amethyst.ui.navigation.drawer.DrawerContent -import com.vitorpamplona.amethyst.ui.navigation.navs.INav +import com.vitorpamplona.amethyst.ui.navigation.navs.Nav +import com.vitorpamplona.amethyst.ui.navigation.routes.Route import com.vitorpamplona.amethyst.ui.screen.AccountSessionManager import kotlinx.coroutines.launch @@ -48,8 +51,7 @@ import kotlinx.coroutines.launch fun AccountSwitcherAndLeftDrawerLayout( accountViewModel: AccountViewModel, accountSessionManager: AccountSessionManager, - nav: INav, - gesturesEnabled: Boolean = true, + nav: Nav, content: @Composable () -> Unit, ) { val scope = rememberCoroutineScope() @@ -82,9 +84,19 @@ fun AccountSwitcherAndLeftDrawerLayout( } } + val navBackStackEntry by nav.controller.currentBackStackEntryAsState() + val isTabPagerRoute = + navBackStackEntry?.destination?.let { dest -> + dest.hasRoute() || dest.hasRoute() + } ?: false + val drawerGesturesEnabled = + !isTabPagerRoute || + nav.drawerState.isOpen || + nav.drawerState.targetValue != nav.drawerState.currentValue + ModalNavigationDrawer( drawerState = nav.drawerState, - gesturesEnabled = gesturesEnabled, + gesturesEnabled = drawerGesturesEnabled, drawerContent = { DrawerContent(nav, openSheetFunction, accountViewModel) BackHandler(enabled = nav.drawerState.isOpen, nav::closeDrawer)