Similarly to the room creation, the room settings have been revisited, to support the knock join rule in there. The starting point for EW and EX is different - EX currently supports just editing the name, topic and avatar of the room while EW already had the option to change join rules, E2EE, add/edit room addresses, etc. The goal is to make EW and EX is consistent, and only have differences when there is a clear reason for that.
Known differences between EX & EW:
EX will not support changing room join rule to restriced (Space members), since it generally yet does not support Spaces.
EX will only support adding/editing the main room address since alternative addresses are not frequently used. EW keeps this functionality to make sure there are still means to do it.
Controls & Conditions
The room name, topic and avatar parts keep working as before.
Room access
This controls the room’s join rules:
Invite only => invite
Space members => restricted (EW only)
Ask to join => knock
Anyone => public
When a room with restricted or _knockrestricted is opened on EX, then TBD is selected.
When a room with _knockrestricted is opened on EW, then TBD is selected.
(Main) Room address
This text entry creates or updates the main room address (the alias field in the m.room.canonical_alias event as well as the so called local alias managed by this directory-room-alias API).
If the room has other alternative addresses (local or defined by the _m.room.canonicalalias), those should remain untouched (e.g. when modifying the main room address on EX, any existing alternative addresses remain as is).
Only shown when the join rule is knock or public.
When join rules are changed (to something other than knock or public), the main address or alternative addresses are kept, e.g. if something already exists, it is not removed.
If there is no address yet, autofill it from the room name.
Needs to be validated for invalid symbols, and checked if it is available using the same logic as when creating a room.
Visible in public room directory
This toggle controls if the room can be found in the directory of the homeserver of the currently logged in user, and is controlled by this API.
Only shown when join rules are knock or public.
When a user changes join rules to something other than knock or public, the room should be automatically made invisible (private) in the room directory.
Enable end-to-end encryption
This toggle controls if the room has E2EE turned ON (with m.room.encryption event).
This cannot be turned OFF after it has been turned ON.
The user has full control over when to turn this ON (e.g. we do not set any constraints), however a disclaimer is shown with things to consider when trying to turn it ON.
Who can read history
This controls the history visibility of the room (with _m.room.historyvisibility event):
Anyone => _worldreabable (shown only when join rule is public and E2EE is OFF)
Members since selecting this option => shared
Members since they were invited => invited (not shown when join rule is public and E2EE is OFF)
When the user changes the join rules and/or E2EE so that a previously selected option disappears, we automatically select the safest option:
When the _worldreable option disappears, invited is selected.
When invited disappears, shared is selected (this actually can not happen as long as there is no option to turn E2EE OFF).
When a room with history visibility joined is opened, TBD is selected.
We do not want to support this option because it is not needed for messaging use cases. However, should someone else set it, we have to agree what correct behaviour is.
Permissions
Only need to update the copy/labels to indicate that accept requests to join is the same permission as inviting users, and declining requests to join is the same permission as kicking people.
### Questions
- [ ] If you open a room with a restricted or knock_restricted join rule on EX, what should we show in the room access?
- [ ] If you open a room with the knock_restricted join rule on EW, should Space members or Ask to join be selected?
- [ ] If you open a room with history visibility joined on EW or EX, what should be shown?
Description
Background
Similarly to the room creation, the room settings have been revisited, to support the knock join rule in there. The starting point for EW and EX is different - EX currently supports just editing the name, topic and avatar of the room while EW already had the option to change join rules, E2EE, add/edit room addresses, etc. The goal is to make EW and EX is consistent, and only have differences when there is a clear reason for that.
Known differences between EX & EW:
Controls & Conditions
The room name, topic and avatar parts keep working as before.
Room access
(Main) Room address
Visible in public room directory
Enable end-to-end encryption
Who can read history
Permissions
Designs
Acceptance criteria
Size estimate
None
Dependencies
Out of scope
Open questions
Subtasks