Start splash screen API migration

This commit is contained in:
Kirill Kamakin
2022-10-31 20:46:03 +01:00
parent eb65ac6860
commit 81e3fcfd98
8 changed files with 42 additions and 77 deletions

View File

@@ -77,6 +77,7 @@ dependencies {
implementation(libs.androidx.navigation.uiKtx) implementation(libs.androidx.navigation.uiKtx)
implementation(libs.androidx.coreKtx) implementation(libs.androidx.coreKtx)
implementation(libs.androidx.splashScreen)
implementation(libs.androidx.appcompat) implementation(libs.androidx.appcompat)

View File

@@ -15,7 +15,7 @@
android:networkSecurityConfig="@xml/network_security_config" android:networkSecurityConfig="@xml/network_security_config"
android:roundIcon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/AppTheme" android:theme="@style/Theme.App.Starting"
tools:ignore="UnusedAttribute"> tools:ignore="UnusedAttribute">
<activity <activity
android:name=".ui.activity.MainActivity" android:name=".ui.activity.MainActivity"

View File

@@ -1,15 +1,9 @@
package gq.kirmanak.mealient.extensions package gq.kirmanak.mealient.extensions
import android.app.Activity
import android.content.SharedPreferences import android.content.SharedPreferences
import android.os.Build
import android.view.View
import android.view.WindowInsets
import android.widget.EditText import android.widget.EditText
import android.widget.TextView import android.widget.TextView
import androidx.annotation.RequiresApi
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.appcompat.app.AppCompatActivity
import androidx.core.widget.doAfterTextChanged import androidx.core.widget.doAfterTextChanged
import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
@@ -39,32 +33,6 @@ fun SwipeRefreshLayout.refreshRequestFlow(logger: Logger): Flow<Unit> = 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<CharSequence?> = callbackFlow { fun TextView.textChangesFlow(logger: Logger): Flow<CharSequence?> = callbackFlow {
logger.v { "textChangesFlow() called" } logger.v { "textChangesFlow() called" }
val textWatcher = doAfterTextChanged { val textWatcher = doAfterTextChanged {

View File

@@ -6,6 +6,7 @@ import android.view.MenuItem
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity 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.view.isVisible import androidx.core.view.isVisible
import androidx.navigation.findNavController import androidx.navigation.findNavController
import com.google.android.material.shape.CornerFamily import com.google.android.material.shape.CornerFamily
@@ -28,6 +29,7 @@ class MainActivity : AppCompatActivity() {
lateinit var logger: Logger lateinit var logger: Logger
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
installSplashScreen()
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
logger.v { "onCreate() called with: savedInstanceState = $savedInstanceState" } logger.v { "onCreate() called with: savedInstanceState = $savedInstanceState" }
binding = MainActivityBinding.inflate(layoutInflater) binding = MainActivityBinding.inflate(layoutInflater)

View File

@@ -2,20 +2,16 @@ package gq.kirmanak.mealient.ui.splash
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.navigation.NavDirections import androidx.navigation.NavDirections
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import dagger.hilt.android.AndroidEntryPoint 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 gq.kirmanak.mealient.logging.Logger
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
class SplashFragment : Fragment(R.layout.fragment_splash) { class SplashFragment : Fragment() {
private val viewModel by viewModels<SplashViewModel>() private val viewModel by viewModels<SplashViewModel>()
@@ -36,18 +32,10 @@ class SplashFragment : Fragment(R.layout.fragment_splash) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
logger.v { "onViewCreated() called with: view = $view, savedInstanceState = $savedInstanceState" } logger.v { "onViewCreated() called with: view = $view, savedInstanceState = $savedInstanceState" }
changeFullscreenState(true)
} }
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
logger.v { "onDestroyView() called" } 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)
} }
} }

View File

@@ -8,7 +8,6 @@ import androidx.navigation.NavDirections
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import gq.kirmanak.mealient.data.baseurl.ServerInfoRepo import gq.kirmanak.mealient.data.baseurl.ServerInfoRepo
import gq.kirmanak.mealient.data.disclaimer.DisclaimerStorage import gq.kirmanak.mealient.data.disclaimer.DisclaimerStorage
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import javax.inject.Inject import javax.inject.Inject
@@ -22,7 +21,6 @@ class SplashViewModel @Inject constructor(
init { init {
viewModelScope.launch { viewModelScope.launch {
delay(1000)
_nextDestination.value = when { _nextDestination.value = when {
!disclaimerStorage.isDisclaimerAccepted() -> SplashFragmentDirections.actionSplashFragmentToDisclaimerFragment() !disclaimerStorage.isDisclaimerAccepted() -> SplashFragmentDirections.actionSplashFragmentToDisclaimerFragment()
serverInfoRepo.getUrl() == null -> SplashFragmentDirections.actionSplashFragmentToBaseURLFragment() serverInfoRepo.getUrl() == null -> SplashFragmentDirections.actionSplashFragmentToBaseURLFragment()

View File

@@ -1,5 +1,10 @@
<resources> <resources>
<style name="Theme.App.Starting" parent="Theme.SplashScreen">
<item name="windowSplashScreenBackground">@drawable/ic_splash_screen_background</item>
<item name="postSplashScreenTheme">@style/AppTheme</item>
</style>
<style name="AppTheme" parent="Theme.Material3.Light.NoActionBar"> <style name="AppTheme" parent="Theme.Material3.Light.NoActionBar">
<item name="colorPrimary">@color/md_theme_light_primary</item> <item name="colorPrimary">@color/md_theme_light_primary</item>
<item name="colorOnPrimary">@color/md_theme_light_onPrimary</item> <item name="colorOnPrimary">@color/md_theme_light_onPrimary</item>

View File

@@ -31,6 +31,8 @@ appcompat = "1.5.1"
contraintLayout = "2.1.4" contraintLayout = "2.1.4"
# https://developer.android.com/jetpack/androidx/releases/swiperefreshlayout # https://developer.android.com/jetpack/androidx/releases/swiperefreshlayout
swipeRefreshLayout = "1.1.0" swipeRefreshLayout = "1.1.0"
# https://developer.android.com/jetpack/androidx/releases/core
splashScreen = "1.0.0"
# https://developer.android.com/jetpack/androidx/releases/lifecycle # https://developer.android.com/jetpack/androidx/releases/lifecycle
lifecycle = "2.5.1" lifecycle = "2.5.1"
# https://github.com/square/retrofit/tags # 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-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
androidx-constraintLayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "contraintLayout" } androidx-constraintLayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "contraintLayout" }
androidx-swipeRefreshLayout = { group = "androidx.swiperefreshlayout", name = "swiperefreshlayout", version.ref = "swipeRefreshLayout" } 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-runtimeKtx = { group = "androidx.paging", name = "paging-runtime-ktx", version.ref = "paging" }
androidx-paging-commonKtx = { group = "androidx.paging", name = "paging-common-ktx", version.ref = "paging" } androidx-paging-commonKtx = { group = "androidx.paging", name = "paging-common-ktx", version.ref = "paging" }