diff --git a/static/index.html b/static/index.html
index 1753f67..4250707 100644
--- a/static/index.html
+++ b/static/index.html
@@ -217,7 +217,7 @@
-
+
+
+
+
+
diff --git a/static/js/settings.js b/static/js/settings.js
index d0d3393..e0f1f63 100644
--- a/static/js/settings.js
+++ b/static/js/settings.js
@@ -430,10 +430,12 @@ function updateSettingsToggles() {
const notifToggle = $('toggle-notifications');
const soundToggle = $('toggle-sounds');
const lowBwToggle = $('toggle-lowbandwidth');
+ const speakerToggle = $('toggle-speakermode');
if (notifToggle) notifToggle.dataset.enabled = state.settings.notifications;
if (soundToggle) soundToggle.dataset.enabled = state.settings.sounds;
if (lowBwToggle) lowBwToggle.dataset.enabled = state.settings.lowBandwidth;
+ if (speakerToggle) speakerToggle.dataset.enabled = state.settings.speakerMode !== false;
}
// Toggle button click handler
@@ -482,6 +484,10 @@ document.addEventListener('DOMContentLoaded', () => {
$('toggle-notifications')?.addEventListener('click', () => handleToggleClick('toggle-notifications', 'notifications'));
$('toggle-sounds')?.addEventListener('click', () => handleToggleClick('toggle-sounds', 'sounds'));
$('toggle-lowbandwidth')?.addEventListener('click', () => handleToggleClick('toggle-lowbandwidth', 'lowBandwidth'));
+ $('toggle-speakermode')?.addEventListener('click', () => {
+ handleToggleClick('toggle-speakermode', 'speakerMode');
+ if (typeof rebuildAudioSinksForSpeakerMode === 'function') rebuildAudioSinksForSpeakerMode();
+ });
// Close modal when clicking outside
$('settings-modal')?.addEventListener('click', (e) => {
diff --git a/static/js/state.js b/static/js/state.js
index 59e9a5a..6094de6 100644
--- a/static/js/state.js
+++ b/static/js/state.js
@@ -48,7 +48,12 @@ const state = {
settings: {
notifications: true,
sounds: true,
- lowBandwidth: false
+ lowBandwidth: false,
+ // Mobile audio routing. true = remote audio plays through a hidden