Skip to content

Commit b11fcec

Browse files
authored
Merge pull request #6767 from element-hq/feature/bma/llsAndThread
Prevent user from starting LLS in thread
2 parents 9326c30 + 7f54507 commit b11fcec

2 files changed

Lines changed: 49 additions & 2 deletions

File tree

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ class ShareLocationPresenter(
171171
dialogState = dialogState,
172172
trackUserLocation = trackUserPosition,
173173
hasLocationPermission = permissionsState.isAnyGranted,
174-
canShareLiveLocation = isLiveLocationSharingEnabled,
174+
canShareLiveLocation = isLiveLocationSharingEnabled && timelineMode.canShareLiveLocation(),
175175
appName = appName,
176176
startLiveLocationAction = startLiveLocationAction.value,
177177
eventSink = ::handleEvent,
@@ -210,4 +210,9 @@ class ShareLocationPresenter(
210210
}
211211
}
212212

213+
private fun Timeline.Mode.canShareLiveLocation() = when (this) {
214+
is Timeline.Mode.Thread -> false
215+
else -> true
216+
}
217+
213218
private fun generateBody(uri: String): String = "Location was shared at $uri"

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

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ 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
3233
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
3334
import io.element.android.libraries.matrix.api.core.EventId
3435
import io.element.android.libraries.matrix.api.core.RoomId
@@ -40,6 +41,7 @@ import io.element.android.libraries.matrix.api.room.location.AssetType
4041
import io.element.android.libraries.matrix.api.timeline.Timeline
4142
import io.element.android.libraries.matrix.test.A_ROOM_ID
4243
import io.element.android.libraries.matrix.test.A_SESSION_ID
44+
import io.element.android.libraries.matrix.test.A_THREAD_ID
4345
import io.element.android.libraries.matrix.test.A_USER_ID
4446
import io.element.android.libraries.matrix.test.FakeMatrixClient
4547
import io.element.android.libraries.matrix.test.core.aBuildMeta
@@ -82,13 +84,14 @@ class ShareLocationPresenterTest {
8284

8385
private fun TestScope.createShareLocationPresenter(
8486
joinedRoom: JoinedRoom = FakeJoinedRoom(),
87+
timelineMode: Timeline.Mode = Timeline.Mode.Live,
8588
locationActions: FakeLocationActions = fakeLocationActions,
8689
liveLocationShareManager: FakeActiveLiveLocationShareManager = FakeActiveLiveLocationShareManager(),
8790
liveLocationStore: LiveLocationStore = createLiveLocationStore(sessionId = joinedRoom.sessionId),
8891
): ShareLocationPresenter = ShareLocationPresenter(
8992
permissionsPresenterFactory = { fakePermissionsPresenter },
9093
room = joinedRoom,
91-
timelineMode = Timeline.Mode.Live,
94+
timelineMode = timelineMode,
9295
analyticsService = fakeAnalyticsService,
9396
messageComposerContext = fakeMessageComposerContext,
9497
locationActions = locationActions,
@@ -653,6 +656,45 @@ class ShareLocationPresenterTest {
653656
cancelAndIgnoreRemainingEvents()
654657
}
655658
}
659+
660+
@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)
676+
val shareLocationPresenter = createShareLocationPresenter(
677+
timelineMode = Timeline.Mode.Live,
678+
)
679+
shareLocationPresenter.test {
680+
skipItems(1)
681+
val state = awaitItem()
682+
assertThat(state.canShareLiveLocation).isTrue()
683+
}
684+
}
685+
686+
@Test
687+
fun `canShareLiveLocation is false in thread timeline`() = runTest {
688+
fakeFeatureFlagService.setFeatureEnabled(FeatureFlags.LiveLocationSharing, true)
689+
val shareLocationPresenter = createShareLocationPresenter(
690+
timelineMode = Timeline.Mode.Thread(A_THREAD_ID),
691+
)
692+
shareLocationPresenter.test {
693+
skipItems(1)
694+
val state = awaitItem()
695+
assertThat(state.canShareLiveLocation).isFalse()
696+
}
697+
}
656698
}
657699

658700
private fun createLiveLocationStore(

0 commit comments

Comments
 (0)