129 lines
4.0 KiB
JavaScript
129 lines
4.0 KiB
JavaScript
// screenLockManager.js - Manages screen wake lock to prevent screen from turning off
|
|
// Uses the Screen Wake Lock API: https://developer.mozilla.org/en-US/docs/Web/API/Screen_Wake_Lock_API
|
|
|
|
let wakeLock = null;
|
|
let isLockEnabled = false;
|
|
|
|
/**
|
|
* Requests a screen wake lock to prevent the screen from turning off
|
|
* @returns {Promise<boolean>} - True if wake lock was acquired successfully
|
|
*/
|
|
export async function acquireWakeLock() {
|
|
if (!isScreenWakeLockSupported()) {
|
|
console.warn('[ScreenLockManager] Screen Wake Lock API not supported in this browser');
|
|
return false;
|
|
}
|
|
|
|
try {
|
|
// Release any existing wake lock first
|
|
await releaseWakeLock();
|
|
|
|
// Request a new wake lock
|
|
wakeLock = await navigator.wakeLock.request('screen');
|
|
isLockEnabled = true;
|
|
|
|
console.log('[ScreenLockManager] Screen Wake Lock acquired');
|
|
|
|
// Add event listeners to reacquire the lock when needed
|
|
setupWakeLockListeners();
|
|
|
|
return true;
|
|
} catch (error) {
|
|
console.error('[ScreenLockManager] Error acquiring wake lock:', error);
|
|
isLockEnabled = false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Releases the screen wake lock if one is active
|
|
* @returns {Promise<boolean>} - True if wake lock was released successfully
|
|
*/
|
|
export async function releaseWakeLock() {
|
|
if (!wakeLock) {
|
|
return true; // No wake lock to release
|
|
}
|
|
|
|
try {
|
|
await wakeLock.release();
|
|
wakeLock = null;
|
|
isLockEnabled = false;
|
|
console.log('[ScreenLockManager] Screen Wake Lock released');
|
|
return true;
|
|
} catch (error) {
|
|
console.error('[ScreenLockManager] Error releasing wake lock:', error);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Checks if the Screen Wake Lock API is supported in this browser
|
|
* @returns {boolean} - True if supported
|
|
*/
|
|
export function isScreenWakeLockSupported() {
|
|
return 'wakeLock' in navigator && 'request' in navigator.wakeLock;
|
|
}
|
|
|
|
/**
|
|
* Returns the current status of the wake lock
|
|
* @returns {boolean} - True if wake lock is currently active
|
|
*/
|
|
export function isWakeLockActive() {
|
|
return isLockEnabled && wakeLock !== null;
|
|
}
|
|
|
|
/**
|
|
* Sets up event listeners to reacquire the wake lock when needed
|
|
* (e.g., when the page becomes visible again after being hidden)
|
|
*/
|
|
function setupWakeLockListeners() {
|
|
// When the page becomes visible again, reacquire the wake lock
|
|
document.addEventListener('visibilitychange', handleVisibilityChange);
|
|
|
|
// When the screen orientation changes, reacquire the wake lock
|
|
if ('screen' in window && 'orientation' in window.screen) {
|
|
window.screen.orientation.addEventListener('change', handleOrientationChange);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Handles visibility change events to reacquire wake lock when page becomes visible
|
|
*/
|
|
async function handleVisibilityChange() {
|
|
if (isLockEnabled && document.visibilityState === 'visible') {
|
|
// Only try to reacquire if we previously had a lock
|
|
await acquireWakeLock();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Handles orientation change events to reacquire wake lock
|
|
*/
|
|
async function handleOrientationChange() {
|
|
if (isLockEnabled) {
|
|
// Some devices may release the wake lock on orientation change
|
|
await acquireWakeLock();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Initializes the screen lock manager
|
|
* @param {Object} options - Configuration options
|
|
* @param {boolean} options.autoAcquire - Whether to automatically acquire wake lock on init
|
|
* @returns {Promise<boolean>} - True if initialization was successful
|
|
*/
|
|
export async function initScreenLockManager(options = {}) {
|
|
const { autoAcquire = true } = options; // Default to true - automatically acquire on init
|
|
|
|
// Check for support
|
|
const isSupported = isScreenWakeLockSupported();
|
|
console.log(`[ScreenLockManager] Screen Wake Lock API ${isSupported ? 'is' : 'is not'} supported`);
|
|
|
|
// Automatically acquire wake lock if supported (now default behavior)
|
|
if (autoAcquire && isSupported) {
|
|
return await acquireWakeLock();
|
|
}
|
|
|
|
return isSupported;
|
|
}
|