From a129d1f9ca2258258c6ef5b967a7c97ff3c55262 Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 18 Feb 2026 17:24:38 +0100 Subject: [PATCH] Add share live location item --- features/location/impl/build.gradle.kts | 2 ++ .../location/impl/share/ShareLocationPresenter.kt | 8 ++++++++ .../features/location/impl/share/ShareLocationState.kt | 3 ++- .../location/impl/share/ShareLocationStateProvider.kt | 2 ++ .../features/location/impl/share/ShareLocationView.kt | 5 +++++ 5 files changed, 19 insertions(+), 1 deletion(-) diff --git a/features/location/impl/build.gradle.kts b/features/location/impl/build.gradle.kts index bd41c7ecdf..3b805d87ca 100644 --- a/features/location/impl/build.gradle.kts +++ b/features/location/impl/build.gradle.kts @@ -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) } diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/share/ShareLocationPresenter.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/share/ShareLocationPresenter.kt index 7f9f9a9874..f92d8af92d 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/share/ShareLocationPresenter.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/share/ShareLocationPresenter.kt @@ -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 { @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, ) diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/share/ShareLocationState.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/share/ShareLocationState.kt index 14975f1646..69971b342e 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/share/ShareLocationState.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/share/ShareLocationState.kt @@ -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 diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/share/ShareLocationStateProvider.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/share/ShareLocationStateProvider.kt index df49881975..b22e8e6606 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/share/ShareLocationStateProvider.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/share/ShareLocationStateProvider.kt @@ -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 = {} ) diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/share/ShareLocationView.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/share/ShareLocationView.kt index 6e83406367..27ade66c88 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/share/ShareLocationView.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/share/ShareLocationView.kt @@ -141,6 +141,11 @@ fun ShareLocationView( ) navigateUp() } + if(state.canShareLiveLocation){ + LiveLocationItem { + state.eventSink(ShareLocationEvent.SelectLiveLocationDuration) + } + } Spacer(modifier = Modifier.height(16.dp + navBarPadding)) }, modifier = modifier,