change the theme to go fullscreen.
This commit is contained in:
parent
2a69b75d9d
commit
af5521f6bb
8 changed files with 112 additions and 12 deletions
|
|
@ -7,17 +7,17 @@
|
|||
|
||||
<application
|
||||
android:name=".BibLibApplication"
|
||||
android:allowBackup="false"
|
||||
android:allowBackup="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.MaterialComponents.DayNight.NoActionBar">
|
||||
android:theme="@style/Theme.BibLib.NoActionBar">
|
||||
|
||||
<activity
|
||||
android:name=".ui.MainActivity"
|
||||
android:exported="true"
|
||||
android:label="@string/app_name">
|
||||
android:theme="@style/Theme.BibLib.Starting">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
|
|
|
|||
|
|
@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -11,5 +11,5 @@ fun AnimatedDelayer(
|
|||
}
|
||||
|
||||
class AnimatedDelayerScope(
|
||||
var delay : Delay = Delay()
|
||||
var delay: Delay = Delay()
|
||||
)
|
||||
|
|
@ -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,
|
||||
)
|
||||
}
|
||||
|
|
@ -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<Boolean> get() = _isLoading
|
||||
|
||||
init {
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
delay(3000)
|
||||
_isLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<NavHostController> {
|
||||
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) {
|
||||
|
|
|
|||
12
app/src/main/res/values/themes.xml
Normal file
12
app/src/main/res/values/themes.xml
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<style name="Theme.BibLib.Starting" parent="Theme.SplashScreen">
|
||||
<item name="postSplashScreenTheme">@style/Theme.BibLib.NoActionBar</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.BibLib.NoActionBar" parent="Theme.MaterialComponents.DayNight.NoActionBar">
|
||||
<item name="windowActionBar">false</item>
|
||||
<item name="windowNoTitle">true</item>
|
||||
</style>
|
||||
</resources>
|
||||
Loading…
Add table
Add a link
Reference in a new issue