Skip to content

Commit 6cc2e59

Browse files
authored
Merge pull request #6811 from element-hq/feature/live_location_remove_feature_flag
Remove LiveLocationSharing feature flag
2 parents e3d1a81 + 828337b commit 6cc2e59

6 files changed

Lines changed: 5 additions & 77 deletions

File tree

features/location/impl/src/main/kotlin/io/element/android/features/location/impl/share/ShareLocationPresenter.kt

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@ import io.element.android.libraries.architecture.runUpdatingState
4040
import io.element.android.libraries.core.extensions.flatMap
4141
import io.element.android.libraries.core.meta.BuildMeta
4242
import io.element.android.libraries.dateformatter.api.DurationFormatter
43-
import io.element.android.libraries.featureflag.api.FeatureFlagService
44-
import io.element.android.libraries.featureflag.api.FeatureFlags
4543
import io.element.android.libraries.matrix.api.MatrixClient
4644
import io.element.android.libraries.matrix.api.room.CreateTimelineParams
4745
import io.element.android.libraries.matrix.api.room.JoinedRoom
@@ -66,7 +64,6 @@ class ShareLocationPresenter(
6664
private val messageComposerContext: MessageComposerContext,
6765
private val locationActions: LocationActions,
6866
private val buildMeta: BuildMeta,
69-
private val featureFlagService: FeatureFlagService,
7067
private val client: MatrixClient,
7168
private val durationFormatter: DurationFormatter,
7269
private val liveLocationShareManager: ActiveLiveLocationShareManager,
@@ -83,9 +80,6 @@ class ShareLocationPresenter(
8380
override fun present(): ShareLocationState {
8481
val permissionsState: PermissionsState = permissionsPresenter.present()
8582
var trackUserPosition: Boolean by remember { mutableStateOf(permissionsState.isAnyGranted && locationActions.isLocationEnabled()) }
86-
val isLiveLocationSharingEnabled by remember {
87-
featureFlagService.isFeatureEnabledFlow(FeatureFlags.LiveLocationSharing)
88-
}.collectAsState(false)
8983
val appName by remember { derivedStateOf { buildMeta.applicationName } }
9084
var dialogState: ShareLocationState.Dialog by remember {
9185
mutableStateOf(ShareLocationState.Dialog.None)
@@ -171,7 +165,7 @@ class ShareLocationPresenter(
171165
dialogState = dialogState,
172166
trackUserLocation = trackUserPosition,
173167
hasLocationPermission = permissionsState.isAnyGranted,
174-
canShareLiveLocation = isLiveLocationSharingEnabled && timelineMode.canShareLiveLocation(),
168+
canShareLiveLocation = timelineMode.canShareLiveLocation(),
175169
appName = appName,
176170
startLiveLocationAction = startLiveLocationAction.value,
177171
eventSink = ::handleEvent,

features/location/impl/src/test/kotlin/io/element/android/features/location/impl/share/DefaultShareLocationEntryPointTest.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import io.element.android.features.location.impl.live.LiveLocationStore
1717
import io.element.android.features.location.test.FakeActiveLiveLocationShareManager
1818
import io.element.android.features.messages.test.FakeMessageComposerContext
1919
import io.element.android.libraries.dateformatter.test.FakeDurationFormatter
20-
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
2120
import io.element.android.libraries.matrix.api.timeline.Timeline
2221
import io.element.android.libraries.matrix.test.FakeMatrixClient
2322
import io.element.android.libraries.matrix.test.core.aBuildMeta
@@ -50,7 +49,6 @@ class DefaultShareLocationEntryPointTest {
5049
messageComposerContext = FakeMessageComposerContext(),
5150
locationActions = FakeLocationActions(),
5251
buildMeta = aBuildMeta(),
53-
featureFlagService = FakeFeatureFlagService(),
5452
client = FakeMatrixClient(),
5553
durationFormatter = FakeDurationFormatter(),
5654
liveLocationShareManager = FakeActiveLiveLocationShareManager(),

features/location/impl/src/test/kotlin/io/element/android/features/location/impl/share/ShareLocationPresenterTest.kt

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ import io.element.android.features.location.impl.live.LiveLocationStore
2929
import io.element.android.features.location.test.FakeActiveLiveLocationShareManager
3030
import io.element.android.features.messages.test.FakeMessageComposerContext
3131
import io.element.android.libraries.dateformatter.test.FakeDurationFormatter
32-
import io.element.android.libraries.featureflag.api.FeatureFlags
33-
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
3432
import io.element.android.libraries.matrix.api.core.EventId
3533
import io.element.android.libraries.matrix.api.core.RoomId
3634
import io.element.android.libraries.matrix.api.core.SessionId
@@ -77,7 +75,6 @@ class ShareLocationPresenterTest {
7775
private val fakeMessageComposerContext = FakeMessageComposerContext()
7876
private val fakeLocationActions = FakeLocationActions()
7977
private val fakeBuildMeta = aBuildMeta(applicationName = "app name")
80-
private val fakeFeatureFlagService = FakeFeatureFlagService()
8178
private val fakeMatrixClient = FakeMatrixClient(sessionId = A_USER_ID)
8279

8380
private val durationFormatter = FakeDurationFormatter()
@@ -96,7 +93,6 @@ class ShareLocationPresenterTest {
9693
messageComposerContext = fakeMessageComposerContext,
9794
locationActions = locationActions,
9895
buildMeta = fakeBuildMeta,
99-
featureFlagService = fakeFeatureFlagService,
10096
client = fakeMatrixClient,
10197
durationFormatter = durationFormatter,
10298
liveLocationShareManager = liveLocationShareManager,
@@ -658,21 +654,7 @@ class ShareLocationPresenterTest {
658654
}
659655

660656
@Test
661-
fun `canShareLiveLocation is false when the feature is disabled`() = runTest {
662-
fakeFeatureFlagService.setFeatureEnabled(FeatureFlags.LiveLocationSharing, false)
663-
val shareLocationPresenter = createShareLocationPresenter(
664-
timelineMode = Timeline.Mode.Live,
665-
)
666-
shareLocationPresenter.test {
667-
skipItems(1)
668-
val state = awaitItem()
669-
assertThat(state.canShareLiveLocation).isFalse()
670-
}
671-
}
672-
673-
@Test
674-
fun `canShareLiveLocation is true when the feature is enabled`() = runTest {
675-
fakeFeatureFlagService.setFeatureEnabled(FeatureFlags.LiveLocationSharing, true)
657+
fun `canShareLiveLocation is true in live timeline`() = runTest {
676658
val shareLocationPresenter = createShareLocationPresenter(
677659
timelineMode = Timeline.Mode.Live,
678660
)
@@ -685,7 +667,6 @@ class ShareLocationPresenterTest {
685667

686668
@Test
687669
fun `canShareLiveLocation is false in thread timeline`() = runTest {
688-
fakeFeatureFlagService.setFeatureEnabled(FeatureFlags.LiveLocationSharing, true)
689670
val shareLocationPresenter = createShareLocationPresenter(
690671
timelineMode = Timeline.Mode.Thread(A_THREAD_ID),
691672
)

features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsPresenter.kt

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,8 @@ import io.element.android.libraries.preferences.api.store.AppPreferencesStore
2525
import io.element.android.libraries.preferences.api.store.SessionPreferencesStore
2626
import kotlinx.collections.immutable.toImmutableList
2727
import kotlinx.coroutines.CoroutineScope
28-
import kotlinx.coroutines.ExperimentalCoroutinesApi
2928
import kotlinx.coroutines.flow.collect
3029
import kotlinx.coroutines.flow.combine
31-
import kotlinx.coroutines.flow.emptyFlow
32-
import kotlinx.coroutines.flow.flatMapLatest
3330
import kotlinx.coroutines.launch
3431

3532
@Inject
@@ -56,17 +53,8 @@ class AdvancedSettingsPresenter(
5653
appPreferencesStore.getThemeFlow().mapToTheme(isBlackThemeAllowed)
5754
}.collectAsState(initial = Theme.System)
5855

59-
@OptIn(ExperimentalCoroutinesApi::class)
6056
val liveLocationMinimumDistanceUpdate by produceState<Int?>(null) {
61-
featureFlagService.isFeatureEnabledFlow(FeatureFlags.LiveLocationSharing)
62-
.flatMapLatest { isEnabled ->
63-
if (isEnabled) {
64-
appPreferencesStore.getLiveLocationMinimumDistanceInMetersUpdateFlow()
65-
} else {
66-
emptyFlow()
67-
}
68-
}
69-
.collect { value = it }
57+
appPreferencesStore.getLiveLocationMinimumDistanceInMetersUpdateFlow().collect { value = it }
7058
}
7159

7260
val mediaPreviewConfigState = mediaPreviewConfigStateStore.state()

features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsPresenterTest.kt

Lines changed: 2 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -210,35 +210,12 @@ class AdvancedSettingsPresenterTest {
210210
}
211211
}
212212

213-
@Test
214-
fun `present - live location minimum distance is null when feature is disabled`() = runTest {
215-
val appPreferencesStore = InMemoryAppPreferencesStore(
216-
liveLocationMinimumDistanceUpdate = 50,
217-
)
218-
val featureFlagService = FakeFeatureFlagService().apply {
219-
setFeatureEnabled(FeatureFlags.LiveLocationSharing, false)
220-
}
221-
val presenter = createAdvancedSettingsPresenter(appPreferencesStore = appPreferencesStore, featureFlagService = featureFlagService)
222-
223-
moleculeFlow(RecompositionMode.Immediate) {
224-
presenter.present()
225-
}.test {
226-
skipItems(1)
227-
with(awaitItem()) {
228-
assertThat(liveLocationMinimumDistanceUpdate).isNull()
229-
}
230-
}
231-
}
232-
233213
@Test
234214
fun `present - exposes live location minimum distance from app preferences`() = runTest {
235215
val appPreferencesStore = InMemoryAppPreferencesStore(
236216
liveLocationMinimumDistanceUpdate = 50,
237217
)
238-
val featureFlagService = FakeFeatureFlagService().apply {
239-
setFeatureEnabled(FeatureFlags.LiveLocationSharing, true)
240-
}
241-
val presenter = createAdvancedSettingsPresenter(appPreferencesStore = appPreferencesStore, featureFlagService = featureFlagService)
218+
val presenter = createAdvancedSettingsPresenter(appPreferencesStore = appPreferencesStore)
242219

243220
moleculeFlow(RecompositionMode.Immediate) {
244221
presenter.present()
@@ -256,10 +233,7 @@ class AdvancedSettingsPresenterTest {
256233
val appPreferencesStore = InMemoryAppPreferencesStore(
257234
liveLocationMinimumDistanceUpdate = 10,
258235
)
259-
val featureFlagService = FakeFeatureFlagService().apply {
260-
setFeatureEnabled(FeatureFlags.LiveLocationSharing, true)
261-
}
262-
val presenter = createAdvancedSettingsPresenter(appPreferencesStore = appPreferencesStore, featureFlagService = featureFlagService)
236+
val presenter = createAdvancedSettingsPresenter(appPreferencesStore = appPreferencesStore)
263237

264238
moleculeFlow(RecompositionMode.Immediate) {
265239
presenter.present()

libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,6 @@ enum class FeatureFlags(
100100
defaultValue = { false },
101101
isFinished = false,
102102
),
103-
LiveLocationSharing(
104-
key = "feature.liveLocationSharing",
105-
title = "Live location sharing",
106-
description = "Allow sharing live location in rooms.",
107-
defaultValue = { false },
108-
isFinished = false,
109-
),
110103
ValidateNetworkWhenSchedulingNotificationFetching(
111104
key = "feature.validate_network_when_scheduling_notification_fetching",
112105
title = "Validate internet connectivity when scheduling notification fetching",

0 commit comments

Comments
 (0)