switched to accompanist navigation

This commit is contained in:
X1nto 2021-08-20 12:17:47 +04:00
parent c289a70d9a
commit 54f947cc95
2 changed files with 42 additions and 23 deletions

View File

@ -103,9 +103,10 @@ dependencies {
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07")
val accompanistVersion = "0.17.0"
implementation("com.google.accompanist:accompanist-navigation-animation:$accompanistVersion")
implementation("com.google.accompanist:accompanist-placeholder-material:$accompanistVersion")
implementation("com.google.accompanist:accompanist-swiperefresh:$accompanistVersion")
implementation("com.google.accompanist:accompanist-systemuicontroller:$accompanistVersion")
implementation("com.google.accompanist:accompanist-placeholder-material:$accompanistVersion")
implementation("io.coil-kt:coil-compose:1.3.0")

View File

@ -2,8 +2,11 @@ package com.vanced.manager.ui
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.BackHandler
import androidx.activity.compose.setContent
import androidx.compose.animation.AnimatedContentScope
import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.foundation.background
import androidx.compose.material.*
import androidx.compose.material.icons.Icons
@ -13,15 +16,18 @@ import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.compose.ui.util.fastForEach
import androidx.navigation.NavHostController
import androidx.navigation.compose.currentBackStackEntryAsState
import com.google.accompanist.navigation.animation.AnimatedNavHost
import com.google.accompanist.navigation.animation.composable
import com.google.accompanist.navigation.animation.rememberAnimatedNavController
import com.google.accompanist.systemuicontroller.rememberSystemUiController
import com.vanced.manager.ui.component.color.managerAnimatedColor
import com.vanced.manager.ui.component.color.managerSurfaceColor
import com.vanced.manager.ui.component.color.managerTextColor
import com.vanced.manager.ui.component.menu.ManagerDropdownMenuItem
import com.vanced.manager.ui.component.text.ToolbarTitleText
import com.vanced.manager.ui.navigation.ManagerNavigator
import com.vanced.manager.ui.navigation.NavigationController
import com.vanced.manager.ui.navigation.rememberNavigationController
import com.vanced.manager.ui.resources.managerString
import com.vanced.manager.ui.theme.ManagerTheme
import com.vanced.manager.ui.theme.isDark
@ -38,15 +44,14 @@ class MainActivity : ComponentActivity() {
}
}
@OptIn(ExperimentalAnimationApi::class)
@Composable
fun MainActivityLayout() {
val systemUiController = rememberSystemUiController()
val surfaceColor = managerSurfaceColor()
val isDark = isDark()
val navController = rememberNavigationController<Screen>(
initialScreen = Screen.Home
)
val navController = rememberAnimatedNavController()
val screens = listOf(
Screen.Home,
@ -59,12 +64,6 @@ class MainActivity : ComponentActivity() {
systemUiController.setSystemBarsColor(surfaceColor, !isDark)
}
BackHandler {
if (!navController.pop()) {
finish()
}
}
Scaffold(
topBar = {
MainToolbar(
@ -74,22 +73,41 @@ class MainActivity : ComponentActivity() {
},
backgroundColor = surfaceColor
) {
ManagerNavigator(
navigationController = navController
AnimatedNavHost(
navController = navController,
startDestination = "home",
) {
it.content()
screens.fastForEach { screen ->
composable(
route = screen.route,
enterTransition = { _, _ ->
slideIntoContainer(AnimatedContentScope.SlideDirection.Start) + fadeIn()
},
exitTransition = { _, _ ->
slideOutOfContainer(AnimatedContentScope.SlideDirection.End) + fadeOut()
},
popEnterTransition = { _, _ ->
slideIntoContainer(AnimatedContentScope.SlideDirection.End) + fadeIn()
},
popExitTransition = { _, _ ->
slideOutOfContainer(AnimatedContentScope.SlideDirection.Start) + fadeOut()
}
) {
screen.content()
}
}
}
}
}
@Composable
fun MainToolbar(
navController: NavigationController<Screen>,
navController: NavHostController,
screens: List<Screen>,
) {
var isMenuExpanded by remember { mutableStateOf(false) }
val currentScreenRoute = navController.screens.last().route
val currentScreenRoute = navController.currentBackStackEntryAsState().value?.destination?.route
TopAppBar(
title = {
ToolbarTitleText(managerString(stringId = screens.find { it.route == currentScreenRoute }?.displayName))
@ -114,12 +132,12 @@ class MainActivity : ComponentActivity() {
},
modifier = Modifier.background(MaterialTheme.colors.surface)
) {
screens.filter { it.route != currentScreenRoute }.forEach {
screens.filter { it.route != currentScreenRoute }.forEach { screen ->
ManagerDropdownMenuItem(
title = stringResource(id = it.displayName)
title = stringResource(id = screen.displayName)
) {
isMenuExpanded = !isMenuExpanded
navController.push(it)
navController.navigate(screen.route)
}
}
}
@ -127,7 +145,7 @@ class MainActivity : ComponentActivity() {
},
navigationIcon = if (currentScreenRoute != Screen.Home.route) {{
IconButton(onClick = {
navController.pop()
navController.popBackStack()
}) {
Icon(
imageVector = Icons.Default.ArrowBackIos,