Add share live location item

This commit is contained in:
ganfra
2026-02-18 17:24:38 +01:00
parent add737b646
commit a129d1f9ca
5 changed files with 19 additions and 1 deletions

View File

@@ -39,10 +39,12 @@ dependencies {
implementation(projects.services.analytics.api)
implementation(libs.accompanist.permission)
implementation(projects.libraries.uiStrings)
implementation(projects.libraries.featureflag.api)
testCommonDependencies(libs, true)
testImplementation(projects.libraries.matrix.test)
testImplementation(projects.libraries.testtags)
testImplementation(projects.services.analytics.test)
testImplementation(projects.features.messages.test)
testImplementation(projects.libraries.featureflag.test)
}

View File

@@ -10,6 +10,7 @@ package io.element.android.features.location.impl.share
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
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.core.extensions.flatMap
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.JoinedRoom
import io.element.android.libraries.matrix.api.room.location.AssetType
@@ -46,6 +49,7 @@ class ShareLocationPresenter(
private val messageComposerContext: MessageComposerContext,
private val locationActions: LocationActions,
private val buildMeta: BuildMeta,
private val featureFlagService: FeatureFlagService,
) : Presenter<ShareLocationState> {
@AssistedFactory
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 } }
var permissionDialog: ShareLocationState.Dialog by remember {
mutableStateOf(ShareLocationState.Dialog.None)
@@ -104,6 +111,7 @@ class ShareLocationPresenter(
permissionDialog = permissionDialog,
mode = mode,
hasLocationPermission = permissionsState.isAnyGranted,
canShareLiveLocation = isLiveLocationSharingEnabled,
appName = appName,
eventSink = ::handleEvent,
)

View File

@@ -13,7 +13,8 @@ data class ShareLocationState(
val mode: Mode,
val hasLocationPermission: Boolean,
val appName: String,
val eventSink: (ShareLocationEvents) -> Unit,
val canShareLiveLocation: Boolean,
val eventSink: (ShareLocationEvent) -> Unit,
) {
sealed interface Mode {
data object SenderLocation : Mode

View File

@@ -47,11 +47,13 @@ private fun aShareLocationState(
permissionDialog: ShareLocationState.Dialog,
mode: ShareLocationState.Mode,
hasLocationPermission: Boolean,
canShareLiveLocation: Boolean = false,
): ShareLocationState {
return ShareLocationState(
permissionDialog = permissionDialog,
mode = mode,
hasLocationPermission = hasLocationPermission,
canShareLiveLocation = canShareLiveLocation,
appName = APP_NAME,
eventSink = {}
)

View File

@@ -141,6 +141,11 @@ fun ShareLocationView(
)
navigateUp()
}
if(state.canShareLiveLocation){
LiveLocationItem {
state.eventSink(ShareLocationEvent.SelectLiveLocationDuration)
}
}
Spacer(modifier = Modifier.height(16.dp + navBarPadding))
},
modifier = modifier,