Skip to content

Commit

Permalink
Revert "Refactor navigation"
Browse files Browse the repository at this point in the history
  • Loading branch information
stslex authored Oct 27, 2024
1 parent 932d359 commit 35bd61e
Show file tree
Hide file tree
Showing 23 changed files with 127 additions and 535 deletions.
6 changes: 3 additions & 3 deletions app/src/main/java/com/stslex93/notes/ui/AppInit.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.navigation.NavHostController
import com.google.accompanist.systemuicontroller.rememberSystemUiController
import com.stslex93.notes.core.navigation.v2.controller.NavExtrasHostController

@Composable
fun AppInit(
navController: NavExtrasHostController,
navController: NavHostController,
modifier: Modifier = Modifier
) {
val systemUiController = rememberSystemUiController()
Expand All @@ -34,7 +34,7 @@ fun AppInit(
.background(MaterialTheme.colorScheme.background)
) {
NavigationHost(
navController = navController,
navHostController = navController,
modifier = modifier
)
}
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/java/com/stslex93/notes/ui/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.WindowCompat
import androidx.navigation.compose.rememberNavController
import com.stslex93.notes.core.navigation.di.NavigationComponentBuilder
import com.stslex93.notes.core.navigation.v2.controller.rememberNavExtrasController
import com.stslex93.notes.core.ui.di.MainUiApi
import com.stslex93.notes.core.ui.di.NavigationApi
import com.stslex93.notes.core.ui.theme.AppTheme
Expand All @@ -21,7 +21,7 @@ class MainActivity : AppCompatActivity(), MainUiApi {
super.onCreate(savedInstanceState)
WindowCompat.setDecorFitsSystemWindows(window, false)
setContent {
val navController = rememberNavExtrasController()
val navController = rememberNavController()
_navigationApi = NavigationComponentBuilder
.build(navController)
.also { api ->
Expand Down
15 changes: 9 additions & 6 deletions app/src/main/java/com/stslex93/notes/ui/NavigationHost.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,25 @@ package com.stslex93.notes.ui

import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import com.stslex93.notes.core.navigation.v2.compose.NavExtrasHost
import com.stslex93.notes.core.navigation.v2.controller.NavExtrasHostController
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import com.stslex93.notes.core.navigation.model.AppDestination
import com.stslex93.notes.feature.edit.ui.init.editGraph
import com.stslex93.notes.feature.edit_label.navigation.graph.editLabelGraph
import com.stslex93.notes.feature.home.navigation.homeGraph

@Composable
fun NavigationHost(
navController: NavExtrasHostController,
navHostController: NavHostController,
modifier: Modifier = Modifier,
startDestination: AppDestination = AppDestination.HOME
) {
NavExtrasHost(
navController = navController,
NavHost(
navController = navHostController,
startDestination = startDestination.route
) {
homeGraph(modifier)
editGraph(modifier)
editLabelGraph(modifier)
}
}
}
1 change: 0 additions & 1 deletion core/navigation/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
plugins {
id("notes.android.library")
id("notes.android.library.compose")
id("kotlin-parcelize")
}

dependencies {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.stslex93.notes.core.navigation.di

import com.stslex93.notes.core.navigation.v2.controller.NavExtrasHostController
import androidx.navigation.NavHostController
import com.stslex93.notes.core.ui.di.NavigationApi
import dagger.BindsInstance
import dagger.Component
Expand All @@ -14,7 +14,7 @@ interface NavigationComponent : NavigationApi {
interface Builder {

@BindsInstance
fun controller(navController: NavExtrasHostController): Builder
fun controller(navHostController: NavHostController): Builder

fun build(): NavigationApi
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package com.stslex93.notes.core.navigation.di

import com.stslex93.notes.core.navigation.v2.controller.NavExtrasHostController
import androidx.navigation.NavHostController
import com.stslex93.notes.core.ui.di.NavigationApi

object NavigationComponentBuilder {

fun build(
navController: NavExtrasHostController
navHostController: NavHostController
): NavigationApi = DaggerNavigationComponent
.builder()
.controller(navController)
.controller(navHostController)
.build()
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.stslex93.notes.core.navigation.di

import com.stslex93.notes.core.navigation.v2.navigator.NavigatorImpl
import com.stslex93.notes.core.navigation.navigator.NavigatorImpl
import com.stslex93.notes.core.ui.di.Navigator
import dagger.Binds
import dagger.Module
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,42 +2,42 @@ package com.stslex93.notes.core.navigation.model

import com.stslex93.notes.core.ui.di.Screen

//sealed class NavigationScreen : Screen {
//
// abstract val screen: AppDestination
//
// val screenRoute: String
// get() = "${screen.route}${appArgs.argumentsForRoute}"
//
// open val isSingleTop: Boolean
// get() = false
//
// open val appArgs: AppArguments
// get() = AppArguments.Empty
//
// data object HomeScreen : NavigationScreen() {
// override val screen: AppDestination = AppDestination.HOME
// override val isSingleTop: Boolean = true
// }
//
// data class EditNoteScreen(
// private val noteId: Int,
// private val isEdit: Boolean
// ) : NavigationScreen() {
// override val screen: AppDestination = AppDestination.NOTE_EDIT
// override val appArgs: AppArguments = AppArguments.NoteEdit(noteId, isEdit)
// }
//
// data class EditLabelScreen(
// private val noteIds: Set<Int>
// ) : NavigationScreen() {
// override val screen = AppDestination.LABEL_EDIT
// override val appArgs = AppArguments.LabelEdit(noteIds)
// }
//
// data object PopBackStack : NavigationScreen() {
//
// override val screen: AppDestination = AppDestination.UNDEFINED
// override val appArgs: AppArguments = AppArguments.Empty
// }
//}
sealed class NavigationScreen : Screen {

abstract val screen: AppDestination

val screenRoute: String
get() = "${screen.route}${appArgs.argumentsForRoute}"

open val isSingleTop: Boolean
get() = false

open val appArgs: AppArguments
get() = AppArguments.Empty

data object HomeScreen : NavigationScreen() {
override val screen: AppDestination = AppDestination.HOME
override val isSingleTop: Boolean = true
}

data class EditNoteScreen(
private val noteId: Int,
private val isEdit: Boolean
) : NavigationScreen() {
override val screen: AppDestination = AppDestination.NOTE_EDIT
override val appArgs: AppArguments = AppArguments.NoteEdit(noteId, isEdit)
}

data class EditLabelScreen(
private val noteIds: Set<Int>
) : NavigationScreen() {
override val screen = AppDestination.LABEL_EDIT
override val appArgs = AppArguments.LabelEdit(noteIds)
}

data object PopBackStack : NavigationScreen() {

override val screen: AppDestination = AppDestination.UNDEFINED
override val appArgs: AppArguments = AppArguments.Empty
}
}
Original file line number Diff line number Diff line change
@@ -1,31 +1,38 @@
package com.stslex93.notes.core.navigation.navigator

//class NavigatorImpl @Inject constructor(
// private val navController: NavHostController
//) : Navigator {
//
// override fun invoke(screen: Screen) {
// when (screen) {
// is NavigationScreen.PopBackStack -> navController.popBackStack()
// is NavigationScreen -> navigateScreen(screen)
// else -> {
// Logger.debug("unresolve navigation route", this::class.simpleName)
// }
// }
// }
//
// private fun navigateScreen(screen: NavigationScreen) {
// val currentRoute = navController.currentDestination?.route ?: return
// if (currentRoute == screen.screen.navigationRoute) return
//
// navController.navigate(screen.screenRoute) {
// if (screen.isSingleTop.not()) return@navigate
//
// popUpTo(currentRoute) {
// inclusive = true
// saveState = true
// }
// launchSingleTop = true
// }
// }
//}
import androidx.navigation.NavHostController
import com.stslex.aproselection.core.core.Logger
import com.stslex93.notes.core.navigation.model.NavigationScreen
import com.stslex93.notes.core.ui.di.Navigator
import com.stslex93.notes.core.ui.di.Screen
import javax.inject.Inject

class NavigatorImpl @Inject constructor(
private val navController: NavHostController
) : Navigator {

override fun invoke(screen: Screen) {
when (screen) {
is NavigationScreen.PopBackStack -> navController.popBackStack()
is NavigationScreen -> navigateScreen(screen)
else -> {
Logger.debug("unresolve navigation route", this::class.simpleName)
}
}
}

private fun navigateScreen(screen: NavigationScreen) {
val currentRoute = navController.currentDestination?.route ?: return
if (currentRoute == screen.screen.navigationRoute) return

navController.navigate(screen.screenRoute) {
if (screen.isSingleTop.not()) return@navigate

popUpTo(currentRoute) {
inclusive = true
saveState = true
}
launchSingleTop = true
}
}
}

This file was deleted.

This file was deleted.

Loading

0 comments on commit 35bd61e

Please sign in to comment.