pre-warm up the main screens when the application is launched

This commit is contained in:
2025-05-11 22:36:41 +03:00
parent 628b93e4ab
commit b63cc86e48
6 changed files with 43 additions and 32 deletions
@@ -1,22 +1,37 @@
package dev.meloda.fast.friends.navigation
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.NavGraphBuilder
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.model.BaseError
import kotlinx.serialization.Serializable
import org.koin.androidx.viewmodel.ext.android.getViewModel
@Serializable
object Friends
fun NavGraphBuilder.friendsScreen(
activity: AppCompatActivity,
onError: (BaseError) -> Unit,
onPhotoClicked: (url: String) -> Unit,
onMessageClicked: (userid: Long) -> Unit,
onMessageClicked: (userId: Long) -> Unit,
onScrolledToTop: () -> Unit
) {
val friendsViewModel: FriendsViewModel = with(activity) {
getViewModel<FriendsViewModelImpl>()
}
val onlineFriendsViewModel: FriendsViewModel = with(activity) {
getViewModel<OnlineFriendsViewModelImpl>()
}
composable<Friends> {
FriendsRoute(
friendsViewModel = friendsViewModel,
onlineFriendsViewModel = onlineFriendsViewModel,
onError = onError,
onPhotoClicked = onPhotoClicked,
onMessageClicked = onMessageClicked,
@@ -46,6 +46,7 @@ import org.koin.androidx.compose.koinViewModel
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun FriendsScreen(
viewModel: FriendsViewModel,
modifier: Modifier = Modifier,
orderType: String,
padding: PaddingValues,
@@ -57,12 +58,6 @@ fun FriendsScreen(
onScrolledToTop: () -> Unit = {}
) {
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) {
viewModel.onOrderTypeChanged(orderType)
@@ -40,6 +40,7 @@ import androidx.compose.ui.unit.dp
import dev.chrisbanes.haze.hazeEffect
import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi
import dev.chrisbanes.haze.materials.HazeMaterials
import dev.meloda.fast.friends.FriendsViewModel
import dev.meloda.fast.model.BaseError
import dev.meloda.fast.ui.R
import dev.meloda.fast.ui.components.ActionInvokeDismiss
@@ -55,6 +56,8 @@ import dev.meloda.fast.ui.R as UiR
@OptIn(ExperimentalMaterial3Api::class, ExperimentalHazeMaterialsApi::class)
@Composable
fun FriendsRoute(
friendsViewModel: FriendsViewModel,
onlineFriendsViewModel: FriendsViewModel,
onError: (BaseError) -> Unit,
onPhotoClicked: (url: String) -> Unit,
onMessageClicked: (userid: Long) -> Unit,
@@ -231,6 +234,7 @@ fun FriendsRoute(
modifier = Modifier.fillMaxSize(),
) { index ->
FriendsScreen(
viewModel = if (index == 0) friendsViewModel else onlineFriendsViewModel,
orderType = orderType,
padding = padding,
tabIndex = index,