Issue#41 Update Hilt Entry Point access in compose
This commit is contained in:
parent
e9028c0e86
commit
6a0bb381a8
6 changed files with 49 additions and 61 deletions
|
|
@ -1,4 +1,4 @@
|
|||
package org.fnives.test.showcase.hilt.compose.screen.home
|
||||
package org.fnives.test.showcase.hilt.compose.di
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.remember
|
||||
|
|
@ -11,13 +11,30 @@ import org.fnives.test.showcase.hilt.core.content.AddContentToFavouriteUseCase
|
|||
import org.fnives.test.showcase.hilt.core.content.FetchContentUseCase
|
||||
import org.fnives.test.showcase.hilt.core.content.GetAllContentUseCase
|
||||
import org.fnives.test.showcase.hilt.core.content.RemoveContentFromFavouritesUseCase
|
||||
import org.fnives.test.showcase.hilt.core.login.IsUserLoggedInUseCase
|
||||
import org.fnives.test.showcase.hilt.core.login.LoginUseCase
|
||||
import org.fnives.test.showcase.hilt.core.login.LogoutUseCase
|
||||
|
||||
object HomeEntryPoint {
|
||||
object ComposeEntryPoint {
|
||||
|
||||
/**
|
||||
* Helper method to easily remember and access Hilt Dependencies in Compose.
|
||||
*/
|
||||
@Composable
|
||||
inline fun <reified T : Any> rememberEntryPoint(component: Any = LocalContext.current.applicationContext): T =
|
||||
remember(component) { EntryPoints.get(component, T::class.java) }
|
||||
|
||||
sealed interface EntryPointDependencies
|
||||
|
||||
@EntryPoint
|
||||
@InstallIn(SingletonComponent::class)
|
||||
interface MainDependencies {
|
||||
interface AuthDependencies : EntryPointDependencies {
|
||||
val loginUseCase: LoginUseCase
|
||||
}
|
||||
|
||||
@EntryPoint
|
||||
@InstallIn(SingletonComponent::class)
|
||||
interface MainDependencies : EntryPointDependencies {
|
||||
val getAllContentUseCase: GetAllContentUseCase
|
||||
val logoutUseCase: LogoutUseCase
|
||||
val fetchContentUseCase: FetchContentUseCase
|
||||
|
|
@ -25,9 +42,9 @@ object HomeEntryPoint {
|
|||
val removeContentFromFavouritesUseCase: RemoveContentFromFavouritesUseCase
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun get(): MainDependencies {
|
||||
val context = LocalContext.current.applicationContext
|
||||
return remember { EntryPoints.get(context, MainDependencies::class.java) }
|
||||
@EntryPoint
|
||||
@InstallIn(SingletonComponent::class)
|
||||
interface AppNavigationDependencies : EntryPointDependencies {
|
||||
val isUserLoggedInUseCase: IsUserLoggedInUseCase
|
||||
}
|
||||
}
|
||||
|
|
@ -11,6 +11,8 @@ import androidx.navigation.compose.NavHost
|
|||
import androidx.navigation.compose.composable
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import kotlinx.coroutines.delay
|
||||
import org.fnives.test.showcase.hilt.compose.di.ComposeEntryPoint.AppNavigationDependencies
|
||||
import org.fnives.test.showcase.hilt.compose.di.ComposeEntryPoint.rememberEntryPoint
|
||||
import org.fnives.test.showcase.hilt.compose.screen.auth.AuthScreen
|
||||
import org.fnives.test.showcase.hilt.compose.screen.auth.rememberAuthScreenState
|
||||
import org.fnives.test.showcase.hilt.compose.screen.home.HomeScreen
|
||||
|
|
@ -20,8 +22,11 @@ import org.fnives.test.showcase.hilt.core.login.IsUserLoggedInUseCase
|
|||
|
||||
@Composable
|
||||
fun AppNavigation(
|
||||
isUserLogeInUseCase: IsUserLoggedInUseCase = AppNavigationEntryPoint.get().isUserLoggedInUseCase
|
||||
) {
|
||||
navigationDependencies: AppNavigationDependencies = rememberEntryPoint()
|
||||
) = AppNavigation(navigationDependencies.isUserLoggedInUseCase)
|
||||
|
||||
@Composable
|
||||
fun AppNavigation(isUserLogeInUseCase: IsUserLoggedInUseCase) {
|
||||
val navController = rememberNavController()
|
||||
|
||||
LaunchedEffect(isUserLogeInUseCase) {
|
||||
|
|
|
|||
|
|
@ -1,25 +0,0 @@
|
|||
package org.fnives.test.showcase.hilt.compose.screen
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import dagger.hilt.EntryPoint
|
||||
import dagger.hilt.EntryPoints
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import org.fnives.test.showcase.hilt.core.login.IsUserLoggedInUseCase
|
||||
|
||||
object AppNavigationEntryPoint {
|
||||
|
||||
@EntryPoint
|
||||
@InstallIn(SingletonComponent::class)
|
||||
interface AppNavigationDependencies {
|
||||
val isUserLoggedInUseCase: IsUserLoggedInUseCase
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun get(): AppNavigationDependencies {
|
||||
val context = LocalContext.current.applicationContext
|
||||
return remember { EntryPoints.get(context, AppNavigationDependencies::class.java) }
|
||||
}
|
||||
}
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
package org.fnives.test.showcase.hilt.compose.screen.auth
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import dagger.hilt.EntryPoint
|
||||
import dagger.hilt.EntryPoints
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import org.fnives.test.showcase.hilt.core.login.LoginUseCase
|
||||
|
||||
object AuthEntryPoint {
|
||||
|
||||
@EntryPoint
|
||||
@InstallIn(SingletonComponent::class)
|
||||
interface AuthDependencies {
|
||||
val loginUseCase: LoginUseCase
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun get(): AuthDependencies {
|
||||
val context = LocalContext.current.applicationContext
|
||||
return remember { EntryPoints.get(context, AuthDependencies::class.java) }
|
||||
}
|
||||
}
|
||||
|
|
@ -11,6 +11,8 @@ import androidx.compose.runtime.setValue
|
|||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import org.fnives.test.showcase.hilt.compose.di.ComposeEntryPoint.AuthDependencies
|
||||
import org.fnives.test.showcase.hilt.compose.di.ComposeEntryPoint.rememberEntryPoint
|
||||
import org.fnives.test.showcase.hilt.core.login.LoginUseCase
|
||||
import org.fnives.test.showcase.model.auth.LoginCredentials
|
||||
import org.fnives.test.showcase.model.auth.LoginStatus
|
||||
|
|
@ -19,7 +21,19 @@ import org.fnives.test.showcase.model.shared.Answer
|
|||
@Composable
|
||||
fun rememberAuthScreenState(
|
||||
stateScope: CoroutineScope = rememberCoroutineScope { Dispatchers.Main },
|
||||
loginUseCase: LoginUseCase = AuthEntryPoint.get().loginUseCase,
|
||||
authDependencies: AuthDependencies = rememberEntryPoint(),
|
||||
onLoginSuccess: () -> Unit = {},
|
||||
): AuthScreenState =
|
||||
rememberAuthScreenState(
|
||||
stateScope = stateScope,
|
||||
loginUseCase = authDependencies.loginUseCase,
|
||||
onLoginSuccess = onLoginSuccess
|
||||
)
|
||||
|
||||
@Composable
|
||||
fun rememberAuthScreenState(
|
||||
stateScope: CoroutineScope = rememberCoroutineScope { Dispatchers.Main },
|
||||
loginUseCase: LoginUseCase,
|
||||
onLoginSuccess: () -> Unit = {},
|
||||
): AuthScreenState {
|
||||
return rememberSaveable(saver = AuthScreenState.getSaver(stateScope, loginUseCase, onLoginSuccess)) {
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@ import androidx.compose.runtime.setValue
|
|||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.flow.mapNotNull
|
||||
import kotlinx.coroutines.launch
|
||||
import org.fnives.test.showcase.hilt.compose.di.ComposeEntryPoint.MainDependencies
|
||||
import org.fnives.test.showcase.hilt.compose.di.ComposeEntryPoint.rememberEntryPoint
|
||||
import org.fnives.test.showcase.hilt.core.content.AddContentToFavouriteUseCase
|
||||
import org.fnives.test.showcase.hilt.core.content.FetchContentUseCase
|
||||
import org.fnives.test.showcase.hilt.core.content.GetAllContentUseCase
|
||||
|
|
@ -21,7 +23,7 @@ import org.fnives.test.showcase.model.shared.Resource
|
|||
@Composable
|
||||
fun rememberHomeScreenState(
|
||||
stateScope: CoroutineScope = rememberCoroutineScope(),
|
||||
mainDependencies: HomeEntryPoint.MainDependencies = HomeEntryPoint.get(),
|
||||
mainDependencies: MainDependencies = rememberEntryPoint(),
|
||||
onLogout: () -> Unit = {},
|
||||
) =
|
||||
rememberHomeScreenState(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue