diff --git a/src/components/views/elements/AppTile.js b/src/components/views/elements/AppTile.js
index a52dea3e0a..299025f949 100644
--- a/src/components/views/elements/AppTile.js
+++ b/src/components/views/elements/AppTile.js
@@ -735,7 +735,7 @@ export default class AppTile extends React.Component {
// Additional iframe feature pemissions
// (see - https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-permissions-in-cross-origin-iframes and https://wicg.github.io/feature-policy/)
- const iframeFeatures = "microphone; camera; encrypted-media; autoplay;";
+ const iframeFeatures = "microphone; camera; encrypted-media; autoplay; display-capture;";
const appTileBodyClass = 'mx_AppTileBody' + (this.props.miniMode ? '_mini ' : ' ');
diff --git a/src/components/views/rooms/RoomList.tsx b/src/components/views/rooms/RoomList.tsx
index 3274e0e49f..92c5982276 100644
--- a/src/components/views/rooms/RoomList.tsx
+++ b/src/components/views/rooms/RoomList.tsx
@@ -45,6 +45,7 @@ import { arrayFastClone, arrayHasDiff } from "../../../utils/arrays";
import { objectShallowClone, objectWithOnly } from "../../../utils/objects";
import { IconizedContextMenuOption, IconizedContextMenuOptionList } from "../context_menus/IconizedContextMenu";
import AccessibleButton from "../elements/AccessibleButton";
+import TagOrderStore from "../../../stores/TagOrderStore";
interface IProps {
onKeyDown: (ev: React.KeyboardEvent) => void;
@@ -129,7 +130,9 @@ const TAG_AESTHETICS: {
}}
/>
{
e.preventDefault();
diff --git a/src/components/views/settings/CrossSigningPanel.js b/src/components/views/settings/CrossSigningPanel.js
index 1c6baee9af..847bcf3da3 100644
--- a/src/components/views/settings/CrossSigningPanel.js
+++ b/src/components/views/settings/CrossSigningPanel.js
@@ -89,6 +89,7 @@ export default class CrossSigningPanel extends React.PureComponent {
const homeserverSupportsCrossSigning =
await cli.doesServerSupportUnstableFeature("org.matrix.e2e_cross_signing");
const crossSigningReady = await cli.isCrossSigningReady();
+ const secretStorageReady = await cli.isSecretStorageReady();
this.setState({
crossSigningPublicKeysOnDevice,
@@ -101,6 +102,7 @@ export default class CrossSigningPanel extends React.PureComponent {
secretStorageKeyInAccount,
homeserverSupportsCrossSigning,
crossSigningReady,
+ secretStorageReady,
});
}
@@ -151,6 +153,7 @@ export default class CrossSigningPanel extends React.PureComponent {
secretStorageKeyInAccount,
homeserverSupportsCrossSigning,
crossSigningReady,
+ secretStorageReady,
} = this.state;
let errorSection;
@@ -166,14 +169,19 @@ export default class CrossSigningPanel extends React.PureComponent {
summarisedStatus = {_t(
"Your homeserver does not support cross-signing.",
)}
;
- } else if (crossSigningReady) {
+ } else if (crossSigningReady && secretStorageReady) {
summarisedStatus = ✅ {_t(
- "Cross-signing and secret storage are enabled.",
+ "Cross-signing and secret storage are ready for use.",
+ )}
;
+ } else if (crossSigningReady && !secretStorageReady) {
+ summarisedStatus = ✅ {_t(
+ "Cross-signing is ready for use, but secret storage is " +
+ "currently not being used to backup your keys.",
)}
;
} else if (crossSigningPrivateKeysInStorage) {
summarisedStatus = {_t(
- "Your account has a cross-signing identity in secret storage, but it " +
- "is not yet trusted by this session.",
+ "Your account has a cross-signing identity in secret storage, " +
+ "but it is not yet trusted by this session.",
)}
;
} else {
summarisedStatus = {_t(
diff --git a/src/createRoom.ts b/src/createRoom.ts
index 78d0cf1356..09de265ebc 100644
--- a/src/createRoom.ts
+++ b/src/createRoom.ts
@@ -27,6 +27,7 @@ import * as Rooms from "./Rooms";
import DMRoomMap from "./utils/DMRoomMap";
import {getAddressType} from "./UserAddress";
import { getE2EEWellKnown } from "./utils/WellKnownUtils";
+import GroupStore from "./stores/GroupStore";
// we define a number of interfaces which take their names from the js-sdk
/* eslint-disable camelcase */
@@ -79,6 +80,7 @@ interface IOpts {
encryption?: boolean;
inlineErrors?: boolean;
andView?: boolean;
+ associatedWithCommunity?: string;
}
/**
@@ -181,6 +183,10 @@ export default function createRoom(opts: IOpts): Promise {
} else {
return Promise.resolve();
}
+ }).then(() => {
+ if (opts.associatedWithCommunity) {
+ return GroupStore.addRoomToGroup(opts.associatedWithCommunity, roomId, false);
+ }
}).then(function() {
// NB createRoom doesn't block on the client seeing the echo that the
// room has been created, so we race here with the client knowing that
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index d6ba736a76..442f07499c 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -645,7 +645,8 @@
"Confirm password": "Confirm password",
"Change Password": "Change Password",
"Your homeserver does not support cross-signing.": "Your homeserver does not support cross-signing.",
- "Cross-signing and secret storage are enabled.": "Cross-signing and secret storage are enabled.",
+ "Cross-signing and secret storage are ready for use.": "Cross-signing and secret storage are ready for use.",
+ "Cross-signing is ready for use, but secret storage is currently not being used to backup your keys.": "Cross-signing is ready for use, but secret storage is currently not being used to backup your keys.",
"Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.",
"Cross-signing and secret storage are not yet set up.": "Cross-signing and secret storage are not yet set up.",
"Reset cross-signing and secret storage": "Reset cross-signing and secret storage",
@@ -1121,6 +1122,7 @@
"Rooms": "Rooms",
"Add room": "Add room",
"Create new room": "Create new room",
+ "Explore community rooms": "Explore community rooms",
"Explore public rooms": "Explore public rooms",
"Low priority": "Low priority",
"System Alerts": "System Alerts",
@@ -1636,18 +1638,21 @@
"Community ID": "Community ID",
"example": "example",
"Please enter a name for the room": "Please enter a name for the room",
- "Set a room address to easily share your room with other people.": "Set a room address to easily share your room with other people.",
- "This room is private, and can only be joined by invitation.": "This room is private, and can only be joined by invitation.",
+ "Private rooms can be found and joined by invitation only. Public rooms can be found and joined by anyone.": "Private rooms can be found and joined by invitation only. Public rooms can be found and joined by anyone.",
+ "Private rooms can be found and joined by invitation only. Public rooms can be found and joined by anyone in this community.": "Private rooms can be found and joined by invitation only. Public rooms can be found and joined by anyone in this community.",
"You can’t disable this later. Bridges & most bots won’t work yet.": "You can’t disable this later. Bridges & most bots won’t work yet.",
"Enable end-to-end encryption": "Enable end-to-end encryption",
+ "You might enable this if the room will only be used for collaborating with internal teams on your homeserver. This cannot be changed later.": "You might enable this if the room will only be used for collaborating with internal teams on your homeserver. This cannot be changed later.",
+ "You might disable this if the room will be used for collaborating with external teams who have their own homeserver. This cannot be changed later.": "You might disable this if the room will be used for collaborating with external teams who have their own homeserver. This cannot be changed later.",
"Create a public room": "Create a public room",
"Create a private room": "Create a private room",
+ "Create a room in %(communityName)s": "Create a room in %(communityName)s",
"Name": "Name",
"Topic (optional)": "Topic (optional)",
"Make this room public": "Make this room public",
"Hide advanced": "Hide advanced",
"Show advanced": "Show advanced",
- "Block users on other matrix homeservers from joining this room (This setting cannot be changed later!)": "Block users on other matrix homeservers from joining this room (This setting cannot be changed later!)",
+ "Block anyone not part of %(serverName)s from ever joining this room.": "Block anyone not part of %(serverName)s from ever joining this room.",
"Create Room": "Create Room",
"Sign out": "Sign out",
"To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this",
diff --git a/src/rageshake/submit-rageshake.ts b/src/rageshake/submit-rageshake.ts
index 74292749b9..448562b68a 100644
--- a/src/rageshake/submit-rageshake.ts
+++ b/src/rageshake/submit-rageshake.ts
@@ -115,6 +115,7 @@ async function collectBugReport(opts: IOpts = {}, gzipLogs = true) {
body.append("cross_signing_supported_by_hs",
String(await client.doesServerSupportUnstableFeature("org.matrix.e2e_cross_signing")));
body.append("cross_signing_ready", String(await client.isCrossSigningReady()));
+ body.append("secret_storage_ready", String(await client.isSecretStorageReady()));
}
}
diff --git a/src/stores/TagOrderStore.js b/src/stores/TagOrderStore.js
index f02fce0769..2eb35e6dc2 100644
--- a/src/stores/TagOrderStore.js
+++ b/src/stores/TagOrderStore.js
@@ -285,6 +285,13 @@ class TagOrderStore extends Store {
getSelectedTags() {
return this._state.selectedTags;
}
+
+ getSelectedPrototypeTag() {
+ if (SettingsStore.getValue("feature_communities_v2_prototypes")) {
+ return this.getSelectedTags()[0];
+ }
+ return null; // no selection as far as this function is concerned
+ }
}
if (global.singletonTagOrderStore === undefined) {