Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 7 additions & 8 deletions androidApp/src/main/kotlin/org/meshtastic/app/ui/Main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ import org.meshtastic.feature.map.navigation.mapGraph
import org.meshtastic.feature.messaging.navigation.contactsGraph
import org.meshtastic.feature.node.navigation.nodesGraph
import org.meshtastic.feature.settings.lockdown.LockdownDialog
import org.meshtastic.feature.settings.navigation.rememberSettingsRadioConfigViewModelProvider
import org.meshtastic.feature.settings.navigation.settingsGraph
import org.meshtastic.feature.settings.radio.channel.channelsGraph
import org.meshtastic.feature.wifiprovision.navigation.wifiProvisionGraph
Expand All @@ -62,16 +63,11 @@ import org.meshtastic.feature.wifiprovision.navigation.wifiProvisionGraph
fun MainScreen() {
val viewModel: UIViewModel = koinViewModel()
// Land on Connections for first-run / no-device-selected; otherwise on Nodes (seeded from prefs).
val initialTab = remember {
if (viewModel.currentDeviceAddressFlow.value.isNullOrSelectedNone()) {
TopLevelDestination.Connect.route
} else {
NodesRoute.Nodes
}
}
val initialTab = remember { initialRoute(viewModel.currentDeviceAddressFlow.value) }
val multiBackstack = rememberMultiBackstack(initialTab)
val backStack = multiBackstack.activeBackStack
val scrollToTopEvents = viewModel.scrollToTopEventFlow
val settingsRadioConfigViewModelProvider = rememberSettingsRadioConfigViewModelProvider(backStack)

AndroidAppVersionCheck(viewModel)

Expand Down Expand Up @@ -113,7 +109,7 @@ fun MainScreen() {
channelsGraph(backStack)
connectionsGraph(backStack)
discoveryGraph(backStack)
settingsGraph(backStack)
settingsGraph(backStack, settingsRadioConfigViewModelProvider)
docsEntries(backStack)
firmwareGraph(backStack)
wifiProvisionGraph(backStack)
Expand All @@ -125,6 +121,9 @@ fun MainScreen() {
}
}

private fun initialRoute(deviceAddress: String?): NavKey =
if (deviceAddress.isNullOrSelectedNone()) TopLevelDestination.Connect.route else NodesRoute.Nodes

/** True when no device address is persisted, or the address is the "none" sentinel (`"n"`). */
private fun String?.isNullOrSelectedNone(): Boolean = isNullOrBlank() || this == "n"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ class NavigationAssemblyTest {
channelsGraph(backStack)
connectionsGraph(backStack)
discoveryGraph(backStack)
settingsGraph(backStack)
settingsGraph(backStack) { _ -> error("Settings ViewModel is not composed in this assembly test") }
firmwareGraph(backStack)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,12 @@
*/
package org.meshtastic.desktop.navigation

import androidx.compose.runtime.Composable
import androidx.navigation3.runtime.EntryProviderScope
import androidx.navigation3.runtime.NavBackStack
import androidx.navigation3.runtime.NavKey
import org.meshtastic.core.navigation.MultiBackstack
import org.meshtastic.core.navigation.SettingsRoute
import org.meshtastic.core.navigation.TopLevelDestination
import org.meshtastic.core.ui.viewmodel.UIViewModel
import org.meshtastic.feature.connections.navigation.connectionsGraph
Expand All @@ -30,6 +32,7 @@ import org.meshtastic.feature.map.navigation.mapGraph
import org.meshtastic.feature.messaging.navigation.contactsGraph
import org.meshtastic.feature.node.navigation.nodesGraph
import org.meshtastic.feature.settings.navigation.settingsGraph
import org.meshtastic.feature.settings.radio.RadioConfigViewModel
import org.meshtastic.feature.settings.radio.channel.channelsGraph
import org.meshtastic.feature.wifiprovision.navigation.wifiProvisionGraph

Expand All @@ -43,6 +46,7 @@ fun EntryProviderScope<NavKey>.desktopNavGraph(
backStack: NavBackStack<NavKey>,
uiViewModel: UIViewModel,
multiBackstack: MultiBackstack,
settingsRadioConfigViewModel: @Composable (SettingsRoute.Settings?) -> RadioConfigViewModel,
) {
nodesGraph(
backStack = backStack,
Expand All @@ -57,7 +61,7 @@ fun EntryProviderScope<NavKey>.desktopNavGraph(
)
mapGraph(backStack)
firmwareGraph(backStack)
settingsGraph(backStack)
settingsGraph(backStack, settingsRadioConfigViewModel)
docsEntries(backStack)
channelsGraph(backStack)
connectionsGraph(backStack)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,19 @@ import org.meshtastic.core.ui.component.MeshtasticNavDisplay
import org.meshtastic.core.ui.component.MeshtasticNavigationSuite
import org.meshtastic.core.ui.viewmodel.UIViewModel
import org.meshtastic.desktop.navigation.desktopNavGraph
import org.meshtastic.feature.settings.navigation.rememberSettingsRadioConfigViewModelProvider

/**
* Desktop main screen — assembles the shared [MeshtasticAppShell], [MeshtasticNavigationSuite], and
* [MeshtasticNavDisplay] with the desktop-specific [desktopNavGraph] entry provider.
*/
@Suppress("ViewModelForwarding")
@Composable
fun DesktopMainScreen(uiViewModel: UIViewModel, multiBackstack: MultiBackstack) {
fun DesktopMainScreen(uiViewModel: UIViewModel, multiBackstack: MultiBackstack, modifier: Modifier = Modifier) {
val backStack = multiBackstack.activeBackStack
val settingsRadioConfigViewModelProvider = rememberSettingsRadioConfigViewModelProvider(backStack)

Surface(modifier = Modifier.fillMaxSize()) {
Surface(modifier = modifier.fillMaxSize()) {
MeshtasticAppShell(
multiBackstack = multiBackstack,
uiViewModel = uiViewModel,
Expand All @@ -50,7 +53,15 @@ fun DesktopMainScreen(uiViewModel: UIViewModel, multiBackstack: MultiBackstack)
uiViewModel = uiViewModel,
modifier = Modifier.fillMaxSize(),
) {
val provider = entryProvider<NavKey> { desktopNavGraph(backStack, uiViewModel, multiBackstack) }
val provider =
entryProvider<NavKey> {
desktopNavGraph(
backStack = backStack,
uiViewModel = uiViewModel,
multiBackstack = multiBackstack,
settingsRadioConfigViewModel = settingsRadioConfigViewModelProvider,
)
}
MeshtasticNavDisplay(
multiBackstack = multiBackstack,
entryProvider = provider,
Expand Down
Loading
Loading