From 81e3fcfd98a696bf4a1d44469b7b057b0d6ea328 Mon Sep 17 00:00:00 2001 From: Kirill Kamakin Date: Mon, 31 Oct 2022 20:46:03 +0100 Subject: [PATCH] Start splash screen API migration --- app/build.gradle.kts | 1 + app/src/main/AndroidManifest.xml | 2 +- .../mealient/extensions/ViewExtensions.kt | 32 ---------- .../mealient/ui/activity/MainActivity.kt | 2 + .../mealient/ui/splash/SplashFragment.kt | 14 +---- .../mealient/ui/splash/SplashViewModel.kt | 2 - app/src/main/res/values/themes.xml | 63 ++++++++++--------- gradle/libs.versions.toml | 3 + 8 files changed, 42 insertions(+), 77 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 4970cc6..1025875 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -77,6 +77,7 @@ dependencies { implementation(libs.androidx.navigation.uiKtx) implementation(libs.androidx.coreKtx) + implementation(libs.androidx.splashScreen) implementation(libs.androidx.appcompat) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1d2163d..db9ef8d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -15,7 +15,7 @@ android:networkSecurityConfig="@xml/network_security_config" android:roundIcon="@mipmap/ic_launcher" android:supportsRtl="true" - android:theme="@style/AppTheme" + android:theme="@style/Theme.App.Starting" tools:ignore="UnusedAttribute"> = callback } } -fun Activity.setSystemUiVisibility(isVisible: Boolean, logger: Logger) { - logger.v { "setSystemUiVisibility() called with: isVisible = $isVisible" } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) setSystemUiVisibilityV30(isVisible, logger) - else setSystemUiVisibilityV1(isVisible, logger) -} - -@Suppress("DEPRECATION") -private fun Activity.setSystemUiVisibilityV1(isVisible: Boolean, logger: Logger) { - logger.v { "setSystemUiVisibilityV1() called with: isVisible = $isVisible" } - window.decorView.systemUiVisibility = if (isVisible) 0 else View.SYSTEM_UI_FLAG_FULLSCREEN -} - -@RequiresApi(Build.VERSION_CODES.R) -private fun Activity.setSystemUiVisibilityV30(isVisible: Boolean, logger: Logger) { - logger.v { "setSystemUiVisibilityV30() called with: isVisible = $isVisible" } - val systemBars = WindowInsets.Type.systemBars() - window.insetsController?.apply { if (isVisible) show(systemBars) else hide(systemBars) } - ?: logger.w { "setSystemUiVisibilityV30: insets controller is null" } -} - -fun AppCompatActivity.setActionBarVisibility(isVisible: Boolean, logger: Logger) { - logger.v { "setActionBarVisibility() called with: isVisible = $isVisible" } - supportActionBar?.apply { if (isVisible) show() else hide() } - ?: logger.w { "setActionBarVisibility: action bar is null" } -} - fun TextView.textChangesFlow(logger: Logger): Flow = callbackFlow { logger.v { "textChangesFlow() called" } val textWatcher = doAfterTextChanged { 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 e346641..fc97e32 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 @@ -6,6 +6,7 @@ import android.view.MenuItem import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.core.net.toUri +import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import androidx.core.view.isVisible import androidx.navigation.findNavController import com.google.android.material.shape.CornerFamily @@ -28,6 +29,7 @@ class MainActivity : AppCompatActivity() { lateinit var logger: Logger override fun onCreate(savedInstanceState: Bundle?) { + installSplashScreen() super.onCreate(savedInstanceState) logger.v { "onCreate() called with: savedInstanceState = $savedInstanceState" } binding = MainActivityBinding.inflate(layoutInflater) 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 index f2978b1..b68a10f 100644 --- a/app/src/main/java/gq/kirmanak/mealient/ui/splash/SplashFragment.kt +++ b/app/src/main/java/gq/kirmanak/mealient/ui/splash/SplashFragment.kt @@ -2,20 +2,16 @@ package gq.kirmanak.mealient.ui.splash import android.os.Bundle import android.view.View -import androidx.appcompat.app.AppCompatActivity 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.R -import gq.kirmanak.mealient.extensions.setActionBarVisibility -import gq.kirmanak.mealient.extensions.setSystemUiVisibility import gq.kirmanak.mealient.logging.Logger import javax.inject.Inject @AndroidEntryPoint -class SplashFragment : Fragment(R.layout.fragment_splash) { +class SplashFragment : Fragment() { private val viewModel by viewModels() @@ -36,18 +32,10 @@ class SplashFragment : Fragment(R.layout.fragment_splash) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) logger.v { "onViewCreated() called with: view = $view, savedInstanceState = $savedInstanceState" } - changeFullscreenState(true) } override fun onDestroyView() { super.onDestroyView() logger.v { "onDestroyView() called" } - changeFullscreenState(false) - } - - private fun changeFullscreenState(isFullscreen: Boolean) { - logger.v { "changeFullscreenState() called with: isFullscreen = $isFullscreen" } - (activity as? AppCompatActivity)?.setActionBarVisibility(!isFullscreen, logger) - activity?.setSystemUiVisibility(!isFullscreen, logger) } } \ 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 index 399f860..413ca94 100644 --- a/app/src/main/java/gq/kirmanak/mealient/ui/splash/SplashViewModel.kt +++ b/app/src/main/java/gq/kirmanak/mealient/ui/splash/SplashViewModel.kt @@ -8,7 +8,6 @@ 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.delay import kotlinx.coroutines.launch import javax.inject.Inject @@ -22,7 +21,6 @@ class SplashViewModel @Inject constructor( init { viewModelScope.launch { - delay(1000) _nextDestination.value = when { !disclaimerStorage.isDisclaimerAccepted() -> SplashFragmentDirections.actionSplashFragmentToDisclaimerFragment() serverInfoRepo.getUrl() == null -> SplashFragmentDirections.actionSplashFragmentToBaseURLFragment() diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index c7ddac7..f190ab3 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,32 +1,37 @@ - + + + \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 718bc8f..31cbf30 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -31,6 +31,8 @@ appcompat = "1.5.1" contraintLayout = "2.1.4" # https://developer.android.com/jetpack/androidx/releases/swiperefreshlayout swipeRefreshLayout = "1.1.0" +# https://developer.android.com/jetpack/androidx/releases/core +splashScreen = "1.0.0" # https://developer.android.com/jetpack/androidx/releases/lifecycle lifecycle = "2.5.1" # https://github.com/square/retrofit/tags @@ -118,6 +120,7 @@ androidx-coreKtx = { group = "androidx.core", name = "core-ktx", version.ref = " androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } androidx-constraintLayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "contraintLayout" } androidx-swipeRefreshLayout = { group = "androidx.swiperefreshlayout", name = "swiperefreshlayout", version.ref = "swipeRefreshLayout" } +androidx-splashScreen = { group = "androidx.core", name = "core-splashscreen", version.ref = "splashScreen" } androidx-paging-runtimeKtx = { group = "androidx.paging", name = "paging-runtime-ktx", version.ref = "paging" } androidx-paging-commonKtx = { group = "androidx.paging", name = "paging-common-ktx", version.ref = "paging" }