diff --git a/app/src/main/java/chat/revolt/activities/MainActivity.kt b/app/src/main/java/chat/revolt/activities/MainActivity.kt index 158bf8ba..1c35551d 100644 --- a/app/src/main/java/chat/revolt/activities/MainActivity.kt +++ b/app/src/main/java/chat/revolt/activities/MainActivity.kt @@ -214,7 +214,11 @@ class MainActivityViewModel @Inject constructor( Log.d("MainActivity", "Onboarding state is complete, logging in") RevoltAPI.loginAs(token) RevoltAPI.setSessionId(id) - startWithDestination("chat") + if (Experiments.usePolar.isEnabled) { + startWithDestination("main") + } else { + startWithDestination("chat") + } } catch (e: Exception) { Log.e("MainActivity", "Failed to login, could not log in", e) couldNotLogIn.emit(true) diff --git a/app/src/main/java/chat/revolt/screens/chat/views/OverviewScreen.kt b/app/src/main/java/chat/revolt/screens/chat/views/OverviewScreen.kt index f2892f58..077cff04 100644 --- a/app/src/main/java/chat/revolt/screens/chat/views/OverviewScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/views/OverviewScreen.kt @@ -13,6 +13,7 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.exclude import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding @@ -31,8 +32,10 @@ import androidx.compose.material3.IconButton import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.NavigationBarDefaults import androidx.compose.material3.ProvideTextStyle import androidx.compose.material3.Scaffold +import androidx.compose.material3.ScaffoldDefaults import androidx.compose.material3.Text import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable @@ -64,7 +67,12 @@ import io.sentry.Sentry @OptIn(ExperimentalMaterial3Api::class) @Composable -fun OverviewScreen(navController: NavController, useDrawer: Boolean, onDrawerClicked: () -> Unit) { +fun OverviewScreen( + navController: NavController, + useDrawer: Boolean, + onDrawerClicked: () -> Unit, + includePadding: Boolean = true +) { val context = LocalContext.current var isLoading by rememberSaveable { mutableStateOf(true) } @@ -119,6 +127,9 @@ fun OverviewScreen(navController: NavController, useDrawer: Boolean, onDrawerCli windowInsets = WindowInsets.zero ) }, + contentWindowInsets = if (includePadding) ScaffoldDefaults.contentWindowInsets else ScaffoldDefaults.contentWindowInsets.exclude( + NavigationBarDefaults.windowInsets + ) ) { pv -> if (user == null && !isLoading) { NonIdealState( @@ -138,8 +149,11 @@ fun OverviewScreen(navController: NavController, useDrawer: Boolean, onDrawerCli Column( horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier - .padding(pv) - .padding(horizontal = 16.dp) + .then( + Modifier + .padding(pv) + .padding(horizontal = 16.dp) + ) ) { AnimatedContent(targetState = isLoading, label = "isLoading") { loading -> Column( diff --git a/app/src/main/java/chat/revolt/screens/main/MainScreen.kt b/app/src/main/java/chat/revolt/screens/main/MainScreen.kt new file mode 100644 index 00000000..bb4a654e --- /dev/null +++ b/app/src/main/java/chat/revolt/screens/main/MainScreen.kt @@ -0,0 +1,109 @@ +package chat.revolt.screens.main + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Icon +import androidx.compose.material3.NavigationBar +import androidx.compose.material3.NavigationBarItem +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.navigation.NavController +import chat.revolt.R +import chat.revolt.screens.chat.views.OverviewScreen + +enum class MainScreenTab { + Communities, + Conversations, + Overview +} + +@Composable +fun MainScreen(navController: NavController) { + var currentTab by rememberSaveable { mutableStateOf(MainScreenTab.Communities) } + + Scaffold( + bottomBar = { + NavigationBar { + NavigationBarItem( + selected = currentTab == MainScreenTab.Communities, + onClick = { currentTab = MainScreenTab.Communities }, + icon = { + Icon( + painter = painterResource( + if (currentTab == MainScreenTab.Communities) { + R.drawable.ic_account_group_24dp + } else { + R.drawable.ic_account_group_outline_24dp + } + ), + contentDescription = null, + ) + }, + label = { + Text("Communities") + } + ) + NavigationBarItem( + selected = currentTab == MainScreenTab.Conversations, + onClick = { currentTab = MainScreenTab.Conversations }, + icon = { + Icon( + painter = painterResource( + if (currentTab == MainScreenTab.Conversations) { + R.drawable.ic_forum_24dp + } else { + R.drawable.ic_forum_outline_24dp + } + ), + contentDescription = null, + ) + }, + label = { + Text("Conversations") + } + ) + NavigationBarItem( + selected = currentTab == MainScreenTab.Overview, + onClick = { currentTab = MainScreenTab.Overview }, + icon = { + Icon( + painter = painterResource( + if (currentTab == MainScreenTab.Overview) { + R.drawable.ic_creation_24dp + } else { + R.drawable.ic_creation_outline_24dp + } + ), + contentDescription = null, + ) + }, + label = { + Text("Overview") + } + ) + } + }, + ) { pv -> + Box(Modifier.padding(pv)) { + when (currentTab) { + MainScreenTab.Communities -> {} + MainScreenTab.Conversations -> {} + MainScreenTab.Overview -> { + OverviewScreen( + navController, + useDrawer = false, + onDrawerClicked = {}, + includePadding = false + ) + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_account_group_24dp.xml b/app/src/main/res/drawable/ic_account_group_24dp.xml new file mode 100644 index 00000000..84c19352 --- /dev/null +++ b/app/src/main/res/drawable/ic_account_group_24dp.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_account_group_outline_24dp.xml b/app/src/main/res/drawable/ic_account_group_outline_24dp.xml new file mode 100644 index 00000000..5ceed4a1 --- /dev/null +++ b/app/src/main/res/drawable/ic_account_group_outline_24dp.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_creation_outline_24dp.xml b/app/src/main/res/drawable/ic_creation_outline_24dp.xml new file mode 100644 index 00000000..2ded97ab --- /dev/null +++ b/app/src/main/res/drawable/ic_creation_outline_24dp.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_forum_24dp.xml b/app/src/main/res/drawable/ic_forum_24dp.xml new file mode 100644 index 00000000..f7af313f --- /dev/null +++ b/app/src/main/res/drawable/ic_forum_24dp.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_forum_outline_24dp.xml b/app/src/main/res/drawable/ic_forum_outline_24dp.xml new file mode 100644 index 00000000..44aee6c7 --- /dev/null +++ b/app/src/main/res/drawable/ic_forum_outline_24dp.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file