diff --git a/app/src/main/java/com/geeksville/mesh/MainActivity.kt b/app/src/main/java/com/geeksville/mesh/MainActivity.kt index 1f7b176ba..5263a5883 100644 --- a/app/src/main/java/com/geeksville/mesh/MainActivity.kt +++ b/app/src/main/java/com/geeksville/mesh/MainActivity.kt @@ -42,23 +42,23 @@ title. Fragments: -SettingsFragment shows +SettingsFragment shows "Settings" username shortname bluetooth pairing list (eventually misc device settings that are not channel related) -Channel fragment +Channel fragment "Channel" qr code, copy link button ch number misc other settings (eventually a way of choosing between past channels) -ChatFragment +ChatFragment "Messages" a text box to enter new texts a scrolling list of rows. each row is a text and a sender info layout -NodeListFragment +NodeListFragment "Users" a node info row for every node ViewModels: diff --git a/app/src/main/java/com/geeksville/mesh/ui/MeshApp.kt b/app/src/main/java/com/geeksville/mesh/ui/MeshApp.kt index 9dbc2ab31..e1889d17b 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/MeshApp.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/MeshApp.kt @@ -152,7 +152,7 @@ fun MeshApp() { } } -@Preview +// @Preview @Composable fun previewView() { // It seems modaldrawerlayout not yet supported in preview @@ -161,6 +161,15 @@ fun previewView() { } } +@Preview +@Composable +fun previewDrawer() { + AppDrawer( + currentScreen = AppStatus.currentScreen, + closeDrawer = { } + ) +} + @Composable private fun AppContent(openDrawer: () -> Unit) { Crossfade(AppStatus.currentScreen) { screen -> @@ -178,11 +187,9 @@ private fun AppContent(openDrawer: () -> Unit) { VerticalScroller(modifier = LayoutFlexible(1f)) { when (screen) { - is Screen.Home -> HomeContent() - is Screen.SelectRadio -> BTScanScreen() - // Question: how to get hooks invoked when this screen gets shown/removed? - // i.e. I need to start/stop a bluetooth scan operation. depending on the - // appearance/disappearance of this screen. + Screen.messages -> HomeContent() + Screen.settings -> BTScanScreen() + else -> TODO() } } } @@ -192,7 +199,7 @@ private fun AppContent(openDrawer: () -> Unit) { @Composable private fun AppDrawer( - currentScreen: Screen, + currentScreen: ScreenInfo, closeDrawer: () -> Unit ) { Column(modifier = LayoutSize.Fill) { @@ -203,15 +210,15 @@ private fun AppDrawer( tint = (MaterialTheme.colors()).primary ) Spacer(LayoutWidth(8.dp)) - VectorImage(id = R.drawable.ic_launcher_new_foreground) + // VectorImage(id = R.drawable.ic_launcher_new_foreground) } Divider(color = Color(0x14333333)) @Composable - fun ScreenButton(icon: Int, label: String, screen: Screen) { + fun ScreenButton(screen: ScreenInfo) { DrawerButton( - icon = icon, - label = label, + icon = screen.icon, + label = screen.label, isSelected = currentScreen == screen ) { navigateTo(screen) @@ -219,8 +226,10 @@ private fun AppDrawer( } } - ScreenButton(R.drawable.ic_launcher_new_foreground, "Home", Screen.Home) - ScreenButton(R.drawable.ic_launcher_new_foreground, "Setup", Screen.SelectRadio) + ScreenButton(Screen.messages) + ScreenButton(Screen.users) + ScreenButton(Screen.channel) + ScreenButton(Screen.settings) } } diff --git a/app/src/main/java/com/geeksville/mesh/ui/Status.kt b/app/src/main/java/com/geeksville/mesh/ui/Status.kt index f16b5b268..069c8469c 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/Status.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/Status.kt @@ -3,22 +3,25 @@ package com.geeksville.mesh.ui import android.util.Base64 import androidx.compose.Model import androidx.compose.mutableStateOf -import com.geeksville.mesh.MeshProtos -import com.geeksville.mesh.MeshUser -import com.geeksville.mesh.NodeInfo -import com.geeksville.mesh.Position +import com.geeksville.mesh.* import com.google.android.gms.auth.api.signin.GoogleSignInClient import java.util.* + +data class ScreenInfo(val icon: Int, val label: String) + // defines the screens we have in the app -sealed class Screen { - object Home : Screen() - object SelectRadio : Screen() +object Screen { + val settings = ScreenInfo(R.drawable.ic_twotone_settings_applications_24, "Settings") + val channel = ScreenInfo(R.drawable.ic_twotone_contactless_24, "Channel") + val users = ScreenInfo(R.drawable.ic_twotone_people_24, "Users") + val messages = ScreenInfo(R.drawable.ic_twotone_message_24, "Messages") } + @Model object AppStatus { - var currentScreen: Screen = Screen.Home + var currentScreen: ScreenInfo = Screen.messages } data class TextMessage(val date: Date, val from: String, val text: String) @@ -96,6 +99,6 @@ object UIState { /** * Temporary solution pending navigation support. */ -fun navigateTo(destination: Screen) { +fun navigateTo(destination: ScreenInfo) { AppStatus.currentScreen = destination } diff --git a/app/src/main/res/drawable/ic_twotone_contactless_24.xml b/app/src/main/res/drawable/ic_twotone_contactless_24.xml new file mode 100644 index 000000000..8a999651b --- /dev/null +++ b/app/src/main/res/drawable/ic_twotone_contactless_24.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/ic_twotone_message_24.xml b/app/src/main/res/drawable/ic_twotone_message_24.xml new file mode 100644 index 000000000..9ad22351e --- /dev/null +++ b/app/src/main/res/drawable/ic_twotone_message_24.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/ic_twotone_people_24.xml b/app/src/main/res/drawable/ic_twotone_people_24.xml new file mode 100644 index 000000000..74a346d8f --- /dev/null +++ b/app/src/main/res/drawable/ic_twotone_people_24.xml @@ -0,0 +1,18 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_twotone_settings_applications_24.xml b/app/src/main/res/drawable/ic_twotone_settings_applications_24.xml new file mode 100644 index 000000000..e2368d7a8 --- /dev/null +++ b/app/src/main/res/drawable/ic_twotone_settings_applications_24.xml @@ -0,0 +1,14 @@ + + + +