From 8af4e81fa725c09c6620f18ef874a057f157b9e2 Mon Sep 17 00:00:00 2001 From: Aleksander Nowakowski Date: Tue, 1 Jul 2025 09:50:22 +0200 Subject: [PATCH] Display cutout insets # Conflicts: # app/src/main/java/no/nordicsemi/android/nrftoolbox/view/HomeView.kt # profile-parsers/src/main/java/no/nordicsemi/android/toolbox/profile/parser/battery/BatteryLevelParser.kt # profile/src/main/java/no/nordicsemi/android/toolbox/profile/ProfileScreen.kt --- .../nordicsemi/android/ui/view/TopAppBar.kt | 51 +++++++------------ .../profile/view/internal/ProfileAppBar.kt | 15 ++++-- 2 files changed, 31 insertions(+), 35 deletions(-) diff --git a/lib_ui/src/main/java/no/nordicsemi/android/ui/view/TopAppBar.kt b/lib_ui/src/main/java/no/nordicsemi/android/ui/view/TopAppBar.kt index 00a44099..e60b396e 100644 --- a/lib_ui/src/main/java/no/nordicsemi/android/ui/view/TopAppBar.kt +++ b/lib_ui/src/main/java/no/nordicsemi/android/ui/view/TopAppBar.kt @@ -31,10 +31,16 @@ package no.nordicsemi.android.ui.view +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.WindowInsetsSides +import androidx.compose.foundation.layout.displayCutout +import androidx.compose.foundation.layout.navigationBars +import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.statusBars +import androidx.compose.foundation.layout.union import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ArrowBack -import androidx.compose.material.icons.filled.Close import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon @@ -57,37 +63,6 @@ import no.nordicsemi.android.ui.R private const val TOP_APP_BAR_TITLE = "Nordic_Appbar" -@OptIn(ExperimentalMaterial3Api::class) -@Composable -fun CloseIconAppBar(text: String, onClick: () -> Unit) { - TopAppBar( - title = { Text(text, maxLines = 1) }, - colors = TopAppBarDefaults.topAppBarColors( - scrolledContainerColor = MaterialTheme.colorScheme.primary, - containerColor = colorResource(id = R.color.appBarColor), - titleContentColor = MaterialTheme.colorScheme.onPrimary, - actionIconContentColor = MaterialTheme.colorScheme.onPrimary, - navigationIconContentColor = MaterialTheme.colorScheme.onPrimary, - ), - navigationIcon = { - IconButton(onClick = { onClick() }) { - Icon( - Icons.Default.Close, - contentDescription = stringResource(id = R.string.close_app), - ) - } - } - ) -} - -@Preview -@Composable -private fun CloseIconAppBarPreview() { - NordicTheme { - CloseIconAppBar(TOP_APP_BAR_TITLE) {} - } -} - @OptIn(ExperimentalMaterial3Api::class) @Composable fun LoggerBackIconAppBar( @@ -104,6 +79,10 @@ fun LoggerBackIconAppBar( actionIconContentColor = MaterialTheme.colorScheme.onPrimary, navigationIconContentColor = MaterialTheme.colorScheme.onPrimary, ), + windowInsets = WindowInsets.displayCutout + .union(WindowInsets.statusBars) + .union(WindowInsets.navigationBars) + .only(WindowInsetsSides.Horizontal + WindowInsetsSides.Top), navigationIcon = { IconButton(onClick = { onBackClick() }) { Icon( @@ -146,6 +125,10 @@ fun BackIconAppBar(text: String, onClick: () -> Unit) { actionIconContentColor = MaterialTheme.colorScheme.onPrimary, navigationIconContentColor = MaterialTheme.colorScheme.onPrimary, ), + windowInsets = WindowInsets.displayCutout + .union(WindowInsets.statusBars) + .union(WindowInsets.navigationBars) + .only(WindowInsetsSides.Horizontal + WindowInsetsSides.Top), navigationIcon = { IconButton(onClick = { onClick() }) { Icon( @@ -183,6 +166,10 @@ fun LoggerIconAppBar( actionIconContentColor = MaterialTheme.colorScheme.onPrimary, navigationIconContentColor = MaterialTheme.colorScheme.onPrimary, ), + windowInsets = WindowInsets.displayCutout + .union(WindowInsets.statusBars) + .union(WindowInsets.navigationBars) + .only(WindowInsetsSides.Horizontal + WindowInsetsSides.Top), navigationIcon = { IconButton(onClick = { onClick() }) { Icon( diff --git a/profile/src/main/java/no/nordicsemi/android/toolbox/profile/view/internal/ProfileAppBar.kt b/profile/src/main/java/no/nordicsemi/android/toolbox/profile/view/internal/ProfileAppBar.kt index 7c103acc..46ac01cd 100644 --- a/profile/src/main/java/no/nordicsemi/android/toolbox/profile/view/internal/ProfileAppBar.kt +++ b/profile/src/main/java/no/nordicsemi/android/toolbox/profile/view/internal/ProfileAppBar.kt @@ -18,9 +18,11 @@ internal fun ProfileAppBar( openLogger: () -> Unit ) { if (deviceName?.isNotBlank() == true) { - if (connectionState !is DeviceConnectionState.Disconnected) + if (connectionState !is DeviceConnectionState.Disconnected) { LoggerIconAppBar(deviceName, navigateUp, disconnect, openLogger) - else LoggerBackIconAppBar(deviceName, navigateUp) { openLogger() } + } else { + LoggerBackIconAppBar(deviceName, navigateUp) { openLogger() } + } } else { BackIconAppBar(title, navigateUp) } @@ -30,6 +32,13 @@ internal fun ProfileAppBar( @Composable private fun ProfileAppBarPreview() { NordicTheme { - ProfileAppBar("DE", "nRF Toolbox", DeviceConnectionState.Connecting, {}, {}) {} + ProfileAppBar( + deviceName = "DE", + title = "nRF Toolbox", + connectionState = DeviceConnectionState.Connecting, + navigateUp = {}, + disconnect = {}, + openLogger = {}, + ) } }