update app navigation

This commit is contained in:
Shcherbatykh Oleg
2026-02-27 11:00:07 +03:00
parent 8a5e98dc2e
commit 1f6e7b8ac0
9 changed files with 97 additions and 75 deletions

View File

@@ -0,0 +1,30 @@
package ru.fincode.tsudesk.di
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import ru.fincode.tsudesk.BuildConfig
import ru.fincode.tsudesk.core.common.app.AppConfig
import javax.inject.Singleton
private const val BASE_TIMEOUT = 30L
@Module
@InstallIn(SingletonComponent::class)
object AppConfigModule {
private const val BASE_URL_PROD = "https://tulsu.ru/schedule/queries/"
private const val BASE_URL_DEVELOP = "https://scherbatykh.ru/app/tsudesk/"
@Provides
@Singleton
fun provideAppConfig(): AppConfig {
val baseUrl = if (BuildConfig.DEBUG) BASE_URL_PROD else BASE_URL_PROD
return AppConfig(
isDebug = BuildConfig.DEBUG,
baseUrl = baseUrl,
networkTimeoutSec = BASE_TIMEOUT
)
}
}

View File

@@ -1,37 +1,32 @@
package ru.fincode.tsudesk.app.presentation.main
package ru.fincode.tsudesk.presentation.main
import androidx.navigation.NavBackStackEntry
import androidx.navigation.NavDestination
import androidx.navigation.NavDestination.Companion.hasRoute
import ru.fincode.tsudesk.core.navigation.AppRoute
import ru.fincode.tsudesk.core.navigation.TopLevelDestination
import ru.fincode.tsudesk.core.navigation.route
fun selectedTopLevel(entry: NavBackStackEntry?): TopLevelDestination {
if (entry == null) return TopLevelDestination.SCHEDULE
val dest: NavDestination = entry?.destination ?: return TopLevelDestination.SCHEDULE
return runCatching {
when (entry.route<AppRoute>()) {
AppRoute.Schedule,
is AppRoute.ScheduleDetails -> TopLevelDestination.SCHEDULE
return when {
dest.hasRoute<AppRoute.Schedule>() || dest.hasRoute<AppRoute.ScheduleDetails>() ->
TopLevelDestination.SCHEDULE
AppRoute.News,
is AppRoute.NewsDetails -> TopLevelDestination.NEWS
dest.hasRoute<AppRoute.News>() || dest.hasRoute<AppRoute.NewsDetails>() ->
TopLevelDestination.NEWS
AppRoute.Progress -> TopLevelDestination.PROGRESS
dest.hasRoute<AppRoute.Progress>() ->
TopLevelDestination.PROGRESS
AppRoute.Settings -> TopLevelDestination.SETTINGS
dest.hasRoute<AppRoute.Settings>() ->
TopLevelDestination.SETTINGS
else -> TopLevelDestination.SCHEDULE
}
}.getOrDefault(TopLevelDestination.SCHEDULE)
else -> TopLevelDestination.SCHEDULE
}
}
fun shouldShowBottomBar(entry: NavBackStackEntry?): Boolean {
if (entry == null) return false
return runCatching {
when (entry.route<AppRoute>()) {
AppRoute.Splash -> false
else -> true
}
}.getOrDefault(true)
val dest: NavDestination = entry?.destination ?: return false
return !dest.hasRoute<AppRoute.Splash>()
}

View File

@@ -12,8 +12,6 @@ import androidx.navigation.compose.currentBackStackEntryAsState
import ru.fincode.core.ui.components.BottomBarItem
import ru.fincode.core.ui.components.TsudeskBottomBar
import ru.fincode.tsudesk.R
import ru.fincode.tsudesk.app.presentation.main.selectedTopLevel
import ru.fincode.tsudesk.app.presentation.main.shouldShowBottomBar
import ru.fincode.tsudesk.core.navigation.TopLevelDestination
import ru.fincode.tsudesk.core.navigation.navigateToTopLevel

View File

@@ -2,7 +2,6 @@ package ru.fincode.tsudesk.presentation.main
import androidx.annotation.StringRes
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.graphics.vector.ImageVector
import ru.fincode.tsudesk.core.navigation.TopLevelDestination
data class TopLevelItem(

View File

@@ -1,19 +1,19 @@
package ru.fincode.tsudesk.presentation.navigation
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.navigation
import ru.fincode.tsudesk.presentation.main.MainScaffold
import androidx.navigation.compose.rememberNavController
import ru.fincode.tsudesk.core.navigation.AppRoute
import ru.fincode.tsudesk.core.navigation.navigateRoute
import ru.fincode.tsudesk.feature.news.presentation.screen.NewsRoute
import ru.fincode.tsudesk.presentation.main.MainScaffold
import ru.fincode.tsudesk.feature.schedule.presentation.screen.ScheduleRoute
import ru.fincode.tsudesk.feature.splash.presentation.screen.SplashRoute
@Composable
fun AppNavHost(
navController: NavHostController,
@@ -33,51 +33,45 @@ fun AppNavHost(
)
}
navigation<AppRoute.Main>(startDestination = AppRoute.Schedule) {
composable<AppRoute.Main> {
val tabsNavController = rememberNavController()
composable<AppRoute.Schedule> {
MainScaffold(navController) { innerModifier ->
ScheduleRoute(
modifier = innerModifier,
// onOpenDetails = { lessonId ->
// navController.navigateRoute(AppRoute.ScheduleDetails(lessonId))
// }
)
}
MainScaffold(
navController = tabsNavController
) { innerModifier ->
MainTabsNavHost(
navController = tabsNavController,
modifier = innerModifier
)
}
}
}
}
composable<AppRoute.News> {
MainScaffold(navController) { innerModifier: Modifier ->
// NewsScreen(
// modifier = innerModifier,
// onOpenDetails = { id ->
// navController.navigateRoute(AppRoute.NewsDetails(id))
// }
// )
}
}
@Composable
private fun MainTabsNavHost(
navController: NavHostController,
modifier: Modifier = Modifier,
) {
NavHost(
navController = navController,
startDestination = AppRoute.Schedule,
modifier = modifier
) {
composable<AppRoute.Schedule> {
ScheduleRoute(modifier = Modifier.fillMaxSize())
}
composable<AppRoute.Progress> {
MainScaffold(navController) { innerModifier: Modifier ->
// ProgressScreen(modifier = innerModifier)
}
}
composable<AppRoute.News> {
NewsRoute(modifier = Modifier.fillMaxSize())
}
composable<AppRoute.Settings> {
MainScaffold(navController) { innerModifier ->
// SettingsRoute(modifier = innerModifier)
}
}
//
// composable<AppRoute.ScheduleDetails> { entry ->
// val args = entry.route<AppRoute.ScheduleDetails>()
// ScheduleDetailsScreen(lessonId = args.lessonId)
// }
//
// composable<AppRoute.NewsDetails> { entry ->
// val args = entry.route<AppRoute.NewsDetails>()
// NewsDetailsScreen(id = args.id)
// }
composable<AppRoute.Progress> {
// ProgressRoute(modifier = Modifier)
}
composable<AppRoute.Settings> {
// SettingsRoute(modifier = Modifier)
}
}
}