Merge pull request #5566 from element-hq/feature/bma/securityAndPrivacy
Enable access to security and privacy
This commit is contained in:
commit
fedbc1e70a
11 changed files with 91 additions and 36 deletions
|
|
@ -164,7 +164,7 @@ class RoomDetailsPresenter(
|
||||||
val securityAndPrivacyPermissions = room.securityAndPrivacyPermissionsAsState(syncUpdateFlow.value)
|
val securityAndPrivacyPermissions = room.securityAndPrivacyPermissionsAsState(syncUpdateFlow.value)
|
||||||
val canShowSecurityAndPrivacy by remember {
|
val canShowSecurityAndPrivacy by remember {
|
||||||
derivedStateOf {
|
derivedStateOf {
|
||||||
isKnockRequestsEnabled && roomType is RoomDetailsType.Room && securityAndPrivacyPermissions.value.hasAny
|
roomType is RoomDetailsType.Room && securityAndPrivacyPermissions.value.hasAny
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,8 @@ import io.element.android.libraries.architecture.AsyncData
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
import io.element.android.libraries.architecture.runCatchingUpdatingState
|
import io.element.android.libraries.architecture.runCatchingUpdatingState
|
||||||
import io.element.android.libraries.architecture.runUpdatingState
|
import io.element.android.libraries.architecture.runUpdatingState
|
||||||
|
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.MatrixClient
|
||||||
import io.element.android.libraries.matrix.api.core.RoomAlias
|
import io.element.android.libraries.matrix.api.core.RoomAlias
|
||||||
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
||||||
|
|
@ -45,6 +47,7 @@ class SecurityAndPrivacyPresenter(
|
||||||
@Assisted private val navigator: SecurityAndPrivacyNavigator,
|
@Assisted private val navigator: SecurityAndPrivacyNavigator,
|
||||||
private val matrixClient: MatrixClient,
|
private val matrixClient: MatrixClient,
|
||||||
private val room: JoinedRoom,
|
private val room: JoinedRoom,
|
||||||
|
private val featureFlagService: FeatureFlagService,
|
||||||
) : Presenter<SecurityAndPrivacyState> {
|
) : Presenter<SecurityAndPrivacyState> {
|
||||||
@AssistedFactory
|
@AssistedFactory
|
||||||
interface Factory {
|
interface Factory {
|
||||||
|
|
@ -55,6 +58,9 @@ class SecurityAndPrivacyPresenter(
|
||||||
override fun present(): SecurityAndPrivacyState {
|
override fun present(): SecurityAndPrivacyState {
|
||||||
val coroutineScope = rememberCoroutineScope()
|
val coroutineScope = rememberCoroutineScope()
|
||||||
|
|
||||||
|
val isKnockEnabled by remember {
|
||||||
|
featureFlagService.isFeatureEnabledFlow(FeatureFlags.Knock)
|
||||||
|
}.collectAsState(false)
|
||||||
val saveAction = remember { mutableStateOf<AsyncAction<Unit>>(AsyncAction.Uninitialized) }
|
val saveAction = remember { mutableStateOf<AsyncAction<Unit>>(AsyncAction.Uninitialized) }
|
||||||
val homeserverName = remember { matrixClient.userIdServerName() }
|
val homeserverName = remember { matrixClient.userIdServerName() }
|
||||||
val syncUpdateFlow = room.syncUpdateFlow.collectAsState()
|
val syncUpdateFlow = room.syncUpdateFlow.collectAsState()
|
||||||
|
|
@ -149,6 +155,7 @@ class SecurityAndPrivacyPresenter(
|
||||||
editedSettings = editedSettings,
|
editedSettings = editedSettings,
|
||||||
homeserverName = homeserverName,
|
homeserverName = homeserverName,
|
||||||
showEnableEncryptionConfirmation = showEnableEncryptionConfirmation,
|
showEnableEncryptionConfirmation = showEnableEncryptionConfirmation,
|
||||||
|
isKnockEnabled = isKnockEnabled,
|
||||||
saveAction = saveAction.value,
|
saveAction = saveAction.value,
|
||||||
permissions = permissions,
|
permissions = permissions,
|
||||||
eventSink = ::handleEvents
|
eventSink = ::handleEvents
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ data class SecurityAndPrivacyState(
|
||||||
val editedSettings: SecurityAndPrivacySettings,
|
val editedSettings: SecurityAndPrivacySettings,
|
||||||
val homeserverName: String,
|
val homeserverName: String,
|
||||||
val showEnableEncryptionConfirmation: Boolean,
|
val showEnableEncryptionConfirmation: Boolean,
|
||||||
|
val isKnockEnabled: Boolean,
|
||||||
val saveAction: AsyncAction<Unit>,
|
val saveAction: AsyncAction<Unit>,
|
||||||
private val permissions: SecurityAndPrivacyPermissions,
|
private val permissions: SecurityAndPrivacyPermissions,
|
||||||
val eventSink: (SecurityAndPrivacyEvents) -> Unit
|
val eventSink: (SecurityAndPrivacyEvents) -> Unit
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,8 @@ open class SecurityAndPrivacyStateProvider : PreviewParameterProvider<SecurityAn
|
||||||
aSecurityAndPrivacyState(
|
aSecurityAndPrivacyState(
|
||||||
savedSettings = aSecurityAndPrivacySettings(
|
savedSettings = aSecurityAndPrivacySettings(
|
||||||
roomAccess = SecurityAndPrivacyRoomAccess.SpaceMember
|
roomAccess = SecurityAndPrivacyRoomAccess.SpaceMember
|
||||||
)
|
),
|
||||||
|
isKnockEnabled = false,
|
||||||
),
|
),
|
||||||
aSecurityAndPrivacyState(
|
aSecurityAndPrivacyState(
|
||||||
editedSettings = aSecurityAndPrivacySettings(
|
editedSettings = aSecurityAndPrivacySettings(
|
||||||
|
|
@ -54,6 +55,12 @@ open class SecurityAndPrivacyStateProvider : PreviewParameterProvider<SecurityAn
|
||||||
aSecurityAndPrivacyState(
|
aSecurityAndPrivacyState(
|
||||||
saveAction = AsyncAction.Loading
|
saveAction = AsyncAction.Loading
|
||||||
),
|
),
|
||||||
|
aSecurityAndPrivacyState(
|
||||||
|
savedSettings = aSecurityAndPrivacySettings(
|
||||||
|
roomAccess = SecurityAndPrivacyRoomAccess.AskToJoin
|
||||||
|
),
|
||||||
|
isKnockEnabled = false,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -83,6 +90,7 @@ fun aSecurityAndPrivacyState(
|
||||||
canChangeEncryption = true,
|
canChangeEncryption = true,
|
||||||
canChangeRoomVisibility = true
|
canChangeRoomVisibility = true
|
||||||
),
|
),
|
||||||
|
isKnockEnabled: Boolean = true,
|
||||||
eventSink: (SecurityAndPrivacyEvents) -> Unit = {}
|
eventSink: (SecurityAndPrivacyEvents) -> Unit = {}
|
||||||
) = SecurityAndPrivacyState(
|
) = SecurityAndPrivacyState(
|
||||||
editedSettings = editedSettings,
|
editedSettings = editedSettings,
|
||||||
|
|
@ -90,6 +98,7 @@ fun aSecurityAndPrivacyState(
|
||||||
homeserverName = homeserverName,
|
homeserverName = homeserverName,
|
||||||
showEnableEncryptionConfirmation = showEncryptionConfirmation,
|
showEnableEncryptionConfirmation = showEncryptionConfirmation,
|
||||||
saveAction = saveAction,
|
saveAction = saveAction,
|
||||||
|
isKnockEnabled = isKnockEnabled,
|
||||||
permissions = permissions,
|
permissions = permissions,
|
||||||
eventSink = eventSink
|
eventSink = eventSink
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -81,6 +81,7 @@ fun SecurityAndPrivacyView(
|
||||||
modifier = Modifier.padding(top = 24.dp),
|
modifier = Modifier.padding(top = 24.dp),
|
||||||
edited = state.editedSettings.roomAccess,
|
edited = state.editedSettings.roomAccess,
|
||||||
saved = state.savedSettings.roomAccess,
|
saved = state.savedSettings.roomAccess,
|
||||||
|
isKnockEnabled = state.isKnockEnabled,
|
||||||
onSelectOption = { state.eventSink(SecurityAndPrivacyEvents.ChangeRoomAccess(it)) },
|
onSelectOption = { state.eventSink(SecurityAndPrivacyEvents.ChangeRoomAccess(it)) },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -176,6 +177,7 @@ private fun SecurityAndPrivacySection(
|
||||||
private fun RoomAccessSection(
|
private fun RoomAccessSection(
|
||||||
edited: SecurityAndPrivacyRoomAccess,
|
edited: SecurityAndPrivacyRoomAccess,
|
||||||
saved: SecurityAndPrivacyRoomAccess,
|
saved: SecurityAndPrivacyRoomAccess,
|
||||||
|
isKnockEnabled: Boolean,
|
||||||
onSelectOption: (SecurityAndPrivacyRoomAccess) -> Unit,
|
onSelectOption: (SecurityAndPrivacyRoomAccess) -> Unit,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
) {
|
) {
|
||||||
|
|
@ -189,12 +191,18 @@ private fun RoomAccessSection(
|
||||||
trailingContent = ListItemContent.RadioButton(selected = edited == SecurityAndPrivacyRoomAccess.InviteOnly),
|
trailingContent = ListItemContent.RadioButton(selected = edited == SecurityAndPrivacyRoomAccess.InviteOnly),
|
||||||
onClick = { onSelectOption(SecurityAndPrivacyRoomAccess.InviteOnly) },
|
onClick = { onSelectOption(SecurityAndPrivacyRoomAccess.InviteOnly) },
|
||||||
)
|
)
|
||||||
ListItem(
|
// Show Ask to join option in two cases:
|
||||||
headlineContent = { Text(text = stringResource(R.string.screen_security_and_privacy_ask_to_join_option_title)) },
|
// - the Knock FF is enabled
|
||||||
supportingContent = { Text(text = stringResource(R.string.screen_security_and_privacy_ask_to_join_option_description)) },
|
// - AskToJoin is the current saved value
|
||||||
trailingContent = ListItemContent.RadioButton(selected = edited == SecurityAndPrivacyRoomAccess.AskToJoin),
|
if (saved == SecurityAndPrivacyRoomAccess.AskToJoin || isKnockEnabled) {
|
||||||
onClick = { onSelectOption(SecurityAndPrivacyRoomAccess.AskToJoin) },
|
ListItem(
|
||||||
)
|
headlineContent = { Text(text = stringResource(R.string.screen_security_and_privacy_ask_to_join_option_title)) },
|
||||||
|
supportingContent = { Text(text = stringResource(R.string.screen_security_and_privacy_ask_to_join_option_description)) },
|
||||||
|
trailingContent = ListItemContent.RadioButton(selected = edited == SecurityAndPrivacyRoomAccess.AskToJoin),
|
||||||
|
onClick = { onSelectOption(SecurityAndPrivacyRoomAccess.AskToJoin) },
|
||||||
|
enabled = isKnockEnabled,
|
||||||
|
)
|
||||||
|
}
|
||||||
ListItem(
|
ListItem(
|
||||||
headlineContent = { Text(text = stringResource(R.string.screen_security_and_privacy_room_access_anyone_option_title)) },
|
headlineContent = { Text(text = stringResource(R.string.screen_security_and_privacy_room_access_anyone_option_title)) },
|
||||||
supportingContent = { Text(text = stringResource(R.string.screen_security_and_privacy_room_access_anyone_option_description)) },
|
supportingContent = { Text(text = stringResource(R.string.screen_security_and_privacy_room_access_anyone_option_description)) },
|
||||||
|
|
|
||||||
|
|
@ -719,10 +719,6 @@ class RoomDetailsPresenterTest {
|
||||||
val presenter = createRoomDetailsPresenter(room = room, featureFlagService = featureFlagService)
|
val presenter = createRoomDetailsPresenter(room = room, featureFlagService = featureFlagService)
|
||||||
presenter.testWithLifecycleOwner(lifecycleOwner = fakeLifecycleOwner) {
|
presenter.testWithLifecycleOwner(lifecycleOwner = fakeLifecycleOwner) {
|
||||||
skipItems(1)
|
skipItems(1)
|
||||||
with(awaitItem()) {
|
|
||||||
assertThat(canShowSecurityAndPrivacy).isFalse()
|
|
||||||
}
|
|
||||||
featureFlagService.setFeatureEnabled(FeatureFlags.Knock, true)
|
|
||||||
with(awaitItem()) {
|
with(awaitItem()) {
|
||||||
assertThat(canShowSecurityAndPrivacy).isTrue()
|
assertThat(canShowSecurityAndPrivacy).isTrue()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,9 @@ package io.element.android.features.roomdetails.impl.securityandprivacy
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.architecture.AsyncData
|
import io.element.android.libraries.architecture.AsyncData
|
||||||
|
import io.element.android.libraries.featureflag.api.FeatureFlagService
|
||||||
|
import io.element.android.libraries.featureflag.api.FeatureFlags
|
||||||
|
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
|
||||||
import io.element.android.libraries.matrix.api.room.history.RoomHistoryVisibility
|
import io.element.android.libraries.matrix.api.room.history.RoomHistoryVisibility
|
||||||
import io.element.android.libraries.matrix.api.room.join.JoinRule
|
import io.element.android.libraries.matrix.api.room.join.JoinRule
|
||||||
import io.element.android.libraries.matrix.api.roomdirectory.RoomVisibility
|
import io.element.android.libraries.matrix.api.roomdirectory.RoomVisibility
|
||||||
|
|
@ -38,6 +41,7 @@ class SecurityAndPrivacyPresenterTest {
|
||||||
assertThat(showRoomVisibilitySections).isFalse()
|
assertThat(showRoomVisibilitySections).isFalse()
|
||||||
assertThat(showHistoryVisibilitySection).isFalse()
|
assertThat(showHistoryVisibilitySection).isFalse()
|
||||||
assertThat(showEncryptionSection).isFalse()
|
assertThat(showEncryptionSection).isFalse()
|
||||||
|
assertThat(isKnockEnabled).isFalse()
|
||||||
}
|
}
|
||||||
with(awaitItem()) {
|
with(awaitItem()) {
|
||||||
assertThat(editedSettings).isEqualTo(savedSettings)
|
assertThat(editedSettings).isEqualTo(savedSettings)
|
||||||
|
|
@ -48,6 +52,7 @@ class SecurityAndPrivacyPresenterTest {
|
||||||
assertThat(showRoomVisibilitySections).isFalse()
|
assertThat(showRoomVisibilitySections).isFalse()
|
||||||
assertThat(showHistoryVisibilitySection).isTrue()
|
assertThat(showHistoryVisibilitySection).isTrue()
|
||||||
assertThat(showEncryptionSection).isTrue()
|
assertThat(showEncryptionSection).isTrue()
|
||||||
|
assertThat(isKnockEnabled).isFalse()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -56,14 +61,14 @@ class SecurityAndPrivacyPresenterTest {
|
||||||
fun `present - room info change updates saved and edited settings`() = runTest {
|
fun `present - room info change updates saved and edited settings`() = runTest {
|
||||||
val room = FakeJoinedRoom(
|
val room = FakeJoinedRoom(
|
||||||
baseRoom = FakeBaseRoom(
|
baseRoom = FakeBaseRoom(
|
||||||
canSendStateResult = { _, _ -> Result.success(true) },
|
canSendStateResult = { _, _ -> Result.success(true) },
|
||||||
initialRoomInfo = aRoomInfo(
|
initialRoomInfo = aRoomInfo(
|
||||||
joinRule = JoinRule.Public,
|
joinRule = JoinRule.Public,
|
||||||
historyVisibility = RoomHistoryVisibility.WorldReadable,
|
historyVisibility = RoomHistoryVisibility.WorldReadable,
|
||||||
canonicalAlias = A_ROOM_ALIAS,
|
canonicalAlias = A_ROOM_ALIAS,
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
|
||||||
val presenter = createSecurityAndPrivacyPresenter(room = room)
|
val presenter = createSecurityAndPrivacyPresenter(room = room)
|
||||||
presenter.test {
|
presenter.test {
|
||||||
skipItems(1)
|
skipItems(1)
|
||||||
|
|
@ -163,10 +168,10 @@ class SecurityAndPrivacyPresenterTest {
|
||||||
fun `present - room visibility loading and change`() = runTest {
|
fun `present - room visibility loading and change`() = runTest {
|
||||||
val room = FakeJoinedRoom(
|
val room = FakeJoinedRoom(
|
||||||
baseRoom = FakeBaseRoom(
|
baseRoom = FakeBaseRoom(
|
||||||
canSendStateResult = { _, _ -> Result.success(true) },
|
canSendStateResult = { _, _ -> Result.success(true) },
|
||||||
getRoomVisibilityResult = { Result.success(RoomVisibility.Private) },
|
getRoomVisibilityResult = { Result.success(RoomVisibility.Private) },
|
||||||
initialRoomInfo = aRoomInfo(historyVisibility = RoomHistoryVisibility.Shared)
|
initialRoomInfo = aRoomInfo(historyVisibility = RoomHistoryVisibility.Shared)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
val presenter = createSecurityAndPrivacyPresenter(room = room)
|
val presenter = createSecurityAndPrivacyPresenter(room = room)
|
||||||
presenter.test {
|
presenter.test {
|
||||||
|
|
@ -212,10 +217,10 @@ class SecurityAndPrivacyPresenterTest {
|
||||||
val updateRoomHistoryVisibilityLambda = lambdaRecorder<RoomHistoryVisibility, Result<Unit>> { Result.success(Unit) }
|
val updateRoomHistoryVisibilityLambda = lambdaRecorder<RoomHistoryVisibility, Result<Unit>> { Result.success(Unit) }
|
||||||
val room = FakeJoinedRoom(
|
val room = FakeJoinedRoom(
|
||||||
baseRoom = FakeBaseRoom(
|
baseRoom = FakeBaseRoom(
|
||||||
canSendStateResult = { _, _ -> Result.success(true) },
|
canSendStateResult = { _, _ -> Result.success(true) },
|
||||||
getRoomVisibilityResult = { Result.success(RoomVisibility.Private) },
|
getRoomVisibilityResult = { Result.success(RoomVisibility.Private) },
|
||||||
initialRoomInfo = aRoomInfo(joinRule = JoinRule.Invite, historyVisibility = RoomHistoryVisibility.Shared)
|
initialRoomInfo = aRoomInfo(joinRule = JoinRule.Invite, historyVisibility = RoomHistoryVisibility.Shared)
|
||||||
),
|
),
|
||||||
enableEncryptionResult = enableEncryptionLambda,
|
enableEncryptionResult = enableEncryptionLambda,
|
||||||
updateJoinRuleResult = updateJoinRuleLambda,
|
updateJoinRuleResult = updateJoinRuleLambda,
|
||||||
updateRoomVisibilityResult = updateRoomVisibilityLambda,
|
updateRoomVisibilityResult = updateRoomVisibilityLambda,
|
||||||
|
|
@ -279,10 +284,10 @@ class SecurityAndPrivacyPresenterTest {
|
||||||
val updateRoomHistoryVisibilityLambda = lambdaRecorder<RoomHistoryVisibility, Result<Unit>> { Result.success(Unit) }
|
val updateRoomHistoryVisibilityLambda = lambdaRecorder<RoomHistoryVisibility, Result<Unit>> { Result.success(Unit) }
|
||||||
val room = FakeJoinedRoom(
|
val room = FakeJoinedRoom(
|
||||||
baseRoom = FakeBaseRoom(
|
baseRoom = FakeBaseRoom(
|
||||||
canSendStateResult = { _, _ -> Result.success(true) },
|
canSendStateResult = { _, _ -> Result.success(true) },
|
||||||
getRoomVisibilityResult = { Result.success(RoomVisibility.Private) },
|
getRoomVisibilityResult = { Result.success(RoomVisibility.Private) },
|
||||||
initialRoomInfo = aRoomInfo(historyVisibility = RoomHistoryVisibility.Shared, joinRule = JoinRule.Private)
|
initialRoomInfo = aRoomInfo(historyVisibility = RoomHistoryVisibility.Shared, joinRule = JoinRule.Private)
|
||||||
),
|
),
|
||||||
enableEncryptionResult = enableEncryptionLambda,
|
enableEncryptionResult = enableEncryptionLambda,
|
||||||
updateJoinRuleResult = updateJoinRuleLambda,
|
updateJoinRuleResult = updateJoinRuleLambda,
|
||||||
updateRoomVisibilityResult = updateRoomVisibilityLambda,
|
updateRoomVisibilityResult = updateRoomVisibilityLambda,
|
||||||
|
|
@ -323,7 +328,8 @@ class SecurityAndPrivacyPresenterTest {
|
||||||
)
|
)
|
||||||
// Saved settings are updated 2 times to match the edited settings
|
// Saved settings are updated 2 times to match the edited settings
|
||||||
skipItems(3)
|
skipItems(3)
|
||||||
with(awaitItem()) {
|
val state = awaitItem()
|
||||||
|
with(state) {
|
||||||
assertThat(saveAction).isInstanceOf(AsyncAction.Failure::class.java)
|
assertThat(saveAction).isInstanceOf(AsyncAction.Failure::class.java)
|
||||||
assertThat(savedSettings.isVisibleInRoomDirectory).isNotEqualTo(editedSettings.isVisibleInRoomDirectory)
|
assertThat(savedSettings.isVisibleInRoomDirectory).isNotEqualTo(editedSettings.isVisibleInRoomDirectory)
|
||||||
assertThat(canBeSaved).isTrue()
|
assertThat(canBeSaved).isTrue()
|
||||||
|
|
@ -332,6 +338,26 @@ class SecurityAndPrivacyPresenterTest {
|
||||||
assert(updateJoinRuleLambda).isCalledOnce()
|
assert(updateJoinRuleLambda).isCalledOnce()
|
||||||
assert(updateRoomVisibilityLambda).isCalledOnce()
|
assert(updateRoomVisibilityLambda).isCalledOnce()
|
||||||
assert(updateRoomHistoryVisibilityLambda).isCalledOnce()
|
assert(updateRoomHistoryVisibilityLambda).isCalledOnce()
|
||||||
|
// Clear error
|
||||||
|
state.eventSink(SecurityAndPrivacyEvents.DismissSaveError)
|
||||||
|
with(awaitItem()) {
|
||||||
|
assertThat(saveAction).isEqualTo(AsyncAction.Uninitialized)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `present - isKnockEnabled is true if the Knock feature flag is enabled`() = runTest {
|
||||||
|
val presenter = createSecurityAndPrivacyPresenter(
|
||||||
|
featureFlagService = FakeFeatureFlagService(
|
||||||
|
initialState = mapOf(
|
||||||
|
FeatureFlags.Knock.key to true,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
presenter.test {
|
||||||
|
assertThat(awaitItem().isKnockEnabled).isFalse()
|
||||||
|
assertThat(awaitItem().isKnockEnabled).isTrue()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -345,13 +371,15 @@ class SecurityAndPrivacyPresenterTest {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
navigator: SecurityAndPrivacyNavigator = FakeSecurityAndPrivacyNavigator(),
|
navigator: SecurityAndPrivacyNavigator = FakeSecurityAndPrivacyNavigator(),
|
||||||
|
featureFlagService: FeatureFlagService = FakeFeatureFlagService(),
|
||||||
): SecurityAndPrivacyPresenter {
|
): SecurityAndPrivacyPresenter {
|
||||||
return SecurityAndPrivacyPresenter(
|
return SecurityAndPrivacyPresenter(
|
||||||
room = room,
|
room = room,
|
||||||
matrixClient = FakeMatrixClient(
|
matrixClient = FakeMatrixClient(
|
||||||
userIdServerNameLambda = { serverName },
|
userIdServerNameLambda = { serverName },
|
||||||
),
|
),
|
||||||
navigator = navigator
|
navigator = navigator,
|
||||||
|
featureFlagService = featureFlagService,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:d627cd374fe0746d2fc84fffecf6a1636fb68784ed5edae3b830fe4ee2b3751a
|
oid sha256:9807bf17918c39f2e6e4cddf87237fa26f63732f48210b0f803114bcf4c98451
|
||||||
size 61398
|
size 61360
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:1ad13a47522e6365928e7209e515a47a7e4fafc28ad87361dffdf92c95b3ff06
|
||||||
|
size 62563
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:70979d3b81a521b6208da2f3a95187bc7b3ae0ea52e3dd35e2bbd91df14c007f
|
oid sha256:ade5d824f6f466960931abcbc86cb9a286cbf6bd9a3adf875f446dc094e291d5
|
||||||
size 63318
|
size 63393
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:f2cfda5b044d11e4e75fa83c9bad7b7f03a328422881cbededfaee8ab091d1db
|
||||||
|
size 64586
|
||||||
Loading…
Add table
Add a link
Reference in a new issue