Skip to content

Commit c33b618

Browse files
authored
Merge pull request #485 from android/e2e_for_main
Make the Adaptive Layout Codelab edge-to-edge
2 parents 7673bc7 + 69bfac9 commit c33b618

File tree

3 files changed

+36
-17
lines changed

3 files changed

+36
-17
lines changed

AdaptiveUiCodelab/app/src/main/java/com/example/reply/ui/MainActivity.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@
1616

1717
package com.example.reply.ui
1818

19+
import android.os.Build
1920
import android.os.Bundle
2021
import androidx.activity.ComponentActivity
2122
import androidx.activity.compose.setContent
23+
import androidx.activity.enableEdgeToEdge
2224
import androidx.activity.viewModels
2325
import androidx.compose.runtime.Composable
2426
import androidx.compose.runtime.getValue
@@ -34,6 +36,11 @@ class MainActivity : ComponentActivity() {
3436
override fun onCreate(savedInstanceState: Bundle?) {
3537
super.onCreate(savedInstanceState)
3638

39+
enableEdgeToEdge()
40+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
41+
window.isNavigationBarContrastEnforced = false
42+
}
43+
3744
setContent {
3845
ReplyTheme {
3946
val uiState by viewModel.uiState.collectAsStateWithLifecycle()

AdaptiveUiCodelab/app/src/main/java/com/example/reply/ui/ReplyListContent.kt

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,17 @@ import androidx.compose.foundation.Image
2020
import androidx.compose.foundation.background
2121
import androidx.compose.foundation.layout.Arrangement
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.WindowInsetsSides
27+
import androidx.compose.foundation.layout.asPaddingValues
28+
import androidx.compose.foundation.layout.calculateEndPadding
29+
import androidx.compose.foundation.layout.calculateStartPadding
2430
import androidx.compose.foundation.layout.fillMaxWidth
31+
import androidx.compose.foundation.layout.only
2532
import androidx.compose.foundation.layout.padding
33+
import androidx.compose.foundation.layout.safeDrawing
2634
import androidx.compose.foundation.layout.size
2735
import androidx.compose.foundation.lazy.LazyColumn
2836
import androidx.compose.foundation.lazy.items
@@ -42,9 +50,13 @@ import androidx.compose.runtime.Composable
4250
import androidx.compose.ui.Alignment
4351
import androidx.compose.ui.Modifier
4452
import androidx.compose.ui.draw.clip
53+
import androidx.compose.ui.layout.Layout
54+
import androidx.compose.ui.platform.LocalLayoutDirection
4555
import androidx.compose.ui.res.painterResource
4656
import androidx.compose.ui.res.stringResource
4757
import androidx.compose.ui.text.style.TextOverflow
58+
import androidx.compose.ui.unit.Dp
59+
import androidx.compose.ui.unit.LayoutDirection
4860
import androidx.compose.ui.unit.dp
4961
import com.example.reply.R
5062
import com.example.reply.data.Email
@@ -55,7 +67,12 @@ fun ReplyListPane(
5567
onEmailClick: (Email) -> Unit,
5668
modifier: Modifier = Modifier
5769
) {
58-
LazyColumn(modifier = modifier.fillMaxWidth()) {
70+
71+
LazyColumn(
72+
modifier = modifier.fillMaxWidth(),
73+
contentPadding = WindowInsets.safeDrawing.only(
74+
WindowInsetsSides.Horizontal + WindowInsetsSides.Top).asPaddingValues()
75+
) {
5976
item {
6077
ReplySearchBar(modifier = Modifier.fillMaxWidth())
6178
}
@@ -73,7 +90,14 @@ fun ReplyDetailPane(
7390
email: Email,
7491
modifier: Modifier = Modifier
7592
) {
76-
LazyColumn(modifier = modifier.fillMaxWidth()) {
93+
94+
val layoutDirection = LocalLayoutDirection.current
95+
96+
LazyColumn(
97+
modifier = modifier.fillMaxWidth(),
98+
contentPadding = WindowInsets.safeDrawing.only(
99+
WindowInsetsSides.Horizontal + WindowInsetsSides.Top).asPaddingValues()
100+
) {
77101
item {
78102
ReplyEmailThreadItem(email)
79103
}
@@ -156,13 +180,13 @@ fun ReplyEmailThreadItem(
156180
modifier: Modifier = Modifier
157181
) {
158182
Card(
159-
modifier = modifier.padding(horizontal = 16.dp, vertical = 4.dp),
183+
modifier = modifier.padding(horizontal = 16.dp),
160184
colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surface)
161185
) {
162186
Column(
163187
modifier = Modifier
164188
.fillMaxWidth()
165-
.padding(20.dp)
189+
.padding(horizontal = 20.dp)
166190
) {
167191
Row(modifier = Modifier.fillMaxWidth()) {
168192
ReplyProfileImage(
@@ -264,7 +288,7 @@ fun ReplySearchBar(modifier: Modifier = Modifier) {
264288
Row(
265289
modifier = modifier
266290
.fillMaxWidth()
267-
.padding(16.dp)
291+
.padding(horizontal = 16.dp)
268292
.background(MaterialTheme.colorScheme.surface, CircleShape),
269293
verticalAlignment = Alignment.CenterVertically
270294
) {

AdaptiveUiCodelab/app/src/main/java/com/example/reply/ui/theme/Theme.kt

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
package com.example.reply.ui.theme
1818

19-
import android.app.Activity
2019
import android.os.Build
2120
import androidx.compose.foundation.isSystemInDarkTheme
2221
import androidx.compose.material3.MaterialTheme
@@ -25,11 +24,7 @@ import androidx.compose.material3.dynamicDarkColorScheme
2524
import androidx.compose.material3.dynamicLightColorScheme
2625
import androidx.compose.material3.lightColorScheme
2726
import androidx.compose.runtime.Composable
28-
import androidx.compose.runtime.SideEffect
29-
import androidx.compose.ui.graphics.toArgb
3027
import androidx.compose.ui.platform.LocalContext
31-
import androidx.compose.ui.platform.LocalView
32-
import androidx.core.view.ViewCompat
3328

3429
// Material 3 color schemes
3530
private val replyDarkColorScheme = darkColorScheme(
@@ -104,13 +99,6 @@ fun ReplyTheme(
10499
darkTheme -> replyDarkColorScheme
105100
else -> replyLightColorScheme
106101
}
107-
val view = LocalView.current
108-
if (!view.isInEditMode) {
109-
SideEffect {
110-
(view.context as Activity).window.statusBarColor = replyColorScheme.primary.toArgb()
111-
ViewCompat.getWindowInsetsController(view)?.isAppearanceLightStatusBars = darkTheme
112-
}
113-
}
114102

115103
MaterialTheme(
116104
colorScheme = replyColorScheme,

0 commit comments

Comments
 (0)