diff --git a/.changeset/feat-large-room-call-button.md b/.changeset/feat-large-room-call-button.md
new file mode 100644
index 00000000..e28ce21e
--- /dev/null
+++ b/.changeset/feat-large-room-call-button.md
@@ -0,0 +1,5 @@
+---
+default: minor
+---
+
+Added a toggle to enable/disable showing the call button for large (> 10 member) rooms.
diff --git a/src/app/features/room/RoomViewHeader.tsx b/src/app/features/room/RoomViewHeader.tsx
index a73df787..a358e30b 100644
--- a/src/app/features/room/RoomViewHeader.tsx
+++ b/src/app/features/room/RoomViewHeader.tsx
@@ -361,6 +361,8 @@ export function RoomViewHeader({ callView }: { callView?: boolean }) {
.getLiveTimeline()
.getState(EventTimeline.FORWARDS)
?.maySendStateEvent('org.matrix.msc3401.call.member', mx.getUserId()!);
+ const [alwaysShowCallButton] = useSetting(settingsAtom, 'alwaysShowCallButton');
+ const shouldShowCallButton = alwaysShowCallButton || room.getJoinedMemberCount() <= 10;
const encryptionEvent = useStateEvent(room, StateEvent.RoomEncryption);
const encryptedRoom = !!encryptionEvent;
@@ -708,7 +710,7 @@ export function RoomViewHeader({ callView }: { callView?: boolean }) {
)}
- {canUseCalls && }
+ {canUseCalls && shouldShowCallButton && }
+ Calls
+
+
+ }
+ />
+
+
+ );
+}
+
function Messages() {
const [hideMembershipEvents, setHideMembershipEvents] = useSetting(
settingsAtom,
@@ -1078,6 +1103,7 @@ export function General({ requestClose }: GeneralProps) {
+
diff --git a/src/app/state/settings.ts b/src/app/state/settings.ts
index ee09b3e2..350f8e12 100644
--- a/src/app/state/settings.ts
+++ b/src/app/state/settings.ts
@@ -96,6 +96,7 @@ export interface Settings {
autoplayStickers: boolean;
autoplayEmojis: boolean;
saveStickerEmojiBandwidth: boolean;
+ alwaysShowCallButton: boolean;
// furry stuff
renderAnimals: boolean;
@@ -176,6 +177,7 @@ const defaultSettings: Settings = {
autoplayStickers: true,
autoplayEmojis: true,
saveStickerEmojiBandwidth: false,
+ alwaysShowCallButton: false,
// furry stuff
renderAnimals: true,