11package com.androidmakers.ui.common.navigation
22
3+ import androidx.compose.animation.EnterTransition
4+ import androidx.compose.animation.ExitTransition
35import androidx.compose.animation.SharedTransitionLayout
6+ import androidx.compose.animation.core.tween
7+ import androidx.compose.animation.fadeIn
8+ import androidx.compose.animation.fadeOut
9+ import androidx.compose.animation.togetherWith
410import androidx.compose.foundation.Image
511import androidx.compose.foundation.layout.Box
612import androidx.compose.foundation.layout.Column
713import androidx.compose.foundation.layout.RowScope
814import androidx.compose.foundation.layout.consumeWindowInsets
15+ import androidx.compose.foundation.layout.fillMaxSize
916import androidx.compose.foundation.layout.padding
1017import androidx.compose.foundation.layout.size
1118import androidx.compose.material3.ExperimentalMaterial3Api
@@ -16,6 +23,7 @@ import androidx.compose.material3.NavigationBar
1623import androidx.compose.material3.NavigationBarItem
1724import androidx.compose.material3.NavigationBarItemDefaults
1825import androidx.compose.material3.Scaffold
26+ import androidx.compose.material3.Surface
1927import androidx.compose.material3.Text
2028import androidx.compose.material3.TopAppBar
2129import androidx.compose.material3.TopAppBarDefaults
@@ -297,40 +305,70 @@ private fun AVANavDisplay(
297305 val entryProvider = entryProvider {
298306 // Tab entries
299307 entry<FeedKey > {
300- FeedScreen ()
308+ Surface (
309+ modifier = Modifier .fillMaxSize(),
310+ color = MaterialTheme .colorScheme.background,
311+ contentColor = MaterialTheme .colorScheme.onBackground,
312+ ) {
313+ FeedScreen ()
314+ }
301315 }
302316
303317 entry<AgendaKey >(
304318 metadata = ListDetailSceneStrategy .listPane(
305319 detailPlaceholder = {}
306320 )
307321 ) {
308- AgendaLayout (
309- showFilterBottomSheet = showAgendaFilterBottomSheet,
310- onFilterBottomSheetDismiss = onDismissAgendaFilter,
311- onSessionClick = { sessionId -> navigator.navigateToSessionDetail(sessionId) }
312- )
322+ Surface (
323+ modifier = Modifier .fillMaxSize(),
324+ color = MaterialTheme .colorScheme.background,
325+ contentColor = MaterialTheme .colorScheme.onBackground,
326+ ) {
327+ AgendaLayout (
328+ showFilterBottomSheet = showAgendaFilterBottomSheet,
329+ onFilterBottomSheetDismiss = onDismissAgendaFilter,
330+ onSessionClick = { sessionId -> navigator.navigateToSessionDetail(sessionId) }
331+ )
332+ }
313333 }
314334
315335 entry<SpeakersKey > {
316- SpeakerScreen (
317- viewModel = koinViewModel(),
318- navigateToSpeakerDetails = { speakerId -> navigator.navigate(SpeakerDetailKey (speakerId)) },
319- sharedTransitionScope = sharedTransitionScope,
320- animatedVisibilityScope = LocalNavAnimatedContentScope .current,
321- )
336+ Surface (
337+ modifier = Modifier .fillMaxSize(),
338+ color = MaterialTheme .colorScheme.background,
339+ contentColor = MaterialTheme .colorScheme.onBackground,
340+ ) {
341+ SpeakerScreen (
342+ viewModel = koinViewModel(),
343+ navigateToSpeakerDetails = { speakerId -> navigator.navigate(SpeakerDetailKey (speakerId)) },
344+ sharedTransitionScope = sharedTransitionScope,
345+ animatedVisibilityScope = LocalNavAnimatedContentScope .current,
346+ )
347+ }
322348 }
323349
324350 entry<SponsorsKey > {
325- SponsorsScreen ()
351+ Surface (
352+ modifier = Modifier .fillMaxSize(),
353+ color = MaterialTheme .colorScheme.background,
354+ contentColor = MaterialTheme .colorScheme.onBackground,
355+ ) {
356+ SponsorsScreen ()
357+ }
326358 }
327359
328360 entry<InfoKey > {
329- InfoScreen (
330- versionCode = versionCode,
331- versionName = versionName,
332- featureFlags = featureFlags,
333- )
361+ Surface (
362+ modifier = Modifier .fillMaxSize(),
363+ color = MaterialTheme .colorScheme.background,
364+ contentColor = MaterialTheme .colorScheme.onBackground,
365+ ) {
366+ InfoScreen (
367+ versionCode = versionCode,
368+ versionName = versionName,
369+ featureFlags = featureFlags,
370+ )
371+ }
334372 }
335373
336374 // Detail entries
@@ -341,41 +379,61 @@ private fun AVANavDisplay(
341379 BottomSheetSceneStrategy .bottomSheet()
342380 }
343381 ) { key ->
344- SessionDetailScreen (
345- viewModel = koinViewModel(key = key.sessionId) { parametersOf(key.sessionId) },
346- onBackClick = { navigator.goBack() },
347- onSpeakerClick = { speakerId -> navigator.navigate(SpeakerDetailKey (speakerId)) },
348- showBackButton = isWideScreen,
349- showTopBar = isWideScreen,
350- sharedTransitionScope = sharedTransitionScope,
351- // LocalNavAnimatedContentScope is unavailable in OverlayScene (bottom sheet)
352- animatedVisibilityScope = if (isWideScreen) {
353- LocalNavAnimatedContentScope .current
354- } else {
355- null
356- },
357- )
382+ Surface (
383+ modifier = Modifier .fillMaxSize(),
384+ color = MaterialTheme .colorScheme.background,
385+ contentColor = MaterialTheme .colorScheme.onBackground,
386+ ) {
387+ SessionDetailScreen (
388+ viewModel = koinViewModel(key = key.sessionId) { parametersOf(key.sessionId) },
389+ onBackClick = { navigator.goBack() },
390+ onSpeakerClick = { speakerId -> navigator.navigate(SpeakerDetailKey (speakerId)) },
391+ showBackButton = isWideScreen,
392+ showTopBar = isWideScreen,
393+ sharedTransitionScope = sharedTransitionScope,
394+ // LocalNavAnimatedContentScope is unavailable in OverlayScene (bottom sheet)
395+ animatedVisibilityScope = if (isWideScreen) {
396+ LocalNavAnimatedContentScope .current
397+ } else {
398+ null
399+ },
400+ )
401+ }
358402 }
359403
360404 entry<SpeakerDetailKey > { key ->
361- SpeakerDetailsRoute (
362- speakerDetailsViewModel = koinViewModel(key = key.speakerId) { parametersOf(key.speakerId) },
363- onBackClick = { navigator.goBack() },
364- sharedTransitionScope = sharedTransitionScope,
365- animatedVisibilityScope = LocalNavAnimatedContentScope .current,
366- )
405+ Surface (
406+ modifier = Modifier .fillMaxSize(),
407+ color = MaterialTheme .colorScheme.background,
408+ contentColor = MaterialTheme .colorScheme.onBackground,
409+ ) {
410+ SpeakerDetailsRoute (
411+ speakerDetailsViewModel = koinViewModel(key = key.speakerId) { parametersOf(key.speakerId) },
412+ onBackClick = { navigator.goBack() },
413+ sharedTransitionScope = sharedTransitionScope,
414+ animatedVisibilityScope = LocalNavAnimatedContentScope .current,
415+ )
416+ }
367417 }
368418 }
369419
370420 val bottomSheetStrategy = remember { BottomSheetSceneStrategy <NavKey >() }
371421 val listDetailStrategy = rememberListDetailSceneStrategy<NavKey >()
372422
423+
373424 NavDisplay (
374425 entries = navigationState.toDecoratedEntries(entryProvider),
375426 sceneStrategies = listOf (bottomSheetStrategy, listDetailStrategy),
376- onBack = { navigator.goBack() }
427+ onBack = navigator::goBack,
428+ transitionSpec = {
429+ fadeIn(tween(200 )) togetherWith ExitTransition .None
430+ },
431+ popTransitionSpec = {
432+ EnterTransition .None togetherWith fadeOut(tween(200 ))
433+ },
377434 )
378435 }
436+
379437}
380438
381439@Composable
0 commit comments