From b5c039eabafe96601b5a1850198c60c95c89ab9a Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Tue, 1 Dec 2020 21:17:08 +0530 Subject: [PATCH 1/3] injection: replace deprecated component Signed-off-by: Harsh Shandilya --- .../java/dev/msfjarvis/lobsters/injection/KtorClientModule.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/dev/msfjarvis/lobsters/injection/KtorClientModule.kt b/app/src/main/java/dev/msfjarvis/lobsters/injection/KtorClientModule.kt index ce801075..642c1275 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/injection/KtorClientModule.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/injection/KtorClientModule.kt @@ -3,14 +3,14 @@ package dev.msfjarvis.lobsters.injection import dagger.Module import dagger.Provides import dagger.hilt.InstallIn -import dagger.hilt.android.components.ApplicationComponent +import dagger.hilt.components.SingletonComponent import io.ktor.client.HttpClient import io.ktor.client.engine.okhttp.OkHttp import io.ktor.client.features.json.JsonFeature import io.ktor.client.features.json.serializer.KotlinxSerializer @Module -@InstallIn(ApplicationComponent::class) +@InstallIn(SingletonComponent::class) object KtorClientModule { @Provides fun provideClient() = HttpClient(OkHttp) { From 2b2acd13117763d91ee340274d87c1c8901e4b06 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Tue, 1 Dec 2020 21:55:00 +0530 Subject: [PATCH 2/3] UrlLauncherAmbient: switch to staticAmbientOf Signed-off-by: Harsh Shandilya --- .../msfjarvis/lobsters/ui/urllauncher/UrlLauncherAmbient.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/urllauncher/UrlLauncherAmbient.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/urllauncher/UrlLauncherAmbient.kt index d545961c..7f14aef5 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/urllauncher/UrlLauncherAmbient.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/urllauncher/UrlLauncherAmbient.kt @@ -1,5 +1,5 @@ package dev.msfjarvis.lobsters.ui.urllauncher -import androidx.compose.runtime.ambientOf +import androidx.compose.runtime.staticAmbientOf -val UrlLauncherAmbient = ambientOf { error("Needs to be provided") } +val UrlLauncherAmbient = staticAmbientOf { error("Needs to be provided") } From 39d36eece62cd3214b7965f2305d47f005edc143 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Tue, 1 Dec 2020 22:06:13 +0530 Subject: [PATCH 3/3] ui: fix backstack behavior Signed-off-by: Harsh Shandilya --- .../msfjarvis/lobsters/ui/main/MainActivity.kt | 16 ++++++++-------- .../lobsters/ui/navigation/Destination.kt | 11 ++++++++--- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt index d72aa62a..c3a88451 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt @@ -54,17 +54,16 @@ class MainActivity : AppCompatActivity() { fun LobstersApp() { val viewModel: LobstersViewModel = viewModel() val navController = rememberNavController() - val destinations = arrayOf(Destination.Hottest, Destination.Saved) val hottestPosts by viewModel.posts.collectAsState() val savedPosts by viewModel.savedPosts.collectAsState() Scaffold( bottomBar = { - LobstersBottomNav(navController, destinations) + LobstersBottomNav(navController) }, ) { innerPadding -> val hottestPostsListState = rememberLazyListState() - NavHost(navController, startDestination = Destination.Hottest.route) { + NavHost(navController, startDestination = Destination.startDestination.route) { composable(Destination.Hottest.route) { HottestPosts( posts = hottestPosts, @@ -88,20 +87,21 @@ fun LobstersApp() { @Composable fun LobstersBottomNav( navController: NavHostController, - destinations: Array, ) { BottomNavigation { val navBackStackEntry by navController.currentBackStackEntryAsState() - val currentRoute = navBackStackEntry?.arguments?.getString(KEY_ROUTE) - destinations.forEach { screen -> + val currentRoute = + navBackStackEntry?.arguments?.getString(KEY_ROUTE) ?: Destination.startDestination.route + Destination.values().forEach { screen -> BottomNavigationItem( icon = { IconResource(resourceId = screen.badgeRes) }, label = { Text(stringResource(id = screen.labelRes)) }, selected = currentRoute == screen.route, alwaysShowLabels = false, onClick = { - if (currentRoute != screen.route) { - navController.popBackStack(navController.graph.startDestination, false) + if (currentRoute == screen.route) return@BottomNavigationItem + navController.popBackStack(navController.graph.startDestination, false) + if (screen.route != Destination.startDestination.route) { navController.navigate(screen.route) } } diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/navigation/Destination.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/navigation/Destination.kt index 71c39009..083c0763 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/navigation/Destination.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/navigation/Destination.kt @@ -7,11 +7,16 @@ import dev.msfjarvis.lobsters.R /** * Destinations for navigation within the app. */ -sealed class Destination( +enum class Destination( val route: String, @StringRes val labelRes: Int, @DrawableRes val badgeRes: Int, ) { - object Hottest : Destination("hottest", R.string.hottest_posts, R.drawable.ic_whatshot_24px) - object Saved : Destination("saved", R.string.saved_posts, R.drawable.ic_favorite_24px) + Hottest("hottest", R.string.hottest_posts, R.drawable.ic_whatshot_24px), + Saved("saved", R.string.saved_posts, R.drawable.ic_favorite_24px), + ; + + companion object { + val startDestination = Hottest + } }