diff --git a/app/src/main/kotlin/dev/meloda/fast/model/BottomNavigationItem.kt b/app/src/main/kotlin/dev/meloda/fast/model/BottomNavigationItem.kt index 01be1997..5345d94c 100644 --- a/app/src/main/kotlin/dev/meloda/fast/model/BottomNavigationItem.kt +++ b/app/src/main/kotlin/dev/meloda/fast/model/BottomNavigationItem.kt @@ -1,5 +1,8 @@ package dev.meloda.fast.model +import androidx.compose.runtime.Immutable + +@Immutable data class BottomNavigationItem( val titleResId: Int, val selectedIconResId: Int, diff --git a/app/src/main/kotlin/dev/meloda/fast/navigation/MainGraph.kt b/app/src/main/kotlin/dev/meloda/fast/navigation/MainGraph.kt index dea46be2..6c6e39db 100644 --- a/app/src/main/kotlin/dev/meloda/fast/navigation/MainGraph.kt +++ b/app/src/main/kotlin/dev/meloda/fast/navigation/MainGraph.kt @@ -8,6 +8,7 @@ import dev.meloda.fast.model.BaseError import dev.meloda.fast.model.BottomNavigationItem import dev.meloda.fast.presentation.MainScreen import dev.meloda.fast.profile.navigation.Profile +import dev.meloda.fast.ui.util.ImmutableList import kotlinx.serialization.Serializable import dev.meloda.fast.ui.R as UiR @@ -23,7 +24,7 @@ fun NavGraphBuilder.mainScreen( onConversationClicked: (conversationId: Int) -> Unit, onPhotoClicked: (url: String) -> Unit ) { - val navigationItems = listOf( + val navigationItems = ImmutableList.of( BottomNavigationItem( titleResId = UiR.string.title_friends, selectedIconResId = UiR.drawable.baseline_people_alt_24, diff --git a/app/src/main/kotlin/dev/meloda/fast/presentation/MainScreen.kt b/app/src/main/kotlin/dev/meloda/fast/presentation/MainScreen.kt index 8de90ec5..5bd64261 100644 --- a/app/src/main/kotlin/dev/meloda/fast/presentation/MainScreen.kt +++ b/app/src/main/kotlin/dev/meloda/fast/presentation/MainScreen.kt @@ -38,11 +38,12 @@ import dev.meloda.fast.profile.navigation.profileScreen import dev.meloda.fast.ui.theme.LocalBottomPadding import dev.meloda.fast.ui.theme.LocalHazeState import dev.meloda.fast.ui.theme.LocalThemeConfig +import dev.meloda.fast.ui.util.ImmutableList @OptIn(ExperimentalHazeMaterialsApi::class) @Composable fun MainScreen( - navigationItems: List, + navigationItems: ImmutableList, onError: (BaseError) -> Unit = {}, onSettingsButtonClicked: () -> Unit = {}, onConversationItemClicked: (conversationId: Int) -> Unit = {}, diff --git a/app/src/main/kotlin/dev/meloda/fast/presentation/RootScreen.kt b/app/src/main/kotlin/dev/meloda/fast/presentation/RootScreen.kt index 27dc82c9..c64f7f3b 100644 --- a/app/src/main/kotlin/dev/meloda/fast/presentation/RootScreen.kt +++ b/app/src/main/kotlin/dev/meloda/fast/presentation/RootScreen.kt @@ -21,7 +21,6 @@ import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.rememberNavController import dev.meloda.fast.MainViewModel -import dev.meloda.fast.MainViewModelImpl import dev.meloda.fast.auth.authNavGraph import dev.meloda.fast.auth.navigateToAuth import dev.meloda.fast.chatmaterials.navigation.chatMaterialsScreen @@ -37,12 +36,11 @@ import dev.meloda.fast.photoviewer.navigation.photoViewScreen import dev.meloda.fast.settings.navigation.navigateToSettings import dev.meloda.fast.settings.navigation.settingsScreen import dev.meloda.fast.ui.R -import org.koin.androidx.compose.koinViewModel @Composable fun RootScreen( navController: NavHostController = rememberNavController(), - viewModel: MainViewModel = koinViewModel() + viewModel: MainViewModel ) { val context = LocalContext.current val startDestination by viewModel.startDestination.collectAsStateWithLifecycle() diff --git a/core/ui/src/main/kotlin/dev/meloda/fast/ui/util/ImmutableList.kt b/core/ui/src/main/kotlin/dev/meloda/fast/ui/util/ImmutableList.kt index 12a7b1c5..a9a2b631 100644 --- a/core/ui/src/main/kotlin/dev/meloda/fast/ui/util/ImmutableList.kt +++ b/core/ui/src/main/kotlin/dev/meloda/fast/ui/util/ImmutableList.kt @@ -7,10 +7,7 @@ class ImmutableList(val values: List) : Iterable { constructor(size: Int, init: (index: Int) -> T) : this(MutableList(size, init)) - operator fun get(index: Int): T? { - values.singleOrNull() - return values[index] - } + operator fun get(index: Int): T = values[index] inline fun forEach(action: (T) -> Unit) { for (element in values) action(element) diff --git a/feature/conversations/src/main/kotlin/dev/meloda/fast/conversations/di/ConversationsModule.kt b/feature/conversations/src/main/kotlin/dev/meloda/fast/conversations/di/ConversationsModule.kt index 9110c57f..5fca2061 100644 --- a/feature/conversations/src/main/kotlin/dev/meloda/fast/conversations/di/ConversationsModule.kt +++ b/feature/conversations/src/main/kotlin/dev/meloda/fast/conversations/di/ConversationsModule.kt @@ -10,6 +10,5 @@ import org.koin.dsl.module val conversationsModule = module { singleOf(::ConversationsUseCaseImpl) bind ConversationsUseCase::class - viewModelOf(::ConversationsViewModelImpl) } diff --git a/feature/conversations/src/main/kotlin/dev/meloda/fast/conversations/presentation/ConversationsScreen.kt b/feature/conversations/src/main/kotlin/dev/meloda/fast/conversations/presentation/ConversationsScreen.kt index 58fc683b..5f4590bb 100644 --- a/feature/conversations/src/main/kotlin/dev/meloda/fast/conversations/presentation/ConversationsScreen.kt +++ b/feature/conversations/src/main/kotlin/dev/meloda/fast/conversations/presentation/ConversationsScreen.kt @@ -71,7 +71,6 @@ import dev.chrisbanes.haze.hazeChild import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi import dev.chrisbanes.haze.materials.HazeMaterials import dev.meloda.fast.conversations.ConversationsViewModel -import dev.meloda.fast.conversations.ConversationsViewModelImpl import dev.meloda.fast.conversations.model.ConversationOption import dev.meloda.fast.conversations.model.ConversationsScreenState import dev.meloda.fast.conversations.model.UiConversation @@ -85,7 +84,6 @@ import dev.meloda.fast.ui.theme.LocalHazeState import dev.meloda.fast.ui.theme.LocalThemeConfig import dev.meloda.fast.ui.util.isScrollingUp import kotlinx.coroutines.launch -import org.koin.androidx.compose.koinViewModel import org.koin.compose.koinInject import dev.meloda.fast.ui.R as UiR @@ -94,7 +92,7 @@ fun ConversationsRoute( onError: (BaseError) -> Unit, onConversationItemClicked: (conversationId: Int) -> Unit, onPhotoClicked: (url: String) -> Unit, - viewModel: ConversationsViewModel = koinViewModel() + viewModel: ConversationsViewModel ) { val context = LocalContext.current