Skip to content

Commit 70f791f

Browse files
committed
Fix edge to edge
1 parent e456cba commit 70f791f

9 files changed

Lines changed: 116 additions & 42 deletions

File tree

app/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ android {
3939
applicationId = "com.prof18.secureqrreader"
4040
minSdk = 24
4141
targetSdk = 36
42-
versionCode = 20007
43-
versionName = "2.0.7"
42+
versionCode = 20008
43+
versionName = "2.0.8"
4444
}
4545

4646
compileOptions {

app/src/main/java/com/prof18/secureqrreader/MainActivity.kt

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,19 @@ package com.prof18.secureqrreader
1818

1919
import android.content.res.Configuration
2020
import android.os.Bundle
21+
import android.util.Log
2122
import androidx.activity.ComponentActivity
2223
import androidx.activity.SystemBarStyle
2324
import androidx.activity.compose.setContent
2425
import androidx.activity.enableEdgeToEdge
2526
import androidx.compose.animation.AnimatedContentTransitionScope
2627
import androidx.compose.animation.fadeIn
2728
import androidx.compose.animation.fadeOut
28-
import androidx.compose.material.MaterialTheme
29+
import androidx.compose.foundation.isSystemInDarkTheme
2930
import androidx.compose.runtime.LaunchedEffect
3031
import androidx.compose.runtime.getValue
3132
import androidx.compose.runtime.mutableStateOf
33+
import androidx.compose.runtime.remember
3234
import androidx.compose.runtime.rememberCoroutineScope
3335
import androidx.compose.runtime.saveable.rememberSaveable
3436
import androidx.compose.runtime.setValue
@@ -47,7 +49,6 @@ import com.prof18.secureqrreader.screens.ScanScreen
4749
import com.prof18.secureqrreader.screens.SplashScreen
4850
import com.prof18.secureqrreader.screens.WelcomeScreen
4951
import com.prof18.secureqrreader.style.SecureQrReaderTheme
50-
import com.prof18.secureqrreader.style.toolbarColor
5152
import kotlinx.coroutines.launch
5253

5354
class MainActivity : ComponentActivity() {
@@ -59,42 +60,51 @@ class MainActivity : ComponentActivity() {
5960
val splashScreen = installSplashScreen()
6061
splashScreen.setKeepOnScreenCondition { !dismissSplashScreen }
6162

62-
enableEdgeToEdge()
63-
6463
super.onCreate(savedInstanceState)
6564

6665
setContent {
6766
val navController = rememberNavController()
6867
val scope = rememberCoroutineScope()
6968
val navBackStackEntry by navController.currentBackStackEntryAsState()
69+
val isDarkTheme = isSystemInDarkTheme()
70+
71+
val defaultSystemBarStyle = SystemBarStyle.auto(
72+
android.graphics.Color.TRANSPARENT,
73+
darkScrim = android.graphics.Color.TRANSPARENT,
74+
detectDarkMode = { isDarkTheme },
75+
)
76+
var systemBarStyle by remember {
77+
mutableStateOf(
78+
defaultSystemBarStyle
79+
)
80+
}
7081

7182
var scanResult by rememberSaveable {
7283
mutableStateOf<String?>(null)
7384
}
85+
val configuration = LocalConfiguration.current
7486

7587
LaunchedEffect(Unit) {
76-
navController.addOnDestinationChangedListener { _, destination, _ ->
77-
dismissSplashScreen = destination.route != Screen.Splash.name
78-
}
79-
}
80-
81-
SecureQrReaderTheme {
82-
val toolbarColor = toolbarColor()
83-
val splashScreenColor = MaterialTheme.colors.background
84-
val configuration = LocalConfiguration.current
85-
86-
val statusBarColor = when (navBackStackEntry?.destination?.route) {
87-
Screen.WelcomeScreen.name -> splashScreenColor
88-
Screen.ScanScreen.name -> {
89-
when (configuration.orientation) {
90-
Configuration.ORIENTATION_LANDSCAPE -> toolbarColor
91-
else -> Color.Transparent
88+
navController.currentBackStackEntryFlow.collect { destination ->
89+
Log.d("Tag", "Got destination change: $destination")
90+
dismissSplashScreen = destination.destination.route != Screen.Splash.name
91+
92+
systemBarStyle = when (destination.destination.route) {
93+
Screen.ScanScreen.name -> {
94+
when (configuration.orientation) {
95+
Configuration.ORIENTATION_LANDSCAPE -> defaultSystemBarStyle
96+
else -> SystemBarStyle.dark(
97+
android.graphics.Color.TRANSPARENT,
98+
)
99+
}
92100
}
93-
}
94101

95-
else -> toolbarColor
102+
else -> defaultSystemBarStyle
103+
}
96104
}
105+
}
97106

107+
SecureQrReaderTheme {
98108
val navigationBarStyle =
99109
if (navBackStackEntry?.destination?.route == Screen.ScanScreen.name && configuration.orientation == Configuration.ORIENTATION_PORTRAIT) {
100110
SystemBarStyle.dark(
@@ -108,9 +118,7 @@ class MainActivity : ComponentActivity() {
108118
}
109119

110120
enableEdgeToEdge(
111-
statusBarStyle = SystemBarStyle.dark(
112-
statusBarColor.toArgb(),
113-
),
121+
statusBarStyle = systemBarStyle,
114122
navigationBarStyle = navigationBarStyle,
115123
)
116124

app/src/main/java/com/prof18/secureqrreader/components/AppScaffold.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ package com.prof18.secureqrreader.components
1818

1919
import androidx.compose.foundation.layout.PaddingValues
2020
import androidx.compose.foundation.layout.systemBarsPadding
21+
import androidx.compose.material.MaterialTheme
2122
import androidx.compose.material.Scaffold
2223
import androidx.compose.runtime.Composable
2324
import androidx.compose.ui.Modifier
2425
import androidx.compose.ui.res.stringResource
2526
import com.prof18.secureqrreader.R
26-
import com.prof18.secureqrreader.style.toolbarColor
2727

2828
@Composable
2929
fun AboutScreenScaffold(
@@ -104,7 +104,7 @@ private fun AppScaffold(
104104
NavigationBar(
105105
Modifier.systemBarsPadding(),
106106
title = title,
107-
backgroundColor = toolbarColor(),
107+
backgroundColor = MaterialTheme.colors.background,
108108
showBackButton = showBackButton,
109109
onBackClick = onBackClick,
110110
showToolbarActions = showToolbarActions,

app/src/main/java/com/prof18/secureqrreader/components/NavigationBar.kt

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.prof18.secureqrreader.components
22

3-
import androidx.compose.material.AppBarDefaults
43
import androidx.compose.material.Icon
54
import androidx.compose.material.IconButton
65
import androidx.compose.material.MaterialTheme
@@ -20,7 +19,6 @@ import androidx.compose.ui.Modifier
2019
import androidx.compose.ui.graphics.Color
2120
import androidx.compose.ui.platform.LocalContext
2221
import androidx.compose.ui.res.stringResource
23-
import androidx.compose.ui.unit.Dp
2422
import androidx.compose.ui.unit.dp
2523
import com.prof18.secureqrreader.R
2624
import com.prof18.secureqrreader.hasFlash
@@ -29,6 +27,7 @@ import com.prof18.secureqrreader.hasFlash
2927
internal fun ScanScreenNavigationBar(
3028
modifier: Modifier = Modifier,
3129
backgroundColor: Color,
30+
usePrimaryColor: Boolean = false,
3231
setFlashOff: () -> Unit,
3332
setFlashOn: () -> Unit,
3433
onAboutClick: () -> Unit,
@@ -37,10 +36,10 @@ internal fun ScanScreenNavigationBar(
3736
modifier = modifier,
3837
title = stringResource(id = R.string.app_name),
3938
backgroundColor = backgroundColor,
40-
elevation = 0.dp,
4139
showBackButton = false,
4240
showToolbarActions = true,
4341
showFlashSelector = true,
42+
usePrimaryColor = usePrimaryColor,
4443
setFlashOff = setFlashOff,
4544
setFlashOn = setFlashOn,
4645
onAboutClick = onAboutClick
@@ -53,10 +52,10 @@ internal fun NavigationBar(
5352
title: String,
5453
backgroundColor: Color,
5554
showBackButton: Boolean,
56-
elevation: Dp = AppBarDefaults.TopAppBarElevation,
5755
onBackClick: () -> Unit = {},
5856
showToolbarActions: Boolean,
5957
showFlashSelector: Boolean,
58+
usePrimaryColor: Boolean = false,
6059
setFlashOff: () -> Unit,
6160
setFlashOn: () -> Unit,
6261
onAboutClick: () -> Unit,
@@ -73,13 +72,21 @@ internal fun NavigationBar(
7372
title = {
7473
Text(
7574
text = title,
76-
color = MaterialTheme.colors.onPrimary,
75+
color = if (usePrimaryColor) {
76+
MaterialTheme.colors.onPrimary
77+
} else {
78+
MaterialTheme.colors.onBackground
79+
},
7780
style = MaterialTheme.typography.h6,
7881
)
7982
},
8083
backgroundColor = backgroundColor,
81-
elevation = elevation,
82-
contentColor = MaterialTheme.colors.onPrimary,
84+
elevation = 0.dp,
85+
contentColor = if (usePrimaryColor) {
86+
MaterialTheme.colors.onPrimary
87+
} else {
88+
MaterialTheme.colors.onBackground
89+
},
8390
navigationIcon = if (showBackButton) {
8491
{
8592
IconButton(onClick = onBackClick) {
@@ -125,7 +132,11 @@ internal fun NavigationBar(
125132
Icon(
126133
Outlined.Info,
127134
contentDescription = null,
128-
tint = Color.White,
135+
tint = if (usePrimaryColor) {
136+
Color.White
137+
} else {
138+
MaterialTheme.colors.onBackground
139+
},
129140
)
130141
}
131142
}

app/src/main/java/com/prof18/secureqrreader/screens/AboutScreen.kt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@ package com.prof18.secureqrreader.screens
1818

1919
import android.content.res.Configuration
2020
import androidx.compose.foundation.layout.Column
21+
import androidx.compose.foundation.layout.PaddingValues
2122
import androidx.compose.foundation.layout.Row
23+
import androidx.compose.foundation.layout.WindowInsets
24+
import androidx.compose.foundation.layout.asPaddingValues
25+
import androidx.compose.foundation.layout.displayCutout
2226
import androidx.compose.foundation.layout.fillMaxSize
2327
import androidx.compose.foundation.layout.fillMaxWidth
2428
import androidx.compose.foundation.layout.navigationBarsPadding
@@ -42,6 +46,7 @@ import androidx.compose.ui.text.font.FontWeight
4246
import androidx.compose.ui.text.withStyle
4347
import androidx.compose.ui.tooling.preview.Devices
4448
import androidx.compose.ui.tooling.preview.Preview
49+
import androidx.compose.ui.unit.dp
4550
import com.prof18.secureqrreader.R.string
4651
import com.prof18.secureqrreader.components.AboutScreenScaffold
4752
import com.prof18.secureqrreader.style.Margins
@@ -75,8 +80,17 @@ private fun LandscapeView(
7580
licensesClicked: () -> Unit,
7681
nameClicked: () -> Unit,
7782
) {
83+
val configuration = LocalConfiguration.current
84+
val padding = if (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
85+
WindowInsets.displayCutout.asPaddingValues()
86+
} else {
87+
PaddingValues(0.dp)
88+
}
89+
7890
Row(
79-
modifier = Modifier.fillMaxSize()
91+
modifier = Modifier
92+
.fillMaxSize()
93+
.padding(padding)
8094
.navigationBarsPadding(),
8195
) {
8296
LazyColumn(

app/src/main/java/com/prof18/secureqrreader/screens/LibrariesScreen.kt

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,12 @@
1616

1717
package com.prof18.secureqrreader.screens
1818

19+
import android.content.res.Configuration
1920
import androidx.compose.foundation.layout.Column
21+
import androidx.compose.foundation.layout.PaddingValues
22+
import androidx.compose.foundation.layout.WindowInsets
23+
import androidx.compose.foundation.layout.asPaddingValues
24+
import androidx.compose.foundation.layout.displayCutout
2025
import androidx.compose.foundation.layout.fillMaxSize
2126
import androidx.compose.foundation.layout.fillMaxWidth
2227
import androidx.compose.foundation.layout.navigationBarsPadding
@@ -27,6 +32,8 @@ import androidx.compose.material.Text
2732
import androidx.compose.runtime.Composable
2833
import androidx.compose.ui.Alignment
2934
import androidx.compose.ui.Modifier
35+
import androidx.compose.ui.platform.LocalConfiguration
36+
import androidx.compose.ui.unit.dp
3037
import com.mikepenz.aboutlibraries.ui.compose.LibrariesContainer
3138
import com.prof18.secureqrreader.components.LibrariesScreenScaffold
3239
import com.prof18.secureqrreader.style.Margins
@@ -40,8 +47,17 @@ fun LibrariesScreen(
4047
LibrariesScreenScaffold(
4148
onBackClick = onBackClick
4249
) { paddingValues ->
50+
val configuration = LocalConfiguration.current
51+
52+
val padding = if (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
53+
WindowInsets.displayCutout.asPaddingValues()
54+
} else {
55+
PaddingValues(0.dp)
56+
}
4357
Column(
44-
modifier = Modifier.padding(paddingValues)
58+
modifier = Modifier
59+
.padding(paddingValues)
60+
.padding(padding)
4561
) {
4662
Text(
4763
modifier = Modifier

app/src/main/java/com/prof18/secureqrreader/screens/ResultScreen.kt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@ import android.content.res.Configuration
2020
import androidx.compose.foundation.layout.Arrangement
2121
import androidx.compose.foundation.layout.Box
2222
import androidx.compose.foundation.layout.Column
23+
import androidx.compose.foundation.layout.PaddingValues
2324
import androidx.compose.foundation.layout.Row
25+
import androidx.compose.foundation.layout.WindowInsets
26+
import androidx.compose.foundation.layout.asPaddingValues
27+
import androidx.compose.foundation.layout.displayCutout
2428
import androidx.compose.foundation.layout.fillMaxSize
2529
import androidx.compose.foundation.layout.fillMaxWidth
2630
import androidx.compose.foundation.layout.navigationBarsPadding
@@ -32,12 +36,12 @@ import androidx.compose.material.Surface
3236
import androidx.compose.material.Text
3337
import androidx.compose.runtime.Composable
3438
import androidx.compose.ui.Alignment
35-
import androidx.compose.ui.Alignment.Companion
3639
import androidx.compose.ui.Modifier
3740
import androidx.compose.ui.platform.LocalConfiguration
3841
import androidx.compose.ui.res.stringResource
3942
import androidx.compose.ui.tooling.preview.Devices
4043
import androidx.compose.ui.tooling.preview.Preview
44+
import androidx.compose.ui.unit.dp
4145
import com.prof18.secureqrreader.R.string
4246
import com.prof18.secureqrreader.components.ResultScreenScaffold
4347
import com.prof18.secureqrreader.style.Margins
@@ -158,10 +162,18 @@ private fun ResultLandscapeView(
158162
onShareButtonClick: () -> Unit,
159163
onScanAnotherButtonClick: () -> Unit,
160164
) {
165+
val configuration = LocalConfiguration.current
166+
val padding = if (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
167+
WindowInsets.displayCutout.asPaddingValues()
168+
} else {
169+
PaddingValues(0.dp)
170+
}
171+
161172
Box(
162173
modifier = Modifier
163174
.fillMaxSize()
164175
.padding(Margins.regular)
176+
.padding(padding)
165177
.navigationBarsPadding(),
166178
contentAlignment = Alignment.Center,
167179
) {

app/src/main/java/com/prof18/secureqrreader/screens/ScanScreen.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,6 @@ private fun ScanView(
165165
setFlashOn = { compoundBarcodeView.setTorchOn() },
166166
setFlashOff = { compoundBarcodeView.setTorchOff() },
167167
onAboutClick = onAboutClick,
168-
169168
)
170169
}
171170
}
@@ -194,6 +193,7 @@ private fun ScanPortraitView(
194193
modifier = Modifier
195194
.padding(WindowInsets.statusBars.asPaddingValues()),
196195
backgroundColor = Color.Transparent,
196+
usePrimaryColor = true,
197197
setFlashOn = setFlashOn,
198198
setFlashOff = setFlashOff,
199199
onAboutClick = onAboutClick,
@@ -225,7 +225,7 @@ private fun ScanLandscapeView(
225225
ScanScreenNavigationBar(
226226
modifier = Modifier
227227
.padding(WindowInsets.statusBars.asPaddingValues()),
228-
backgroundColor = toolbarColor(),
228+
backgroundColor = MaterialTheme.colors.background,
229229
setFlashOn = setFlashOn,
230230
setFlashOff = setFlashOff,
231231
onAboutClick = onAboutClick,

0 commit comments

Comments
 (0)