Files
odidere/internal/service/static/wakelock.js
2026-07-05 00:48:56 +00:00

50 lines
1.1 KiB
JavaScript

/**
* WakeLock manages the screen wake lock to prevent the display from
* dimming during active use (recording or processing).
*/
export class WakeLock {
constructor() {
this.wakeLock = null;
}
/**
* acquire requests a screen wake lock. Idempotent.
*/
async acquire() {
if (this.wakeLock) return;
if (!('wakeLock' in navigator)) return;
try {
this.wakeLock = await navigator.wakeLock.request('screen');
} catch (e) {
console.debug('wake lock acquire failed:', e);
}
}
/**
* release releases the active wake lock. Idempotent.
*/
async release() {
if (!this.wakeLock) return;
try {
await this.wakeLock.release();
} catch (e) {
console.debug('wake lock release failed:', e);
}
this.wakeLock = null;
}
/**
* handleVisibilityChange reacquires the wake lock when the tab
* becomes visible, if the app is currently active.
* @param {boolean} isActive - Whether the app is recording or processing.
*/
async handleVisibilityChange(isActive) {
if (document.visibilityState !== 'visible') return;
if (!isActive) return;
await this.acquire();
}
}