From 9d4f7775f4dc1191a70bf1d7ab7c381c15f76e80 Mon Sep 17 00:00:00 2001 From: Kirill Kamakin Date: Sun, 20 Nov 2022 18:18:35 +0100 Subject: [PATCH] Fix crash on URL input screen --- .../mealient/ui/activity/MainActivity.kt | 4 ++-- .../ui/activity/MainActivityViewModel.kt | 17 ++++++++++++----- .../ui/activity/StartDestinationInfo.kt | 9 +++++++++ app/src/main/res/navigation/nav_graph.xml | 1 + 4 files changed, 24 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/gq/kirmanak/mealient/ui/activity/StartDestinationInfo.kt diff --git a/app/src/main/java/gq/kirmanak/mealient/ui/activity/MainActivity.kt b/app/src/main/java/gq/kirmanak/mealient/ui/activity/MainActivity.kt index 434c8ce..49ea282 100644 --- a/app/src/main/java/gq/kirmanak/mealient/ui/activity/MainActivity.kt +++ b/app/src/main/java/gq/kirmanak/mealient/ui/activity/MainActivity.kt @@ -53,8 +53,8 @@ class MainActivity : AppCompatActivity(R.layout.main_activity) { logger.d { "configureNavGraph: received destination" } val controller = navController val graph = controller.navInflater.inflate(R.navigation.nav_graph) - graph.setStartDestination(it) - controller.setGraph(graph, intent.extras) + graph.setStartDestination(it.startDestinationId) + controller.setGraph(graph, it.startDestinationArgs) } } diff --git a/app/src/main/java/gq/kirmanak/mealient/ui/activity/MainActivityViewModel.kt b/app/src/main/java/gq/kirmanak/mealient/ui/activity/MainActivityViewModel.kt index 8022d30..6fd28a7 100644 --- a/app/src/main/java/gq/kirmanak/mealient/ui/activity/MainActivityViewModel.kt +++ b/app/src/main/java/gq/kirmanak/mealient/ui/activity/MainActivityViewModel.kt @@ -8,6 +8,7 @@ import gq.kirmanak.mealient.data.baseurl.ServerInfoRepo import gq.kirmanak.mealient.data.disclaimer.DisclaimerStorage import gq.kirmanak.mealient.data.recipes.RecipeRepo import gq.kirmanak.mealient.logging.Logger +import gq.kirmanak.mealient.ui.baseurl.BaseURLFragmentArgs import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.launchIn @@ -32,8 +33,8 @@ class MainActivityViewModel @Inject constructor( get() = checkNotNull(_uiState.value) { "UiState must not be null" } private set(value) = _uiState.postValue(value) - private val _startDestination = MutableLiveData() - val startDestination: LiveData = _startDestination + private val _startDestination = MutableLiveData() + val startDestination: LiveData = _startDestination private val _clearSearchViewFocusChannel = Channel() val clearSearchViewFocus: Flow = _clearSearchViewFocusChannel.receiveAsFlow() @@ -45,9 +46,15 @@ class MainActivityViewModel @Inject constructor( viewModelScope.launch { _startDestination.value = when { - !disclaimerStorage.isDisclaimerAccepted() -> R.id.disclaimerFragment - serverInfoRepo.getUrl() == null -> R.id.baseURLFragment - else -> R.id.recipesListFragment + !disclaimerStorage.isDisclaimerAccepted() -> { + StartDestinationInfo(R.id.disclaimerFragment) + } + serverInfoRepo.getUrl() == null -> { + StartDestinationInfo(R.id.baseURLFragment, BaseURLFragmentArgs(true).toBundle()) + } + else -> { + StartDestinationInfo(R.id.recipesListFragment) + } } } } diff --git a/app/src/main/java/gq/kirmanak/mealient/ui/activity/StartDestinationInfo.kt b/app/src/main/java/gq/kirmanak/mealient/ui/activity/StartDestinationInfo.kt new file mode 100644 index 0000000..36eec48 --- /dev/null +++ b/app/src/main/java/gq/kirmanak/mealient/ui/activity/StartDestinationInfo.kt @@ -0,0 +1,9 @@ +package gq.kirmanak.mealient.ui.activity + +import android.os.Bundle +import androidx.annotation.IdRes + +data class StartDestinationInfo( + @IdRes val startDestinationId: Int, + val startDestinationArgs: Bundle? = null, +) diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index 39e13e5..1a17535 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -54,6 +54,7 @@ app:popUpTo="@id/nav_graph" />