From 176c18d55d6f3c60ce004ecf1a99d4b788826748 Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 19 Nov 2025 14:52:59 +0100 Subject: [PATCH] change(security and privacy) : add isSpace and update state provider --- .../impl/root/SecurityAndPrivacyPresenter.kt | 1 + .../impl/root/SecurityAndPrivacyState.kt | 5 +- .../root/SecurityAndPrivacyStateProvider.kt | 109 ++++++++++-------- 3 files changed, 65 insertions(+), 50 deletions(-) diff --git a/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyPresenter.kt b/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyPresenter.kt index 7c0c04f8c3..fa51008113 100644 --- a/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyPresenter.kt +++ b/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyPresenter.kt @@ -160,6 +160,7 @@ class SecurityAndPrivacyPresenter( isKnockEnabled = isKnockEnabled, saveAction = saveAction.value, permissions = permissions, + isSpace = roomInfo.isSpace, eventSink = ::handleEvent, ) diff --git a/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyState.kt b/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyState.kt index be9c24dc65..06a283657b 100644 --- a/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyState.kt +++ b/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyState.kt @@ -22,6 +22,7 @@ data class SecurityAndPrivacyState( val showEnableEncryptionConfirmation: Boolean, val isKnockEnabled: Boolean, val saveAction: AsyncAction, + val isSpace: Boolean, private val permissions: SecurityAndPrivacyPermissions, val eventSink: (SecurityAndPrivacyEvents) -> Unit ) { @@ -38,8 +39,8 @@ data class SecurityAndPrivacyState( val showRoomAccessSection = permissions.canChangeRoomAccess val showRoomVisibilitySections = permissions.canChangeRoomVisibility && editedSettings.roomAccess != SecurityAndPrivacyRoomAccess.InviteOnly - val showHistoryVisibilitySection = permissions.canChangeHistoryVisibility - val showEncryptionSection = permissions.canChangeEncryption + val showHistoryVisibilitySection = permissions.canChangeHistoryVisibility && !isSpace + val showEncryptionSection = permissions.canChangeEncryption && !isSpace } data class SecurityAndPrivacySettings( diff --git a/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyStateProvider.kt b/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyStateProvider.kt index c13fc36d34..3f55449b51 100644 --- a/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyStateProvider.kt +++ b/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyStateProvider.kt @@ -15,56 +15,67 @@ import io.element.android.libraries.architecture.AsyncData open class SecurityAndPrivacyStateProvider : PreviewParameterProvider { override val values: Sequence - get() = sequenceOf( - aSecurityAndPrivacyState(), - aSecurityAndPrivacyState( - editedSettings = aSecurityAndPrivacySettings( - roomAccess = SecurityAndPrivacyRoomAccess.AskToJoin - ) - ), - aSecurityAndPrivacyState( - editedSettings = aSecurityAndPrivacySettings( - roomAccess = SecurityAndPrivacyRoomAccess.Anyone, - isEncrypted = false, - ) - ), - aSecurityAndPrivacyState( - savedSettings = aSecurityAndPrivacySettings( - roomAccess = SecurityAndPrivacyRoomAccess.SpaceMember - ), - isKnockEnabled = false, - ), - aSecurityAndPrivacyState( - editedSettings = aSecurityAndPrivacySettings( - roomAccess = SecurityAndPrivacyRoomAccess.Anyone, - address = "#therapy:myserver.xyz" - ) - ), - aSecurityAndPrivacyState( - editedSettings = aSecurityAndPrivacySettings( - isVisibleInRoomDirectory = AsyncData.Loading() - ) - ), - aSecurityAndPrivacyState( - editedSettings = aSecurityAndPrivacySettings( - isVisibleInRoomDirectory = AsyncData.Success(true) - ) - ), - aSecurityAndPrivacyState( - showEncryptionConfirmation = true - ), - aSecurityAndPrivacyState( - saveAction = AsyncAction.Loading - ), - aSecurityAndPrivacyState( - savedSettings = aSecurityAndPrivacySettings( - roomAccess = SecurityAndPrivacyRoomAccess.AskToJoin - ), - isKnockEnabled = false, - ), - ) + get() = securityAndPrivacyStates(isSpace = false) + securityAndPrivacyStates(isSpace = true) } +private fun securityAndPrivacyStates(isSpace: Boolean): Sequence = sequenceOf( + aSecurityAndPrivacyState(isSpace = isSpace), + aSecurityAndPrivacyState( + editedSettings = aSecurityAndPrivacySettings( + roomAccess = SecurityAndPrivacyRoomAccess.AskToJoin, + ), + isSpace = isSpace, + ), + aSecurityAndPrivacyState( + editedSettings = aSecurityAndPrivacySettings( + roomAccess = SecurityAndPrivacyRoomAccess.Anyone, + isEncrypted = false, + ), + isSpace = isSpace, + ), + aSecurityAndPrivacyState( + savedSettings = aSecurityAndPrivacySettings( + roomAccess = SecurityAndPrivacyRoomAccess.SpaceMember + ), + isSpace = isSpace, + isKnockEnabled = false, + ), + aSecurityAndPrivacyState( + editedSettings = aSecurityAndPrivacySettings( + roomAccess = SecurityAndPrivacyRoomAccess.Anyone, + address = "#therapy:myserver.xyz" + ), + isSpace = isSpace, + ), + aSecurityAndPrivacyState( + editedSettings = aSecurityAndPrivacySettings( + isVisibleInRoomDirectory = AsyncData.Loading() + ), + isSpace = isSpace, + ), + aSecurityAndPrivacyState( + editedSettings = aSecurityAndPrivacySettings( + isVisibleInRoomDirectory = AsyncData.Success(true) + ), + isSpace = isSpace, + ), + aSecurityAndPrivacyState( + showEncryptionConfirmation = true, + isSpace = isSpace, + ), + aSecurityAndPrivacyState( + saveAction = AsyncAction.Loading, + isSpace = isSpace, + ), + aSecurityAndPrivacyState( + savedSettings = aSecurityAndPrivacySettings( + roomAccess = SecurityAndPrivacyRoomAccess.AskToJoin + ), + isSpace = isSpace, + isKnockEnabled = false, + ), +) + fun aSecurityAndPrivacySettings( roomAccess: SecurityAndPrivacyRoomAccess = SecurityAndPrivacyRoomAccess.InviteOnly, isEncrypted: Boolean = true, @@ -92,6 +103,7 @@ fun aSecurityAndPrivacyState( canChangeRoomVisibility = true ), isKnockEnabled: Boolean = true, + isSpace: Boolean = false, eventSink: (SecurityAndPrivacyEvents) -> Unit = {} ) = SecurityAndPrivacyState( editedSettings = editedSettings, @@ -101,5 +113,6 @@ fun aSecurityAndPrivacyState( saveAction = saveAction, isKnockEnabled = isKnockEnabled, permissions = permissions, + isSpace = isSpace, eventSink = eventSink )