diff --git a/app/src/main/java/com/bnyro/contacts/navigation/HomeNavContainer.kt b/app/src/main/java/com/bnyro/contacts/navigation/HomeNavContainer.kt new file mode 100644 index 00000000..27190da9 --- /dev/null +++ b/app/src/main/java/com/bnyro/contacts/navigation/HomeNavContainer.kt @@ -0,0 +1,116 @@ +package com.bnyro.contacts.navigation + +import android.content.res.Configuration +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Icon +import androidx.compose.material3.NavigationBar +import androidx.compose.material3.NavigationBarItem +import androidx.compose.material3.NavigationRail +import androidx.compose.material3.NavigationRailItem +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController +import com.bnyro.contacts.presentation.screens.contacts.model.ContactsModel +import com.bnyro.contacts.presentation.screens.dialer.model.DialerModel +import com.bnyro.contacts.presentation.screens.settings.model.ThemeModel +import com.bnyro.contacts.presentation.screens.sms.model.SmsModel + +@Composable +fun HomeNavContainer( + initialTab: HomeRoutes, + onNavigate: (String) -> Unit, + smsModel: SmsModel, + contactsModel: ContactsModel, + dialerModel: DialerModel, + themeModel: ThemeModel +) { + val navController = rememberNavController() + + var selectedRoute by remember { + mutableStateOf(initialTab) + } + + // listen for destination changes (e.g. back presses) + DisposableEffect(Unit) { + val listener = NavController.OnDestinationChangedListener { _, destination, _ -> + HomeRoutes.all.firstOrNull { it.route == destination.route } + ?.also { selectedRoute = it } + } + navController.addOnDestinationChangedListener(listener) + + onDispose { + navController.removeOnDestinationChangedListener(listener) + } + } + + val orientation = LocalConfiguration.current.orientation + Scaffold( + bottomBar = { + if (orientation == Configuration.ORIENTATION_PORTRAIT) { + NavigationBar( + tonalElevation = 5.dp + ) { + HomeRoutes.all.forEach { + NavigationBarItem( + label = { + Text(stringResource(it.stringRes)) + }, + icon = { + Icon(it.icon, null) + }, + selected = it == selectedRoute, + onClick = { + navController.popBackStack() + navController.navigate(it.route) + } + ) + } + } + } + } + ) { pV -> + Row( + Modifier + .fillMaxSize() + .padding(pV) + ) { + if (orientation == Configuration.ORIENTATION_LANDSCAPE) { + NavigationRail { + HomeRoutes.all.forEach { + NavigationRailItem(selected = it == selectedRoute, + onClick = { + navController.popBackStack() + navController.navigate(it.route) + }, + icon = { Icon(it.icon, null) }, + label = { + Text(stringResource(it.stringRes)) + }) + } + } + } + HomeNavHost( + navController = navController, + startTab = initialTab, + onNavigate = onNavigate, + smsModel = smsModel, + contactsModel = contactsModel, + dialerModel = dialerModel, + themeModel = themeModel + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/bnyro/contacts/navigation/HomeNavHost.kt b/app/src/main/java/com/bnyro/contacts/navigation/HomeNavHost.kt new file mode 100644 index 00000000..b11bd6c3 --- /dev/null +++ b/app/src/main/java/com/bnyro/contacts/navigation/HomeNavHost.kt @@ -0,0 +1,63 @@ +package com.bnyro.contacts.navigation + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.Modifier +import androidx.lifecycle.ViewModelStoreOwner +import androidx.lifecycle.viewmodel.compose.LocalViewModelStoreOwner +import androidx.navigation.NavHostController +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import com.bnyro.contacts.presentation.screens.calllog.CallLogsScreen +import com.bnyro.contacts.presentation.screens.contacts.ContactsPage +import com.bnyro.contacts.presentation.screens.contacts.model.ContactsModel +import com.bnyro.contacts.presentation.screens.dialer.model.DialerModel +import com.bnyro.contacts.presentation.screens.settings.model.ThemeModel +import com.bnyro.contacts.presentation.screens.sms.SmsListScreen +import com.bnyro.contacts.presentation.screens.sms.model.SmsModel + +@Composable +fun HomeNavHost( + navController: NavHostController, + onNavigate: (String) -> Unit, + startTab: HomeRoutes, + modifier: Modifier = Modifier, + smsModel: SmsModel, + contactsModel: ContactsModel, + dialerModel: DialerModel, + themeModel: ThemeModel +) { + val viewModelStoreOwner: ViewModelStoreOwner = LocalViewModelStoreOwner.current!! + + NavHost(navController, startDestination = startTab.route, modifier = modifier) { + composable(HomeRoutes.Contacts.route) { + CompositionLocalProvider(LocalViewModelStoreOwner provides viewModelStoreOwner) { + ContactsPage(null, + onNavigate = { + onNavigate.invoke(it.route) + }) + } + } + composable(HomeRoutes.Phone.route) { + CompositionLocalProvider(LocalViewModelStoreOwner provides viewModelStoreOwner) { + CallLogsScreen(contactsModel, dialerModel, themeModel) + } + } + composable(HomeRoutes.Messages.route) { + CompositionLocalProvider(LocalViewModelStoreOwner provides viewModelStoreOwner) { + SmsListScreen( + smsModel = smsModel, + contactsModel = contactsModel, + scrollConnection = null, + onNavigate = { + onNavigate.invoke(it.route) + }, + onClickMessage = { address, contactData -> + smsModel.currentContactData = contactData + onNavigate.invoke("${NavRoutes.MessageThread.route}/$address") + } + ) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/bnyro/contacts/navigation/NavContainer.kt b/app/src/main/java/com/bnyro/contacts/navigation/NavContainer.kt index 2cf73773..1b5a5184 100644 --- a/app/src/main/java/com/bnyro/contacts/navigation/NavContainer.kt +++ b/app/src/main/java/com/bnyro/contacts/navigation/NavContainer.kt @@ -1,129 +1,32 @@ package com.bnyro.contacts.navigation -import android.content.res.Configuration -import androidx.activity.addCallback -import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.Icon -import androidx.compose.material3.NavigationBar -import androidx.compose.material3.NavigationBarItem -import androidx.compose.material3.NavigationRail -import androidx.compose.material3.NavigationRailItem -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.DisposableEffect -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalConfiguration -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.dp -import androidx.navigation.NavController +import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.compose.rememberNavController -import com.bnyro.contacts.ui.activities.MainActivity - -val bottomNavItems = listOf( - NavRoutes.Phone, - NavRoutes.Contacts, - NavRoutes.Messages -) +import com.bnyro.contacts.presentation.screens.contacts.model.ContactsModel +import com.bnyro.contacts.presentation.screens.dialer.model.DialerModel +import com.bnyro.contacts.presentation.screens.settings.model.ThemeModel +import com.bnyro.contacts.presentation.screens.sms.model.SmsModel @Composable fun NavContainer( - initialTabIndex: Int + initialTab: HomeRoutes ) { - val context = LocalContext.current val navController = rememberNavController() - - val initialTab = bottomNavItems[initialTabIndex.coerceIn(0, 1)] - var selectedRoute by remember { - mutableStateOf(initialTab) - } - LaunchedEffect(Unit) { - val activity = context as MainActivity - activity.onBackPressedDispatcher.addCallback { - if (selectedRoute != NavRoutes.Settings && selectedRoute != NavRoutes.About) { - activity.finish() - } else { - navController.popBackStack() - } - } - } - - // listen for destination changes (e.g. back presses) - DisposableEffect(Unit) { - val listener = NavController.OnDestinationChangedListener { _, destination, _ -> - allRoutes.firstOrNull { it.route == destination.route?.split("/")?.first() } - ?.let { selectedRoute = it } - } - navController.addOnDestinationChangedListener(listener) - - onDispose { - navController.removeOnDestinationChangedListener(listener) - } - } - - val orientation = LocalConfiguration.current.orientation - Scaffold( - bottomBar = { - if (orientation == Configuration.ORIENTATION_PORTRAIT && bottomNavItems.contains( - selectedRoute - ) - ) { - NavigationBar( - tonalElevation = 5.dp - ) { - bottomNavItems.forEach { - NavigationBarItem( - label = { - Text(stringResource(it.stringRes!!)) - }, - icon = { - Icon(it.icon!!, null) - }, - selected = it == selectedRoute, - onClick = { - selectedRoute = it - navController.navigate(it.route) - } - ) - } - } - } - } - ) { pV -> - Row( - Modifier - .fillMaxSize() - .padding(pV) - ) { - if (orientation == Configuration.ORIENTATION_LANDSCAPE) { - NavigationRail { - bottomNavItems.forEach { - NavigationRailItem(selected = it == selectedRoute, - onClick = { - selectedRoute = it - navController.navigate(it.route) - }, - icon = { Icon(it.icon!!, null) }, - label = { - Text(stringResource(it.stringRes!!)) - }) - } - } - } - AppNavHost( - navController, - startDestination = initialTab, - modifier = Modifier - .fillMaxSize() - ) - } - } + val smsModel: SmsModel = viewModel() + val contactsModel: ContactsModel = viewModel(factory = ContactsModel.Factory) + val dialerModel: DialerModel = viewModel() + val themeModel: ThemeModel = viewModel() + AppNavHost( + navController, + initialTab = initialTab, + modifier = Modifier + .fillMaxSize(), + smsModel = smsModel, + contactsModel = contactsModel, + dialerModel = dialerModel, + themeModel = themeModel + ) } diff --git a/app/src/main/java/com/bnyro/contacts/navigation/NavHost.kt b/app/src/main/java/com/bnyro/contacts/navigation/NavHost.kt index 4c8e675b..4377f60d 100644 --- a/app/src/main/java/com/bnyro/contacts/navigation/NavHost.kt +++ b/app/src/main/java/com/bnyro/contacts/navigation/NavHost.kt @@ -1,84 +1,105 @@ package com.bnyro.contacts.navigation +import androidx.compose.animation.AnimatedContentTransitionScope +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.lifecycle.ViewModelStoreOwner import androidx.lifecycle.viewmodel.compose.LocalViewModelStoreOwner -import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavHostController import androidx.navigation.NavType import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.navArgument import com.bnyro.contacts.presentation.screens.about.AboutScreen -import com.bnyro.contacts.presentation.screens.calllog.CallLogsScreen -import com.bnyro.contacts.presentation.screens.contacts.ContactsPage import com.bnyro.contacts.presentation.screens.contacts.model.ContactsModel import com.bnyro.contacts.presentation.screens.dialer.model.DialerModel import com.bnyro.contacts.presentation.screens.settings.SettingsScreen import com.bnyro.contacts.presentation.screens.settings.model.ThemeModel -import com.bnyro.contacts.presentation.screens.sms.SmsListScreen import com.bnyro.contacts.presentation.screens.sms.SmsThreadScreen import com.bnyro.contacts.presentation.screens.sms.model.SmsModel @Composable fun AppNavHost( navController: NavHostController, - startDestination: NavRoutes, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, + initialTab: HomeRoutes, + smsModel: SmsModel, + contactsModel: ContactsModel, + dialerModel: DialerModel, + themeModel: ThemeModel ) { - val smsModel: SmsModel = viewModel(factory = SmsModel.Factory) - val contactsModel: ContactsModel = viewModel(factory = ContactsModel.Factory) - val dialerModel: DialerModel = viewModel() - val themeModel: ThemeModel = viewModel() - val viewModelStoreOwner: ViewModelStoreOwner = LocalViewModelStoreOwner.current!! - NavHost(navController, startDestination = startDestination.route, modifier = modifier) { - composable(NavRoutes.About.route) { + NavHost(navController, startDestination = NavRoutes.Home.route, modifier = modifier) { + composable(NavRoutes.Home.route, + enterTransition = { + slideIntoContainer( + AnimatedContentTransitionScope.SlideDirection.Down, + initialOffset = { it / 4 } + ) + fadeIn() + }, + exitTransition = { + slideOutOfContainer(AnimatedContentTransitionScope.SlideDirection.Up, + targetOffset = { it / 4 }) + fadeOut() + }) { + HomeNavContainer( + initialTab = initialTab, + onNavigate = { + navController.navigate(it) + }, + smsModel = smsModel, + contactsModel = contactsModel, + dialerModel = dialerModel, + themeModel = themeModel + ) + } + composable(NavRoutes.About.route, + enterTransition = { + slideIntoContainer( + AnimatedContentTransitionScope.SlideDirection.Up, + initialOffset = { it / 4 }) + fadeIn() + }, + exitTransition = { + slideOutOfContainer( + AnimatedContentTransitionScope.SlideDirection.Down, + targetOffset = { it / 4 }) + fadeOut() + }) { AboutScreen { navController.popBackStack() } } - composable(NavRoutes.Settings.route) { + composable(NavRoutes.Settings.route, + enterTransition = { + slideIntoContainer( + AnimatedContentTransitionScope.SlideDirection.Up, + initialOffset = { it / 4 }) + fadeIn() + }, + exitTransition = { + slideOutOfContainer( + AnimatedContentTransitionScope.SlideDirection.Down, + targetOffset = { it / 4 }) + fadeOut() + }) { SettingsScreen(themeModel = themeModel, smsModel = smsModel) { navController.popBackStack() } } - composable(NavRoutes.Contacts.route) { - CompositionLocalProvider(LocalViewModelStoreOwner provides viewModelStoreOwner) { - ContactsPage(null, - onNavigate = { - navController.navigate(it.route) - }) - } - } - composable(NavRoutes.Phone.route) { - CompositionLocalProvider(LocalViewModelStoreOwner provides viewModelStoreOwner) { - CallLogsScreen(contactsModel, dialerModel, themeModel) - } - } - composable(NavRoutes.Messages.route) { - CompositionLocalProvider(LocalViewModelStoreOwner provides viewModelStoreOwner) { - SmsListScreen( - smsModel = smsModel, - contactsModel = contactsModel, - scrollConnection = null, - onNavigate = { - navController.navigate(it.route) - }, - onClickMessage = { address, contactData -> - smsModel.currentContactData = contactData - navController.navigate("${NavRoutes.MessageThread.route}/$address") - } - ) - } - } composable( "${NavRoutes.MessageThread.route}/{address}", - listOf(navArgument("address") { type = NavType.StringType }) + listOf(navArgument("address") { type = NavType.StringType }), + enterTransition = { + slideIntoContainer( + AnimatedContentTransitionScope.SlideDirection.Up, + initialOffset = { it / 4 }) + fadeIn() + }, + exitTransition = { + slideOutOfContainer( + AnimatedContentTransitionScope.SlideDirection.Down, + targetOffset = { it / 4 }) + fadeOut() + } ) { val address = it.arguments?.getString("address") CompositionLocalProvider(LocalViewModelStoreOwner provides viewModelStoreOwner) { diff --git a/app/src/main/java/com/bnyro/contacts/navigation/NavRoutes.kt b/app/src/main/java/com/bnyro/contacts/navigation/NavRoutes.kt index 523550f8..c3e0d1ed 100644 --- a/app/src/main/java/com/bnyro/contacts/navigation/NavRoutes.kt +++ b/app/src/main/java/com/bnyro/contacts/navigation/NavRoutes.kt @@ -9,22 +9,28 @@ import androidx.compose.ui.graphics.vector.ImageVector import com.bnyro.contacts.R sealed class NavRoutes( - val route: String, - @StringRes val stringRes: Int? = null, - val icon: ImageVector? = null + val route: String ) { - object About : NavRoutes("about", null, null) - object Settings : NavRoutes("settings", null, null) - object Phone : NavRoutes("phone", R.string.dial, Icons.Rounded.Phone) - object Contacts : NavRoutes("contacts", R.string.contacts, Icons.Rounded.Person) - object Messages : NavRoutes("messages", R.string.messages, Icons.Rounded.Message) - object MessageThread : NavRoutes("message_thread", null, null) + object Home : NavRoutes("home") + object About : NavRoutes("about") + object Settings : NavRoutes("settings") + object MessageThread : NavRoutes("message_thread") } -val allRoutes = listOf( - NavRoutes.About, - NavRoutes.Settings, - NavRoutes.Contacts, - NavRoutes.Messages, - NavRoutes.MessageThread, -) \ No newline at end of file +sealed class HomeRoutes( + val route: String, + @StringRes val stringRes: Int, + val icon: ImageVector +) { + object Phone : HomeRoutes("phone", R.string.dial, Icons.Rounded.Phone) + object Contacts : HomeRoutes("contacts", R.string.contacts, Icons.Rounded.Person) + object Messages : HomeRoutes("messages", R.string.messages, Icons.Rounded.Message) + + companion object { + val all = listOf( + Phone, + Contacts, + Messages + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/bnyro/contacts/presentation/screens/contact/SingleContactScreen.kt b/app/src/main/java/com/bnyro/contacts/presentation/screens/contact/SingleContactScreen.kt index 36b01716..71c0cdc7 100644 --- a/app/src/main/java/com/bnyro/contacts/presentation/screens/contact/SingleContactScreen.kt +++ b/app/src/main/java/com/bnyro/contacts/presentation/screens/contact/SingleContactScreen.kt @@ -44,7 +44,6 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import androidx.lifecycle.viewmodel.compose.viewModel import com.bnyro.contacts.R import com.bnyro.contacts.domain.enums.IntentActionType import com.bnyro.contacts.domain.enums.ListAttribute @@ -69,8 +68,7 @@ import com.bnyro.contacts.util.IntentHelper @OptIn(ExperimentalMaterial3Api::class) @Composable -fun SingleContactScreen(contact: ContactData, onClose: () -> Unit) { - val viewModel: ContactsModel = viewModel() +fun SingleContactScreen(contact: ContactData, viewModel: ContactsModel, onClose: () -> Unit) { val context = LocalContext.current var showDelete by remember { mutableStateOf(false) diff --git a/app/src/main/java/com/bnyro/contacts/presentation/screens/contacts/components/ContactItem.kt b/app/src/main/java/com/bnyro/contacts/presentation/screens/contacts/components/ContactItem.kt index 23a6279a..989944d3 100644 --- a/app/src/main/java/com/bnyro/contacts/presentation/screens/contacts/components/ContactItem.kt +++ b/app/src/main/java/com/bnyro/contacts/presentation/screens/contacts/components/ContactItem.kt @@ -124,7 +124,7 @@ fun ContactItem( val data = runBlocking { viewModel.loadAdvancedContactData(contact) } - SingleContactScreen(data) { + SingleContactScreen(data, viewModel) { showContactScreen = false } } diff --git a/app/src/main/java/com/bnyro/contacts/presentation/screens/sms/SmsThreadScreen.kt b/app/src/main/java/com/bnyro/contacts/presentation/screens/sms/SmsThreadScreen.kt index 669ff0ea..9ce417ab 100644 --- a/app/src/main/java/com/bnyro/contacts/presentation/screens/sms/SmsThreadScreen.kt +++ b/app/src/main/java/com/bnyro/contacts/presentation/screens/sms/SmsThreadScreen.kt @@ -217,7 +217,7 @@ fun SmsThreadScreen( } if (showContactScreen && contactData != null) { - SingleContactScreen(contact = contactData) { + SingleContactScreen(contact = contactData, contactsModel) { showContactScreen = false } } diff --git a/app/src/main/java/com/bnyro/contacts/presentation/screens/sms/model/SmsModel.kt b/app/src/main/java/com/bnyro/contacts/presentation/screens/sms/model/SmsModel.kt index 4a68503b..f4afd8ca 100644 --- a/app/src/main/java/com/bnyro/contacts/presentation/screens/sms/model/SmsModel.kt +++ b/app/src/main/java/com/bnyro/contacts/presentation/screens/sms/model/SmsModel.kt @@ -1,16 +1,14 @@ package com.bnyro.contacts.presentation.screens.sms.model import android.annotation.SuppressLint +import android.app.Application import android.content.Context import android.telephony.SubscriptionInfo import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue -import androidx.lifecycle.ViewModel -import androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory.Companion.APPLICATION_KEY +import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.viewModelScope -import androidx.lifecycle.viewmodel.initializer -import androidx.lifecycle.viewmodel.viewModelFactory import com.bnyro.contacts.App import com.bnyro.contacts.domain.model.ContactData import com.bnyro.contacts.util.SmsUtil @@ -19,7 +17,8 @@ import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch -class SmsModel(val app: App) : ViewModel() { +class SmsModel(application: Application) : AndroidViewModel(application) { + val app = application as App var smsList = app.smsRepo.getSmsStream(context = app.applicationContext).stateIn( viewModelScope, started = SharingStarted.WhileSubscribed(5000L), @@ -63,13 +62,4 @@ class SmsModel(val app: App) : ViewModel() { app.initSmsRepo() updateSmsList() } - - companion object { - val Factory = viewModelFactory { - initializer { - val application = this[APPLICATION_KEY] as App - SmsModel(application) - } - } - } } diff --git a/app/src/main/java/com/bnyro/contacts/ui/activities/BaseActivity.kt b/app/src/main/java/com/bnyro/contacts/ui/activities/BaseActivity.kt index 59c875ad..278a5ef3 100644 --- a/app/src/main/java/com/bnyro/contacts/ui/activities/BaseActivity.kt +++ b/app/src/main/java/com/bnyro/contacts/ui/activities/BaseActivity.kt @@ -23,7 +23,7 @@ abstract class BaseActivity : FragmentActivity() { val contactsModel by viewModels { ContactsModel.Factory } - val smsModel by viewModels { SmsModel.Factory } + val smsModel by viewModels() val dialerModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { diff --git a/app/src/main/java/com/bnyro/contacts/ui/activities/MainActivity.kt b/app/src/main/java/com/bnyro/contacts/ui/activities/MainActivity.kt index 33879738..49f56c7b 100644 --- a/app/src/main/java/com/bnyro/contacts/ui/activities/MainActivity.kt +++ b/app/src/main/java/com/bnyro/contacts/ui/activities/MainActivity.kt @@ -14,6 +14,7 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext import com.bnyro.contacts.domain.model.ContactData +import com.bnyro.contacts.navigation.HomeRoutes import com.bnyro.contacts.navigation.NavContainer import com.bnyro.contacts.presentation.features.AddToContactDialog import com.bnyro.contacts.presentation.features.ConfirmImportContactsDialog @@ -44,8 +45,8 @@ class MainActivity : BaseActivity() { dialerModel.initialPhoneNumber = getInitialNumberToDial() val initialTabIndex = dialerModel.initialPhoneNumber?.let { 0 } - ?: smsModel.initialAddressAndBody?.let { 1 } - ?: Preferences.getInt(Preferences.homeTabKey, 0) + ?: smsModel.initialAddressAndBody?.let { 2 } + ?: Preferences.getInt(Preferences.homeTabKey, 1) setContent { ConnectYouTheme(themeModel.themeMode) { val context = LocalContext.current @@ -55,7 +56,7 @@ class MainActivity : BaseActivity() { } if (authSuccess) { - NavContainer(initialTabIndex) + NavContainer(HomeRoutes.all[initialTabIndex.coerceIn(0, 2)]) getInsertOrEditNumber()?.let { AddToContactDialog(it) }