Skip to content

Commit 050a1b6

Browse files
authored
[Reply] Contrast aware updates. (#1284)
Added colors for standard, medium, and high in both light and dark themes. Added helper function to select contrast level based on values from SysUI controls. Added more variance in application of surface container roles to better indicate elevation and emphasis.
2 parents e7f1f8d + 38e96ca commit 050a1b6

File tree

8 files changed

+513
-141
lines changed

8 files changed

+513
-141
lines changed

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import androidx.compose.ui.unit.DpSize
3131
import androidx.compose.ui.unit.dp
3232
import androidx.lifecycle.compose.collectAsStateWithLifecycle
3333
import com.example.reply.data.local.LocalEmailsDataProvider
34-
import com.example.reply.ui.theme.ReplyTheme
34+
import com.example.reply.ui.theme.ContrastAwareReplyTheme
3535
import com.google.accompanist.adaptive.calculateDisplayFeatures
3636

3737
class MainActivity : ComponentActivity() {
@@ -44,7 +44,7 @@ class MainActivity : ComponentActivity() {
4444
super.onCreate(savedInstanceState)
4545

4646
setContent {
47-
ReplyTheme {
47+
ContrastAwareReplyTheme {
4848
val windowSize = calculateWindowSizeClass(this)
4949
val displayFeatures = calculateDisplayFeatures(this)
5050
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
@@ -72,7 +72,7 @@ class MainActivity : ComponentActivity() {
7272
@Preview(showBackground = true)
7373
@Composable
7474
fun ReplyAppPreview() {
75-
ReplyTheme {
75+
ContrastAwareReplyTheme {
7676
ReplyApp(
7777
replyHomeUIState = ReplyHomeUIState(emails = LocalEmailsDataProvider.allEmails),
7878
windowSize = WindowSizeClass.calculateFromSize(DpSize(400.dp, 900.dp)),
@@ -85,7 +85,7 @@ fun ReplyAppPreview() {
8585
@Preview(showBackground = true, widthDp = 700, heightDp = 500)
8686
@Composable
8787
fun ReplyAppPreviewTablet() {
88-
ReplyTheme {
88+
ContrastAwareReplyTheme {
8989
ReplyApp(
9090
replyHomeUIState = ReplyHomeUIState(emails = LocalEmailsDataProvider.allEmails),
9191
windowSize = WindowSizeClass.calculateFromSize(DpSize(700.dp, 500.dp)),
@@ -98,7 +98,7 @@ fun ReplyAppPreviewTablet() {
9898
@Preview(showBackground = true, widthDp = 500, heightDp = 700)
9999
@Composable
100100
fun ReplyAppPreviewTabletPortrait() {
101-
ReplyTheme {
101+
ContrastAwareReplyTheme {
102102
ReplyApp(
103103
replyHomeUIState = ReplyHomeUIState(emails = LocalEmailsDataProvider.allEmails),
104104
windowSize = WindowSizeClass.calculateFromSize(DpSize(500.dp, 700.dp)),
@@ -111,7 +111,7 @@ fun ReplyAppPreviewTabletPortrait() {
111111
@Preview(showBackground = true, widthDp = 1100, heightDp = 600)
112112
@Composable
113113
fun ReplyAppPreviewDesktop() {
114-
ReplyTheme {
114+
ContrastAwareReplyTheme {
115115
ReplyApp(
116116
replyHomeUIState = ReplyHomeUIState(emails = LocalEmailsDataProvider.allEmails),
117117
windowSize = WindowSizeClass.calculateFromSize(DpSize(1100.dp, 600.dp)),
@@ -124,7 +124,7 @@ fun ReplyAppPreviewDesktop() {
124124
@Preview(showBackground = true, widthDp = 600, heightDp = 1100)
125125
@Composable
126126
fun ReplyAppPreviewDesktopPortrait() {
127-
ReplyTheme {
127+
ContrastAwareReplyTheme {
128128
ReplyApp(
129129
replyHomeUIState = ReplyHomeUIState(emails = LocalEmailsDataProvider.allEmails),
130130
windowSize = WindowSizeClass.calculateFromSize(DpSize(600.dp, 1100.dp)),

Reply/app/src/main/java/com/example/reply/ui/ReplyApp.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ fun ReplyAppContent(
255255
Column(
256256
modifier = Modifier
257257
.fillMaxSize()
258-
.background(MaterialTheme.colorScheme.inverseOnSurface)
258+
.background(MaterialTheme.colorScheme.surfaceContainerLow)
259259
) {
260260
ReplyNavHost(
261261
navController = navController,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ fun ReplyEmailList(
181181
},
182182
modifier = Modifier
183183
.fillMaxWidth()
184-
.padding(horizontal = 16.dp)
184+
.padding(horizontal = 16.dp, vertical = 16.dp)
185185
)
186186

187187
LazyColumn(

Reply/app/src/main/java/com/example/reply/ui/components/ReplyEmailListItem.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -115,14 +115,13 @@ fun ReplyEmailListItem(
115115
Text(
116116
text = email.createdAt,
117117
style = MaterialTheme.typography.labelMedium,
118-
color = MaterialTheme.colorScheme.outline
119118
)
120119
}
121120
IconButton(
122121
onClick = { /*TODO*/ },
123122
modifier = Modifier
124123
.clip(CircleShape)
125-
.background(MaterialTheme.colorScheme.surface)
124+
.background(MaterialTheme.colorScheme.surfaceContainerHigh)
126125
) {
127126
Icon(
128127
imageVector = Icons.Default.StarBorder,
@@ -135,15 +134,12 @@ fun ReplyEmailListItem(
135134
Text(
136135
text = email.subject,
137136
style = MaterialTheme.typography.bodyLarge,
138-
color = if (isSelected) MaterialTheme.colorScheme.onPrimaryContainer
139-
else MaterialTheme.colorScheme.onSurface,
140137
modifier = Modifier.padding(top = 12.dp, bottom = 8.dp),
141138
)
142139
Text(
143140
text = email.body,
144141
style = MaterialTheme.typography.bodyMedium,
145142
maxLines = 2,
146-
color = MaterialTheme.colorScheme.onSurfaceVariant,
147143
overflow = TextOverflow.Ellipsis
148144
)
149145
}

Reply/app/src/main/java/com/example/reply/ui/components/ReplyEmailThreadItem.kt

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,9 @@ fun ReplyEmailThreadItem(
5050
) {
5151
Card(
5252
modifier = modifier.padding(horizontal = 16.dp, vertical = 4.dp),
53-
colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surface)
53+
colors = CardDefaults.cardColors(
54+
containerColor = MaterialTheme.colorScheme.surfaceContainerHigh
55+
)
5456
) {
5557
Column(
5658
modifier = Modifier
@@ -82,7 +84,7 @@ fun ReplyEmailThreadItem(
8284
onClick = { /*TODO*/ },
8385
modifier = Modifier
8486
.clip(CircleShape)
85-
.background(MaterialTheme.colorScheme.surface)
87+
.background(MaterialTheme.colorScheme.surfaceContainer)
8688
) {
8789
Icon(
8890
imageVector = Icons.Default.StarBorder,
@@ -107,31 +109,31 @@ fun ReplyEmailThreadItem(
107109
Row(
108110
modifier = Modifier
109111
.fillMaxWidth()
110-
.padding(vertical = 20.dp),
111-
horizontalArrangement = Arrangement.spacedBy(4.dp),
112+
.padding(top = 20.dp, bottom = 8.dp),
113+
horizontalArrangement = Arrangement.spacedBy(12.dp),
112114
) {
113115
Button(
114116
onClick = { /*TODO*/ },
115117
modifier = Modifier.weight(1f),
116118
colors = ButtonDefaults.buttonColors(
117-
containerColor = MaterialTheme.colorScheme.inverseOnSurface
119+
containerColor = MaterialTheme.colorScheme.surfaceBright
118120
)
119121
) {
120122
Text(
121123
text = stringResource(id = R.string.reply),
122-
color = MaterialTheme.colorScheme.onSurfaceVariant
124+
color = MaterialTheme.colorScheme.onSurface
123125
)
124126
}
125127
Button(
126128
onClick = { /*TODO*/ },
127129
modifier = Modifier.weight(1f),
128130
colors = ButtonDefaults.buttonColors(
129-
containerColor = MaterialTheme.colorScheme.inverseOnSurface
131+
containerColor = MaterialTheme.colorScheme.surfaceBright
130132
)
131133
) {
132134
Text(
133135
text = stringResource(id = R.string.reply_all),
134-
color = MaterialTheme.colorScheme.onSurfaceVariant
136+
color = MaterialTheme.colorScheme.onSurface
135137
)
136138
}
137139
}

Reply/app/src/main/java/com/example/reply/ui/navigation/ReplyNavigationComponents.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import androidx.compose.foundation.layout.sizeIn
3030
import androidx.compose.foundation.rememberScrollState
3131
import androidx.compose.foundation.verticalScroll
3232
import androidx.compose.material.icons.Icons
33+
import androidx.compose.material.icons.automirrored.filled.MenuOpen
3334
import androidx.compose.material.icons.filled.Edit
3435
import androidx.compose.material.icons.filled.Menu
3536
import androidx.compose.material.icons.filled.MenuOpen
@@ -157,12 +158,12 @@ fun PermanentNavigationDrawerContent(
157158
) {
158159
PermanentDrawerSheet(
159160
modifier = Modifier.sizeIn(minWidth = 200.dp, maxWidth = 300.dp),
160-
drawerContainerColor = MaterialTheme.colorScheme.inverseOnSurface,
161+
drawerContainerColor = MaterialTheme.colorScheme.surfaceContainerHigh,
161162
) {
162163
// TODO remove custom nav drawer content positioning when NavDrawer component supports it. ticket : b/232495216
163164
Layout(
164165
modifier = Modifier
165-
.background(MaterialTheme.colorScheme.inverseOnSurface)
166+
.background(MaterialTheme.colorScheme.surfaceContainerHigh)
166167
.padding(16.dp),
167168
content = {
168169
Column(
@@ -188,7 +189,7 @@ fun PermanentNavigationDrawerContent(
188189
Icon(
189190
imageVector = Icons.Default.Edit,
190191
contentDescription = stringResource(id = R.string.edit),
191-
modifier = Modifier.size(18.dp)
192+
modifier = Modifier.size(24.dp)
192193
)
193194
Text(
194195
text = stringResource(id = R.string.compose),
@@ -268,7 +269,7 @@ fun ModalNavigationDrawerContent(
268269
)
269270
IconButton(onClick = onDrawerClicked) {
270271
Icon(
271-
imageVector = Icons.Default.MenuOpen,
272+
imageVector = Icons.AutoMirrored.Filled.MenuOpen,
272273
contentDescription = stringResource(id = R.string.navigation_drawer)
273274
)
274275
}

0 commit comments

Comments
 (0)