@@ -24,15 +24,14 @@ import androidx.compose.material3.ExperimentalMaterial3Api
24
24
import androidx.compose.material3.Icon
25
25
import androidx.compose.material3.IconButton
26
26
import androidx.compose.material3.MaterialTheme
27
- import androidx.compose.material3.OutlinedButton
28
27
import androidx.compose.material3.Text
29
28
import androidx.compose.runtime.Composable
30
29
import androidx.compose.ui.Alignment
31
30
import androidx.compose.ui.Modifier
32
31
import androidx.compose.ui.platform.LocalContext
33
32
import androidx.compose.ui.platform.testTag
33
+ import androidx.compose.ui.res.dimensionResource
34
34
import androidx.compose.ui.res.stringResource
35
- import androidx.compose.ui.unit.dp
36
35
import com.example.reply.R
37
36
import com.example.reply.data.Email
38
37
import com.example.reply.data.MailboxType
@@ -52,7 +51,7 @@ fun ReplyDetailsScreen(
52
51
.testTag(stringResource(R .string.details_screen))
53
52
.fillMaxSize()
54
53
.background(color = MaterialTheme .colorScheme.inverseOnSurface)
55
- .padding(top = 24 .dp )
54
+ .padding(top = dimensionResource( R .dimen.detail_card_list_padding_top) )
56
55
) {
57
56
item {
58
57
if (isFullScreen) {
@@ -63,9 +62,9 @@ fun ReplyDetailsScreen(
63
62
mailboxType = replyUiState.currentMailbox,
64
63
isFullScreen = isFullScreen,
65
64
modifier = if (isFullScreen)
66
- Modifier .padding(horizontal = 16 .dp )
65
+ Modifier .padding(horizontal = dimensionResource( R .dimen.detail_card_outer_padding_horizontal) )
67
66
else
68
- Modifier .padding(end = 16 .dp )
67
+ Modifier .padding(end = dimensionResource( R .dimen.detail_card_outer_padding_horizontal) )
69
68
)
70
69
}
71
70
}
@@ -80,13 +79,13 @@ private fun ReplyDetailsScreenTopBar(
80
79
Row (
81
80
modifier = modifier
82
81
.fillMaxWidth()
83
- .padding(bottom = 24 .dp ),
82
+ .padding(bottom = dimensionResource( R .dimen.detail_topbar_padding_bottom) ),
84
83
verticalAlignment = Alignment .CenterVertically ,
85
84
) {
86
85
IconButton (
87
86
onClick = onBackButtonClicked,
88
87
modifier = Modifier
89
- .padding(horizontal = 16 .dp )
88
+ .padding(horizontal = dimensionResource( R .dimen.detail_topbar_back_button_padding_horizontal) )
90
89
.background(MaterialTheme .colorScheme.surface, shape = CircleShape ),
91
90
) {
92
91
Icon (
@@ -98,7 +97,7 @@ private fun ReplyDetailsScreenTopBar(
98
97
horizontalArrangement = Arrangement .Center ,
99
98
modifier = Modifier
100
99
.fillMaxWidth()
101
- .padding(end = 40 .dp )
100
+ .padding(end = dimensionResource( R .dimen.detail_subject_padding_end) )
102
101
) {
103
102
Text (
104
103
text = replyUiState.currentSelectedEmail.subject,
@@ -128,18 +127,21 @@ private fun ReplyEmailDetailsCard(
128
127
Column (
129
128
modifier = Modifier
130
129
.fillMaxWidth()
131
- .padding(20 .dp )
130
+ .padding(dimensionResource( R .dimen.detail_card_inner_padding) )
132
131
) {
133
132
DetailsScreenHeader (email)
134
133
if (! isFullScreen) {
135
134
Text (
136
135
text = email.subject,
137
136
style = MaterialTheme .typography.bodyMedium,
138
137
color = MaterialTheme .colorScheme.outline,
139
- modifier = Modifier .padding(top = 12 .dp, bottom = 8 .dp),
138
+ modifier = Modifier .padding(
139
+ top = dimensionResource(R .dimen.detail_content_padding_top),
140
+ bottom = dimensionResource(R .dimen.detail_expanded_subject_body_spacing)
141
+ ),
140
142
)
141
143
} else {
142
- Spacer (modifier = Modifier .height(12 .dp ))
144
+ Spacer (modifier = Modifier .height(dimensionResource( R .dimen.detail_content_padding_top) ))
143
145
}
144
146
Text (
145
147
text = email.body,
@@ -168,8 +170,12 @@ private fun DetailsScreenButtonBar(
168
170
Row (
169
171
modifier = modifier
170
172
.fillMaxWidth()
171
- .padding(vertical = 20 .dp),
172
- horizontalArrangement = Arrangement .spacedBy(4 .dp),
173
+ .padding(
174
+ vertical = dimensionResource(R .dimen.detail_button_bar_padding_vertical)
175
+ ),
176
+ horizontalArrangement = Arrangement .spacedBy(
177
+ dimensionResource(R .dimen.detail_button_bar_item_spacing)
178
+ ),
173
179
) {
174
180
ActionButton (
175
181
text = stringResource(id = R .string.move_to_inbox),
@@ -187,8 +193,12 @@ private fun DetailsScreenButtonBar(
187
193
Row (
188
194
modifier = modifier
189
195
.fillMaxWidth()
190
- .padding(vertical = 20 .dp),
191
- horizontalArrangement = Arrangement .spacedBy(4 .dp),
196
+ .padding(
197
+ vertical = dimensionResource(R .dimen.detail_button_bar_padding_vertical)
198
+ ),
199
+ horizontalArrangement = Arrangement .spacedBy(
200
+ dimensionResource(R .dimen.detail_button_bar_item_spacing)
201
+ ),
192
202
) {
193
203
ActionButton (
194
204
text = stringResource(id = R .string.reply),
@@ -210,12 +220,17 @@ private fun DetailsScreenHeader(email: Email, modifier: Modifier = Modifier) {
210
220
ReplyProfileImage (
211
221
drawableResource = email.sender.avatar,
212
222
description = email.sender.fullName,
213
- modifier = Modifier .size(40 .dp)
223
+ modifier = Modifier .size(
224
+ dimensionResource(R .dimen.email_header_profile_size)
225
+ )
214
226
)
215
227
Column (
216
228
modifier = Modifier
217
229
.weight(1f )
218
- .padding(horizontal = 12 .dp, vertical = 4 .dp),
230
+ .padding(
231
+ horizontal = dimensionResource(R .dimen.email_header_content_padding_horizontal),
232
+ vertical = dimensionResource(R .dimen.email_header_content_padding_vertical)
233
+ ),
219
234
verticalArrangement = Arrangement .Center
220
235
) {
221
236
Text (
@@ -242,7 +257,7 @@ private fun ActionButton(
242
257
onClick = { onButtonClicked(text) },
243
258
modifier = modifier
244
259
.fillMaxWidth()
245
- .padding(vertical = 20 .dp ),
260
+ .padding(vertical = dimensionResource( R .dimen.detail_action_button_padding_vertical) ),
246
261
colors = ButtonDefaults .buttonColors(
247
262
containerColor =
248
263
if (! containIrreversibleAction)
0 commit comments