Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f1970121 authored by Ellen Poe's avatar Ellen Poe
Browse files

refactor: PlaceCardScreen

parent a2d7099a
Loading
Loading
Loading
Loading
+134 −109
Original line number Diff line number Diff line
@@ -102,7 +102,31 @@ fun PlaceCardScreen(
                    onPeekHeightChange(heightInDp)
                },
        ) {
            // Place name and type
            PlaceHeader(displayedPlace)
            PlaceAddress(displayedPlace, addressFormatter)
            PlaceActions(displayedPlace, viewModel, place, onGetDirections) { showUnsaveConfirmationDialog = true }
            // Inset horizontal divider
            HorizontalDivider(
                modifier = Modifier
                    .fillMaxWidth()
                    .padding(vertical = dimensionResource(dimen.padding) / 2),
                thickness = DividerDefaults.Thickness,
                color = MaterialTheme.colorScheme.outlineVariant
            )
        }

        if (place.isTransitStop) {
            TransitStopInformation(viewModel = hiltViewModel<TransitStopCardViewModel>().also {
                it.setStop(place)
            }, onRouteClicked = {})
        }

        UnsaveConfirmationDialog(displayedPlace, viewModel, showUnsaveConfirmationDialog) { showUnsaveConfirmationDialog = false }
    }
}

@Composable
private fun PlaceHeader(displayedPlace: Place) {
    Text(
        text = displayedPlace.name,
        style = MaterialTheme.typography.headlineSmall,
@@ -115,8 +139,10 @@ fun PlaceCardScreen(
        color = MaterialTheme.colorScheme.onSurfaceVariant,
        modifier = Modifier.padding(top = 4.dp)
    )
}

            // Address information
@Composable
private fun PlaceAddress(displayedPlace: Place, addressFormatter: AddressFormatter) {
    displayedPlace.address?.let { address ->
        Row(
            modifier = Modifier
@@ -138,8 +164,16 @@ fun PlaceCardScreen(
            )
        }
    }
}

            // Action buttons
@Composable
private fun PlaceActions(
    displayedPlace: Place,
    viewModel: PlaceCardViewModel,
    place: Place,
    onGetDirections: (Place) -> Unit,
    onShowUnsaveDialog: () -> Unit
) {
    Row(
        modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically
    ) {
@@ -157,7 +191,7 @@ fun PlaceCardScreen(
            onClick = {
                if (viewModel.isPlaceSaved.value) {
                    // Show confirmation dialog for unsaving
                            showUnsaveConfirmationDialog = true
                    onShowUnsaveDialog()
                } else {
                    viewModel.savePlace(place)
                }
@@ -185,26 +219,18 @@ fun PlaceCardScreen(
            }
        }
    }
            // Inset horizontal divider
            HorizontalDivider(
                modifier = Modifier
                    .fillMaxWidth()
                    .padding(vertical = dimensionResource(dimen.padding) / 2),
                thickness = DividerDefaults.Thickness,
                color = MaterialTheme.colorScheme.outlineVariant
            )
}

        if (place.isTransitStop) {
            TransitStopInformation(viewModel = hiltViewModel<TransitStopCardViewModel>().also {
                it.setStop(place)
            }, onRouteClicked = {})
        }

        // Unsave Confirmation Dialog
        if (showUnsaveConfirmationDialog) {
@Composable
private fun UnsaveConfirmationDialog(
    displayedPlace: Place,
    viewModel: PlaceCardViewModel,
    show: Boolean,
    onDismiss: () -> Unit
) {
    if (show) {
        AlertDialog(
                onDismissRequest = { showUnsaveConfirmationDialog = false },
            onDismissRequest = onDismiss,
            title = { Text(stringResource(string.unsave_place)) },
            text = {
                Text(
@@ -217,17 +243,16 @@ fun PlaceCardScreen(
                TextButton(
                    onClick = {
                        viewModel.unsavePlace(displayedPlace)
                            showUnsaveConfirmationDialog = false
                        onDismiss()
                    }) {
                    Text(stringResource(string.unsave_place))
                }
            },
            dismissButton = {
                    TextButton(
                        onClick = { showUnsaveConfirmationDialog = false }) {
                TextButton(onClick = onDismiss) {
                    Text(stringResource(string.cancel_button))
                }
                })
            }
        )
    }
}