Skip to content

Commit 2a024a9

Browse files
committed
Add landscape layout for time picker
1 parent 3b8ab29 commit 2a024a9

File tree

10 files changed

+840
-766
lines changed

10 files changed

+840
-766
lines changed

app/src/main/java/com/vanpra/composematerialdialogdemos/Util.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import com.vanpra.composematerialdialogs.MaterialDialogState
1818
import com.vanpra.composematerialdialogs.datetime.time.MaterialTimePickerDialog
1919
import com.vanpra.composematerialdialogs.datetime.time.TimePickerColors
2020
import com.vanpra.composematerialdialogs.datetime.time.TimePickerDefaults
21+
import com.vanpra.composematerialdialogs.datetime.time.rememberTimePickerOptions
2122
import com.vanpra.composematerialdialogs.rememberMaterialDialogState
2223
import java.time.LocalTime
2324

@@ -54,11 +55,13 @@ fun TimePickerDialogAndShowButton(
5455
MaterialTimePickerDialog(
5556
state = dialogState,
5657
buttons = buttons,
57-
initialTime = initialTime,
58-
colors = colors,
59-
timeRange = timeRange,
60-
is24HourClock = is24HourClock,
61-
onTimeChange = onTimeChange
58+
timePickerOptions = rememberTimePickerOptions(
59+
initialTime = initialTime,
60+
colors = colors,
61+
timeRange = timeRange,
62+
is24HourClock = is24HourClock,
63+
onTimeChange = onTimeChange
64+
)
6265
)
6366
DialogDemoButton(state = dialogState, buttonText = buttonText)
6467
}

core/src/main/java/com/vanpra/composematerialdialogs/MaterialDialog.kt

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ package com.vanpra.composematerialdialogs
33
import androidx.compose.foundation.BorderStroke
44
import androidx.compose.foundation.layout.Column
55
import androidx.compose.foundation.layout.PaddingValues
6-
import androidx.compose.foundation.layout.fillMaxWidth
7-
import androidx.compose.foundation.layout.padding
6+
import androidx.compose.foundation.layout.widthIn
87
import androidx.compose.foundation.layout.wrapContentHeight
98
import androidx.compose.material3.MaterialTheme
109
import androidx.compose.material3.Surface
@@ -228,15 +227,20 @@ fun MaterialDialog(
228227
} else {
229228
DialogConstants.MaxDimen
230229
}
230+
231+
val maxWidth = min(
232+
LocalConfiguration.current.screenWidthDp - totalExternalPadding.value,
233+
DialogConstants.MaxDimen.value
234+
).dp
235+
231236
val maxHeightPx = with(LocalDensity.current) { maxHeight.roundToPx() }
232237
val buttonsPaddingPx = with(LocalDensity.current) { buttonsPadding.roundToPx(this) }
233238

234239
if (state.showing) { /* Horizontal padding is handled directly by the Dialog composable */
235240
Dialog(properties = properties, onDismissRequest = { onCloseRequest(state) }) {
236241
Surface(
237242
modifier = Modifier
238-
.padding(horizontal = DialogConstants.ExternalPadding)
239-
.fillMaxWidth()
243+
.widthIn(max = maxWidth)
240244
.wrapContentHeight()
241245
.testTag("dialog"),
242246
shape = shape,
@@ -301,7 +305,7 @@ object DialogConstants {
301305

302306
val ExternalPadding = 48.dp
303307
val InternalPadding = 24.dp
304-
val ButtonContentPadding = 24.dp
308+
// val ButtonContentPadding = 24.dp
305309

306310
val TitleBodyPadding = 16.dp
307311
val IconTitlePadding = 8.dp

datetime/src/androidTest/java/com/vanpra/composematerialdialogs/datetime/test/screenshot/DateTimePickerTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class DateTimePickerTest : ScreenshotTest {
3838
val dialogState = rememberMaterialDialogState()
3939
MaterialTimePickerDialog(
4040
state = dialogState,
41-
initialTime = LocalTime.of(12, 0),
41+
initialTime = LocalTime.of(12, 0)
4242
)
4343
SideEffect { dialogState.show() }
4444
}

datetime/src/main/java/com/vanpra/composematerialdialogs/datetime/date/DatePicker.kt

Lines changed: 41 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import androidx.compose.material3.Icon
3434
import androidx.compose.material3.MaterialTheme
3535
import androidx.compose.material3.Text
3636
import androidx.compose.runtime.Composable
37+
import androidx.compose.runtime.CompositionLocalProvider
3738
import androidx.compose.runtime.DisposableEffect
3839
import androidx.compose.runtime.remember
3940
import androidx.compose.runtime.rememberCoroutineScope
@@ -42,10 +43,12 @@ import androidx.compose.ui.Modifier
4243
import androidx.compose.ui.draw.alpha
4344
import androidx.compose.ui.draw.clip
4445
import androidx.compose.ui.draw.clipToBounds
46+
import androidx.compose.ui.platform.LocalLayoutDirection
4547
import androidx.compose.ui.platform.testTag
4648
import androidx.compose.ui.res.painterResource
4749
import androidx.compose.ui.text.TextStyle
4850
import androidx.compose.ui.text.font.FontWeight.Companion.W600
51+
import androidx.compose.ui.unit.LayoutDirection
4952
import androidx.compose.ui.unit.dp
5053
import androidx.compose.ui.unit.sp
5154
import androidx.compose.ui.zIndex
@@ -264,51 +267,52 @@ private fun CalendarViewHeader(
264267
}
265268
}
266269

267-
Row(
268-
Modifier
269-
.fillMaxHeight()
270-
.align(Alignment.CenterEnd)
271-
) {
272-
Icon(
273-
Icons.Default.KeyboardArrowLeft,
274-
contentDescription = "Previous Month",
275-
modifier = Modifier
276-
.testTag("dialog_date_prev_month")
277-
.size(24.dp)
278-
.clickable(onClick = {
279-
coroutineScope.launch {
280-
if (pagerState.currentPage - 1 >= 0) {
281-
pagerState.animateScrollToPage(
282-
pagerState.currentPage - 1
283-
)
270+
CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Ltr) {
271+
Row(
272+
Modifier
273+
.fillMaxHeight()
274+
.align(Alignment.CenterEnd)
275+
) {
276+
Icon(
277+
Icons.Default.KeyboardArrowLeft,
278+
contentDescription = "Previous Month",
279+
modifier = Modifier
280+
.testTag("dialog_date_prev_month")
281+
.size(24.dp)
282+
.clickable(onClick = {
283+
coroutineScope.launch {
284+
if (pagerState.currentPage - 1 >= 0) {
285+
pagerState.animateScrollToPage(
286+
pagerState.currentPage - 1
287+
)
288+
}
284289
}
285-
}
286-
})
287-
)
290+
})
291+
)
288292

289-
Spacer(modifier = Modifier.width(24.dp))
293+
Spacer(modifier = Modifier.width(24.dp))
290294

291-
Icon(
292-
Icons.Default.KeyboardArrowRight,
293-
contentDescription = "Next Month",
294-
modifier = Modifier
295-
.testTag("dialog_date_next_month")
296-
.size(24.dp)
297-
.clickable(onClick = {
298-
coroutineScope.launch {
299-
if (pagerState.currentPage + 1 < pagerState.pageCount) {
300-
pagerState.animateScrollToPage(
301-
pagerState.currentPage + 1
302-
)
295+
Icon(
296+
Icons.Default.KeyboardArrowRight,
297+
contentDescription = "Next Month",
298+
modifier = Modifier
299+
.testTag("dialog_date_next_month")
300+
.size(24.dp)
301+
.clickable(onClick = {
302+
coroutineScope.launch {
303+
if (pagerState.currentPage + 1 < pagerState.pageCount) {
304+
pagerState.animateScrollToPage(
305+
pagerState.currentPage + 1
306+
)
307+
}
303308
}
304-
}
305-
})
306-
)
309+
})
310+
)
311+
}
307312
}
308313
}
309314
}
310315

311-
@OptIn(ExperimentalFoundationApi::class)
312316
@Composable
313317
private fun CalendarView(
314318
viewDate: LocalDate,

0 commit comments

Comments
 (0)