Start migration away from global top app bar (#3132)

This commit is contained in:
Phil Oliver 2025-09-17 18:38:22 -04:00 committed by GitHub
parent e4bfce0989
commit fed3ebbd36
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
17 changed files with 685 additions and 466 deletions

View file

@ -22,6 +22,7 @@ package com.geeksville.mesh.ui
import android.Manifest
import android.os.Build
import androidx.annotation.StringRes
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.Animatable
import androidx.compose.animation.core.LinearEasing
import androidx.compose.animation.core.tween
@ -87,6 +88,7 @@ import com.geeksville.mesh.model.UIViewModel
import com.geeksville.mesh.navigation.ConnectionsRoutes
import com.geeksville.mesh.navigation.ContactsRoutes
import com.geeksville.mesh.navigation.MapRoutes
import com.geeksville.mesh.navigation.NodeDetailRoutes
import com.geeksville.mesh.navigation.NodesRoutes
import com.geeksville.mesh.navigation.Route
import com.geeksville.mesh.navigation.SettingsRoutes
@ -135,7 +137,6 @@ enum class TopLevelDestination(@StringRes val label: Int, val icon: ImageVector,
NodesRoutes.Nodes::class,
MapRoutes.Map::class,
ConnectionsRoutes.Connections::class,
SettingsRoutes.Settings::class,
)
.any { this.hasRoute(it) }
@ -349,26 +350,42 @@ fun MainScreen(
if (sharedContact != null) {
SharedContactDialog(contact = sharedContact, onDismiss = { sharedContact = null })
}
MainAppBar(
viewModel = uIViewModel,
navController = navController,
onAction = { action ->
when (action) {
is NodeMenuAction.MoreDetails -> {
navController.navigate(
NodesRoutes.NodeDetailGraph(action.node.num),
{
launchSingleTop = true
restoreState = true
},
)
}
is NodeMenuAction.Share -> sharedContact = action.node
else -> {}
}
},
)
fun NavDestination.hasGlobalAppBar(): Boolean =
// List of screens to exclude from having the global app bar
listOf(
ConnectionsRoutes.Connections::class,
ContactsRoutes.Contacts::class,
MapRoutes.Map::class,
NodeDetailRoutes.NodeMap::class,
NodesRoutes.Nodes::class,
NodesRoutes.NodeDetail::class,
SettingsRoutes.Settings::class,
)
.none { this.hasRoute(it) }
AnimatedVisibility(visible = currentDestination?.hasGlobalAppBar() ?: true) {
MainAppBar(
viewModel = uIViewModel,
navController = navController,
onAction = { action ->
when (action) {
is NodeMenuAction.MoreDetails -> {
navController.navigate(
NodesRoutes.NodeDetailGraph(action.node.num),
{
launchSingleTop = true
restoreState = true
},
)
}
is NodeMenuAction.Share -> sharedContact = action.node
else -> {}
}
},
)
}
NavHost(
navController = navController,