diff --git a/core/presentation/src/main/java/com/rtbishop/look4sat/core/presentation/Components.kt b/core/presentation/src/main/java/com/rtbishop/look4sat/core/presentation/Components.kt index 30c07d3e..b9ffe81e 100644 --- a/core/presentation/src/main/java/com/rtbishop/look4sat/core/presentation/Components.kt +++ b/core/presentation/src/main/java/com/rtbishop/look4sat/core/presentation/Components.kt @@ -27,11 +27,15 @@ import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape @@ -47,7 +51,6 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.Surface import androidx.compose.material3.Text -import androidx.compose.material3.SheetValue import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo import androidx.compose.runtime.Composable @@ -73,6 +76,8 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.platform.LocalWindowInfo import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.TextUnit @@ -291,52 +296,81 @@ fun getDefaultPass(): OrbitalPass = OrbitalPass( ) @Composable -fun SharedDialog( - title: String, onCancel: () -> Unit, onAccept: () -> Unit, content: @Composable () -> Unit -) { - SharedDialog(title = title, onDismissRequest = onCancel, onCancel = onCancel, onAccept = onAccept) { _ -> - content() - } -} - -@Composable -fun SharedDialog( +fun InfoDialog( title: String, - onDismissRequest: () -> Unit, - onCancel: (() -> Unit)? = null, - onAccept: (() -> Unit)? = null, - titleFontSize: Int = 16, - titleTextAlign: TextAlign = if (onCancel != null && onAccept != null) TextAlign.Center else TextAlign.Start, - content: @Composable (padding: Dp) -> Unit + onDismiss: () -> Unit, + onAccept: () -> Unit, + content: @Composable () -> Unit ) { - val dismissible = onCancel != null - DialogShell(onDismissRequest = onDismissRequest, dismissible = dismissible) { padding -> + DialogShell(onDismissRequest = onDismiss) { padding -> Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier .fillMaxWidth() .padding(start = padding, top = padding, end = padding) ) { - if (onCancel != null) { - CardButton(onClick = onCancel, text = stringResource(R.string.btn_cancel)) - } Text( text = title, - fontSize = titleFontSize.sp, + fontSize = 16.sp, fontWeight = FontWeight.Medium, color = MaterialTheme.colorScheme.primary, - textAlign = titleTextAlign, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + modifier = Modifier.weight(1f) + ) + CardButton(onClick = onAccept, text = stringResource(R.string.btn_accept)) + } + content() + } +} + +@Composable +fun ConfirmDialog( + title: String, + onCancel: () -> Unit, + onAccept: () -> Unit, + content: @Composable () -> Unit +) { + DialogShell(onDismissRequest = onCancel) { padding -> + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .fillMaxWidth() + .padding(start = padding, top = padding, end = padding) + ) { + CardButton(onClick = onCancel, text = stringResource(R.string.btn_cancel)) + Text( + text = title, + fontSize = 16.sp, + fontWeight = FontWeight.Medium, + color = MaterialTheme.colorScheme.primary, + textAlign = TextAlign.Center, maxLines = 1, overflow = TextOverflow.Ellipsis, modifier = Modifier .weight(1f) - .padding(horizontal = if (onCancel != null && onAccept != null) padding else 0.dp) + .padding(horizontal = padding) ) - if (onAccept != null) { - CardButton(onClick = onAccept, text = stringResource(R.string.btn_accept)) - } + CardButton(onClick = onAccept, text = stringResource(R.string.btn_accept)) } - content(padding) + content() + } +} + +@Composable +fun WhatsNewDialog(onDismiss: () -> Unit) { + InfoDialog( + title = stringResource(R.string.pass_whatsnew_title), + onDismiss = onDismiss, + onAccept = onDismiss + ) { + Text( + text = stringResource(R.string.pass_whatsnew_message), + fontSize = 16.sp, + color = MaterialTheme.colorScheme.onSurface, + modifier = Modifier.padding(horizontal = LocalSpacing.current.large) + ) + Spacer(modifier = Modifier.height(0.dp)) } } @@ -344,14 +378,13 @@ fun SharedDialog( @Composable private fun DialogShell( onDismissRequest: () -> Unit, - dismissible: Boolean = true, content: @Composable (padding: Dp) -> Unit ) { val padding = LocalSpacing.current.large - val sheetState = rememberModalBottomSheetState( - skipPartiallyExpanded = true, - confirmValueChange = { if (dismissible) true else it != SheetValue.Hidden } - ) + val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true) + val statusBarHeight = WindowInsets.statusBars.asPaddingValues().calculateTopPadding() + val containerHeight = with(LocalDensity.current) { LocalWindowInfo.current.containerSize.height.toDp() } + val maxSheetHeight = containerHeight - statusBarHeight val stopSheetFling = remember { object : NestedScrollConnection { override suspend fun onPostFling(consumed: Velocity, available: Velocity): Velocity { @@ -366,10 +399,10 @@ private fun DialogShell( } } ModalBottomSheet( - onDismissRequest = if (dismissible) onDismissRequest else { {} }, + onDismissRequest = onDismissRequest, sheetState = sheetState, dragHandle = null, - shape = RoundedCornerShape(topStart = 24.dp, topEnd = 24.dp), + shape = RoundedCornerShape(topStart = 12.dp, topEnd = 12.dp), scrimColor = Color.Black.copy(alpha = 0.64f) ) { Column( @@ -377,6 +410,7 @@ private fun DialogShell( verticalArrangement = Arrangement.spacedBy(padding), modifier = Modifier .fillMaxWidth() + .heightIn(max = maxSheetHeight) .nestedScroll(stopSheetFling) ) { content(padding) diff --git a/feature/passes/src/main/java/com/rtbishop/look4sat/feature/passes/PassesDialog.kt b/feature/passes/src/main/java/com/rtbishop/look4sat/feature/passes/PassesDialog.kt index 4e1aa773..c774ff1f 100644 --- a/feature/passes/src/main/java/com/rtbishop/look4sat/feature/passes/PassesDialog.kt +++ b/feature/passes/src/main/java/com/rtbishop/look4sat/feature/passes/PassesDialog.kt @@ -58,7 +58,7 @@ import androidx.compose.ui.unit.sp import com.rtbishop.look4sat.core.presentation.LocalSpacing import com.rtbishop.look4sat.core.presentation.MainTheme import com.rtbishop.look4sat.core.presentation.R -import com.rtbishop.look4sat.core.presentation.SharedDialog +import com.rtbishop.look4sat.core.presentation.ConfirmDialog import com.rtbishop.look4sat.core.presentation.ElevationHighColor import com.rtbishop.look4sat.core.presentation.ElevationLowColor import com.rtbishop.look4sat.core.presentation.elevationColor @@ -140,7 +140,7 @@ internal fun PassesFilterDialog( ) cancel() } - SharedDialog(title = stringResource(R.string.pass_filter_title), onCancel = cancel, onAccept = onAccept) { + ConfirmDialog(title = stringResource(R.string.pass_filter_title), onCancel = cancel, onAccept = onAccept) { SliderRow( title = stringResource(R.string.pass_filter_elev), value = elevationValueNew.doubleValue, @@ -365,7 +365,7 @@ internal fun RadiosDialog(modes: List, cancel: () -> Unit, accept: (List selected.value = if (mode in selected.value) selected.value - mode else selected.value + mode } val onAccept = { accept(selected.value.toList()).also { cancel() } } - SharedDialog(title = stringResource(R.string.pass_modes_title), onCancel = cancel, onAccept = onAccept) { + ConfirmDialog(title = stringResource(R.string.pass_modes_title), onCancel = cancel, onAccept = onAccept) { LazyVerticalGrid( columns = GridCells.Adaptive(240.dp), modifier = Modifier diff --git a/feature/passes/src/main/java/com/rtbishop/look4sat/feature/passes/PassesScreen.kt b/feature/passes/src/main/java/com/rtbishop/look4sat/feature/passes/PassesScreen.kt index 257d6a72..f9c39dfa 100644 --- a/feature/passes/src/main/java/com/rtbishop/look4sat/feature/passes/PassesScreen.kt +++ b/feature/passes/src/main/java/com/rtbishop/look4sat/feature/passes/PassesScreen.kt @@ -30,7 +30,6 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width @@ -72,10 +71,10 @@ import com.rtbishop.look4sat.core.presentation.MainTheme import com.rtbishop.look4sat.core.presentation.NextPassRow import com.rtbishop.look4sat.core.presentation.R import com.rtbishop.look4sat.core.presentation.ScreenColumn -import com.rtbishop.look4sat.core.presentation.SharedDialog import com.rtbishop.look4sat.core.presentation.SwipeableItem import com.rtbishop.look4sat.core.presentation.TimerRow import com.rtbishop.look4sat.core.presentation.TopBar +import com.rtbishop.look4sat.core.presentation.WhatsNewDialog import com.rtbishop.look4sat.core.presentation.elevationColor import com.rtbishop.look4sat.core.presentation.infiniteMarquee import com.rtbishop.look4sat.core.presentation.isVerticalLayout @@ -136,20 +135,7 @@ private fun PassesScreen( } if (uiState.shouldSeeWhatsNew) { val dismiss = { onAction(PassesAction.DismissWhatsNew) } - SharedDialog( - title = stringResource(R.string.pass_whatsnew_title), - onDismissRequest = dismiss, - onAccept = dismiss, - titleFontSize = 18 - ) { padding -> - Text( - text = stringResource(R.string.pass_whatsnew_message), - fontSize = 16.sp, - color = MaterialTheme.colorScheme.onSurface, - modifier = Modifier.padding(horizontal = padding) - ) - Spacer(modifier = Modifier.height(0.dp)) - } + WhatsNewDialog(onDismiss = dismiss) } ScreenColumn( topBar = { isVerticalLayout -> diff --git a/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/SstvPage.kt b/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/SstvPage.kt index c0ceb48c..0144c504 100644 --- a/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/SstvPage.kt +++ b/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/SstvPage.kt @@ -53,10 +53,10 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import com.rtbishop.look4sat.core.presentation.ConfirmDialog import com.rtbishop.look4sat.core.presentation.IconCard import com.rtbishop.look4sat.core.presentation.OutlinedText import com.rtbishop.look4sat.core.presentation.R -import com.rtbishop.look4sat.core.presentation.SharedDialog import com.rtbishop.look4sat.core.presentation.infiniteMarquee import kotlin.math.roundToInt @@ -96,14 +96,14 @@ internal fun SstvPage( if (showModeDialog.value) { val allModes = remember(sstv.supportedModes) { listOf("Auto") + sstv.supportedModes } val dismiss = { showModeDialog.value = false } - SharedDialog( + ConfirmDialog( title = "SSTV Mode", - onDismissRequest = dismiss, - onAccept = dismiss - ) { _ -> + onAccept = dismiss, + onCancel = dismiss + ) { LazyColumn( modifier = Modifier - .fillMaxHeight(0.7f) + .fillMaxHeight(0.69f) .background(MaterialTheme.colorScheme.background), verticalArrangement = Arrangement.spacedBy(1.dp) ) { diff --git a/feature/satellites/src/main/java/com/rtbishop/look4sat/feature/satellites/SatellitesDialog.kt b/feature/satellites/src/main/java/com/rtbishop/look4sat/feature/satellites/SatellitesDialog.kt index 2147f9f3..e077f44a 100644 --- a/feature/satellites/src/main/java/com/rtbishop/look4sat/feature/satellites/SatellitesDialog.kt +++ b/feature/satellites/src/main/java/com/rtbishop/look4sat/feature/satellites/SatellitesDialog.kt @@ -39,9 +39,9 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import com.rtbishop.look4sat.core.presentation.ConfirmDialog import com.rtbishop.look4sat.core.presentation.MainTheme import com.rtbishop.look4sat.core.presentation.R -import com.rtbishop.look4sat.core.presentation.SharedDialog @Preview(showBackground = true) @Composable @@ -59,7 +59,7 @@ internal fun MultiModesDialog( selected.value = if (mode in selected.value) selected.value - mode else selected.value + mode } val onAccept = { accept(selected.value.toList()) } - SharedDialog(title = stringResource(R.string.sat_type_title), onCancel = cancel, onAccept = onAccept) { + ConfirmDialog(title = stringResource(R.string.sat_type_title), onCancel = cancel, onAccept = onAccept) { LazyVerticalGrid( columns = GridCells.Adaptive(240.dp), modifier = Modifier diff --git a/feature/satellites/src/main/java/com/rtbishop/look4sat/feature/satellites/SatellitesScreen.kt b/feature/satellites/src/main/java/com/rtbishop/look4sat/feature/satellites/SatellitesScreen.kt index 33441d7c..4083dccd 100644 --- a/feature/satellites/src/main/java/com/rtbishop/look4sat/feature/satellites/SatellitesScreen.kt +++ b/feature/satellites/src/main/java/com/rtbishop/look4sat/feature/satellites/SatellitesScreen.kt @@ -62,10 +62,11 @@ import com.rtbishop.look4sat.core.domain.repository.IContainerProvider import com.rtbishop.look4sat.core.presentation.CardLoadingIndicator import com.rtbishop.look4sat.core.presentation.EmptyListCard import com.rtbishop.look4sat.core.presentation.IconCard +import com.rtbishop.look4sat.core.presentation.InfoDialog +import com.rtbishop.look4sat.core.presentation.LocalSpacing import com.rtbishop.look4sat.core.presentation.MainTheme import com.rtbishop.look4sat.core.presentation.PrimaryIconCard import com.rtbishop.look4sat.core.presentation.R -import com.rtbishop.look4sat.core.presentation.SharedDialog import com.rtbishop.look4sat.core.presentation.TopBar import com.rtbishop.look4sat.core.presentation.infiniteMarquee import com.rtbishop.look4sat.core.presentation.isVerticalLayout @@ -96,17 +97,16 @@ private fun SatellitesScreen( } if (uiState.shouldSeeWarning) { val dismiss = { onAction(SatellitesAction.DismissWarning) } - SharedDialog( + InfoDialog( title = stringResource(R.string.sat_warning_title), - onDismissRequest = dismiss, - onAccept = dismiss, - titleFontSize = 18 - ) { padding -> + onDismiss = dismiss, + onAccept = dismiss + ) { Text( text = stringResource(R.string.sat_warning_message), fontSize = 16.sp, color = MaterialTheme.colorScheme.onSurface, - modifier = Modifier.padding(horizontal = padding) + modifier = Modifier.padding(horizontal = LocalSpacing.current.large) ) Spacer(modifier = Modifier.height(0.dp)) } diff --git a/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsDialog.kt b/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsDialog.kt index 42ca9169..43baaf24 100644 --- a/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsDialog.kt +++ b/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsDialog.kt @@ -49,7 +49,7 @@ import com.rtbishop.look4sat.core.presentation.CardButton import com.rtbishop.look4sat.core.presentation.LocalSpacing import com.rtbishop.look4sat.core.presentation.MainTheme import com.rtbishop.look4sat.core.presentation.R -import com.rtbishop.look4sat.core.presentation.SharedDialog +import com.rtbishop.look4sat.core.presentation.ConfirmDialog @Preview(showBackground = true) @Composable @@ -63,7 +63,7 @@ fun PositionDialog(lat: Double, lon: Double, dismiss: () -> Unit, save: (Double, val lonValue = rememberSaveable { mutableStateOf(lon.toString()) } val titleText = stringResource(id = R.string.prefs_station_title) val onAccept = { saveValues(latValue.value, lonValue.value, save).also { dismiss() } } - SharedDialog(title = titleText, onCancel = dismiss, onAccept = onAccept) { + ConfirmDialog(title = titleText, onCancel = dismiss, onAccept = onAccept) { Row( horizontalArrangement = Arrangement.spacedBy(6.dp), modifier = Modifier @@ -107,7 +107,7 @@ private fun LocatorDialogPreview() { fun LocatorDialog(qthLocator: String, dismiss: () -> Unit, save: (String) -> Unit) { val locator = rememberSaveable { mutableStateOf(qthLocator) } val onAccept = { save(locator.value).also { dismiss() } } - SharedDialog( + ConfirmDialog( title = stringResource(R.string.prefs_locator_title), onCancel = dismiss, onAccept = onAccept @@ -169,7 +169,7 @@ fun DataSourcesDialog( onDismiss() } val onCancel = { onDismiss() } - SharedDialog( + ConfirmDialog( title = stringResource(id = R.string.prefs_data_sources_title), onCancel = onCancel, onAccept = onAccept, @@ -313,7 +313,7 @@ fun NetworkOutputDialog( ) onDismiss() } - SharedDialog( + ConfirmDialog( title = stringResource(R.string.prefs_net_title), onCancel = onDismiss, onAccept = onAccept @@ -411,7 +411,7 @@ fun BluetoothOutputDialog( ) onDismiss() } - SharedDialog( + ConfirmDialog( title = stringResource(R.string.prefs_bt_title), onCancel = onDismiss, onAccept = onAccept @@ -538,7 +538,7 @@ fun RadioControlDialog( onDismiss() } - SharedDialog( + ConfirmDialog( title = stringResource(R.string.rc_settings_title), onCancel = onDismiss, onAccept = onAccept diff --git a/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsScreen.kt b/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsScreen.kt index dd71422f..63c3cf0f 100644 --- a/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsScreen.kt +++ b/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsScreen.kt @@ -74,6 +74,7 @@ import com.rtbishop.look4sat.core.presentation.PrimaryIconCard import com.rtbishop.look4sat.core.presentation.R import com.rtbishop.look4sat.core.presentation.ScreenColumn import com.rtbishop.look4sat.core.presentation.TopBar +import com.rtbishop.look4sat.core.presentation.WhatsNewDialog import com.rtbishop.look4sat.core.presentation.infiniteMarquee import com.rtbishop.look4sat.core.presentation.isVerticalLayout import java.text.SimpleDateFormat @@ -198,6 +199,9 @@ private fun SettingsScreen(uiState: SettingsState, onAction: (SettingsAction) -> onSave = { onAction(SettingsAction.UpdateRadioControl(it)) } ) } + if (dialogs.whatsNew) { + WhatsNewDialog(onDismiss = { dialogs.whatsNew = false }) + } // URLs for top bar val uriHandler = LocalUriHandler.current @@ -218,7 +222,7 @@ private fun SettingsScreen(uiState: SettingsState, onAction: (SettingsAction) -> if (isVerticalLayout) { TopBar { TopCard( - onClick = { safeOpenUri(appUrl) }, + onClick = { dialogs.whatsNew = true }, version = uiState.appVersionName, modifier = Modifier.weight(1f) ) @@ -246,7 +250,7 @@ private fun SettingsScreen(uiState: SettingsState, onAction: (SettingsAction) -> TopBar { PrimaryIconCard(onClick = { safeOpenUri(donateUrl) }, resId = R.drawable.ic_like) TopCard( - onClick = { safeOpenUri(appUrl) }, + onClick = { dialogs.whatsNew = true }, version = uiState.appVersionName, modifier = Modifier.weight(1f) ) @@ -718,6 +722,7 @@ private class DialogVisibility { var network by mutableStateOf(false) var bluetooth by mutableStateOf(false) var radioControl by mutableStateOf(false) + var whatsNew by mutableStateOf(false) } @Composable @@ -725,12 +730,12 @@ private fun rememberDialogVisibility(): DialogVisibility { return rememberSaveable(saver = run { androidx.compose.runtime.saveable.Saver( save = { - listOf(it.position, it.locator, it.dataSources, it.network, it.bluetooth, it.radioControl) + listOf(it.position, it.locator, it.dataSources, it.network, it.bluetooth, it.radioControl, it.whatsNew) }, restore = { DialogVisibility().apply { position = it[0]; locator = it[1]; dataSources = it[2] - network = it[3]; bluetooth = it[4]; radioControl = it[5] + network = it[3]; bluetooth = it[4]; radioControl = it[5]; whatsNew = it[6] } } ) diff --git a/feature/status/src/main/java/com/rtbishop/look4sat/feature/status/SatStatusScreen.kt b/feature/status/src/main/java/com/rtbishop/look4sat/feature/status/SatStatusScreen.kt index ca301e11..27080a07 100644 --- a/feature/status/src/main/java/com/rtbishop/look4sat/feature/status/SatStatusScreen.kt +++ b/feature/status/src/main/java/com/rtbishop/look4sat/feature/status/SatStatusScreen.kt @@ -12,6 +12,7 @@ import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width @@ -50,8 +51,8 @@ import com.rtbishop.look4sat.core.domain.model.SatReport import com.rtbishop.look4sat.core.domain.model.SatSlot import com.rtbishop.look4sat.core.domain.model.SatStatus import com.rtbishop.look4sat.core.domain.repository.IContainerProvider +import com.rtbishop.look4sat.core.presentation.ConfirmDialog import com.rtbishop.look4sat.core.presentation.R -import com.rtbishop.look4sat.core.presentation.SharedDialog import com.rtbishop.look4sat.core.presentation.layoutPadding import java.util.Calendar @@ -279,12 +280,12 @@ private fun DayCell(slot: SatSlot, modifier: Modifier, onClick: () -> Unit) { @Composable private fun ReportDialog(statusName: String, day: SatDay, reports: Map, onDismiss: () -> Unit) { val dayReports = day.slots.flatMap { it.reportIds }.mapNotNull { reports[it] } - SharedDialog(title = "$statusName · ${day.dateLabel}", onCancel = onDismiss, onAccept = onDismiss) { + ConfirmDialog(title = "$statusName · ${day.dateLabel}", onCancel = onDismiss, onAccept = onDismiss) { if (dayReports.isEmpty()) { Text(stringResource(id = R.string.amsat_no_reports)) Spacer(modifier = Modifier.height(8.dp)) } else { - LazyColumn { + LazyColumn(modifier = Modifier.heightIn(max = 480.dp)) { items(dayReports) { report -> Column(modifier = Modifier.fillMaxWidth().padding(horizontal = 16.dp, vertical = 8.dp)) { Row(verticalAlignment = Alignment.CenterVertically) {