kopia lustrzana https://github.com/vitorpamplona/amethyst
74 wiersze
2.8 KiB
Kotlin
74 wiersze
2.8 KiB
Kotlin
package com.vitorpamplona.amethyst.ui.screen
|
|
|
|
import androidx.compose.animation.Crossfade
|
|
import androidx.compose.foundation.background
|
|
import androidx.compose.foundation.layout.Column
|
|
import androidx.compose.foundation.layout.padding
|
|
import androidx.compose.foundation.layout.statusBarsPadding
|
|
import androidx.compose.material.*
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.getValue
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.lifecycle.compose.ExperimentalLifecycleComposeApi
|
|
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
|
import androidx.navigation.NavHostController
|
|
import androidx.navigation.compose.rememberNavController
|
|
import com.vitorpamplona.amethyst.buttons.NewNoteButton
|
|
import com.vitorpamplona.amethyst.ui.navigation.AppBottomBar
|
|
import com.vitorpamplona.amethyst.ui.navigation.AppNavigation
|
|
import com.vitorpamplona.amethyst.ui.navigation.AppTopBar
|
|
import com.vitorpamplona.amethyst.ui.navigation.DrawerContent
|
|
import com.vitorpamplona.amethyst.ui.navigation.Route
|
|
import com.vitorpamplona.amethyst.ui.navigation.currentRoute
|
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
|
|
|
@Composable
|
|
fun MainScreen(accountViewModel: AccountViewModel, accountStateViewModel: AccountStateViewModel) {
|
|
val navController = rememberNavController()
|
|
val scaffoldState = rememberScaffoldState(rememberDrawerState(DrawerValue.Closed))
|
|
|
|
Scaffold(
|
|
modifier = Modifier
|
|
.background(MaterialTheme.colors.primaryVariant)
|
|
.statusBarsPadding(),
|
|
bottomBar = {
|
|
AppBottomBar(navController)
|
|
},
|
|
topBar = {
|
|
AppTopBar(navController, scaffoldState, accountViewModel)
|
|
},
|
|
drawerContent = {
|
|
DrawerContent(navController, scaffoldState, accountViewModel, accountStateViewModel)
|
|
},
|
|
floatingActionButton = {
|
|
FloatingButton(navController, accountStateViewModel)
|
|
},
|
|
scaffoldState = scaffoldState
|
|
) {
|
|
Column(modifier = Modifier.padding(bottom = it.calculateBottomPadding())) {
|
|
AppNavigation(navController, accountViewModel)
|
|
}
|
|
}
|
|
}
|
|
|
|
@OptIn(ExperimentalLifecycleComposeApi::class)
|
|
@Composable
|
|
fun FloatingButton(navController: NavHostController, accountViewModel: AccountStateViewModel) {
|
|
val accountState by accountViewModel.accountContent.collectAsStateWithLifecycle()
|
|
|
|
if (currentRoute(navController) == Route.Home.route) {
|
|
Crossfade(targetState = accountState) { state ->
|
|
when (state) {
|
|
is AccountState.LoggedInViewOnly -> {
|
|
// Does nothing.
|
|
}
|
|
is AccountState.LoggedOff -> {
|
|
// Does nothing.
|
|
}
|
|
is AccountState.LoggedIn -> {
|
|
NewNoteButton(state.account)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |