From 7e4c9234a7408130c137e4b0b1b9aab8c6736c57 Mon Sep 17 00:00:00 2001 From: Mrittick Deb Date: Mon, 13 Jul 2026 22:45:45 +0530 Subject: [PATCH 1/2] feat: keep mobile screen awake while using trackpad --- src/routes/trackpad.tsx | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/routes/trackpad.tsx b/src/routes/trackpad.tsx index 9d06217..4fa5612 100644 --- a/src/routes/trackpad.tsx +++ b/src/routes/trackpad.tsx @@ -64,6 +64,47 @@ function TrackpadPage() { } }, [keyboardOpen]) + // Keep the mobile screen awake while using the trackpad + useEffect(() => { + let wakeLock: WakeLockSentinel | null = null + + const requestWakeLock = async () => { + if (typeof window !== "undefined" && "wakeLock" in navigator) { + try { + wakeLock = await navigator.wakeLock.request("screen") + console.log("[WakeLock] Screen Wake Lock acquired") + } catch (err) { + console.warn("[WakeLock] Failed to acquire screen wake lock:", err) + } + } + } + + requestWakeLock() + + const handleVisibilityChange = () => { + if (document.visibilityState === "visible") { + requestWakeLock() + } + } + + document.addEventListener("visibilitychange", handleVisibilityChange) + + return () => { + document.removeEventListener("visibilitychange", handleVisibilityChange) + if (wakeLock) { + wakeLock + .release() + .then(() => { + wakeLock = null + console.log("[WakeLock] Screen Wake Lock released") + }) + .catch((err) => { + console.error("[WakeLock] Failed to release wake lock:", err) + }) + } + } + }, []) + const toggleKeyboard = () => setKeyboardOpen((prev) => !prev) const focusInput = () => hiddenInputRef.current?.focus() From df1bd62f4da35b6e1bbefaecb5d98edcee958aab Mon Sep 17 00:00:00 2001 From: Mrittick Deb Date: Mon, 13 Jul 2026 22:59:39 +0530 Subject: [PATCH 2/2] fix: resolve review feedback on screen wake lock race conditions --- src/routes/trackpad.tsx | 41 +++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/src/routes/trackpad.tsx b/src/routes/trackpad.tsx index 4fa5612..dd8c1d3 100644 --- a/src/routes/trackpad.tsx +++ b/src/routes/trackpad.tsx @@ -67,15 +67,31 @@ function TrackpadPage() { // Keep the mobile screen awake while using the trackpad useEffect(() => { let wakeLock: WakeLockSentinel | null = null + let isMounted = true const requestWakeLock = async () => { - if (typeof window !== "undefined" && "wakeLock" in navigator) { - try { - wakeLock = await navigator.wakeLock.request("screen") - console.log("[WakeLock] Screen Wake Lock acquired") - } catch (err) { - console.warn("[WakeLock] Failed to acquire screen wake lock:", err) + if (typeof window === "undefined" || !("wakeLock" in navigator)) { + return + } + if (wakeLock && !wakeLock.released) { + return + } + + try { + const sentinel = await navigator.wakeLock.request("screen") + + if (!isMounted) { + sentinel.release().catch(() => {}) + return + } + + if (wakeLock && !wakeLock.released) { + wakeLock.release().catch(() => {}) } + + wakeLock = sentinel + } catch (err) { + console.warn("[WakeLock] Failed to acquire screen wake lock:", err) } } @@ -90,17 +106,10 @@ function TrackpadPage() { document.addEventListener("visibilitychange", handleVisibilityChange) return () => { + isMounted = false document.removeEventListener("visibilitychange", handleVisibilityChange) - if (wakeLock) { - wakeLock - .release() - .then(() => { - wakeLock = null - console.log("[WakeLock] Screen Wake Lock released") - }) - .catch((err) => { - console.error("[WakeLock] Failed to release wake lock:", err) - }) + if (wakeLock && !wakeLock.released) { + wakeLock.release().catch(() => {}) } } }, [])