mirror of
https://github.com/vector-im/element-call.git
synced 2026-03-31 07:00:26 +00:00
Add settings for disabling animations / sounds.
This commit is contained in:
@@ -86,6 +86,7 @@ import handSoundOgg from "../sound/raise_hand.ogg?url";
|
||||
import handSoundMp3 from "../sound/raise_hand.mp3?url";
|
||||
import { ReactionsAudioRenderer } from "./ReactionAudioRenderer";
|
||||
import { useSwitchCamera } from "./useSwitchCamera";
|
||||
import { showReactions, useSetting } from "../settings/settings";
|
||||
|
||||
const canScreenshare = "getDisplayMedia" in (navigator.mediaDevices ?? {});
|
||||
|
||||
@@ -178,6 +179,7 @@ export const InCallView: FC<InCallViewProps> = ({
|
||||
connState,
|
||||
onShareClick,
|
||||
}) => {
|
||||
const [shouldShowReactions] = useSetting(showReactions);
|
||||
const { supportsReactions, raisedHands, reactions } = useReactions();
|
||||
const raisedHandCount = useMemo(
|
||||
() => Object.keys(raisedHands).length,
|
||||
@@ -187,12 +189,12 @@ export const InCallView: FC<InCallViewProps> = ({
|
||||
|
||||
const reactionsIcons = useMemo(
|
||||
() =>
|
||||
Object.entries(reactions).map(([sender, { emoji }]) => ({
|
||||
shouldShowReactions ? Object.entries(reactions).map(([sender, { emoji }]) => ({
|
||||
sender,
|
||||
emoji,
|
||||
startX: -Math.ceil(Math.random() * 50) - 25,
|
||||
})),
|
||||
[reactions],
|
||||
})) : [],
|
||||
[shouldShowReactions, reactions],
|
||||
);
|
||||
|
||||
useWakeLock();
|
||||
@@ -232,7 +234,7 @@ export const InCallView: FC<InCallViewProps> = ({
|
||||
containerRef1,
|
||||
toggleMicrophone,
|
||||
toggleCamera,
|
||||
(muted) => muteStates.audio.setEnabled?.(!muted),
|
||||
(muted) => muteStates.audio.setEnabled?.(!muteprefered),
|
||||
);
|
||||
|
||||
const mobile = boundsValid && bounds.width <= 660;
|
||||
|
||||
@@ -8,12 +8,13 @@ Please see LICENSE in the repository root for full details.
|
||||
import { ReactNode } from "react";
|
||||
|
||||
import { useReactions } from "../useReactions";
|
||||
import { playReactionsSound, useSetting } from "../settings/settings";
|
||||
|
||||
export function ReactionsAudioRenderer(): ReactNode {
|
||||
const { reactions } = useReactions();
|
||||
const [shouldPlay] = useSetting(playReactionsSound);
|
||||
|
||||
// TODO: This may need to ensure we don't change the value if a duplicate reaction comes down.
|
||||
const expectedReactions = [...new Set([...Object.values(reactions)])];
|
||||
const expectedReactions = shouldPlay ? [...new Set([...Object.values(reactions)])] : [];
|
||||
return (
|
||||
<>
|
||||
{expectedReactions.map(
|
||||
|
||||
@@ -12,6 +12,8 @@ import { Text } from "@vector-im/compound-web";
|
||||
import { FieldRow, InputField } from "../input/Input";
|
||||
import {
|
||||
showHandRaisedTimer as showHandRaisedTimerSetting,
|
||||
showReactions as showReactionsSetting,
|
||||
playReactionsSound as playReactionsSoundSetting,
|
||||
useSetting,
|
||||
} from "./settings";
|
||||
|
||||
@@ -21,11 +23,20 @@ export const PreferencesSettingsTab: FC = () => {
|
||||
showHandRaisedTimerSetting,
|
||||
);
|
||||
|
||||
const [showReactions, setShowReactions] = useSetting(
|
||||
showReactionsSetting,
|
||||
);
|
||||
|
||||
const [playReactionsSound, setPlayReactionSound] = useSetting(
|
||||
playReactionsSoundSetting,
|
||||
);
|
||||
|
||||
|
||||
const onChangeSetting = useCallback(
|
||||
(e: ChangeEvent<HTMLInputElement>) => {
|
||||
setShowHandRaisedTimer(e.target.checked);
|
||||
(e: ChangeEvent<HTMLInputElement>, fn: (value: boolean) => void) => {
|
||||
fn(e.target.checked);
|
||||
},
|
||||
[setShowHandRaisedTimer],
|
||||
[],
|
||||
);
|
||||
|
||||
return (
|
||||
@@ -41,7 +52,32 @@ export const PreferencesSettingsTab: FC = () => {
|
||||
)}
|
||||
type="checkbox"
|
||||
checked={showHandRaisedTimer}
|
||||
onChange={onChangeSetting}
|
||||
onChange={(e) => onChangeSetting(e, setShowHandRaisedTimer)}
|
||||
/>
|
||||
</FieldRow>
|
||||
<h5>{t("settings.preferences_tab.reactions_title")}</h5>
|
||||
<FieldRow>
|
||||
<InputField
|
||||
id="showReactions"
|
||||
label={t("settings.preferences_tab.reactions_show_label")}
|
||||
description={t(
|
||||
"settings.preferences_tab.reactions_show_description",
|
||||
)}
|
||||
type="checkbox"
|
||||
checked={showReactions}
|
||||
onChange={(e) => onChangeSetting(e, setShowReactions)}
|
||||
/>
|
||||
</FieldRow>
|
||||
<FieldRow>
|
||||
<InputField
|
||||
id="playReactionSound"
|
||||
label={t("settings.preferences_tab.reactions_play_sound_label")}
|
||||
description={t(
|
||||
"settings.preferences_tab.reactions_play_sound_description",
|
||||
)}
|
||||
type="checkbox"
|
||||
checked={playReactionsSound}
|
||||
onChange={(e) => onChangeSetting(e, setPlayReactionSound)}
|
||||
/>
|
||||
</FieldRow>
|
||||
</div>
|
||||
|
||||
@@ -90,4 +90,14 @@ export const showHandRaisedTimer = new Setting<boolean>(
|
||||
false,
|
||||
);
|
||||
|
||||
export const showReactions = new Setting<boolean>(
|
||||
"reactions-show",
|
||||
true,
|
||||
);
|
||||
|
||||
export const playReactionsSound = new Setting<boolean>(
|
||||
"reactions-play-sound",
|
||||
true,
|
||||
);
|
||||
|
||||
export const alwaysShowSelf = new Setting<boolean>("always-show-self", true);
|
||||
|
||||
Reference in New Issue
Block a user