From d992f38fa59d9639a5d2c53d0cd38c235e0ab2d0 Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 28 Jan 2025 14:39:27 +0100 Subject: [PATCH] feat(security&privacy) : clean code --- .../SecurityAndPrivacyEvents.kt | 4 +-- .../SecurityAndPrivacyFlowNode.kt | 1 - .../SecurityAndPrivacyNode.kt | 1 - .../SecurityAndPrivacyPresenter.kt | 15 +++++------ .../SecurityAndPrivacyState.kt | 18 ++++++------- .../SecurityAndPrivacyView.kt | 26 +++++++++---------- .../editroomaddress/EditRoomAddressNode.kt | 1 - .../editroomaddress/EditRoomAddressView.kt | 1 - .../SecurityAndPrivacyPermissions.kt | 1 - .../SecurityAndPrivacyPresenterTest.kt | 1 - .../EditRoomAddressPresenterTest.kt | 1 - .../EditRoomAddressViewTest.kt | 3 --- .../libraries/matrix/api/room/MatrixRoom.kt | 2 ++ .../matrix/impl/room/RustMatrixRoom.kt | 1 + .../impl/room/MatrixRoomInfoMapperTest.kt | 2 +- .../ui/room/address/RoomAddressField.kt | 2 +- .../android/libraries/testtags/TestTags.kt | 1 - 17 files changed, 35 insertions(+), 46 deletions(-) diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyEvents.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyEvents.kt index 352bccf453..5e09405998 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyEvents.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyEvents.kt @@ -11,9 +11,9 @@ sealed interface SecurityAndPrivacyEvents { data object EditRoomAddress : SecurityAndPrivacyEvents data object Save : SecurityAndPrivacyEvents data class ChangeRoomAccess(val roomAccess: SecurityAndPrivacyRoomAccess) : SecurityAndPrivacyEvents - data object ToggleEncryptionState: SecurityAndPrivacyEvents + data object ToggleEncryptionState : SecurityAndPrivacyEvents data object CancelEnableEncryption : SecurityAndPrivacyEvents - data object ConfirmEnableEncryption: SecurityAndPrivacyEvents + data object ConfirmEnableEncryption : SecurityAndPrivacyEvents data class ChangeHistoryVisibility(val historyVisibility: SecurityAndPrivacyHistoryVisibility) : SecurityAndPrivacyEvents data object ToggleRoomVisibility : SecurityAndPrivacyEvents data object DismissSaveError : SecurityAndPrivacyEvents diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyFlowNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyFlowNode.kt index 76d5a5b005..22fecf6143 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyFlowNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyFlowNode.kt @@ -36,7 +36,6 @@ class SecurityAndPrivacyFlowNode @AssistedInject constructor( buildContext = buildContext, plugins = plugins, ) { - sealed interface NavTarget : Parcelable { @Parcelize data object SecurityAndPrivacy : NavTarget diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyNode.kt index ed483e807e..537306f44f 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyNode.kt @@ -24,7 +24,6 @@ class SecurityAndPrivacyNode @AssistedInject constructor( @Assisted plugins: List, presenterFactory: SecurityAndPrivacyPresenter.Factory, ) : Node(buildContext, plugins = plugins) { - private val navigator = plugins().first() private val presenter = presenterFactory.create(navigator) diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyPresenter.kt index 0fa653c462..fe0a6f4c88 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyPresenter.kt @@ -60,7 +60,9 @@ class SecurityAndPrivacyPresenter @AssistedInject constructor( val roomInfo by room.roomInfoFlow.collectAsState(null) val savedIsVisibleInRoomDirectory = remember { mutableStateOf>(AsyncData.Uninitialized) } - IsRoomVisibleInRoomDirectoryEffect(savedIsVisibleInRoomDirectory) + LaunchedEffect(Unit) { + isRoomVisibleInRoomDirectory(savedIsVisibleInRoomDirectory) + } val savedSettings by remember { derivedStateOf { @@ -159,12 +161,9 @@ class SecurityAndPrivacyPresenter @AssistedInject constructor( return state } - @Composable - private fun IsRoomVisibleInRoomDirectoryEffect(isRoomVisible: MutableState>) { - LaunchedEffect(Unit) { - isRoomVisible.runUpdatingState { - room.getRoomVisibility().map { it == RoomVisibility.Public } - } + private fun CoroutineScope.isRoomVisibleInRoomDirectory(isRoomVisible: MutableState>) = launch { + isRoomVisible.runUpdatingState { + room.getRoomVisibility().map { it == RoomVisibility.Public } } } @@ -264,7 +263,6 @@ private fun RoomHistoryVisibility?.map(): SecurityAndPrivacyHistoryVisibility { RoomHistoryVisibility.Shared, is RoomHistoryVisibility.Custom, null -> SecurityAndPrivacyHistoryVisibility.SinceSelection - } } @@ -279,4 +277,3 @@ private fun SecurityAndPrivacyHistoryVisibility.map(): RoomHistoryVisibility { private fun MatrixRoomInfo.firstDisplayableAlias(serverName: String): RoomAlias? { return aliases.firstOrNull { it.matchesServer(serverName) } ?: aliases.firstOrNull() } - diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyState.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyState.kt index 3d2fc250e2..75b53bbd58 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyState.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyState.kt @@ -10,6 +10,7 @@ package io.element.android.features.roomdetails.impl.securityandprivacy import io.element.android.features.roomdetails.impl.securityandprivacy.permissions.SecurityAndPrivacyPermissions import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncData +import kotlinx.collections.immutable.toImmutableSet data class SecurityAndPrivacyState( // the settings that are currently applied on the room. @@ -22,9 +23,6 @@ data class SecurityAndPrivacyState( private val permissions: SecurityAndPrivacyPermissions, val eventSink: (SecurityAndPrivacyEvents) -> Unit ) { - - - val canBeSaved = savedSettings != editedSettings val availableHistoryVisibilities = buildSet { @@ -34,15 +32,12 @@ data class SecurityAndPrivacyState( } else { add(SecurityAndPrivacyHistoryVisibility.SinceInvite) } - } + }.toImmutableSet() val showRoomAccessSection = permissions.canChangeRoomAccess val showRoomVisibilitySections = permissions.canChangeRoomVisibility && editedSettings.roomAccess != SecurityAndPrivacyRoomAccess.InviteOnly val showHistoryVisibilitySection = permissions.canChangeHistoryVisibility val showEncryptionSection = permissions.canChangeEncryption - override fun toString(): String { - return "SecurityAndPrivacyState(savedSettings=$savedSettings, editedSettings=$editedSettings, homeserverName='$homeserverName', showEncryptionConfirmation=$showEncryptionConfirmation, saveAction=$saveAction, canBeSaved=$canBeSaved)" - } } data class SecurityAndPrivacySettings( @@ -54,7 +49,9 @@ data class SecurityAndPrivacySettings( ) enum class SecurityAndPrivacyHistoryVisibility { - SinceSelection, SinceInvite, Anyone; + SinceSelection, + SinceInvite, + Anyone; /** * Returns the fallback visibility when the current visibility is not available. @@ -69,7 +66,10 @@ enum class SecurityAndPrivacyHistoryVisibility { } enum class SecurityAndPrivacyRoomAccess { - InviteOnly, AskToJoin, Anyone, SpaceMember + InviteOnly, + AskToJoin, + Anyone, + SpaceMember } sealed class SecurityAndPrivacyFailures : Exception() { diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyView.kt index 24fdf8bc2a..c58687fde4 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyView.kt @@ -49,6 +49,7 @@ import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TextButton import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.ui.strings.CommonStrings +import kotlinx.collections.immutable.ImmutableSet @Composable fun SecurityAndPrivacyView( @@ -81,7 +82,7 @@ fun SecurityAndPrivacyView( modifier = Modifier.padding(top = 24.dp), edited = state.editedSettings.roomAccess, saved = state.savedSettings.roomAccess, - onSelected = { state.eventSink(SecurityAndPrivacyEvents.ChangeRoomAccess(it)) }, + onSelectOption = { state.eventSink(SecurityAndPrivacyEvents.ChangeRoomAccess(it)) }, ) } if (state.showRoomVisibilitySections) { @@ -111,7 +112,7 @@ fun SecurityAndPrivacyView( editedOption = state.editedSettings.historyVisibility, savedOptions = state.savedSettings.historyVisibility, availableOptions = state.availableHistoryVisibilities, - onSelected = { state.eventSink(SecurityAndPrivacyEvents.ChangeHistoryVisibility(it)) }, + onSelectOption = { state.eventSink(SecurityAndPrivacyEvents.ChangeHistoryVisibility(it)) }, ) } } @@ -180,7 +181,7 @@ private fun SecurityAndPrivacySection( private fun RoomAccessSection( edited: SecurityAndPrivacyRoomAccess, saved: SecurityAndPrivacyRoomAccess, - onSelected: (SecurityAndPrivacyRoomAccess) -> Unit, + onSelectOption: (SecurityAndPrivacyRoomAccess) -> Unit, modifier: Modifier = Modifier, ) { SecurityAndPrivacySection( @@ -191,19 +192,19 @@ private fun RoomAccessSection( headlineContent = { Text(text = stringResource(R.string.screen_security_and_privacy_room_access_invite_only_option_title)) }, supportingContent = { Text(text = stringResource(R.string.screen_security_and_privacy_room_access_invite_only_option_description)) }, trailingContent = ListItemContent.RadioButton(selected = edited == SecurityAndPrivacyRoomAccess.InviteOnly), - onClick = { onSelected(SecurityAndPrivacyRoomAccess.InviteOnly) }, + onClick = { onSelectOption(SecurityAndPrivacyRoomAccess.InviteOnly) }, ) 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 = { onSelected(SecurityAndPrivacyRoomAccess.AskToJoin) }, + onClick = { onSelectOption(SecurityAndPrivacyRoomAccess.AskToJoin) }, ) ListItem( 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)) }, trailingContent = ListItemContent.RadioButton(selected = edited == SecurityAndPrivacyRoomAccess.Anyone), - onClick = { onSelected(SecurityAndPrivacyRoomAccess.Anyone) }, + onClick = { onSelectOption(SecurityAndPrivacyRoomAccess.Anyone) }, ) if (saved == SecurityAndPrivacyRoomAccess.SpaceMember) { ListItem( @@ -333,8 +334,8 @@ private fun EncryptionSection( private fun HistoryVisibilitySection( editedOption: SecurityAndPrivacyHistoryVisibility?, savedOptions: SecurityAndPrivacyHistoryVisibility?, - availableOptions: Set, - onSelected: (SecurityAndPrivacyHistoryVisibility) -> Unit, + availableOptions: ImmutableSet, + onSelectOption: (SecurityAndPrivacyHistoryVisibility) -> Unit, modifier: Modifier = Modifier, ) { SecurityAndPrivacySection( @@ -347,7 +348,7 @@ private fun HistoryVisibilitySection( HistoryVisibilityItem( option = availableOption, isSelected = isSelected, - onSelected = onSelected, + onSelectOption = onSelectOption, ) } if (savedOptions != null && !availableOptions.contains(savedOptions)) { @@ -355,7 +356,7 @@ private fun HistoryVisibilitySection( option = savedOptions, isSelected = true, isEnabled = false, - onSelected = {}, + onSelectOption = {}, ) } } @@ -365,7 +366,7 @@ private fun HistoryVisibilitySection( private fun HistoryVisibilityItem( option: SecurityAndPrivacyHistoryVisibility, isSelected: Boolean, - onSelected: (SecurityAndPrivacyHistoryVisibility) -> Unit, + onSelectOption: (SecurityAndPrivacyHistoryVisibility) -> Unit, modifier: Modifier = Modifier, isEnabled: Boolean = true, ) { @@ -377,7 +378,7 @@ private fun HistoryVisibilityItem( ListItem( headlineContent = { Text(text = headlineText) }, trailingContent = ListItemContent.RadioButton(selected = isSelected, enabled = isEnabled), - onClick = { onSelected(option) }, + onClick = { onSelectOption(option) }, enabled = isEnabled, modifier = modifier, ) @@ -401,4 +402,3 @@ private fun ContentToPreview(state: SecurityAndPrivacyState) { onBackClick = {}, ) } - diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressNode.kt index 9b1ece00cc..efdae76b61 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressNode.kt @@ -25,7 +25,6 @@ class EditRoomAddressNode @AssistedInject constructor( @Assisted plugins: List, presenterFactory: EditRoomAddressPresenter.Factory, ) : Node(buildContext, plugins = plugins) { - private val navigator = plugins().first() private val presenter = presenterFactory.create(navigator) diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressView.kt index efe224ba58..d39208ee95 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressView.kt @@ -86,7 +86,6 @@ fun EditRoomAddressView( onRetry = { state.eventSink(EditRoomAddressEvents.Save) }, onErrorDismiss = { state.eventSink(EditRoomAddressEvents.DismissError) }, ) - } } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/permissions/SecurityAndPrivacyPermissions.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/permissions/SecurityAndPrivacyPermissions.kt index 84436057f4..50a676da1e 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/permissions/SecurityAndPrivacyPermissions.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/permissions/SecurityAndPrivacyPermissions.kt @@ -47,4 +47,3 @@ fun MatrixRoom.securityAndPrivacyPermissionsAsState(updateKey: Long): State AndroidComposeTestRule.setEditRoomAddressView( diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt index 9e921140ab..6dd27defee 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt @@ -433,6 +433,7 @@ interface MatrixRoom : Closeable { * directory and can be found using it. */ suspend fun getRoomVisibility(): Result + /** * Publish a new room alias for this room in the room directory. * @@ -442,6 +443,7 @@ interface MatrixRoom : Closeable { * published. */ suspend fun publishRoomAliasInRoomDirectory(roomAlias: RoomAlias): Result + /** * Remove an existing room alias for this room in the room directory. * diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt index 58a76a91e8..3028a3ba48 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt @@ -104,6 +104,7 @@ import org.matrix.rustcomponents.sdk.KnockRequest as InnerKnockRequest import org.matrix.rustcomponents.sdk.Room as InnerRoom import org.matrix.rustcomponents.sdk.Timeline as InnerTimeline +@Suppress("LargeClass") class RustMatrixRoom( override val sessionId: SessionId, private val deviceId: DeviceId, diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapperTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapperTest.kt index 0639f8e9e4..aaa8ecc9ec 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapperTest.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapperTest.kt @@ -34,8 +34,8 @@ import kotlinx.collections.immutable.toPersistentList import org.junit.Test import org.matrix.rustcomponents.sdk.Membership import org.matrix.rustcomponents.sdk.JoinRule as RustJoinRule -import org.matrix.rustcomponents.sdk.RoomNotificationMode as RustRoomNotificationMode import org.matrix.rustcomponents.sdk.RoomHistoryVisibility as RustRoomHistoryVisibility +import org.matrix.rustcomponents.sdk.RoomNotificationMode as RustRoomNotificationMode class MatrixRoomInfoMapperTest { @Test diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/address/RoomAddressField.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/address/RoomAddressField.kt index c5b3a56514..acd7723b87 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/address/RoomAddressField.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/address/RoomAddressField.kt @@ -64,7 +64,7 @@ fun RoomAddressField( @PreviewsDayNight @Composable -fun RoomAddressFieldPreview() = ElementPreview { +internal fun RoomAddressFieldPreview() = ElementPreview { RoomAddressField( address = "room", homeserverName = "element.io", diff --git a/libraries/testtags/src/main/kotlin/io/element/android/libraries/testtags/TestTags.kt b/libraries/testtags/src/main/kotlin/io/element/android/libraries/testtags/TestTags.kt index 63da929c94..ddc720ed40 100644 --- a/libraries/testtags/src/main/kotlin/io/element/android/libraries/testtags/TestTags.kt +++ b/libraries/testtags/src/main/kotlin/io/element/android/libraries/testtags/TestTags.kt @@ -117,5 +117,4 @@ object TestTags { * */ val roomAddressField = TestTag("room_address_field") - }