Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Make the "Voice message" button in the message composer configurable #11603

Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions src/components/views/rooms/MessageComposer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ interface IState {
isStickerPickerOpen: boolean;
showStickersButton: boolean;
showPollsButton: boolean;
showVoiceRecordingButton: boolean;
showVoiceBroadcastButton: boolean;
isWysiwygLabEnabled: boolean;
isRichTextEnabled: boolean;
Expand Down Expand Up @@ -142,6 +143,7 @@ export class MessageComposer extends React.Component<IProps, IState> {
isStickerPickerOpen: false,
showStickersButton: SettingsStore.getValue("MessageComposerInput.showStickersButton"),
showPollsButton: SettingsStore.getValue("MessageComposerInput.showPollsButton"),
showVoiceRecordingButton: SettingsStore.getValue("MessageComposerInput.showVoiceRecordingButton"),
showVoiceBroadcastButton: SettingsStore.getValue(Features.VoiceBroadcast),
isWysiwygLabEnabled: SettingsStore.getValue<boolean>("feature_wysiwyg_composer"),
isRichTextEnabled: true,
Expand All @@ -152,6 +154,7 @@ export class MessageComposer extends React.Component<IProps, IState> {

SettingsStore.monitorSetting("MessageComposerInput.showStickersButton", null);
SettingsStore.monitorSetting("MessageComposerInput.showPollsButton", null);
SettingsStore.monitorSetting("MessageComposerInput.showVoiceRecordingButton", null);
SettingsStore.monitorSetting(Features.VoiceBroadcast, null);
SettingsStore.monitorSetting("feature_wysiwyg_composer", null);
}
Expand Down Expand Up @@ -228,6 +231,15 @@ export class MessageComposer extends React.Component<IProps, IState> {
}
break;
}
case "MessageComposerInput.showVoiceRecordingButton": {
const showVoiceRecordingButton = SettingsStore.getValue(
"MessageComposerInput.showVoiceRecordingButton",
);
if (this.state.showVoiceRecordingButton !== showVoiceRecordingButton) {
this.setState({ showVoiceRecordingButton });
}
break;
}
case Features.VoiceBroadcast: {
if (this.state.showVoiceBroadcastButton !== settingUpdatedPayload.newValue) {
this.setState({ showVoiceBroadcastButton: !!settingUpdatedPayload.newValue });
Expand Down Expand Up @@ -632,6 +644,7 @@ export class MessageComposer extends React.Component<IProps, IState> {
isRichTextEnabled={this.state.isRichTextEnabled}
onComposerModeClick={this.onRichTextToggle}
toggleButtonMenu={this.toggleButtonMenu}
showVoiceRecordingButton={this.state.showVoiceRecordingButton}
showVoiceBroadcastButton={this.state.showVoiceBroadcastButton}
onStartVoiceBroadcastClick={() => {
setUpVoiceBroadcastPreRecording(
Expand Down
5 changes: 3 additions & 2 deletions src/components/views/rooms/MessageComposerButtons.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ interface IProps {
showPollsButton: boolean;
showStickersButton: boolean;
toggleButtonMenu: () => void;
showVoiceRecordingButton: boolean;
showVoiceBroadcastButton: boolean;
onStartVoiceBroadcastClick: () => void;
isRichTextEnabled: boolean;
Expand Down Expand Up @@ -88,7 +89,7 @@ const MessageComposerButtons: React.FC<IProps> = (props: IProps) => {
moreButtons = [
uploadButton(), // props passed via UploadButtonContext
showStickersButton(props),
voiceRecordingButton(props, narrow),
props.showVoiceRecordingButton ? voiceRecordingButton(props, narrow) : null,
startVoiceBroadcastButton(props),
props.showPollsButton ? pollButton(room, props.relation) : null,
showLocationButton(props, room, matrixClient),
Expand All @@ -108,7 +109,7 @@ const MessageComposerButtons: React.FC<IProps> = (props: IProps) => {
];
moreButtons = [
showStickersButton(props),
voiceRecordingButton(props, narrow),
props.showVoiceRecordingButton ? voiceRecordingButton(props, narrow) : null,
startVoiceBroadcastButton(props),
props.showPollsButton ? pollButton(room, props.relation) : null,
showLocationButton(props, room, matrixClient),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ export default class PreferencesUserSettingsTab extends React.Component<IProps,
"MessageComposerInput.ctrlEnterToSend",
"MessageComposerInput.surroundWith",
"MessageComposerInput.showStickersButton",
"MessageComposerInput.showVoiceRecordingButton",
"MessageComposerInput.insertTrailingColon",
];

Expand Down
1 change: 1 addition & 0 deletions src/i18n/strings/en_EN.json
Original file line number Diff line number Diff line change
Expand Up @@ -1245,6 +1245,7 @@
"Sometimes referred to as \"custom emojis\".": "Sometimes referred to as \"custom emojis\".",
"Use custom size": "Use custom size",
"Show polls button": "Show polls button",
"Show voice message button": "Show voice message button",
"Use a more compact 'Modern' layout": "Use a more compact 'Modern' layout",
"Show avatars in user, room and event mentions": "Show avatars in user, room and event mentions",
"Surround selected text when typing special characters": "Surround selected text when typing special characters",
Expand Down
5 changes: 5 additions & 0 deletions src/settings/Settings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -514,6 +514,11 @@ export const SETTINGS: { [setting: string]: ISetting } = {
displayName: _td("Show polls button"),
default: true,
},
"MessageComposerInput.showVoiceRecordingButton": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("Show voice message button"),
default: true,
},
"MessageComposerInput.insertTrailingColon": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|insert_trailing_colon_mentions"),
Expand Down
31 changes: 31 additions & 0 deletions test/components/views/rooms/MessageComposerButtons-test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ describe("MessageComposerButtons", () => {
showLocationButton={true}
showPollsButton={true}
showStickersButton={true}
showVoiceRecordingButton={true}
/>,
false,
);
Expand All @@ -90,6 +91,7 @@ describe("MessageComposerButtons", () => {
showLocationButton={true}
showPollsButton={true}
showStickersButton={true}
showVoiceRecordingButton={true}
/>,
false,
);
Expand All @@ -110,6 +112,7 @@ describe("MessageComposerButtons", () => {
showLocationButton={true}
showPollsButton={true}
showStickersButton={true}
showVoiceRecordingButton={true}
/>,
true,
);
Expand All @@ -125,6 +128,7 @@ describe("MessageComposerButtons", () => {
showLocationButton={true}
showPollsButton={true}
showStickersButton={true}
showVoiceRecordingButton={true}
/>,
true,
);
Expand All @@ -141,6 +145,7 @@ describe("MessageComposerButtons", () => {
showLocationButton={true}
showPollsButton={true}
showStickersButton={true}
showVoiceRecordingButton={true}
/>,
true,
);
Expand All @@ -156,6 +161,7 @@ describe("MessageComposerButtons", () => {
showLocationButton={true}
showPollsButton={false} // !! the change from the alternate test
showStickersButton={true}
showVoiceRecordingButton={true}
/>,
true,
);
Expand All @@ -182,6 +188,7 @@ describe("MessageComposerButtons", () => {
showLocationButton={true}
showPollsButton={true}
showStickersButton={true}
showVoiceRecordingButton={true}
showVoiceBroadcastButton={true}
/>,
false,
Expand All @@ -195,4 +202,28 @@ describe("MessageComposerButtons", () => {
]);
});
});

describe("with showVoiceRecordingButton = false", () => {
it("should not render the »Voice Message« button", () => {
wrapAndRender(
<MessageComposerButtons
{...mockProps}
isMenuOpen={true}
showLocationButton={true}
showPollsButton={true}
showStickersButton={true}
showVoiceRecordingButton={false}
showVoiceBroadcastButton={false}
/>,
false,
);

expect(getButtonLabels()).toEqual([
"Emoji",
"Attachment",
"More options",
["Sticker", "Poll", "Location"],
]);
});
});
});