From af5521f6bb6cbe4d5cc83fe094227498d9fa0f77 Mon Sep 17 00:00:00 2001 From: Thomas Andres Gomez Date: Thu, 21 Apr 2022 10:23:08 +0200 Subject: [PATCH] change the theme to go fullscreen. --- app/src/main/AndroidManifest.xml | 6 ++-- .../com/pixelized/biblib/ui/MainActivity.kt | 34 +++++++++++++++---- .../ui/authentication/AuthenticationScreen.kt | 10 ++++-- .../biblib/ui/composable/AnimatedDelayer.kt | 2 +- .../biblib/ui/composable/SystemThemeColor.kt | 24 +++++++++++++ .../biblib/ui/launch/LauncherViewModel.kt | 25 ++++++++++++++ .../biblib/ui/navigation/FullScreenNavHost.kt | 11 ++++++ app/src/main/res/values/themes.xml | 12 +++++++ 8 files changed, 112 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/com/pixelized/biblib/ui/composable/SystemThemeColor.kt create mode 100644 app/src/main/java/com/pixelized/biblib/ui/launch/LauncherViewModel.kt create mode 100644 app/src/main/res/values/themes.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3b01cb1..e4c7e94 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,17 +7,17 @@ + android:theme="@style/Theme.BibLib.NoActionBar"> + android:theme="@style/Theme.BibLib.Starting"> diff --git a/app/src/main/java/com/pixelized/biblib/ui/MainActivity.kt b/app/src/main/java/com/pixelized/biblib/ui/MainActivity.kt index e716555..3650741 100644 --- a/app/src/main/java/com/pixelized/biblib/ui/MainActivity.kt +++ b/app/src/main/java/com/pixelized/biblib/ui/MainActivity.kt @@ -3,8 +3,14 @@ package com.pixelized.biblib.ui import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent +import androidx.activity.viewModels import androidx.compose.material.MaterialTheme import androidx.compose.material.Surface +import androidx.compose.runtime.getValue +import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen +import androidx.core.view.WindowCompat +import com.google.accompanist.insets.ProvideWindowInsets +import com.pixelized.biblib.ui.launch.LauncherViewModel import com.pixelized.biblib.ui.navigation.FullScreenNavHost import com.pixelized.biblib.ui.navigation.Screen import com.pixelized.biblib.ui.theme.BibLibTheme @@ -14,17 +20,33 @@ import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class MainActivity : ComponentActivity() { + private val launcherViewModel: LauncherViewModel by viewModels() + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + // Disable system inset consuming. + WindowCompat.setDecorFitsSystemWindows(window, false) + + // splashscreen management + installSplashScreen().apply { + setKeepOnScreenCondition { + launcherViewModel.isLoading.value + } + } + + // Compose setContent { BibLibTheme { - Surface( - color = MaterialTheme.colors.background, - ) { - FullScreenNavHost( - startDestination = Screen.Authentication - ) + ProvideWindowInsets { + Surface(color = MaterialTheme.colors.background) { + val loading by launcherViewModel.isLoading + if (loading.not()) { + FullScreenNavHost( + startDestination = Screen.Authentication + ) + } + } } } } diff --git a/app/src/main/java/com/pixelized/biblib/ui/authentication/AuthenticationScreen.kt b/app/src/main/java/com/pixelized/biblib/ui/authentication/AuthenticationScreen.kt index 974a88a..d730b17 100644 --- a/app/src/main/java/com/pixelized/biblib/ui/authentication/AuthenticationScreen.kt +++ b/app/src/main/java/com/pixelized/biblib/ui/authentication/AuthenticationScreen.kt @@ -12,7 +12,6 @@ import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.verticalScroll import androidx.compose.material.* import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material.icons.sharp.Visibility import androidx.compose.material.icons.sharp.VisibilityOff import androidx.compose.runtime.* @@ -30,9 +29,13 @@ import androidx.compose.ui.text.withStyle import androidx.compose.ui.tooling.preview.Preview import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.NavHostController +import com.google.accompanist.insets.systemBarsPadding import com.pixelized.biblib.R import com.pixelized.biblib.network.client.IBibLibClient -import com.pixelized.biblib.ui.composable.* +import com.pixelized.biblib.ui.composable.AnimatedDelayer +import com.pixelized.biblib.ui.composable.AnimatedOffset +import com.pixelized.biblib.ui.composable.StateUio +import com.pixelized.biblib.ui.composable.StateUioHandler import com.pixelized.biblib.ui.navigation.LocalFullScreenNavHostController import com.pixelized.biblib.ui.navigation.Screen import com.pixelized.biblib.ui.theme.BibLibTheme @@ -99,6 +102,7 @@ private fun AuthenticationScreenContent( modifier = Modifier .fillMaxSize() .verticalScroll(scrollState) + .systemBarsPadding() ) { Spacer(modifier = Modifier.weight(1f)) @@ -358,6 +362,8 @@ fun googleStringResource(): AnnotatedString = buildAnnotatedString { } } +// endregion + @Composable @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_NO) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) diff --git a/app/src/main/java/com/pixelized/biblib/ui/composable/AnimatedDelayer.kt b/app/src/main/java/com/pixelized/biblib/ui/composable/AnimatedDelayer.kt index 4184e14..d3e45c0 100644 --- a/app/src/main/java/com/pixelized/biblib/ui/composable/AnimatedDelayer.kt +++ b/app/src/main/java/com/pixelized/biblib/ui/composable/AnimatedDelayer.kt @@ -11,5 +11,5 @@ fun AnimatedDelayer( } class AnimatedDelayerScope( - var delay : Delay = Delay() + var delay: Delay = Delay() ) \ No newline at end of file diff --git a/app/src/main/java/com/pixelized/biblib/ui/composable/SystemThemeColor.kt b/app/src/main/java/com/pixelized/biblib/ui/composable/SystemThemeColor.kt new file mode 100644 index 0000000..9d542b4 --- /dev/null +++ b/app/src/main/java/com/pixelized/biblib/ui/composable/SystemThemeColor.kt @@ -0,0 +1,24 @@ +package com.pixelized.biblib.ui.composable + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.SideEffect +import androidx.compose.ui.graphics.Color +import com.google.accompanist.systemuicontroller.SystemUiController + +@Composable +fun SystemThemeColor( + systemUiController: SystemUiController, + color: Color = Color.Transparent, + statusDarkIcons: Boolean, + navigationDarkIcons: Boolean, +) = SideEffect { + systemUiController.setStatusBarColor( + color = color, + darkIcons = statusDarkIcons, + ) + systemUiController.setNavigationBarColor( + color = color, + darkIcons = navigationDarkIcons, + navigationBarContrastEnforced = false, + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/pixelized/biblib/ui/launch/LauncherViewModel.kt b/app/src/main/java/com/pixelized/biblib/ui/launch/LauncherViewModel.kt new file mode 100644 index 0000000..ab4dfb7 --- /dev/null +++ b/app/src/main/java/com/pixelized/biblib/ui/launch/LauncherViewModel.kt @@ -0,0 +1,25 @@ +package com.pixelized.biblib.ui.launch + +import androidx.compose.runtime.State +import androidx.compose.runtime.mutableStateOf +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import javax.inject.Inject + +@HiltViewModel +class LauncherViewModel @Inject constructor() : ViewModel() { + + private val _isLoading = mutableStateOf(true) + val isLoading: State get() = _isLoading + + init { + viewModelScope.launch(Dispatchers.IO) { + delay(3000) + _isLoading.value = false + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/pixelized/biblib/ui/navigation/FullScreenNavHost.kt b/app/src/main/java/com/pixelized/biblib/ui/navigation/FullScreenNavHost.kt index 35c42cf..d61da07 100644 --- a/app/src/main/java/com/pixelized/biblib/ui/navigation/FullScreenNavHost.kt +++ b/app/src/main/java/com/pixelized/biblib/ui/navigation/FullScreenNavHost.kt @@ -1,5 +1,6 @@ package com.pixelized.biblib.ui.navigation +import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.compositionLocalOf @@ -7,7 +8,10 @@ import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController +import com.google.accompanist.systemuicontroller.SystemUiController +import com.google.accompanist.systemuicontroller.rememberSystemUiController import com.pixelized.biblib.ui.authentication.AuthenticationScreen +import com.pixelized.biblib.ui.composable.SystemThemeColor val LocalFullScreenNavHostController = compositionLocalOf { error("LocalFullScreenNavHostController is not ready yet.") @@ -18,12 +22,19 @@ fun FullScreenNavHost( navHostController: NavHostController = rememberNavController(), startDestination: Screen = Screen.Authentication ) { + val systemUiController: SystemUiController = rememberSystemUiController() + CompositionLocalProvider(LocalFullScreenNavHostController provides navHostController) { NavHost( navController = navHostController, startDestination = startDestination.route, ) { composable(Screen.Authentication.route) { + SystemThemeColor( + systemUiController = systemUiController, + statusDarkIcons = isSystemInDarkTheme().not(), + navigationDarkIcons = isSystemInDarkTheme().not(), + ) AuthenticationScreen() } composable(Screen.Home.route) { diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..4fee57b --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file