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 6c0d2120bc6..a1e45cfea22 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 @@ -40,8 +40,6 @@ import io.element.android.libraries.architecture.runUpdatingState import io.element.android.libraries.core.extensions.flatMap import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.dateformatter.api.DurationFormatter -import io.element.android.libraries.featureflag.api.FeatureFlagService -import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.room.CreateTimelineParams import io.element.android.libraries.matrix.api.room.JoinedRoom @@ -66,7 +64,6 @@ class ShareLocationPresenter( private val messageComposerContext: MessageComposerContext, private val locationActions: LocationActions, private val buildMeta: BuildMeta, - private val featureFlagService: FeatureFlagService, private val client: MatrixClient, private val durationFormatter: DurationFormatter, private val liveLocationShareManager: ActiveLiveLocationShareManager, @@ -83,9 +80,6 @@ class ShareLocationPresenter( override fun present(): ShareLocationState { val permissionsState: PermissionsState = permissionsPresenter.present() var trackUserPosition: Boolean by remember { mutableStateOf(permissionsState.isAnyGranted && locationActions.isLocationEnabled()) } - val isLiveLocationSharingEnabled by remember { - featureFlagService.isFeatureEnabledFlow(FeatureFlags.LiveLocationSharing) - }.collectAsState(false) val appName by remember { derivedStateOf { buildMeta.applicationName } } var dialogState: ShareLocationState.Dialog by remember { mutableStateOf(ShareLocationState.Dialog.None) @@ -171,7 +165,7 @@ class ShareLocationPresenter( dialogState = dialogState, trackUserLocation = trackUserPosition, hasLocationPermission = permissionsState.isAnyGranted, - canShareLiveLocation = isLiveLocationSharingEnabled && timelineMode.canShareLiveLocation(), + canShareLiveLocation = timelineMode.canShareLiveLocation(), appName = appName, startLiveLocationAction = startLiveLocationAction.value, eventSink = ::handleEvent, diff --git a/features/location/impl/src/test/kotlin/io/element/android/features/location/impl/share/DefaultShareLocationEntryPointTest.kt b/features/location/impl/src/test/kotlin/io/element/android/features/location/impl/share/DefaultShareLocationEntryPointTest.kt index 9b1a14fb516..6f20e296d92 100644 --- a/features/location/impl/src/test/kotlin/io/element/android/features/location/impl/share/DefaultShareLocationEntryPointTest.kt +++ b/features/location/impl/src/test/kotlin/io/element/android/features/location/impl/share/DefaultShareLocationEntryPointTest.kt @@ -17,7 +17,6 @@ import io.element.android.features.location.impl.live.LiveLocationStore import io.element.android.features.location.test.FakeActiveLiveLocationShareManager import io.element.android.features.messages.test.FakeMessageComposerContext import io.element.android.libraries.dateformatter.test.FakeDurationFormatter -import io.element.android.libraries.featureflag.test.FakeFeatureFlagService import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.test.FakeMatrixClient import io.element.android.libraries.matrix.test.core.aBuildMeta @@ -50,7 +49,6 @@ class DefaultShareLocationEntryPointTest { messageComposerContext = FakeMessageComposerContext(), locationActions = FakeLocationActions(), buildMeta = aBuildMeta(), - featureFlagService = FakeFeatureFlagService(), client = FakeMatrixClient(), durationFormatter = FakeDurationFormatter(), liveLocationShareManager = FakeActiveLiveLocationShareManager(), diff --git a/features/location/impl/src/test/kotlin/io/element/android/features/location/impl/share/ShareLocationPresenterTest.kt b/features/location/impl/src/test/kotlin/io/element/android/features/location/impl/share/ShareLocationPresenterTest.kt index dff5f05ee92..1bc4fce586c 100644 --- a/features/location/impl/src/test/kotlin/io/element/android/features/location/impl/share/ShareLocationPresenterTest.kt +++ b/features/location/impl/src/test/kotlin/io/element/android/features/location/impl/share/ShareLocationPresenterTest.kt @@ -29,8 +29,6 @@ import io.element.android.features.location.impl.live.LiveLocationStore import io.element.android.features.location.test.FakeActiveLiveLocationShareManager import io.element.android.features.messages.test.FakeMessageComposerContext import io.element.android.libraries.dateformatter.test.FakeDurationFormatter -import io.element.android.libraries.featureflag.api.FeatureFlags -import io.element.android.libraries.featureflag.test.FakeFeatureFlagService import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId @@ -77,7 +75,6 @@ class ShareLocationPresenterTest { private val fakeMessageComposerContext = FakeMessageComposerContext() private val fakeLocationActions = FakeLocationActions() private val fakeBuildMeta = aBuildMeta(applicationName = "app name") - private val fakeFeatureFlagService = FakeFeatureFlagService() private val fakeMatrixClient = FakeMatrixClient(sessionId = A_USER_ID) private val durationFormatter = FakeDurationFormatter() @@ -96,7 +93,6 @@ class ShareLocationPresenterTest { messageComposerContext = fakeMessageComposerContext, locationActions = locationActions, buildMeta = fakeBuildMeta, - featureFlagService = fakeFeatureFlagService, client = fakeMatrixClient, durationFormatter = durationFormatter, liveLocationShareManager = liveLocationShareManager, @@ -658,21 +654,7 @@ class ShareLocationPresenterTest { } @Test - fun `canShareLiveLocation is false when the feature is disabled`() = runTest { - fakeFeatureFlagService.setFeatureEnabled(FeatureFlags.LiveLocationSharing, false) - val shareLocationPresenter = createShareLocationPresenter( - timelineMode = Timeline.Mode.Live, - ) - shareLocationPresenter.test { - skipItems(1) - val state = awaitItem() - assertThat(state.canShareLiveLocation).isFalse() - } - } - - @Test - fun `canShareLiveLocation is true when the feature is enabled`() = runTest { - fakeFeatureFlagService.setFeatureEnabled(FeatureFlags.LiveLocationSharing, true) + fun `canShareLiveLocation is true in live timeline`() = runTest { val shareLocationPresenter = createShareLocationPresenter( timelineMode = Timeline.Mode.Live, ) @@ -685,7 +667,6 @@ class ShareLocationPresenterTest { @Test fun `canShareLiveLocation is false in thread timeline`() = runTest { - fakeFeatureFlagService.setFeatureEnabled(FeatureFlags.LiveLocationSharing, true) val shareLocationPresenter = createShareLocationPresenter( timelineMode = Timeline.Mode.Thread(A_THREAD_ID), ) diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsPresenter.kt index 3d1fb3b0c79..45c136ab626 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsPresenter.kt @@ -25,11 +25,8 @@ import io.element.android.libraries.preferences.api.store.AppPreferencesStore import io.element.android.libraries.preferences.api.store.SessionPreferencesStore import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.emptyFlow -import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.launch @Inject @@ -56,17 +53,8 @@ class AdvancedSettingsPresenter( appPreferencesStore.getThemeFlow().mapToTheme(isBlackThemeAllowed) }.collectAsState(initial = Theme.System) - @OptIn(ExperimentalCoroutinesApi::class) val liveLocationMinimumDistanceUpdate by produceState(null) { - featureFlagService.isFeatureEnabledFlow(FeatureFlags.LiveLocationSharing) - .flatMapLatest { isEnabled -> - if (isEnabled) { - appPreferencesStore.getLiveLocationMinimumDistanceInMetersUpdateFlow() - } else { - emptyFlow() - } - } - .collect { value = it } + appPreferencesStore.getLiveLocationMinimumDistanceInMetersUpdateFlow().collect { value = it } } val mediaPreviewConfigState = mediaPreviewConfigStateStore.state() diff --git a/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsPresenterTest.kt b/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsPresenterTest.kt index 27d91bd8dec..25d7c017781 100644 --- a/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsPresenterTest.kt +++ b/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsPresenterTest.kt @@ -210,35 +210,12 @@ class AdvancedSettingsPresenterTest { } } - @Test - fun `present - live location minimum distance is null when feature is disabled`() = runTest { - val appPreferencesStore = InMemoryAppPreferencesStore( - liveLocationMinimumDistanceUpdate = 50, - ) - val featureFlagService = FakeFeatureFlagService().apply { - setFeatureEnabled(FeatureFlags.LiveLocationSharing, false) - } - val presenter = createAdvancedSettingsPresenter(appPreferencesStore = appPreferencesStore, featureFlagService = featureFlagService) - - moleculeFlow(RecompositionMode.Immediate) { - presenter.present() - }.test { - skipItems(1) - with(awaitItem()) { - assertThat(liveLocationMinimumDistanceUpdate).isNull() - } - } - } - @Test fun `present - exposes live location minimum distance from app preferences`() = runTest { val appPreferencesStore = InMemoryAppPreferencesStore( liveLocationMinimumDistanceUpdate = 50, ) - val featureFlagService = FakeFeatureFlagService().apply { - setFeatureEnabled(FeatureFlags.LiveLocationSharing, true) - } - val presenter = createAdvancedSettingsPresenter(appPreferencesStore = appPreferencesStore, featureFlagService = featureFlagService) + val presenter = createAdvancedSettingsPresenter(appPreferencesStore = appPreferencesStore) moleculeFlow(RecompositionMode.Immediate) { presenter.present() @@ -256,10 +233,7 @@ class AdvancedSettingsPresenterTest { val appPreferencesStore = InMemoryAppPreferencesStore( liveLocationMinimumDistanceUpdate = 10, ) - val featureFlagService = FakeFeatureFlagService().apply { - setFeatureEnabled(FeatureFlags.LiveLocationSharing, true) - } - val presenter = createAdvancedSettingsPresenter(appPreferencesStore = appPreferencesStore, featureFlagService = featureFlagService) + val presenter = createAdvancedSettingsPresenter(appPreferencesStore = appPreferencesStore) moleculeFlow(RecompositionMode.Immediate) { presenter.present() diff --git a/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt b/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt index ed8916c8b43..097df99800f 100644 --- a/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt +++ b/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt @@ -100,13 +100,6 @@ enum class FeatureFlags( defaultValue = { false }, isFinished = false, ), - LiveLocationSharing( - key = "feature.liveLocationSharing", - title = "Live location sharing", - description = "Allow sharing live location in rooms.", - defaultValue = { false }, - isFinished = false, - ), ValidateNetworkWhenSchedulingNotificationFetching( key = "feature.validate_network_when_scheduling_notification_fetching", title = "Validate internet connectivity when scheduling notification fetching",