From efdaa49e7017d35597962da134bc3e05eb6b86a8 Mon Sep 17 00:00:00 2001 From: Valere Date: Tue, 27 Jul 2021 12:12:31 +0200 Subject: [PATCH] Code review --- .../homeserver/HomeServerCapabilities.kt | 15 ++++++++++++++ .../session/homeserver/RoomVersionModel.kt | 4 +--- .../android/sdk/api/session/room/Room.kt | 4 ---- .../api/session/room/state/StateService.kt | 4 ++++ .../sdk/internal/session/room/DefaultRoom.kt | 18 ----------------- .../session/room/state/DefaultStateService.kt | 20 ++++++++++++++++++- .../RoomJoinRuleChooseRestrictedViewModel.kt | 1 + .../layout/fragment_join_rules_recycler.xml | 2 +- vector/src/main/res/values/strings.xml | 6 ++++-- 9 files changed, 45 insertions(+), 29 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/homeserver/HomeServerCapabilities.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/homeserver/HomeServerCapabilities.kt index 98d5196a15..b49236c338 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/homeserver/HomeServerCapabilities.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/homeserver/HomeServerCapabilities.kt @@ -48,6 +48,15 @@ data class HomeServerCapabilities( UNKNOWN } + /** + * Check if a feature is supported by the homeserver. + * @return + * UNKNOWN if the server does not implement room caps + * UNSUPPORTED if this feature is not supported + * SUPPORTED if this feature is supported by a stable version + * SUPPORTED_UNSTABLE if this feature is supported by an unstable version + * (unstable version should only be used for dev/experimental purpose) + */ fun isFeatureSupported(feature: String): RoomCapabilitySupport { if (roomVersions?.capabilities == null) return RoomCapabilitySupport.UNKNOWN val info = roomVersions.capabilities[feature] ?: return RoomCapabilitySupport.UNSUPPORTED @@ -74,6 +83,12 @@ data class HomeServerCapabilities( return info.preferred == byRoomVersion || info.support.contains(byRoomVersion) } + /** + * Use this method to know if you should force a version when creating + * a room that requires this feature. + * You can also use #isFeatureSupported prior to this call to check if the + * feature is supported and report some feedback to user. + */ fun versionOverrideForFeature(feature: String) : String? { val cap = roomVersions?.capabilities?.get(feature) return cap?.preferred ?: cap?.support?.lastOrNull() diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/homeserver/RoomVersionModel.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/homeserver/RoomVersionModel.kt index 20610ca3d6..9f8e9aa1d1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/homeserver/RoomVersionModel.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/homeserver/RoomVersionModel.kt @@ -16,11 +16,10 @@ package org.matrix.android.sdk.api.session.homeserver -import com.squareup.moshi.JsonClass - data class RoomVersionCapabilities( val defaultRoomVersion: String, val supportedVersion: List, + // Keys are capabilities defined per spec, as for now knock or restricted val capabilities: Map? ) @@ -29,7 +28,6 @@ data class RoomVersionInfo( val status: RoomVersionStatus ) -@JsonClass(generateAdapter = true) data class RoomCapabilitySupport( val preferred: String?, val support: List diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/Room.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/Room.kt index 133c309ad9..ebe96b6382 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/Room.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/Room.kt @@ -101,8 +101,4 @@ interface Room : * Use this room as a Space, if the type is correct. */ fun asSpace(): Space? - - suspend fun setJoinRulePublic() - suspend fun setJoinRuleInviteOnly() - suspend fun setJoinRuleRestricted(allowList: List) } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/state/StateService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/state/StateService.kt index d44753770e..4d3f95233d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/state/StateService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/state/StateService.kt @@ -92,4 +92,8 @@ interface StateService { * @param eventTypes Set of eventType to observe. If empty, all state events will be observed */ fun getStateEventsLive(eventTypes: Set, stateKey: QueryStringValue = QueryStringValue.NoCondition): LiveData> + + suspend fun setJoinRulePublic() + suspend fun setJoinRuleInviteOnly() + suspend fun setJoinRuleRestricted(allowList: List) } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoom.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoom.kt index ecdfe5e235..8afd690f64 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoom.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoom.kt @@ -24,8 +24,6 @@ import org.matrix.android.sdk.api.session.room.accountdata.RoomAccountDataServic import org.matrix.android.sdk.api.session.room.alias.AliasService import org.matrix.android.sdk.api.session.room.call.RoomCallService import org.matrix.android.sdk.api.session.room.members.MembershipService -import org.matrix.android.sdk.api.session.room.model.RoomJoinRules -import org.matrix.android.sdk.api.session.room.model.RoomJoinRulesAllowEntry import org.matrix.android.sdk.api.session.room.model.RoomSummary import org.matrix.android.sdk.api.session.room.model.RoomType import org.matrix.android.sdk.api.session.room.model.relation.RelationService @@ -166,20 +164,4 @@ internal class DefaultRoom(override val roomId: String, if (roomSummary()?.roomType != RoomType.SPACE) return null return DefaultSpace(this, roomSummaryDataSource, viaParameterFinder) } - - override suspend fun setJoinRulePublic() { - stateService.updateJoinRule(RoomJoinRules.PUBLIC, null) - } - - override suspend fun setJoinRuleInviteOnly() { - stateService.updateJoinRule(RoomJoinRules.INVITE, null) - } - - override suspend fun setJoinRuleRestricted(allowList: List) { - // we need to compute correct via parameters and check if PL are correct - val allowEntries = allowList.map { spaceId -> - RoomJoinRulesAllowEntry(spaceId, viaParameterFinder.computeViaParamsForRestricted(spaceId, 3)) - } - stateService.updateJoinRule(RoomJoinRules.RESTRICTED, null, allowEntries) - } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/state/DefaultStateService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/state/DefaultStateService.kt index 2f5ba6997e..7eed22f65f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/state/DefaultStateService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/state/DefaultStateService.kt @@ -36,11 +36,13 @@ import org.matrix.android.sdk.api.util.JsonDict import org.matrix.android.sdk.api.util.MimeTypes import org.matrix.android.sdk.api.util.Optional import org.matrix.android.sdk.internal.session.content.FileUploader +import org.matrix.android.sdk.internal.session.permalinks.ViaParameterFinder internal class DefaultStateService @AssistedInject constructor(@Assisted private val roomId: String, private val stateEventDataSource: StateEventDataSource, private val sendStateTask: SendStateTask, - private val fileUploader: FileUploader + private val fileUploader: FileUploader, + private val viaParameterFinder: ViaParameterFinder ) : StateService { @AssistedFactory @@ -168,4 +170,20 @@ internal class DefaultStateService @AssistedInject constructor(@Assisted private stateKey = null ) } + + override suspend fun setJoinRulePublic() { + updateJoinRule(RoomJoinRules.PUBLIC, null) + } + + override suspend fun setJoinRuleInviteOnly() { + updateJoinRule(RoomJoinRules.INVITE, null) + } + + override suspend fun setJoinRuleRestricted(allowList: List) { + // we need to compute correct via parameters and check if PL are correct + val allowEntries = allowList.map { spaceId -> + RoomJoinRulesAllowEntry(spaceId, viaParameterFinder.computeViaParamsForRestricted(spaceId, 3)) + } + updateJoinRule(RoomJoinRules.RESTRICTED, null, allowEntries) + } } diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/settings/joinrule/advanced/RoomJoinRuleChooseRestrictedViewModel.kt b/vector/src/main/java/im/vector/app/features/roomprofile/settings/joinrule/advanced/RoomJoinRuleChooseRestrictedViewModel.kt index 3c5e302131..dbe4e0ced7 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/settings/joinrule/advanced/RoomJoinRuleChooseRestrictedViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/settings/joinrule/advanced/RoomJoinRuleChooseRestrictedViewModel.kt @@ -188,6 +188,7 @@ class RoomJoinRuleChooseRestrictedViewModel @AssistedInject constructor( fun handleSubmit() = withState { state -> setState { copy(updatingStatus = Loading()) } + viewModelScope.launch { try { when (state.currentRoomJoinRules) { diff --git a/vector/src/main/res/layout/fragment_join_rules_recycler.xml b/vector/src/main/res/layout/fragment_join_rules_recycler.xml index 22b37274a5..fb5e1cfafe 100644 --- a/vector/src/main/res/layout/fragment_join_rules_recycler.xml +++ b/vector/src/main/res/layout/fragment_join_rules_recycler.xml @@ -32,7 +32,7 @@