Start splash screen API migration
This commit is contained in:
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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()
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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" }
|
||||||
|
|||||||
Reference in New Issue
Block a user