Add share live location item
This commit is contained in:
parent
add737b646
commit
a129d1f9ca
5 changed files with 19 additions and 1 deletions
|
|
@ -39,10 +39,12 @@ dependencies {
|
||||||
implementation(projects.services.analytics.api)
|
implementation(projects.services.analytics.api)
|
||||||
implementation(libs.accompanist.permission)
|
implementation(libs.accompanist.permission)
|
||||||
implementation(projects.libraries.uiStrings)
|
implementation(projects.libraries.uiStrings)
|
||||||
|
implementation(projects.libraries.featureflag.api)
|
||||||
|
|
||||||
testCommonDependencies(libs, true)
|
testCommonDependencies(libs, true)
|
||||||
testImplementation(projects.libraries.matrix.test)
|
testImplementation(projects.libraries.matrix.test)
|
||||||
testImplementation(projects.libraries.testtags)
|
testImplementation(projects.libraries.testtags)
|
||||||
testImplementation(projects.services.analytics.test)
|
testImplementation(projects.services.analytics.test)
|
||||||
testImplementation(projects.features.messages.test)
|
testImplementation(projects.features.messages.test)
|
||||||
|
testImplementation(projects.libraries.featureflag.test)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ package io.element.android.features.location.impl.share
|
||||||
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
|
import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.runtime.derivedStateOf
|
import androidx.compose.runtime.derivedStateOf
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
|
@ -29,6 +30,8 @@ import io.element.android.features.messages.api.MessageComposerContext
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
import io.element.android.libraries.core.extensions.flatMap
|
import io.element.android.libraries.core.extensions.flatMap
|
||||||
import io.element.android.libraries.core.meta.BuildMeta
|
import io.element.android.libraries.core.meta.BuildMeta
|
||||||
|
import io.element.android.libraries.featureflag.api.FeatureFlagService
|
||||||
|
import io.element.android.libraries.featureflag.api.FeatureFlags
|
||||||
import io.element.android.libraries.matrix.api.room.CreateTimelineParams
|
import io.element.android.libraries.matrix.api.room.CreateTimelineParams
|
||||||
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
||||||
import io.element.android.libraries.matrix.api.room.location.AssetType
|
import io.element.android.libraries.matrix.api.room.location.AssetType
|
||||||
|
|
@ -46,6 +49,7 @@ class ShareLocationPresenter(
|
||||||
private val messageComposerContext: MessageComposerContext,
|
private val messageComposerContext: MessageComposerContext,
|
||||||
private val locationActions: LocationActions,
|
private val locationActions: LocationActions,
|
||||||
private val buildMeta: BuildMeta,
|
private val buildMeta: BuildMeta,
|
||||||
|
private val featureFlagService: FeatureFlagService,
|
||||||
) : Presenter<ShareLocationState> {
|
) : Presenter<ShareLocationState> {
|
||||||
@AssistedFactory
|
@AssistedFactory
|
||||||
fun interface Factory {
|
fun interface Factory {
|
||||||
|
|
@ -66,6 +70,9 @@ class ShareLocationPresenter(
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
val isLiveLocationSharingEnabled by remember {
|
||||||
|
featureFlagService.isFeatureEnabledFlow(FeatureFlags.LiveLocationSharing)
|
||||||
|
}.collectAsState(false)
|
||||||
val appName by remember { derivedStateOf { buildMeta.applicationName } }
|
val appName by remember { derivedStateOf { buildMeta.applicationName } }
|
||||||
var permissionDialog: ShareLocationState.Dialog by remember {
|
var permissionDialog: ShareLocationState.Dialog by remember {
|
||||||
mutableStateOf(ShareLocationState.Dialog.None)
|
mutableStateOf(ShareLocationState.Dialog.None)
|
||||||
|
|
@ -104,6 +111,7 @@ class ShareLocationPresenter(
|
||||||
permissionDialog = permissionDialog,
|
permissionDialog = permissionDialog,
|
||||||
mode = mode,
|
mode = mode,
|
||||||
hasLocationPermission = permissionsState.isAnyGranted,
|
hasLocationPermission = permissionsState.isAnyGranted,
|
||||||
|
canShareLiveLocation = isLiveLocationSharingEnabled,
|
||||||
appName = appName,
|
appName = appName,
|
||||||
eventSink = ::handleEvent,
|
eventSink = ::handleEvent,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,8 @@ data class ShareLocationState(
|
||||||
val mode: Mode,
|
val mode: Mode,
|
||||||
val hasLocationPermission: Boolean,
|
val hasLocationPermission: Boolean,
|
||||||
val appName: String,
|
val appName: String,
|
||||||
val eventSink: (ShareLocationEvents) -> Unit,
|
val canShareLiveLocation: Boolean,
|
||||||
|
val eventSink: (ShareLocationEvent) -> Unit,
|
||||||
) {
|
) {
|
||||||
sealed interface Mode {
|
sealed interface Mode {
|
||||||
data object SenderLocation : Mode
|
data object SenderLocation : Mode
|
||||||
|
|
|
||||||
|
|
@ -47,11 +47,13 @@ private fun aShareLocationState(
|
||||||
permissionDialog: ShareLocationState.Dialog,
|
permissionDialog: ShareLocationState.Dialog,
|
||||||
mode: ShareLocationState.Mode,
|
mode: ShareLocationState.Mode,
|
||||||
hasLocationPermission: Boolean,
|
hasLocationPermission: Boolean,
|
||||||
|
canShareLiveLocation: Boolean = false,
|
||||||
): ShareLocationState {
|
): ShareLocationState {
|
||||||
return ShareLocationState(
|
return ShareLocationState(
|
||||||
permissionDialog = permissionDialog,
|
permissionDialog = permissionDialog,
|
||||||
mode = mode,
|
mode = mode,
|
||||||
hasLocationPermission = hasLocationPermission,
|
hasLocationPermission = hasLocationPermission,
|
||||||
|
canShareLiveLocation = canShareLiveLocation,
|
||||||
appName = APP_NAME,
|
appName = APP_NAME,
|
||||||
eventSink = {}
|
eventSink = {}
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -141,6 +141,11 @@ fun ShareLocationView(
|
||||||
)
|
)
|
||||||
navigateUp()
|
navigateUp()
|
||||||
}
|
}
|
||||||
|
if(state.canShareLiveLocation){
|
||||||
|
LiveLocationItem {
|
||||||
|
state.eventSink(ShareLocationEvent.SelectLiveLocationDuration)
|
||||||
|
}
|
||||||
|
}
|
||||||
Spacer(modifier = Modifier.height(16.dp + navBarPadding))
|
Spacer(modifier = Modifier.height(16.dp + navBarPadding))
|
||||||
},
|
},
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue