Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/4045.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Align new room encryption default to Web
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import im.vector.app.features.form.formEditTextItem
import im.vector.app.features.form.formEditableAvatarItem
import im.vector.app.features.form.formSubmitButtonItem
import im.vector.app.features.form.formSwitchItem
import org.matrix.android.sdk.api.extensions.orFalse
import org.matrix.android.sdk.api.session.room.failure.CreateRoomFailure
import org.matrix.android.sdk.api.session.room.model.RoomJoinRules
import javax.inject.Inject
Expand Down Expand Up @@ -165,7 +166,8 @@ class CreateRoomController @Inject constructor(
host.stringProvider.getString(R.string.create_room_encryption_description)
}
)
switchChecked(viewState.isEncrypted)

switchChecked(viewState.isEncrypted ?: viewState.defaultEncrypted[viewState.roomJoinRules].orFalse())

listener { value ->
host.listener?.setIsEncrypted(value)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,8 +163,9 @@ class CreateRoomFragment @Inject constructor(
}

override fun selectVisibility() = withState(viewModel) { state ->

val allowed = if (state.supportsRestricted) {
// If restricted is supported and the user is in the context of a parent space
// then show restricted option.
val allowed = if (state.supportsRestricted && state.parentSpaceId != null) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NIT: if we wanted to avoid using separate branches for appending to the list (and potentially be more kotlin idiomatic) we could use

listOfNotNull

val list = listOfNotNull(
        INVITE,
        PUBLIC,
        RESTRICTED.takeIf { state.supportsRestricted && state.parentSpaceId != null }
)

or buildList

val list = buildList {
    add(INVITE)
    add(PUBLIC)
    if (state.supportsRestricted && state.parentSpaceId != null) {
        add(RESTRICTED)
    }
}

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AS is telling me that it's experimental

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah my bad, I totally forgot that buildList is still experimental

listOf(RoomJoinRules.INVITE, RoomJoinRules.PUBLIC, RoomJoinRules.RESTRICTED)
} else {
listOf(RoomJoinRules.INVITE, RoomJoinRules.PUBLIC)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import im.vector.app.features.settings.VectorPreferences
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.MatrixPatterns.getDomain
import org.matrix.android.sdk.api.extensions.orFalse
import org.matrix.android.sdk.api.extensions.tryOrNull
import org.matrix.android.sdk.api.raw.RawService
import org.matrix.android.sdk.api.session.Session
Expand Down Expand Up @@ -109,8 +110,13 @@ class CreateRoomViewModel @AssistedInject constructor(@Assisted private val init

setState {
copy(
isEncrypted = RoomJoinRules.INVITE == roomJoinRules && adminE2EByDefault,
hsAdminHasDisabledE2E = !adminE2EByDefault
hsAdminHasDisabledE2E = !adminE2EByDefault,
defaultEncrypted = mapOf(
RoomJoinRules.INVITE to adminE2EByDefault,
RoomJoinRules.PUBLIC to false,
RoomJoinRules.RESTRICTED to adminE2EByDefault
)

)
}
}
Expand Down Expand Up @@ -286,7 +292,12 @@ class CreateRoomViewModel @AssistedInject constructor(@Assisted private val init
disableFederation = state.disableFederation

// Encryption
if (state.isEncrypted) {
val shouldEncrypt = when (state.roomJoinRules) {
// we ignore the isEncrypted for public room as the switch is hidden in this case
RoomJoinRules.PUBLIC -> false
else -> state.isEncrypted ?: state.defaultEncrypted[state.roomJoinRules].orFalse()
}
if (shouldEncrypt) {
enableEncryption()
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ data class CreateRoomViewState(
val roomName: String = "",
val roomTopic: String = "",
val roomJoinRules: RoomJoinRules = RoomJoinRules.INVITE,
val isEncrypted: Boolean = false,
val isEncrypted: Boolean? = null,
val defaultEncrypted: Map<RoomJoinRules, Boolean> = emptyMap(),
val showAdvanced: Boolean = false,
val disableFederation: Boolean = false,
val homeServerName: String = "",
Expand Down