|
157 | 157 |
|
158 | 158 | const toggleGuideText = document.querySelector("#toggle-guide-text-setting > input"); |
159 | 159 | const toggleSessionTime = document.querySelector("#toggle-session-time-setting > input"); |
| 160 | + const toggleWakelock = document.querySelector("#toggle-wakelock > input"); |
160 | 161 |
|
161 | 162 | const guideTextContainer = document.getElementById("guide-text"); |
162 | 163 | const sessionTime = document.getElementById("session-time"); |
|
215 | 216 |
|
216 | 217 | toggleGuideText.checked = refreshGuideVisibility(); |
217 | 218 |
|
| 219 | + let wakeLock = null; |
| 220 | + |
| 221 | + async function setWakeLock(enabled) { |
| 222 | + if (enabled) { |
| 223 | + try { |
| 224 | + wakeLock = await navigator.wakeLock.request("screen"); |
| 225 | + wakeLock.addEventListener("release", () => { |
| 226 | + wakeLock = null; |
| 227 | + }); |
| 228 | + } catch (e) {} |
| 229 | + } else if (wakeLock) { |
| 230 | + await wakeLock.release(); |
| 231 | + wakeLock = null; |
| 232 | + } |
| 233 | + } |
| 234 | + |
| 235 | + const wakelockEnabled = localStorage.getItem("wake_lock") !== "false"; |
| 236 | + toggleWakelock.checked = wakelockEnabled; |
| 237 | + setWakeLock(wakelockEnabled); |
| 238 | + |
| 239 | + toggleWakelock.addEventListener("change", () => { |
| 240 | + localStorage.setItem("wake_lock", toggleWakelock.checked); |
| 241 | + setWakeLock(toggleWakelock.checked); |
| 242 | + }); |
| 243 | + |
| 244 | + document.addEventListener("visibilitychange", () => { |
| 245 | + if (document.visibilityState === "visible" && localStorage.getItem("wake_lock") !== "false") { |
| 246 | + setWakeLock(true); |
| 247 | + } |
| 248 | + }); |
| 249 | + |
218 | 250 | function refreshSessionVisibility(delay) { |
219 | 251 | if (sessionRevealTimeout) clearTimeout(sessionRevealTimeout); |
220 | 252 | sessionTime.style.transitionProperty = "initial"; |
|
905 | 937 | </label> |
906 | 938 | <div>Display breathing instructions</div> |
907 | 939 | </div> |
| 940 | + <div class="setting"> |
| 941 | + <label id="toggle-wakelock" class="switch" role="button" aria-label="Toggle wake lock"> |
| 942 | + <input type="checkbox" /> |
| 943 | + <span class="slider"></span> |
| 944 | + </label> |
| 945 | + <div>Prevent screen dimming</div> |
| 946 | + </div> |
908 | 947 | </div> |
909 | 948 | <h1> |
910 | 949 | <details> |
|
0 commit comments