forked from melod1n/fast-messenger
pre-warm up the main screens when the application is launched
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
package dev.meloda.fast.presentation
|
package dev.meloda.fast.presentation
|
||||||
|
|
||||||
import androidx.activity.compose.BackHandler
|
import androidx.activity.compose.BackHandler
|
||||||
|
import androidx.activity.compose.LocalActivity
|
||||||
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.compose.animation.core.tween
|
import androidx.compose.animation.core.tween
|
||||||
import androidx.compose.animation.fadeIn
|
import androidx.compose.animation.fadeIn
|
||||||
import androidx.compose.animation.fadeOut
|
import androidx.compose.animation.fadeOut
|
||||||
@@ -37,7 +39,6 @@ import dev.chrisbanes.haze.HazeState
|
|||||||
import dev.chrisbanes.haze.hazeEffect
|
import dev.chrisbanes.haze.hazeEffect
|
||||||
import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi
|
import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi
|
||||||
import dev.chrisbanes.haze.materials.HazeMaterials
|
import dev.chrisbanes.haze.materials.HazeMaterials
|
||||||
import dev.meloda.fast.conversations.navigation.Conversations
|
|
||||||
import dev.meloda.fast.conversations.navigation.ConversationsGraph
|
import dev.meloda.fast.conversations.navigation.ConversationsGraph
|
||||||
import dev.meloda.fast.conversations.navigation.conversationsGraph
|
import dev.meloda.fast.conversations.navigation.conversationsGraph
|
||||||
import dev.meloda.fast.friends.navigation.Friends
|
import dev.meloda.fast.friends.navigation.Friends
|
||||||
@@ -65,6 +66,7 @@ fun MainScreen(
|
|||||||
onMessageClicked: (userid: Long) -> Unit = {},
|
onMessageClicked: (userid: Long) -> Unit = {},
|
||||||
onNavigateToCreateChat: () -> Unit = {}
|
onNavigateToCreateChat: () -> Unit = {}
|
||||||
) {
|
) {
|
||||||
|
val activity = LocalActivity.current as? AppCompatActivity ?: return
|
||||||
val theme = LocalThemeConfig.current
|
val theme = LocalThemeConfig.current
|
||||||
val hazeState = remember { HazeState() }
|
val hazeState = remember { HazeState() }
|
||||||
val navController = rememberNavController()
|
val navController = rememberNavController()
|
||||||
@@ -194,6 +196,7 @@ fun MainScreen(
|
|||||||
exitTransition = { fadeOut(animationSpec = tween(200)) }
|
exitTransition = { fadeOut(animationSpec = tween(200)) }
|
||||||
) {
|
) {
|
||||||
friendsScreen(
|
friendsScreen(
|
||||||
|
activity = activity,
|
||||||
onError = onError,
|
onError = onError,
|
||||||
onPhotoClicked = onPhotoClicked,
|
onPhotoClicked = onPhotoClicked,
|
||||||
onMessageClicked = onMessageClicked,
|
onMessageClicked = onMessageClicked,
|
||||||
@@ -204,6 +207,7 @@ fun MainScreen(
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
conversationsGraph(
|
conversationsGraph(
|
||||||
|
activity = activity,
|
||||||
onError = onError,
|
onError = onError,
|
||||||
onNavigateToMessagesHistory = onNavigateToMessagesHistory,
|
onNavigateToMessagesHistory = onNavigateToMessagesHistory,
|
||||||
onNavigateToCreateChat = onNavigateToCreateChat,
|
onNavigateToCreateChat = onNavigateToCreateChat,
|
||||||
@@ -214,6 +218,7 @@ fun MainScreen(
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
profileScreen(
|
profileScreen(
|
||||||
|
activity = activity,
|
||||||
onError = onError,
|
onError = onError,
|
||||||
onSettingsButtonClicked = onSettingsButtonClicked,
|
onSettingsButtonClicked = onSettingsButtonClicked,
|
||||||
onPhotoClicked = onPhotoClicked
|
onPhotoClicked = onPhotoClicked
|
||||||
|
|||||||
+11
-17
@@ -1,8 +1,6 @@
|
|||||||
package dev.meloda.fast.conversations.navigation
|
package dev.meloda.fast.conversations.navigation
|
||||||
|
|
||||||
import androidx.activity.compose.LocalActivity
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.compose.ui.platform.LocalContext
|
|
||||||
import androidx.navigation.NavGraphBuilder
|
import androidx.navigation.NavGraphBuilder
|
||||||
import androidx.navigation.compose.composable
|
import androidx.navigation.compose.composable
|
||||||
import androidx.navigation.navigation
|
import androidx.navigation.navigation
|
||||||
@@ -13,7 +11,7 @@ import dev.meloda.fast.model.ConversationsFilter
|
|||||||
import dev.meloda.fast.ui.theme.LocalNavController
|
import dev.meloda.fast.ui.theme.LocalNavController
|
||||||
import dev.meloda.fast.ui.theme.getOrThrow
|
import dev.meloda.fast.ui.theme.getOrThrow
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import org.koin.androidx.compose.koinViewModel
|
import org.koin.androidx.viewmodel.ext.android.getViewModel
|
||||||
import org.koin.core.qualifier.named
|
import org.koin.core.qualifier.named
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
@@ -26,6 +24,7 @@ object Conversations
|
|||||||
object Archive
|
object Archive
|
||||||
|
|
||||||
fun NavGraphBuilder.conversationsGraph(
|
fun NavGraphBuilder.conversationsGraph(
|
||||||
|
activity: AppCompatActivity,
|
||||||
onError: (BaseError) -> Unit,
|
onError: (BaseError) -> Unit,
|
||||||
onNavigateToMessagesHistory: (id: Long) -> Unit,
|
onNavigateToMessagesHistory: (id: Long) -> Unit,
|
||||||
onNavigateToCreateChat: () -> Unit,
|
onNavigateToCreateChat: () -> Unit,
|
||||||
@@ -34,17 +33,18 @@ fun NavGraphBuilder.conversationsGraph(
|
|||||||
navigation<ConversationsGraph>(
|
navigation<ConversationsGraph>(
|
||||||
startDestination = Conversations
|
startDestination = Conversations
|
||||||
) {
|
) {
|
||||||
|
val conversationsViewModel: ConversationsViewModelImpl = with(activity) {
|
||||||
|
getViewModel(qualifier = named(ConversationsFilter.ALL))
|
||||||
|
}
|
||||||
|
val archiveViewModel: ConversationsViewModelImpl = with(activity) {
|
||||||
|
getViewModel(qualifier = named(ConversationsFilter.ARCHIVE))
|
||||||
|
}
|
||||||
|
|
||||||
composable<Conversations> {
|
composable<Conversations> {
|
||||||
val context = LocalContext.current
|
|
||||||
val navController = LocalNavController.getOrThrow()
|
val navController = LocalNavController.getOrThrow()
|
||||||
|
|
||||||
val viewModel: ConversationsViewModelImpl = koinViewModel(
|
|
||||||
qualifier = named(ConversationsFilter.ALL),
|
|
||||||
viewModelStoreOwner = context as AppCompatActivity
|
|
||||||
)
|
|
||||||
|
|
||||||
ConversationsRoute(
|
ConversationsRoute(
|
||||||
viewModel = viewModel,
|
viewModel = conversationsViewModel,
|
||||||
onError = onError,
|
onError = onError,
|
||||||
onNavigateToMessagesHistory = onNavigateToMessagesHistory,
|
onNavigateToMessagesHistory = onNavigateToMessagesHistory,
|
||||||
onNavigateToCreateChat = onNavigateToCreateChat,
|
onNavigateToCreateChat = onNavigateToCreateChat,
|
||||||
@@ -53,16 +53,10 @@ fun NavGraphBuilder.conversationsGraph(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
composable<Archive> {
|
composable<Archive> {
|
||||||
val context = LocalContext.current
|
|
||||||
val navController = LocalNavController.getOrThrow()
|
val navController = LocalNavController.getOrThrow()
|
||||||
|
|
||||||
val viewModel: ConversationsViewModelImpl = koinViewModel(
|
|
||||||
qualifier = named(ConversationsFilter.ARCHIVE),
|
|
||||||
viewModelStoreOwner = context as AppCompatActivity
|
|
||||||
)
|
|
||||||
|
|
||||||
ConversationsRoute(
|
ConversationsRoute(
|
||||||
viewModel = viewModel,
|
viewModel = archiveViewModel,
|
||||||
onBack = navController::navigateUp,
|
onBack = navController::navigateUp,
|
||||||
onError = onError,
|
onError = onError,
|
||||||
onNavigateToMessagesHistory = onNavigateToMessagesHistory,
|
onNavigateToMessagesHistory = onNavigateToMessagesHistory,
|
||||||
|
|||||||
+16
-1
@@ -1,22 +1,37 @@
|
|||||||
package dev.meloda.fast.friends.navigation
|
package dev.meloda.fast.friends.navigation
|
||||||
|
|
||||||
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.navigation.NavGraphBuilder
|
import androidx.navigation.NavGraphBuilder
|
||||||
import androidx.navigation.compose.composable
|
import androidx.navigation.compose.composable
|
||||||
|
import dev.meloda.fast.friends.FriendsViewModel
|
||||||
|
import dev.meloda.fast.friends.FriendsViewModelImpl
|
||||||
|
import dev.meloda.fast.friends.OnlineFriendsViewModelImpl
|
||||||
import dev.meloda.fast.friends.presentation.FriendsRoute
|
import dev.meloda.fast.friends.presentation.FriendsRoute
|
||||||
import dev.meloda.fast.model.BaseError
|
import dev.meloda.fast.model.BaseError
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
import org.koin.androidx.viewmodel.ext.android.getViewModel
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
object Friends
|
object Friends
|
||||||
|
|
||||||
fun NavGraphBuilder.friendsScreen(
|
fun NavGraphBuilder.friendsScreen(
|
||||||
|
activity: AppCompatActivity,
|
||||||
onError: (BaseError) -> Unit,
|
onError: (BaseError) -> Unit,
|
||||||
onPhotoClicked: (url: String) -> Unit,
|
onPhotoClicked: (url: String) -> Unit,
|
||||||
onMessageClicked: (userid: Long) -> Unit,
|
onMessageClicked: (userId: Long) -> Unit,
|
||||||
onScrolledToTop: () -> Unit
|
onScrolledToTop: () -> Unit
|
||||||
) {
|
) {
|
||||||
|
val friendsViewModel: FriendsViewModel = with(activity) {
|
||||||
|
getViewModel<FriendsViewModelImpl>()
|
||||||
|
}
|
||||||
|
val onlineFriendsViewModel: FriendsViewModel = with(activity) {
|
||||||
|
getViewModel<OnlineFriendsViewModelImpl>()
|
||||||
|
}
|
||||||
|
|
||||||
composable<Friends> {
|
composable<Friends> {
|
||||||
FriendsRoute(
|
FriendsRoute(
|
||||||
|
friendsViewModel = friendsViewModel,
|
||||||
|
onlineFriendsViewModel = onlineFriendsViewModel,
|
||||||
onError = onError,
|
onError = onError,
|
||||||
onPhotoClicked = onPhotoClicked,
|
onPhotoClicked = onPhotoClicked,
|
||||||
onMessageClicked = onMessageClicked,
|
onMessageClicked = onMessageClicked,
|
||||||
|
|||||||
+1
-6
@@ -46,6 +46,7 @@ import org.koin.androidx.compose.koinViewModel
|
|||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun FriendsScreen(
|
fun FriendsScreen(
|
||||||
|
viewModel: FriendsViewModel,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
orderType: String,
|
orderType: String,
|
||||||
padding: PaddingValues,
|
padding: PaddingValues,
|
||||||
@@ -57,12 +58,6 @@ fun FriendsScreen(
|
|||||||
onScrolledToTop: () -> Unit = {}
|
onScrolledToTop: () -> Unit = {}
|
||||||
) {
|
) {
|
||||||
val context: Context = LocalContext.current
|
val context: Context = LocalContext.current
|
||||||
val viewModel: FriendsViewModel =
|
|
||||||
if (tabIndex == 0) {
|
|
||||||
koinViewModel<FriendsViewModelImpl>(viewModelStoreOwner = context as AppCompatActivity)
|
|
||||||
} else {
|
|
||||||
koinViewModel<OnlineFriendsViewModelImpl>(viewModelStoreOwner = context as AppCompatActivity)
|
|
||||||
}
|
|
||||||
|
|
||||||
LaunchedEffect(orderType) {
|
LaunchedEffect(orderType) {
|
||||||
viewModel.onOrderTypeChanged(orderType)
|
viewModel.onOrderTypeChanged(orderType)
|
||||||
|
|||||||
+4
@@ -40,6 +40,7 @@ import androidx.compose.ui.unit.dp
|
|||||||
import dev.chrisbanes.haze.hazeEffect
|
import dev.chrisbanes.haze.hazeEffect
|
||||||
import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi
|
import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi
|
||||||
import dev.chrisbanes.haze.materials.HazeMaterials
|
import dev.chrisbanes.haze.materials.HazeMaterials
|
||||||
|
import dev.meloda.fast.friends.FriendsViewModel
|
||||||
import dev.meloda.fast.model.BaseError
|
import dev.meloda.fast.model.BaseError
|
||||||
import dev.meloda.fast.ui.R
|
import dev.meloda.fast.ui.R
|
||||||
import dev.meloda.fast.ui.components.ActionInvokeDismiss
|
import dev.meloda.fast.ui.components.ActionInvokeDismiss
|
||||||
@@ -55,6 +56,8 @@ import dev.meloda.fast.ui.R as UiR
|
|||||||
@OptIn(ExperimentalMaterial3Api::class, ExperimentalHazeMaterialsApi::class)
|
@OptIn(ExperimentalMaterial3Api::class, ExperimentalHazeMaterialsApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun FriendsRoute(
|
fun FriendsRoute(
|
||||||
|
friendsViewModel: FriendsViewModel,
|
||||||
|
onlineFriendsViewModel: FriendsViewModel,
|
||||||
onError: (BaseError) -> Unit,
|
onError: (BaseError) -> Unit,
|
||||||
onPhotoClicked: (url: String) -> Unit,
|
onPhotoClicked: (url: String) -> Unit,
|
||||||
onMessageClicked: (userid: Long) -> Unit,
|
onMessageClicked: (userid: Long) -> Unit,
|
||||||
@@ -231,6 +234,7 @@ fun FriendsRoute(
|
|||||||
modifier = Modifier.fillMaxSize(),
|
modifier = Modifier.fillMaxSize(),
|
||||||
) { index ->
|
) { index ->
|
||||||
FriendsScreen(
|
FriendsScreen(
|
||||||
|
viewModel = if (index == 0) friendsViewModel else onlineFriendsViewModel,
|
||||||
orderType = orderType,
|
orderType = orderType,
|
||||||
padding = padding,
|
padding = padding,
|
||||||
tabIndex = index,
|
tabIndex = index,
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package dev.meloda.fast.profile.navigation
|
package dev.meloda.fast.profile.navigation
|
||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.compose.ui.platform.LocalContext
|
|
||||||
import androidx.navigation.NavGraphBuilder
|
import androidx.navigation.NavGraphBuilder
|
||||||
import androidx.navigation.compose.composable
|
import androidx.navigation.compose.composable
|
||||||
import dev.meloda.fast.model.BaseError
|
import dev.meloda.fast.model.BaseError
|
||||||
@@ -9,22 +8,21 @@ import dev.meloda.fast.profile.ProfileViewModel
|
|||||||
import dev.meloda.fast.profile.ProfileViewModelImpl
|
import dev.meloda.fast.profile.ProfileViewModelImpl
|
||||||
import dev.meloda.fast.profile.presentation.ProfileRoute
|
import dev.meloda.fast.profile.presentation.ProfileRoute
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import org.koin.androidx.compose.koinViewModel
|
import org.koin.androidx.viewmodel.ext.android.getViewModel
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
object Profile
|
object Profile
|
||||||
|
|
||||||
fun NavGraphBuilder.profileScreen(
|
fun NavGraphBuilder.profileScreen(
|
||||||
|
activity: AppCompatActivity,
|
||||||
onError: (BaseError) -> Unit,
|
onError: (BaseError) -> Unit,
|
||||||
onSettingsButtonClicked: () -> Unit,
|
onSettingsButtonClicked: () -> Unit,
|
||||||
onPhotoClicked: (url: String) -> Unit
|
onPhotoClicked: (url: String) -> Unit
|
||||||
) {
|
) {
|
||||||
|
val viewModel: ProfileViewModel = with(activity) {
|
||||||
|
getViewModel<ProfileViewModelImpl>()
|
||||||
|
}
|
||||||
composable<Profile> {
|
composable<Profile> {
|
||||||
val context = LocalContext.current
|
|
||||||
val viewModel: ProfileViewModel = koinViewModel<ProfileViewModelImpl>(
|
|
||||||
viewModelStoreOwner = context as AppCompatActivity
|
|
||||||
)
|
|
||||||
|
|
||||||
ProfileRoute(
|
ProfileRoute(
|
||||||
onError = onError,
|
onError = onError,
|
||||||
onSettingsButtonClicked = onSettingsButtonClicked,
|
onSettingsButtonClicked = onSettingsButtonClicked,
|
||||||
|
|||||||
Reference in New Issue
Block a user