Rename ShareLocationEvents -> ShareLocationEvent
This commit is contained in:
parent
8c64f704cb
commit
add737b646
4 changed files with 122 additions and 82 deletions
|
|
@ -10,11 +10,11 @@ package io.element.android.features.location.impl.share
|
||||||
|
|
||||||
import io.element.android.features.location.api.Location
|
import io.element.android.features.location.api.Location
|
||||||
|
|
||||||
sealed interface ShareLocationEvents {
|
sealed interface ShareLocationEvent {
|
||||||
data class ShareLocation(
|
data class ShareStaticLocation(
|
||||||
val cameraPosition: CameraPosition,
|
val cameraPosition: CameraPosition,
|
||||||
val location: Location?,
|
val location: Location?,
|
||||||
) : ShareLocationEvents {
|
) : ShareLocationEvent {
|
||||||
data class CameraPosition(
|
data class CameraPosition(
|
||||||
val lat: Double,
|
val lat: Double,
|
||||||
val lon: Double,
|
val lon: Double,
|
||||||
|
|
@ -22,9 +22,11 @@ sealed interface ShareLocationEvents {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
data object SwitchToMyLocationMode : ShareLocationEvents
|
data object SelectLiveLocationDuration: ShareLocationEvent
|
||||||
data object SwitchToPinLocationMode : ShareLocationEvents
|
|
||||||
data object DismissDialog : ShareLocationEvents
|
data object SwitchToMyLocationMode : ShareLocationEvent
|
||||||
data object RequestPermissions : ShareLocationEvents
|
data object SwitchToPinLocationMode : ShareLocationEvent
|
||||||
data object OpenAppSettings : ShareLocationEvents
|
data object DismissDialog : ShareLocationEvent
|
||||||
|
data object RequestPermissions : ShareLocationEvent
|
||||||
|
data object OpenAppSettings : ShareLocationEvent
|
||||||
}
|
}
|
||||||
|
|
@ -79,23 +79,24 @@ class ShareLocationPresenter(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun handleEvent(event: ShareLocationEvents) {
|
fun handleEvent(event: ShareLocationEvent) {
|
||||||
when (event) {
|
when (event) {
|
||||||
is ShareLocationEvents.ShareLocation -> scope.launch {
|
is ShareLocationEvent.ShareStaticLocation -> scope.launch {
|
||||||
shareLocation(event, mode)
|
shareLocation(event, mode)
|
||||||
}
|
}
|
||||||
ShareLocationEvents.SwitchToMyLocationMode -> when {
|
ShareLocationEvent.SwitchToMyLocationMode -> when {
|
||||||
permissionsState.isAnyGranted -> mode = ShareLocationState.Mode.SenderLocation
|
permissionsState.isAnyGranted -> mode = ShareLocationState.Mode.SenderLocation
|
||||||
permissionsState.shouldShowRationale -> permissionDialog = ShareLocationState.Dialog.PermissionRationale
|
permissionsState.shouldShowRationale -> permissionDialog = ShareLocationState.Dialog.PermissionRationale
|
||||||
else -> permissionDialog = ShareLocationState.Dialog.PermissionDenied
|
else -> permissionDialog = ShareLocationState.Dialog.PermissionDenied
|
||||||
}
|
}
|
||||||
ShareLocationEvents.SwitchToPinLocationMode -> mode = ShareLocationState.Mode.PinLocation
|
ShareLocationEvent.SwitchToPinLocationMode -> mode = ShareLocationState.Mode.PinLocation
|
||||||
ShareLocationEvents.DismissDialog -> permissionDialog = ShareLocationState.Dialog.None
|
ShareLocationEvent.DismissDialog -> permissionDialog = ShareLocationState.Dialog.None
|
||||||
ShareLocationEvents.OpenAppSettings -> {
|
ShareLocationEvent.OpenAppSettings -> {
|
||||||
locationActions.openSettings()
|
locationActions.openSettings()
|
||||||
permissionDialog = ShareLocationState.Dialog.None
|
permissionDialog = ShareLocationState.Dialog.None
|
||||||
}
|
}
|
||||||
ShareLocationEvents.RequestPermissions -> permissionsState.eventSink(PermissionsEvents.RequestPermissions)
|
ShareLocationEvent.RequestPermissions -> permissionsState.eventSink(PermissionsEvents.RequestPermissions)
|
||||||
|
ShareLocationEvent.SelectLiveLocationDuration -> Unit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -109,7 +110,7 @@ class ShareLocationPresenter(
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun shareLocation(
|
private suspend fun shareLocation(
|
||||||
event: ShareLocationEvents.ShareLocation,
|
event: ShareLocationEvent.ShareStaticLocation,
|
||||||
mode: ShareLocationState.Mode,
|
mode: ShareLocationState.Mode,
|
||||||
) {
|
) {
|
||||||
val replyMode = messageComposerContext.composerMode as? MessageComposerMode.Reply
|
val replyMode = messageComposerContext.composerMode as? MessageComposerMode.Reply
|
||||||
|
|
@ -168,8 +169,8 @@ class ShareLocationPresenter(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ShareLocationEvents.ShareLocation.toGeoUri(): String = location?.toGeoUri() ?: cameraPosition.toGeoUri()
|
private fun ShareLocationEvent.ShareStaticLocation.toGeoUri(): String = location?.toGeoUri() ?: cameraPosition.toGeoUri()
|
||||||
|
|
||||||
private fun ShareLocationEvents.ShareLocation.CameraPosition.toGeoUri(): String = "geo:$lat,$lon"
|
private fun ShareLocationEvent.ShareStaticLocation.CameraPosition.toGeoUri(): String = "geo:$lat,$lon"
|
||||||
|
|
||||||
private fun generateBody(uri: String): String = "Location was shared at $uri"
|
private fun generateBody(uri: String): String = "Location was shared at $uri"
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.navigationBars
|
import androidx.compose.foundation.layout.navigationBars
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
import androidx.compose.material3.ListItem
|
|
||||||
import androidx.compose.material3.SheetValue
|
import androidx.compose.material3.SheetValue
|
||||||
import androidx.compose.material3.rememberBottomSheetScaffoldState
|
import androidx.compose.material3.rememberBottomSheetScaffoldState
|
||||||
import androidx.compose.material3.rememberStandardBottomSheetState
|
import androidx.compose.material3.rememberStandardBottomSheetState
|
||||||
|
|
@ -31,24 +30,29 @@ import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameter
|
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
|
import io.element.android.compound.theme.ElementTheme
|
||||||
|
import io.element.android.compound.tokens.generated.CompoundIcons
|
||||||
import io.element.android.features.location.api.Location
|
import io.element.android.features.location.api.Location
|
||||||
import io.element.android.features.location.api.internal.centerBottomEdge
|
import io.element.android.features.location.api.internal.centerBottomEdge
|
||||||
import io.element.android.features.location.api.internal.rememberTileStyleUrl
|
import io.element.android.features.location.api.internal.rememberTileStyleUrl
|
||||||
import io.element.android.features.location.impl.R
|
|
||||||
import io.element.android.features.location.impl.common.MapDefaults
|
import io.element.android.features.location.impl.common.MapDefaults
|
||||||
import io.element.android.features.location.impl.common.PermissionDeniedDialog
|
import io.element.android.features.location.impl.common.PermissionDeniedDialog
|
||||||
import io.element.android.features.location.impl.common.PermissionRationaleDialog
|
import io.element.android.features.location.impl.common.PermissionRationaleDialog
|
||||||
import io.element.android.features.location.impl.common.ui.LocationFloatingActionButton
|
import io.element.android.features.location.impl.common.ui.LocationFloatingActionButton
|
||||||
import io.element.android.libraries.designsystem.components.button.BackButton
|
import io.element.android.libraries.designsystem.components.button.BackButton
|
||||||
|
import io.element.android.libraries.designsystem.components.list.ListItemContent
|
||||||
import io.element.android.libraries.designsystem.preview.ElementPreview
|
import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||||
import io.element.android.libraries.designsystem.theme.components.BottomSheetScaffold
|
import io.element.android.libraries.designsystem.theme.components.BottomSheetScaffold
|
||||||
import io.element.android.libraries.designsystem.theme.components.Icon
|
import io.element.android.libraries.designsystem.theme.components.Icon
|
||||||
|
import io.element.android.libraries.designsystem.theme.components.IconSource
|
||||||
|
import io.element.android.libraries.designsystem.theme.components.ListItem
|
||||||
import io.element.android.libraries.designsystem.theme.components.Text
|
import io.element.android.libraries.designsystem.theme.components.Text
|
||||||
import io.element.android.libraries.designsystem.theme.components.TopAppBar
|
import io.element.android.libraries.designsystem.theme.components.TopAppBar
|
||||||
import io.element.android.libraries.designsystem.utils.CommonDrawables
|
import io.element.android.libraries.designsystem.utils.CommonDrawables
|
||||||
import io.element.android.libraries.maplibre.compose.CameraMode
|
import io.element.android.libraries.maplibre.compose.CameraMode
|
||||||
import io.element.android.libraries.maplibre.compose.CameraMoveStartedReason
|
import io.element.android.libraries.maplibre.compose.CameraMoveStartedReason
|
||||||
|
import io.element.android.libraries.maplibre.compose.CameraPositionState
|
||||||
import io.element.android.libraries.maplibre.compose.MapLibreMap
|
import io.element.android.libraries.maplibre.compose.MapLibreMap
|
||||||
import io.element.android.libraries.maplibre.compose.rememberCameraPositionState
|
import io.element.android.libraries.maplibre.compose.rememberCameraPositionState
|
||||||
import io.element.android.libraries.ui.strings.CommonStrings
|
import io.element.android.libraries.ui.strings.CommonStrings
|
||||||
|
|
@ -62,19 +66,19 @@ fun ShareLocationView(
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
) {
|
) {
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
state.eventSink(ShareLocationEvents.RequestPermissions)
|
state.eventSink(ShareLocationEvent.RequestPermissions)
|
||||||
}
|
}
|
||||||
|
|
||||||
when (state.permissionDialog) {
|
when (state.permissionDialog) {
|
||||||
ShareLocationState.Dialog.None -> Unit
|
ShareLocationState.Dialog.None -> Unit
|
||||||
ShareLocationState.Dialog.PermissionDenied -> PermissionDeniedDialog(
|
ShareLocationState.Dialog.PermissionDenied -> PermissionDeniedDialog(
|
||||||
onContinue = { state.eventSink(ShareLocationEvents.OpenAppSettings) },
|
onContinue = { state.eventSink(ShareLocationEvent.OpenAppSettings) },
|
||||||
onDismiss = { state.eventSink(ShareLocationEvents.DismissDialog) },
|
onDismiss = { state.eventSink(ShareLocationEvent.DismissDialog) },
|
||||||
appName = state.appName,
|
appName = state.appName,
|
||||||
)
|
)
|
||||||
ShareLocationState.Dialog.PermissionRationale -> PermissionRationaleDialog(
|
ShareLocationState.Dialog.PermissionRationale -> PermissionRationaleDialog(
|
||||||
onContinue = { state.eventSink(ShareLocationEvents.RequestPermissions) },
|
onContinue = { state.eventSink(ShareLocationEvent.RequestPermissions) },
|
||||||
onDismiss = { state.eventSink(ShareLocationEvents.DismissDialog) },
|
onDismiss = { state.eventSink(ShareLocationEvent.DismissDialog) },
|
||||||
appName = state.appName,
|
appName = state.appName,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -99,7 +103,7 @@ fun ShareLocationView(
|
||||||
|
|
||||||
LaunchedEffect(cameraPositionState.isMoving) {
|
LaunchedEffect(cameraPositionState.isMoving) {
|
||||||
if (cameraPositionState.cameraMoveStartedReason == CameraMoveStartedReason.GESTURE) {
|
if (cameraPositionState.cameraMoveStartedReason == CameraMoveStartedReason.GESTURE) {
|
||||||
state.eventSink(ShareLocationEvents.SwitchToPinLocationMode)
|
state.eventSink(ShareLocationEvent.SwitchToPinLocationMode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -108,48 +112,35 @@ fun ShareLocationView(
|
||||||
|
|
||||||
BottomSheetScaffold(
|
BottomSheetScaffold(
|
||||||
sheetContent = {
|
sheetContent = {
|
||||||
Spacer(modifier = Modifier.height(16.dp))
|
Spacer(Modifier.height(20.dp))
|
||||||
ListItem(
|
ListItem(
|
||||||
headlineContent = {
|
headlineContent = {
|
||||||
Text(
|
Text(
|
||||||
stringResource(
|
text = "Sharing options",
|
||||||
when (state.mode) {
|
style = ElementTheme.typography.fontBodyLgMedium,
|
||||||
ShareLocationState.Mode.PinLocation -> CommonStrings.screen_share_this_location_action
|
|
||||||
ShareLocationState.Mode.SenderLocation -> CommonStrings.screen_share_my_location_action
|
|
||||||
}
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
},
|
}
|
||||||
modifier = Modifier.clickable(
|
|
||||||
// target is null when the map hasn't loaded (or api key is wrong) so we disable the button
|
|
||||||
enabled = cameraPositionState.position.target != null
|
|
||||||
) {
|
|
||||||
state.eventSink(
|
|
||||||
ShareLocationEvents.ShareLocation(
|
|
||||||
cameraPosition = ShareLocationEvents.ShareLocation.CameraPosition(
|
|
||||||
lat = cameraPositionState.position.target!!.latitude,
|
|
||||||
lon = cameraPositionState.position.target!!.longitude,
|
|
||||||
zoom = cameraPositionState.position.zoom,
|
|
||||||
),
|
|
||||||
location = cameraPositionState.location?.let {
|
|
||||||
Location(
|
|
||||||
lat = it.latitude,
|
|
||||||
lon = it.longitude,
|
|
||||||
accuracy = it.accuracy,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
)
|
|
||||||
navigateUp()
|
|
||||||
},
|
|
||||||
leadingContent = {
|
|
||||||
Icon(
|
|
||||||
resourceId = R.drawable.pin_small,
|
|
||||||
contentDescription = null,
|
|
||||||
tint = Color.Unspecified,
|
|
||||||
)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
StaticLocationItem(state.mode, cameraPositionState){
|
||||||
|
val positionTarget = cameraPositionState.position.target ?: return@StaticLocationItem
|
||||||
|
state.eventSink(
|
||||||
|
ShareLocationEvent.ShareStaticLocation(
|
||||||
|
cameraPosition = ShareLocationEvent.ShareStaticLocation.CameraPosition(
|
||||||
|
lat = positionTarget.latitude,
|
||||||
|
lon = positionTarget.longitude,
|
||||||
|
zoom = cameraPositionState.position.zoom,
|
||||||
|
),
|
||||||
|
location = cameraPositionState.location?.let {
|
||||||
|
Location(
|
||||||
|
lat = it.latitude,
|
||||||
|
lon = it.longitude,
|
||||||
|
accuracy = it.accuracy,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
)
|
||||||
|
navigateUp()
|
||||||
|
}
|
||||||
Spacer(modifier = Modifier.height(16.dp + navBarPadding))
|
Spacer(modifier = Modifier.height(16.dp + navBarPadding))
|
||||||
},
|
},
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
|
|
@ -191,7 +182,7 @@ fun ShareLocationView(
|
||||||
)
|
)
|
||||||
LocationFloatingActionButton(
|
LocationFloatingActionButton(
|
||||||
isMapCenteredOnUser = state.mode == ShareLocationState.Mode.SenderLocation,
|
isMapCenteredOnUser = state.mode == ShareLocationState.Mode.SenderLocation,
|
||||||
onClick = { state.eventSink(ShareLocationEvents.SwitchToMyLocationMode) },
|
onClick = { state.eventSink(ShareLocationEvent.SwitchToMyLocationMode) },
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.align(Alignment.BottomEnd)
|
.align(Alignment.BottomEnd)
|
||||||
.padding(end = 18.dp, bottom = 72.dp + navBarPadding),
|
.padding(end = 18.dp, bottom = 72.dp + navBarPadding),
|
||||||
|
|
@ -200,6 +191,52 @@ fun ShareLocationView(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun StaticLocationItem(
|
||||||
|
mode: ShareLocationState.Mode,
|
||||||
|
cameraPositionState: CameraPositionState,
|
||||||
|
onClick: ()->Unit,
|
||||||
|
) {
|
||||||
|
ListItem(
|
||||||
|
headlineContent = {
|
||||||
|
Text(
|
||||||
|
stringResource(
|
||||||
|
when (mode) {
|
||||||
|
ShareLocationState.Mode.PinLocation -> CommonStrings.screen_share_this_location_action
|
||||||
|
ShareLocationState.Mode.SenderLocation -> CommonStrings.screen_share_my_location_action
|
||||||
|
}
|
||||||
|
)
|
||||||
|
)
|
||||||
|
},
|
||||||
|
modifier = Modifier.clickable(
|
||||||
|
// target is null when the map hasn't loaded (or api key is wrong) so we disable the button
|
||||||
|
enabled = cameraPositionState.position.target != null,
|
||||||
|
onClick = onClick
|
||||||
|
),
|
||||||
|
leadingContent = ListItemContent.Icon(
|
||||||
|
iconSource = IconSource.Vector(CompoundIcons.LocationNavigatorCentred())
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun LiveLocationItem(
|
||||||
|
onClick: ()->Unit,
|
||||||
|
) {
|
||||||
|
ListItem(
|
||||||
|
headlineContent = {
|
||||||
|
Text("Share live location")
|
||||||
|
},
|
||||||
|
modifier = Modifier.clickable(
|
||||||
|
onClick = onClick
|
||||||
|
),
|
||||||
|
leadingContent = ListItemContent.Icon(
|
||||||
|
iconSource = IconSource.Vector(CompoundIcons.LocationPinSolid()),
|
||||||
|
tintColor = ElementTheme.colors.iconAccentPrimary,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun ShareLocationViewPreview(
|
internal fun ShareLocationViewPreview(
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,7 @@ class ShareLocationPresenterTest {
|
||||||
assertThat(initialState.hasLocationPermission).isTrue()
|
assertThat(initialState.hasLocationPermission).isTrue()
|
||||||
|
|
||||||
// Swipe the map to switch mode
|
// Swipe the map to switch mode
|
||||||
initialState.eventSink(ShareLocationEvents.SwitchToPinLocationMode)
|
initialState.eventSink(ShareLocationEvent.SwitchToPinLocationMode)
|
||||||
val myLocationState = awaitItem()
|
val myLocationState = awaitItem()
|
||||||
assertThat(myLocationState.permissionDialog).isEqualTo(ShareLocationState.Dialog.None)
|
assertThat(myLocationState.permissionDialog).isEqualTo(ShareLocationState.Dialog.None)
|
||||||
assertThat(myLocationState.mode).isEqualTo(ShareLocationState.Mode.PinLocation)
|
assertThat(myLocationState.mode).isEqualTo(ShareLocationState.Mode.PinLocation)
|
||||||
|
|
@ -110,7 +110,7 @@ class ShareLocationPresenterTest {
|
||||||
assertThat(initialState.hasLocationPermission).isTrue()
|
assertThat(initialState.hasLocationPermission).isTrue()
|
||||||
|
|
||||||
// Swipe the map to switch mode
|
// Swipe the map to switch mode
|
||||||
initialState.eventSink(ShareLocationEvents.SwitchToPinLocationMode)
|
initialState.eventSink(ShareLocationEvent.SwitchToPinLocationMode)
|
||||||
val myLocationState = awaitItem()
|
val myLocationState = awaitItem()
|
||||||
assertThat(myLocationState.permissionDialog).isEqualTo(ShareLocationState.Dialog.None)
|
assertThat(myLocationState.permissionDialog).isEqualTo(ShareLocationState.Dialog.None)
|
||||||
assertThat(myLocationState.mode).isEqualTo(ShareLocationState.Mode.PinLocation)
|
assertThat(myLocationState.mode).isEqualTo(ShareLocationState.Mode.PinLocation)
|
||||||
|
|
@ -137,7 +137,7 @@ class ShareLocationPresenterTest {
|
||||||
assertThat(initialState.hasLocationPermission).isFalse()
|
assertThat(initialState.hasLocationPermission).isFalse()
|
||||||
|
|
||||||
// Click on the button to switch mode
|
// Click on the button to switch mode
|
||||||
initialState.eventSink(ShareLocationEvents.SwitchToMyLocationMode)
|
initialState.eventSink(ShareLocationEvent.SwitchToMyLocationMode)
|
||||||
val myLocationState = awaitItem()
|
val myLocationState = awaitItem()
|
||||||
assertThat(myLocationState.permissionDialog).isEqualTo(ShareLocationState.Dialog.PermissionDenied)
|
assertThat(myLocationState.permissionDialog).isEqualTo(ShareLocationState.Dialog.PermissionDenied)
|
||||||
assertThat(myLocationState.mode).isEqualTo(ShareLocationState.Mode.PinLocation)
|
assertThat(myLocationState.mode).isEqualTo(ShareLocationState.Mode.PinLocation)
|
||||||
|
|
@ -164,7 +164,7 @@ class ShareLocationPresenterTest {
|
||||||
assertThat(initialState.hasLocationPermission).isFalse()
|
assertThat(initialState.hasLocationPermission).isFalse()
|
||||||
|
|
||||||
// Click on the button to switch mode
|
// Click on the button to switch mode
|
||||||
initialState.eventSink(ShareLocationEvents.SwitchToMyLocationMode)
|
initialState.eventSink(ShareLocationEvent.SwitchToMyLocationMode)
|
||||||
val myLocationState = awaitItem()
|
val myLocationState = awaitItem()
|
||||||
assertThat(myLocationState.permissionDialog).isEqualTo(ShareLocationState.Dialog.PermissionRationale)
|
assertThat(myLocationState.permissionDialog).isEqualTo(ShareLocationState.Dialog.PermissionRationale)
|
||||||
assertThat(myLocationState.mode).isEqualTo(ShareLocationState.Mode.PinLocation)
|
assertThat(myLocationState.mode).isEqualTo(ShareLocationState.Mode.PinLocation)
|
||||||
|
|
@ -189,14 +189,14 @@ class ShareLocationPresenterTest {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
|
|
||||||
// Click on the button to switch mode
|
// Click on the button to switch mode
|
||||||
initialState.eventSink(ShareLocationEvents.SwitchToMyLocationMode)
|
initialState.eventSink(ShareLocationEvent.SwitchToMyLocationMode)
|
||||||
val myLocationState = awaitItem()
|
val myLocationState = awaitItem()
|
||||||
assertThat(myLocationState.permissionDialog).isEqualTo(ShareLocationState.Dialog.PermissionRationale)
|
assertThat(myLocationState.permissionDialog).isEqualTo(ShareLocationState.Dialog.PermissionRationale)
|
||||||
assertThat(myLocationState.mode).isEqualTo(ShareLocationState.Mode.PinLocation)
|
assertThat(myLocationState.mode).isEqualTo(ShareLocationState.Mode.PinLocation)
|
||||||
assertThat(myLocationState.hasLocationPermission).isFalse()
|
assertThat(myLocationState.hasLocationPermission).isFalse()
|
||||||
|
|
||||||
// Dismiss the dialog
|
// Dismiss the dialog
|
||||||
myLocationState.eventSink(ShareLocationEvents.DismissDialog)
|
myLocationState.eventSink(ShareLocationEvent.DismissDialog)
|
||||||
val dialogDismissedState = awaitItem()
|
val dialogDismissedState = awaitItem()
|
||||||
assertThat(dialogDismissedState.permissionDialog).isEqualTo(ShareLocationState.Dialog.None)
|
assertThat(dialogDismissedState.permissionDialog).isEqualTo(ShareLocationState.Dialog.None)
|
||||||
assertThat(dialogDismissedState.mode).isEqualTo(ShareLocationState.Mode.PinLocation)
|
assertThat(dialogDismissedState.mode).isEqualTo(ShareLocationState.Mode.PinLocation)
|
||||||
|
|
@ -221,14 +221,14 @@ class ShareLocationPresenterTest {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
|
|
||||||
// Click on the button to switch mode
|
// Click on the button to switch mode
|
||||||
initialState.eventSink(ShareLocationEvents.SwitchToMyLocationMode)
|
initialState.eventSink(ShareLocationEvent.SwitchToMyLocationMode)
|
||||||
val myLocationState = awaitItem()
|
val myLocationState = awaitItem()
|
||||||
assertThat(myLocationState.permissionDialog).isEqualTo(ShareLocationState.Dialog.PermissionRationale)
|
assertThat(myLocationState.permissionDialog).isEqualTo(ShareLocationState.Dialog.PermissionRationale)
|
||||||
assertThat(myLocationState.mode).isEqualTo(ShareLocationState.Mode.PinLocation)
|
assertThat(myLocationState.mode).isEqualTo(ShareLocationState.Mode.PinLocation)
|
||||||
assertThat(myLocationState.hasLocationPermission).isFalse()
|
assertThat(myLocationState.hasLocationPermission).isFalse()
|
||||||
|
|
||||||
// Continue the dialog sends permission request to the permissions presenter
|
// Continue the dialog sends permission request to the permissions presenter
|
||||||
myLocationState.eventSink(ShareLocationEvents.RequestPermissions)
|
myLocationState.eventSink(ShareLocationEvent.RequestPermissions)
|
||||||
assertThat(fakePermissionsPresenter.events.last()).isEqualTo(PermissionsEvents.RequestPermissions)
|
assertThat(fakePermissionsPresenter.events.last()).isEqualTo(PermissionsEvents.RequestPermissions)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -250,14 +250,14 @@ class ShareLocationPresenterTest {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
|
|
||||||
// Click on the button to switch mode
|
// Click on the button to switch mode
|
||||||
initialState.eventSink(ShareLocationEvents.SwitchToMyLocationMode)
|
initialState.eventSink(ShareLocationEvent.SwitchToMyLocationMode)
|
||||||
val myLocationState = awaitItem()
|
val myLocationState = awaitItem()
|
||||||
assertThat(myLocationState.permissionDialog).isEqualTo(ShareLocationState.Dialog.PermissionDenied)
|
assertThat(myLocationState.permissionDialog).isEqualTo(ShareLocationState.Dialog.PermissionDenied)
|
||||||
assertThat(myLocationState.mode).isEqualTo(ShareLocationState.Mode.PinLocation)
|
assertThat(myLocationState.mode).isEqualTo(ShareLocationState.Mode.PinLocation)
|
||||||
assertThat(myLocationState.hasLocationPermission).isFalse()
|
assertThat(myLocationState.hasLocationPermission).isFalse()
|
||||||
|
|
||||||
// Dismiss the dialog
|
// Dismiss the dialog
|
||||||
myLocationState.eventSink(ShareLocationEvents.DismissDialog)
|
myLocationState.eventSink(ShareLocationEvent.DismissDialog)
|
||||||
val dialogDismissedState = awaitItem()
|
val dialogDismissedState = awaitItem()
|
||||||
assertThat(dialogDismissedState.permissionDialog).isEqualTo(ShareLocationState.Dialog.None)
|
assertThat(dialogDismissedState.permissionDialog).isEqualTo(ShareLocationState.Dialog.None)
|
||||||
assertThat(dialogDismissedState.mode).isEqualTo(ShareLocationState.Mode.PinLocation)
|
assertThat(dialogDismissedState.mode).isEqualTo(ShareLocationState.Mode.PinLocation)
|
||||||
|
|
@ -291,8 +291,8 @@ class ShareLocationPresenterTest {
|
||||||
|
|
||||||
// Send location
|
// Send location
|
||||||
initialState.eventSink(
|
initialState.eventSink(
|
||||||
ShareLocationEvents.ShareLocation(
|
ShareLocationEvent.ShareStaticLocation(
|
||||||
cameraPosition = ShareLocationEvents.ShareLocation.CameraPosition(
|
cameraPosition = ShareLocationEvent.ShareStaticLocation.CameraPosition(
|
||||||
lat = 0.0,
|
lat = 0.0,
|
||||||
lon = 1.0,
|
lon = 1.0,
|
||||||
zoom = 2.0,
|
zoom = 2.0,
|
||||||
|
|
@ -355,8 +355,8 @@ class ShareLocationPresenterTest {
|
||||||
|
|
||||||
// Send location
|
// Send location
|
||||||
initialState.eventSink(
|
initialState.eventSink(
|
||||||
ShareLocationEvents.ShareLocation(
|
ShareLocationEvent.ShareStaticLocation(
|
||||||
cameraPosition = ShareLocationEvents.ShareLocation.CameraPosition(
|
cameraPosition = ShareLocationEvent.ShareStaticLocation.CameraPosition(
|
||||||
lat = 0.0,
|
lat = 0.0,
|
||||||
lon = 1.0,
|
lon = 1.0,
|
||||||
zoom = 2.0,
|
zoom = 2.0,
|
||||||
|
|
@ -425,8 +425,8 @@ class ShareLocationPresenterTest {
|
||||||
|
|
||||||
// Send location
|
// Send location
|
||||||
initialState.eventSink(
|
initialState.eventSink(
|
||||||
ShareLocationEvents.ShareLocation(
|
ShareLocationEvent.ShareStaticLocation(
|
||||||
cameraPosition = ShareLocationEvents.ShareLocation.CameraPosition(
|
cameraPosition = ShareLocationEvent.ShareStaticLocation.CameraPosition(
|
||||||
lat = 0.0,
|
lat = 0.0,
|
||||||
lon = 1.0,
|
lon = 1.0,
|
||||||
zoom = 2.0,
|
zoom = 2.0,
|
||||||
|
|
@ -471,11 +471,11 @@ class ShareLocationPresenterTest {
|
||||||
// Skip initial state
|
// Skip initial state
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
|
|
||||||
initialState.eventSink(ShareLocationEvents.SwitchToMyLocationMode)
|
initialState.eventSink(ShareLocationEvent.SwitchToMyLocationMode)
|
||||||
val dialogShownState = awaitItem()
|
val dialogShownState = awaitItem()
|
||||||
|
|
||||||
// Open settings
|
// Open settings
|
||||||
dialogShownState.eventSink(ShareLocationEvents.OpenAppSettings)
|
dialogShownState.eventSink(ShareLocationEvent.OpenAppSettings)
|
||||||
val settingsOpenedState = awaitItem()
|
val settingsOpenedState = awaitItem()
|
||||||
|
|
||||||
assertThat(settingsOpenedState.permissionDialog).isEqualTo(ShareLocationState.Dialog.None)
|
assertThat(settingsOpenedState.permissionDialog).isEqualTo(ShareLocationState.Dialog.None)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue