From ff4be6807f7b42776e4b6328c2c880f0c8b6436a Mon Sep 17 00:00:00 2001 From: Kirill Kamakin Date: Sat, 20 Nov 2021 20:11:19 +0300 Subject: [PATCH] Add splash screen --- .../mealient/ui/splash/SplashFragment.kt | 62 +++++++++++++++++++ .../mealient/ui/splash/SplashViewModel.kt | 33 ++++++++++ .../main/res/layout/fragment_recipe_info.xml | 3 +- app/src/main/res/layout/fragment_splash.xml | 19 ++++++ app/src/main/res/navigation/nav_graph.xml | 23 ++++++- 5 files changed, 138 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/gq/kirmanak/mealient/ui/splash/SplashFragment.kt create mode 100644 app/src/main/java/gq/kirmanak/mealient/ui/splash/SplashViewModel.kt create mode 100644 app/src/main/res/layout/fragment_splash.xml diff --git a/app/src/main/java/gq/kirmanak/mealient/ui/splash/SplashFragment.kt b/app/src/main/java/gq/kirmanak/mealient/ui/splash/SplashFragment.kt new file mode 100644 index 0000000..f55a9b6 --- /dev/null +++ b/app/src/main/java/gq/kirmanak/mealient/ui/splash/SplashFragment.kt @@ -0,0 +1,62 @@ +package gq.kirmanak.mealient.ui.splash + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import androidx.navigation.fragment.findNavController +import dagger.hilt.android.AndroidEntryPoint +import gq.kirmanak.mealient.databinding.FragmentSplashBinding +import timber.log.Timber + +@AndroidEntryPoint +class SplashFragment : Fragment() { + private val viewModel by viewModels() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + Timber.v("onCreate() called with: savedInstanceState = $savedInstanceState") + viewModel.nextDestination.observe(this) { + Timber.d("onCreate: next destination $it") + findNavController().navigate(it) + } + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + Timber.v("onCreateView() called with: inflater = $inflater, container = $container, savedInstanceState = $savedInstanceState") + val binding = FragmentSplashBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onResume() { + super.onResume() + Timber.v("onResume() called") + changeFullscreenState(true) + } + + override fun onPause() { + super.onPause() + Timber.v("onPause() called") + changeFullscreenState(false) + } + + private fun changeFullscreenState(isFullscreen: Boolean) { + Timber.v("changeFullscreenState() called with: isFullscreen = $isFullscreen") + + val supportActionBar = (activity as? AppCompatActivity)?.supportActionBar + Timber.d("changeFullscreenState: action bar = $supportActionBar") + if (isFullscreen) supportActionBar?.hide() + else supportActionBar?.show() + + val decorView = activity?.window?.decorView + Timber.d("changeFullscreenState: decorView = $decorView") + decorView?.systemUiVisibility = if (isFullscreen) View.SYSTEM_UI_FLAG_FULLSCREEN else 0 + } +} \ No newline at end of file diff --git a/app/src/main/java/gq/kirmanak/mealient/ui/splash/SplashViewModel.kt b/app/src/main/java/gq/kirmanak/mealient/ui/splash/SplashViewModel.kt new file mode 100644 index 0000000..03a209e --- /dev/null +++ b/app/src/main/java/gq/kirmanak/mealient/ui/splash/SplashViewModel.kt @@ -0,0 +1,33 @@ +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.auth.AuthRepo +import gq.kirmanak.mealient.data.disclaimer.DisclaimerStorage +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.launch +import javax.inject.Inject + +@HiltViewModel +class SplashViewModel @Inject constructor( + private val authRepo: AuthRepo, + private val disclaimerStorage: DisclaimerStorage +) : ViewModel() { + private val _nextDestination = MutableLiveData() + val nextDestination: LiveData = _nextDestination + + init { + viewModelScope.launch { + _nextDestination.value = if (!disclaimerStorage.isDisclaimerAccepted()) + SplashFragmentDirections.actionSplashFragmentToDisclaimerFragment() + else if (!authRepo.authenticationStatuses().first()) + SplashFragmentDirections.actionSplashFragmentToAuthenticationFragment() + else + SplashFragmentDirections.actionSplashFragmentToRecipesFragment() + } + } +} diff --git a/app/src/main/res/layout/fragment_recipe_info.xml b/app/src/main/res/layout/fragment_recipe_info.xml index e4e1180..aae8fd4 100644 --- a/app/src/main/res/layout/fragment_recipe_info.xml +++ b/app/src/main/res/layout/fragment_recipe_info.xml @@ -3,7 +3,8 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + tools:context=".ui.recipes.info.RecipeInfoFragment"> + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index fdac826..e215b33 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/nav_graph" - app:startDestination="@id/disclaimerFragment"> + app:startDestination="@id/splashFragment"> + + + + + \ No newline at end of file