Remove splash fragment
This commit is contained in:
@@ -8,6 +8,7 @@ import androidx.appcompat.app.AppCompatActivity
|
|||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
|
import androidx.navigation.NavController
|
||||||
import androidx.navigation.findNavController
|
import androidx.navigation.findNavController
|
||||||
import com.google.android.material.shape.CornerFamily
|
import com.google.android.material.shape.CornerFamily
|
||||||
import com.google.android.material.shape.MaterialShapeDrawable
|
import com.google.android.material.shape.MaterialShapeDrawable
|
||||||
@@ -24,6 +25,8 @@ class MainActivity : AppCompatActivity() {
|
|||||||
private val viewModel by viewModels<MainActivityViewModel>()
|
private val viewModel by viewModels<MainActivityViewModel>()
|
||||||
private val title: String by lazy { getString(R.string.app_name) }
|
private val title: String by lazy { getString(R.string.app_name) }
|
||||||
private val uiState: MainActivityUiState get() = viewModel.uiState
|
private val uiState: MainActivityUiState get() = viewModel.uiState
|
||||||
|
private val navController: NavController
|
||||||
|
get() = findNavController(binding.navHost.id)
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var logger: Logger
|
lateinit var logger: Logger
|
||||||
@@ -34,12 +37,25 @@ class MainActivity : AppCompatActivity() {
|
|||||||
logger.v { "onCreate() called with: savedInstanceState = $savedInstanceState" }
|
logger.v { "onCreate() called with: savedInstanceState = $savedInstanceState" }
|
||||||
binding = MainActivityBinding.inflate(layoutInflater)
|
binding = MainActivityBinding.inflate(layoutInflater)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
|
configureToolbar()
|
||||||
|
configureNavGraph()
|
||||||
|
viewModel.uiStateLive.observe(this, ::onUiStateChange)
|
||||||
|
binding.navigationView.setNavigationItemSelectedListener(::onNavigationItemSelected)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun configureNavGraph() {
|
||||||
|
val graph = navController.navInflater.inflate(R.navigation.nav_graph)
|
||||||
|
viewModel.startDestination.observe(this) {
|
||||||
|
graph.setStartDestination(it)
|
||||||
|
navController.setGraph(graph, intent.extras)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun configureToolbar() {
|
||||||
setSupportActionBar(binding.toolbar)
|
setSupportActionBar(binding.toolbar)
|
||||||
binding.toolbar.setNavigationIcon(R.drawable.ic_toolbar)
|
binding.toolbar.setNavigationIcon(R.drawable.ic_toolbar)
|
||||||
binding.toolbar.setNavigationOnClickListener { binding.drawer.open() }
|
binding.toolbar.setNavigationOnClickListener { binding.drawer.open() }
|
||||||
setToolbarRoundCorner()
|
setToolbarRoundCorner()
|
||||||
viewModel.uiStateLive.observe(this, ::onUiStateChange)
|
|
||||||
binding.navigationView.setNavigationItemSelectedListener(::onNavigationItemSelected)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun onNavigationItemSelected(menuItem: MenuItem): Boolean {
|
private fun onNavigationItemSelected(menuItem: MenuItem): Boolean {
|
||||||
@@ -104,7 +120,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
private fun navigateDeepLink(deepLink: String) {
|
private fun navigateDeepLink(deepLink: String) {
|
||||||
logger.v { "navigateDeepLink() called with: deepLink = $deepLink" }
|
logger.v { "navigateDeepLink() called with: deepLink = $deepLink" }
|
||||||
findNavController(binding.navHost.id).navigate(deepLink.toUri())
|
navController.navigate(deepLink.toUri())
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
@@ -2,7 +2,10 @@ package gq.kirmanak.mealient.ui.activity
|
|||||||
|
|
||||||
import androidx.lifecycle.*
|
import androidx.lifecycle.*
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
|
import gq.kirmanak.mealient.R
|
||||||
import gq.kirmanak.mealient.data.auth.AuthRepo
|
import gq.kirmanak.mealient.data.auth.AuthRepo
|
||||||
|
import gq.kirmanak.mealient.data.baseurl.ServerInfoRepo
|
||||||
|
import gq.kirmanak.mealient.data.disclaimer.DisclaimerStorage
|
||||||
import gq.kirmanak.mealient.logging.Logger
|
import gq.kirmanak.mealient.logging.Logger
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
@@ -13,6 +16,8 @@ import javax.inject.Inject
|
|||||||
class MainActivityViewModel @Inject constructor(
|
class MainActivityViewModel @Inject constructor(
|
||||||
private val authRepo: AuthRepo,
|
private val authRepo: AuthRepo,
|
||||||
private val logger: Logger,
|
private val logger: Logger,
|
||||||
|
private val disclaimerStorage: DisclaimerStorage,
|
||||||
|
private val serverInfoRepo: ServerInfoRepo,
|
||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
|
|
||||||
private val _uiState = MutableLiveData(MainActivityUiState())
|
private val _uiState = MutableLiveData(MainActivityUiState())
|
||||||
@@ -22,10 +27,21 @@ class MainActivityViewModel @Inject constructor(
|
|||||||
get() = checkNotNull(_uiState.value) { "UiState must not be null" }
|
get() = checkNotNull(_uiState.value) { "UiState must not be null" }
|
||||||
private set(value) = _uiState.postValue(value)
|
private set(value) = _uiState.postValue(value)
|
||||||
|
|
||||||
|
private val _startDestination = MutableLiveData<Int>()
|
||||||
|
val startDestination: LiveData<Int> = _startDestination
|
||||||
|
|
||||||
init {
|
init {
|
||||||
authRepo.isAuthorizedFlow
|
authRepo.isAuthorizedFlow
|
||||||
.onEach { isAuthorized -> updateUiState { it.copy(isAuthorized = isAuthorized) } }
|
.onEach { isAuthorized -> updateUiState { it.copy(isAuthorized = isAuthorized) } }
|
||||||
.launchIn(viewModelScope)
|
.launchIn(viewModelScope)
|
||||||
|
|
||||||
|
viewModelScope.launch {
|
||||||
|
_startDestination.value = when {
|
||||||
|
!disclaimerStorage.isDisclaimerAccepted() -> R.id.disclaimerFragment
|
||||||
|
serverInfoRepo.getUrl() == null -> R.id.baseURLFragment
|
||||||
|
else -> R.id.recipesFragment
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateUiState(updater: (MainActivityUiState) -> MainActivityUiState) {
|
fun updateUiState(updater: (MainActivityUiState) -> MainActivityUiState) {
|
||||||
|
|||||||
@@ -1,41 +0,0 @@
|
|||||||
package gq.kirmanak.mealient.ui.splash
|
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.view.View
|
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import androidx.fragment.app.viewModels
|
|
||||||
import androidx.navigation.NavDirections
|
|
||||||
import androidx.navigation.fragment.findNavController
|
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
|
||||||
import gq.kirmanak.mealient.logging.Logger
|
|
||||||
import javax.inject.Inject
|
|
||||||
|
|
||||||
@AndroidEntryPoint
|
|
||||||
class SplashFragment : Fragment() {
|
|
||||||
|
|
||||||
private val viewModel by viewModels<SplashViewModel>()
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
lateinit var logger: Logger
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
logger.v { "onCreate() called with: savedInstanceState = $savedInstanceState" }
|
|
||||||
viewModel.nextDestination.observe(this, ::onNextDestination)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun onNextDestination(navDirections: NavDirections) {
|
|
||||||
logger.v { "onNextDestination() called with: navDirections = $navDirections" }
|
|
||||||
findNavController().navigate(navDirections)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
||||||
super.onViewCreated(view, savedInstanceState)
|
|
||||||
logger.v { "onViewCreated() called with: view = $view, savedInstanceState = $savedInstanceState" }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDestroyView() {
|
|
||||||
super.onDestroyView()
|
|
||||||
logger.v { "onDestroyView() called" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
package gq.kirmanak.mealient.ui.splash
|
|
||||||
|
|
||||||
import androidx.lifecycle.LiveData
|
|
||||||
import androidx.lifecycle.MutableLiveData
|
|
||||||
import androidx.lifecycle.ViewModel
|
|
||||||
import androidx.lifecycle.viewModelScope
|
|
||||||
import androidx.navigation.NavDirections
|
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
|
||||||
import gq.kirmanak.mealient.data.baseurl.ServerInfoRepo
|
|
||||||
import gq.kirmanak.mealient.data.disclaimer.DisclaimerStorage
|
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
import javax.inject.Inject
|
|
||||||
|
|
||||||
@HiltViewModel
|
|
||||||
class SplashViewModel @Inject constructor(
|
|
||||||
private val disclaimerStorage: DisclaimerStorage,
|
|
||||||
private val serverInfoRepo: ServerInfoRepo,
|
|
||||||
) : ViewModel() {
|
|
||||||
private val _nextDestination = MutableLiveData<NavDirections>()
|
|
||||||
val nextDestination: LiveData<NavDirections> = _nextDestination
|
|
||||||
|
|
||||||
init {
|
|
||||||
viewModelScope.launch {
|
|
||||||
_nextDestination.value = when {
|
|
||||||
!disclaimerStorage.isDisclaimerAccepted() -> SplashFragmentDirections.actionSplashFragmentToDisclaimerFragment()
|
|
||||||
serverInfoRepo.getUrl() == null -> SplashFragmentDirections.actionSplashFragmentToBaseURLFragment()
|
|
||||||
else -> SplashFragmentDirections.actionSplashFragmentToRecipesFragment()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -33,8 +33,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
app:defaultNavHost="true"
|
app:defaultNavHost="true"
|
||||||
app:layout_behavior="@string/appbar_scrolling_view_behavior"
|
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
|
||||||
app:navGraph="@navigation/nav_graph" />
|
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
|
|
||||||
<com.google.android.material.navigation.NavigationView
|
<com.google.android.material.navigation.NavigationView
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:id="@+id/nav_graph"
|
android:id="@+id/nav_graph"
|
||||||
app:startDestination="@id/splashFragment">
|
tools:ignore="InvalidNavigation">
|
||||||
|
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/authenticationFragment"
|
android:id="@+id/authenticationFragment"
|
||||||
@@ -49,27 +49,6 @@
|
|||||||
app:popUpTo="@id/nav_graph"
|
app:popUpTo="@id/nav_graph"
|
||||||
app:popUpToInclusive="true" />
|
app:popUpToInclusive="true" />
|
||||||
</fragment>
|
</fragment>
|
||||||
<fragment
|
|
||||||
android:id="@+id/splashFragment"
|
|
||||||
android:name="gq.kirmanak.mealient.ui.splash.SplashFragment"
|
|
||||||
android:label="fragment_splash"
|
|
||||||
tools:layout="@layout/fragment_splash">
|
|
||||||
<action
|
|
||||||
android:id="@+id/action_splashFragment_to_disclaimerFragment"
|
|
||||||
app:destination="@id/disclaimerFragment"
|
|
||||||
app:popUpTo="@id/nav_graph"
|
|
||||||
app:popUpToInclusive="true" />
|
|
||||||
<action
|
|
||||||
android:id="@+id/action_splashFragment_to_recipesFragment"
|
|
||||||
app:destination="@id/recipesFragment"
|
|
||||||
app:popUpTo="@id/nav_graph"
|
|
||||||
app:popUpToInclusive="true" />
|
|
||||||
<action
|
|
||||||
android:id="@+id/action_splashFragment_to_baseURLFragment"
|
|
||||||
app:destination="@id/baseURLFragment"
|
|
||||||
app:popUpTo="@id/nav_graph"
|
|
||||||
app:popUpToInclusive="true" />
|
|
||||||
</fragment>
|
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/baseURLFragment"
|
android:id="@+id/baseURLFragment"
|
||||||
android:name="gq.kirmanak.mealient.ui.baseurl.BaseURLFragment"
|
android:name="gq.kirmanak.mealient.ui.baseurl.BaseURLFragment"
|
||||||
|
|||||||
Reference in New Issue
Block a user