Skip to content

Commit fbec250

Browse files
committed
Set guest access in developer mode
1 parent b32dcd6 commit fbec250

File tree

6 files changed

+48
-7
lines changed

6 files changed

+48
-7
lines changed

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/state/DefaultStateService.kt

+2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import org.matrix.android.sdk.api.util.JsonDict
3434
import org.matrix.android.sdk.api.util.MimeTypes
3535
import org.matrix.android.sdk.api.util.Optional
3636
import org.matrix.android.sdk.internal.session.content.FileUploader
37+
import java.lang.UnsupportedOperationException
3738

3839
internal class DefaultStateService @AssistedInject constructor(@Assisted private val roomId: String,
3940
private val stateEventDataSource: StateEventDataSource,
@@ -127,6 +128,7 @@ internal class DefaultStateService @AssistedInject constructor(@Assisted private
127128

128129
override suspend fun updateJoinRule(joinRules: RoomJoinRules?, guestAccess: GuestAccess?) {
129130
if (joinRules != null) {
131+
if (joinRules == RoomJoinRules.RESTRICTED) throw UnsupportedOperationException("No yet supported")
130132
sendStateEvent(
131133
eventType = EventType.STATE_ROOM_JOIN_RULES,
132134
body = mapOf("join_rule" to joinRules),

vector/src/main/java/im/vector/app/features/roomprofile/settings/RoomSettingsAction.kt

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package im.vector.app.features.roomprofile.settings
1818

1919
import im.vector.app.core.platform.VectorViewModelAction
20+
import org.matrix.android.sdk.api.session.room.model.GuestAccess
2021
import org.matrix.android.sdk.api.session.room.model.RoomHistoryVisibility
2122
import org.matrix.android.sdk.api.session.room.model.RoomJoinRules
2223

@@ -26,6 +27,7 @@ sealed class RoomSettingsAction : VectorViewModelAction {
2627
data class SetRoomTopic(val newTopic: String) : RoomSettingsAction()
2728
data class SetRoomHistoryVisibility(val visibility: RoomHistoryVisibility) : RoomSettingsAction()
2829
data class SetRoomJoinRule(val roomJoinRule: RoomJoinRules?) : RoomSettingsAction()
30+
data class SetRoomGuestAccess(val guestAccess: GuestAccess) : RoomSettingsAction()
2931

3032
object Save : RoomSettingsAction()
3133
object Cancel : RoomSettingsAction()

vector/src/main/java/im/vector/app/features/roomprofile/settings/RoomSettingsController.kt

+19
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,11 @@ import im.vector.app.core.resources.ColorProvider
2424
import im.vector.app.core.resources.StringProvider
2525
import im.vector.app.features.form.formEditTextItem
2626
import im.vector.app.features.form.formEditableAvatarItem
27+
import im.vector.app.features.form.formSwitchItem
2728
import im.vector.app.features.home.AvatarRenderer
2829
import im.vector.app.features.home.room.detail.timeline.format.RoomHistoryVisibilityFormatter
30+
import im.vector.app.features.settings.VectorPreferences
31+
import org.matrix.android.sdk.api.session.room.model.GuestAccess
2932
import org.matrix.android.sdk.api.session.room.model.RoomJoinRules
3033
import org.matrix.android.sdk.api.util.toMatrixItem
3134
import javax.inject.Inject
@@ -34,6 +37,7 @@ class RoomSettingsController @Inject constructor(
3437
private val stringProvider: StringProvider,
3538
private val avatarRenderer: AvatarRenderer,
3639
private val roomHistoryVisibilityFormatter: RoomHistoryVisibilityFormatter,
40+
private val vectorPreferences: VectorPreferences,
3741
colorProvider: ColorProvider
3842
) : TypedEpoxyController<RoomSettingsViewState>() {
3943

@@ -45,6 +49,7 @@ class RoomSettingsController @Inject constructor(
4549
fun onTopicChanged(topic: String)
4650
fun onHistoryVisibilityClicked()
4751
fun onJoinRuleClicked()
52+
fun onToggleGuestAccess()
4853
}
4954

5055
private val dividerColor = colorProvider.getColorFromAttribute(R.attr.vctr_list_divider_color)
@@ -122,6 +127,20 @@ class RoomSettingsController @Inject constructor(
122127
editable = data.actionPermissions.canChangeJoinRule,
123128
action = { if (data.actionPermissions.canChangeJoinRule) callback?.onJoinRuleClicked() }
124129
)
130+
131+
val isPublic = (data.newRoomJoinRules.newJoinRules ?: data.currentRoomJoinRules) == RoomJoinRules.PUBLIC
132+
if (vectorPreferences.developerMode() && isPublic) {
133+
val guestAccess = data.newRoomJoinRules.newGuestAccess ?: data.currentGuestAccess
134+
// add guest access option?
135+
formSwitchItem {
136+
id("guest_access")
137+
title(stringProvider.getString(R.string.room_settings_guest_access_title))
138+
switchChecked(guestAccess == GuestAccess.CanJoin)
139+
listener {
140+
callback?.onToggleGuestAccess()
141+
}
142+
}
143+
}
125144
}
126145

127146
private fun RoomSettingsViewState.getJoinRuleWording(): String {

vector/src/main/java/im/vector/app/features/roomprofile/settings/RoomSettingsFragment.kt

+9-3
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ import im.vector.app.databinding.FragmentRoomSettingGenericBinding
4242
import im.vector.app.features.home.AvatarRenderer
4343
import im.vector.app.features.roomprofile.RoomProfileArgs
4444
import im.vector.app.features.roomprofile.RoomProfileSharedActionViewModel
45-
import im.vector.app.features.roomprofile.settings.historyvisibility.RoomHistoryVisibilitySharedActionViewModel
4645
import im.vector.app.features.roomprofile.settings.historyvisibility.RoomHistoryVisibilityBottomSheet
46+
import im.vector.app.features.roomprofile.settings.historyvisibility.RoomHistoryVisibilitySharedActionViewModel
4747
import im.vector.app.features.roomprofile.settings.joinrule.RoomJoinRuleBottomSheet
4848
import im.vector.app.features.roomprofile.settings.joinrule.RoomJoinRuleSharedActionViewModel
49-
49+
import org.matrix.android.sdk.api.session.room.model.GuestAccess
5050
import org.matrix.android.sdk.api.util.toMatrixItem
5151
import java.util.UUID
5252
import javax.inject.Inject
@@ -174,12 +174,18 @@ class RoomSettingsFragment @Inject constructor(
174174
.show(childFragmentManager, "RoomHistoryVisibilityBottomSheet")
175175
}
176176

177-
override fun onJoinRuleClicked() = withState(viewModel) { state ->
177+
override fun onJoinRuleClicked() = withState(viewModel) { state ->
178178
val currentJoinRule = state.newRoomJoinRules.newJoinRules ?: state.currentRoomJoinRules
179179
RoomJoinRuleBottomSheet.newInstance(currentJoinRule)
180180
.show(childFragmentManager, "RoomJoinRuleBottomSheet")
181181
}
182182

183+
override fun onToggleGuestAccess() = withState(viewModel) { state ->
184+
val currentGuestAccess = state.newRoomJoinRules.newGuestAccess ?: state.currentGuestAccess
185+
val toggled = if (currentGuestAccess == GuestAccess.Forbidden) GuestAccess.CanJoin else GuestAccess.Forbidden
186+
viewModel.handle(RoomSettingsAction.SetRoomGuestAccess(toggled))
187+
}
188+
183189
override fun onImageReady(uri: Uri?) {
184190
uri ?: return
185191
viewModel.handle(

vector/src/main/java/im/vector/app/features/roomprofile/settings/RoomSettingsViewModel.kt

+15-4
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ import com.airbnb.mvrx.FragmentViewModelContext
2121
import com.airbnb.mvrx.MvRxViewModelFactory
2222
import com.airbnb.mvrx.ViewModelContext
2323
import dagger.assisted.Assisted
24-
import dagger.assisted.AssistedInject
2524
import dagger.assisted.AssistedFactory
25+
import dagger.assisted.AssistedInject
2626
import im.vector.app.core.extensions.exhaustive
2727
import im.vector.app.core.platform.VectorViewModel
2828
import im.vector.app.features.powerlevel.PowerLevelsObservableFactory
@@ -190,6 +190,7 @@ class RoomSettingsViewModel @AssistedInject constructor(@Assisted initialState:
190190
is RoomSettingsAction.SetRoomTopic -> setState { copy(newTopic = action.newTopic) }
191191
is RoomSettingsAction.SetRoomHistoryVisibility -> setState { copy(newHistoryVisibility = action.visibility) }
192192
is RoomSettingsAction.SetRoomJoinRule -> handleSetRoomJoinRule(action)
193+
is RoomSettingsAction.SetRoomGuestAccess -> handleSetGuestAccess(action)
193194
is RoomSettingsAction.Save -> saveSettings()
194195
is RoomSettingsAction.Cancel -> cancel()
195196
}.exhaustive
@@ -198,7 +199,17 @@ class RoomSettingsViewModel @AssistedInject constructor(@Assisted initialState:
198199
private fun handleSetRoomJoinRule(action: RoomSettingsAction.SetRoomJoinRule) = withState { state ->
199200
setState {
200201
copy(newRoomJoinRules = RoomSettingsViewState.NewJoinRule(
201-
action.roomJoinRule.takeIf { it != state.currentRoomJoinRules }
202+
newJoinRules = action.roomJoinRule.takeIf { it != state.currentRoomJoinRules },
203+
newGuestAccess = state.newRoomJoinRules.newGuestAccess.takeIf { it != state.currentGuestAccess }
204+
))
205+
}
206+
}
207+
208+
private fun handleSetGuestAccess(action: RoomSettingsAction.SetRoomGuestAccess) = withState { state ->
209+
setState {
210+
copy(newRoomJoinRules = RoomSettingsViewState.NewJoinRule(
211+
newJoinRules = state.newRoomJoinRules.newJoinRules.takeIf { it != state.currentRoomJoinRules },
212+
newGuestAccess = action.guestAccess.takeIf { it != state.currentGuestAccess }
202213
))
203214
}
204215
}
@@ -230,8 +241,8 @@ class RoomSettingsViewModel @AssistedInject constructor(@Assisted initialState:
230241
val summary = state.roomSummary.invoke()
231242

232243
when (val avatarAction = state.avatarAction) {
233-
RoomSettingsViewState.AvatarAction.None -> Unit
234-
RoomSettingsViewState.AvatarAction.DeleteAvatar -> {
244+
RoomSettingsViewState.AvatarAction.None -> Unit
245+
RoomSettingsViewState.AvatarAction.DeleteAvatar -> {
235246
operationList.add(room.rx().deleteAvatar())
236247
}
237248
is RoomSettingsViewState.AvatarAction.UpdateAvatar -> {

vector/src/main/res/values/strings.xml

+1
Original file line numberDiff line numberDiff line change
@@ -1405,6 +1405,7 @@
14051405
<string name="room_settings_room_read_history_dialog_subtitle">Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.</string>
14061406
<string name="room_settings_room_access_rules_pref_dialog_title">Who can access this room?</string>
14071407
<string name="room_settings_room_access_title">Room access</string>
1408+
<string name="room_settings_guest_access_title">Allow guests to join</string>
14081409

14091410
<!-- room settings : alias -->
14101411
<string name="room_settings_alias_title">Room addresses</string>

0 commit comments

Comments
 (0)