diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6d05f4a76f..eea280c288 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,7 +17,8 @@ android:name=".MainActivity" android:exported="true" android:launchMode="singleTask" - android:theme="@style/LaunchTheme"> + android:theme="@style/LaunchTheme" + android:windowSoftInputMode="adjustResize"> diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingScreen.kt b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingScreen.kt index 55dc7a0267..ea38901e6c 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingScreen.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingScreen.kt @@ -12,6 +12,7 @@ import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.safeDrawingPadding import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.rememberScrollState @@ -82,6 +83,7 @@ fun LandingScreen( modifier = Modifier .semantics { testTagsAsResourceId = true } .background(MaterialTheme.colorScheme.surface) + .safeDrawingPadding() .fillMaxHeight() .verticalScroll(scrollState), ) { diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/vaultunlockednavbar/VaultUnlockedNavBarScreen.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/vaultunlockednavbar/VaultUnlockedNavBarScreen.kt index e5d0664396..fc45612bfe 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/vaultunlockednavbar/VaultUnlockedNavBarScreen.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/vaultunlockednavbar/VaultUnlockedNavBarScreen.kt @@ -1,13 +1,19 @@ package com.x8bit.bitwarden.ui.platform.feature.vaultunlockednavbar import android.os.Parcelable +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.consumeWindowInsets +import androidx.compose.foundation.layout.exclude +import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.statusBars import androidx.compose.material3.BottomAppBar import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.NavigationBarItem import androidx.compose.material3.NavigationBarItemDefaults import androidx.compose.material3.Scaffold +import androidx.compose.material3.ScaffoldDefaults import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue @@ -98,7 +104,11 @@ private fun VaultUnlockedNavBarScaffold( generatorTabClickedAction: () -> Unit, settingsTabClickedAction: () -> Unit, ) { + // This scaffold will host screens that contain top bars while not hosting one itself. + // We need to ignore the status bar insets here and let the content screens handle + // it themselves. Scaffold( + contentWindowInsets = ScaffoldDefaults.contentWindowInsets.exclude(WindowInsets.statusBars), bottomBar = { BottomAppBar( containerColor = MaterialTheme.colorScheme.surfaceContainer, @@ -157,10 +167,14 @@ private fun VaultUnlockedNavBarScaffold( } }, ) { innerPadding -> + // This NavHost will consume the navigation bars insets since the bottom bar + // is handling them and we do not want the child to receive them. NavHost( navController = navController, startDestination = VAULT_ROUTE, - modifier = Modifier.padding(innerPadding), + modifier = Modifier + .consumeWindowInsets(WindowInsets.navigationBars) + .padding(innerPadding), ) { vaultDestination() sendDestination() diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/theme/Theme.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/theme/Theme.kt index 8f29894a6f..9f2928244f 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/theme/Theme.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/theme/Theme.kt @@ -14,7 +14,6 @@ import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable import androidx.compose.runtime.SideEffect import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalView import androidx.core.view.WindowCompat @@ -46,8 +45,10 @@ fun BitwardenTheme( if (!view.isInEditMode) { SideEffect { val window = (view.context as Activity).window - window.statusBarColor = colorScheme.surface.toArgb() - WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = !darkTheme + WindowCompat.setDecorFitsSystemWindows(window, false) + val insetsController = WindowCompat.getInsetsController(window, view) + insetsController.isAppearanceLightStatusBars = !darkTheme + insetsController.isAppearanceLightNavigationBars = !darkTheme } } diff --git a/app/src/main/res/values-night/styles.xml b/app/src/main/res/values-night/styles.xml index b97a85e9a3..213e3b9021 100644 --- a/app/src/main/res/values-night/styles.xml +++ b/app/src/main/res/values-night/styles.xml @@ -7,13 +7,15 @@ @android:color/transparent @color/dark_border @color/dark_notification_bar - @color/dark_navigation_bar_background + @android:color/transparent + @android:color/transparent @android:style/ThemeOverlay.Material @null false true @null true + default