diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt b/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt index 2754d3fab0..8c6edccda8 100755 --- a/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt @@ -150,14 +150,13 @@ class VectorPreferences @Inject constructor(private val context: Context) { private const val SETTINGS_ENABLE_SEND_VOICE_FEATURE_PREFERENCE_KEY = "SETTINGS_ENABLE_SEND_VOICE_FEATURE_PREFERENCE_KEY" const val SETTINGS_LABS_ALLOW_EXTENDED_LOGS = "SETTINGS_LABS_ALLOW_EXTENDED_LOGS" + const val SETTINGS_LABS_USE_RESTRICTED_JOIN_RULE = "SETTINGS_LABS_USE_RESTRICTED_JOIN_RULE" private const val SETTINGS_DEVELOPER_MODE_PREFERENCE_KEY = "SETTINGS_DEVELOPER_MODE_PREFERENCE_KEY" private const val SETTINGS_LABS_SHOW_HIDDEN_EVENTS_PREFERENCE_KEY = "SETTINGS_LABS_SHOW_HIDDEN_EVENTS_PREFERENCE_KEY" private const val SETTINGS_LABS_ENABLE_SWIPE_TO_REPLY = "SETTINGS_LABS_ENABLE_SWIPE_TO_REPLY" private const val SETTINGS_DEVELOPER_MODE_FAIL_FAST_PREFERENCE_KEY = "SETTINGS_DEVELOPER_MODE_FAIL_FAST_PREFERENCE_KEY" - const val SETTINGS_LABS_USE_SPACES = "SETTINGS_LABS_USE_SPACES" - // SETTINGS_LABS_HIDE_TECHNICAL_E2E_ERRORS private const val SETTINGS_LABS_SHOW_COMPLETE_HISTORY_IN_ENCRYPTED_ROOM = "SETTINGS_LABS_SHOW_COMPLETE_HISTORY_IN_ENCRYPTED_ROOM" const val SETTINGS_LABS_UNREAD_NOTIFICATIONS_AS_TAB = "SETTINGS_LABS_UNREAD_NOTIFICATIONS_AS_TAB" @@ -236,6 +235,7 @@ class VectorPreferences @Inject constructor(private val context: Context) { SETTINGS_DEVELOPER_MODE_PREFERENCE_KEY, SETTINGS_LABS_SHOW_HIDDEN_EVENTS_PREFERENCE_KEY, SETTINGS_LABS_ALLOW_EXTENDED_LOGS, + SETTINGS_LABS_USE_RESTRICTED_JOIN_RULE, SETTINGS_DEVELOPER_MODE_FAIL_FAST_PREFERENCE_KEY, SETTINGS_USE_RAGE_SHAKE_KEY, @@ -944,4 +944,8 @@ class VectorPreferences @Inject constructor(private val context: Context) { BackgroundSyncMode.FDROID_BACKGROUND_SYNC_MODE_FOR_BATTERY } } + + fun labsUseExperimentalRestricted(): Boolean { + return defaultPrefs.getBoolean(SETTINGS_LABS_USE_RESTRICTED_JOIN_RULE, false) + } } diff --git a/vector/src/main/java/im/vector/app/features/spaces/create/CreateSpaceViewModelTask.kt b/vector/src/main/java/im/vector/app/features/spaces/create/CreateSpaceViewModelTask.kt index 38bc645aa2..9ce1089f6c 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/create/CreateSpaceViewModelTask.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/create/CreateSpaceViewModelTask.kt @@ -18,8 +18,14 @@ package im.vector.app.features.spaces.create import android.net.Uri import im.vector.app.core.platform.ViewModelTask +import im.vector.app.features.raw.wellknown.getElementWellknown +import im.vector.app.features.raw.wellknown.isE2EByDefault +import im.vector.app.features.settings.VectorPreferences +import org.matrix.android.sdk.api.extensions.tryOrNull +import org.matrix.android.sdk.api.raw.RawService import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.room.failure.CreateRoomFailure +import org.matrix.android.sdk.api.session.room.model.RoomDirectoryVisibility import org.matrix.android.sdk.api.session.room.model.RoomJoinRulesAllowEntry import org.matrix.android.sdk.api.session.room.model.create.CreateRoomParams import org.matrix.android.sdk.api.session.room.model.create.CreateRoomPreset @@ -44,8 +50,9 @@ data class CreateSpaceTaskParams( ) class CreateSpaceViewModelTask @Inject constructor( - private val session: Session -// private val stringProvider: StringProvider + private val session: Session, + private val vectorPreferences: VectorPreferences, + private val rawService: RawService ) : ViewModelTask { override suspend fun execute(params: CreateSpaceTaskParams): CreateSpaceTaskResult { @@ -59,16 +66,27 @@ class CreateSpaceViewModelTask @Inject constructor( val childErrors = mutableMapOf() val childIds = mutableListOf() + + val e2eByDefault = tryOrNull { + rawService.getElementWellknown(session.myUserId) + ?.isE2EByDefault() + ?: true + } ?: true + params.defaultRooms .filter { it.isNotBlank() } .forEach { roomName -> try { val roomId = try { if (params.isPublic) { - session.createRoom(CreateRoomParams().apply { - this.name = roomName - this.preset = CreateRoomPreset.PRESET_PUBLIC_CHAT }) + session.createRoom( + CreateRoomParams().apply { + this.name = roomName + this.preset = CreateRoomPreset.PRESET_PUBLIC_CHAT + } + ) } else { + if (vectorPreferences.labsUseExperimentalRestricted()) { session.createRoom(CreateRoomParams().apply { this.name = roomName this.joinRuleRestricted = listOf( @@ -77,7 +95,20 @@ class CreateSpaceViewModelTask @Inject constructor( via = session.sessionParams.homeServerHost?.let { listOf(it) } ?: emptyList() ) ) + if (e2eByDefault) { + this.enableEncryption() + } }) + } else { + session.createRoom(CreateRoomParams().apply { + this.name = roomName + visibility = RoomDirectoryVisibility.PRIVATE + this.preset = CreateRoomPreset.PRESET_PRIVATE_CHAT + if (e2eByDefault) { + this.enableEncryption() + } + }) + } } } catch (timeout: CreateRoomFailure.CreatedWithTimeout) { // we ignore that? diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 0bbf293587..26367cb9a5 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -3337,4 +3337,8 @@ Welcome to Spaces! Spaces are ways to group rooms and people for work, fun or just yourself. You are invited + + + Experimental Space - Restricted Room. + Warning requires server support and experimental room version diff --git a/vector/src/main/res/xml/vector_settings_labs.xml b/vector/src/main/res/xml/vector_settings_labs.xml index fef5a2fe9d..607f01db35 100644 --- a/vector/src/main/res/xml/vector_settings_labs.xml +++ b/vector/src/main/res/xml/vector_settings_labs.xml @@ -43,6 +43,13 @@ android:defaultValue="false" android:key="SETTINGS_LABS_UNREAD_NOTIFICATIONS_AS_TAB" android:title="@string/labs_show_unread_notifications_as_tab" /> + + + \ No newline at end of file