Fix: Wake Lock Re-Acquire nach unfreiwilligem Release + visibilitychange-Handler (routes.js + map.js, SW by-v885)
This commit is contained in:
parent
9deb04c02d
commit
8f39c22a7f
6 changed files with 57 additions and 14 deletions
|
|
@ -3,7 +3,7 @@
|
|||
Router, State-Management, Navigation, Initialisierung.
|
||||
============================================================ */
|
||||
|
||||
const APP_VER = '884'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
|
||||
const APP_VER = '885'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
|
||||
const APP_VERSION = '1.5.1'; // ← semantische Version, wird bei make release gesetzt
|
||||
const IS_STAGING = location.hostname === 'staging.banyaro.app';
|
||||
// Cache-Bust-Parameter nach Update-Reload sofort entfernen
|
||||
|
|
|
|||
|
|
@ -1582,10 +1582,14 @@ window.Page_map = (() => {
|
|||
}
|
||||
|
||||
async function _acquireWakeLock() {
|
||||
if (!('wakeLock' in navigator)) return;
|
||||
if (!('wakeLock' in navigator) || _wakeLock) return;
|
||||
try {
|
||||
_wakeLock = await navigator.wakeLock.request('screen');
|
||||
_wakeLock.addEventListener('release', () => { _wakeLock = null; });
|
||||
_wakeLock.addEventListener('release', () => {
|
||||
_wakeLock = null;
|
||||
// OS hat Lock entzogen → sofort neu anfordern wenn noch aufzeichnet
|
||||
if (_recActive) _acquireWakeLock();
|
||||
});
|
||||
} catch {}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -763,7 +763,8 @@ window.Page_routes = (() => {
|
|||
|
||||
_recPolyline = L.polyline([], { color: '#ef4444', weight: 5, opacity: 0.9 }).addTo(_recMap);
|
||||
|
||||
navigator.wakeLock?.request('screen').then(wl => { _recWakeLock = wl; }).catch(() => {});
|
||||
await _recAcquireWakeLock();
|
||||
document.addEventListener('visibilitychange', _recOnVisibility);
|
||||
|
||||
_recWatchId = navigator.geolocation.watchPosition(pos => {
|
||||
const lat = pos.coords.latitude, lon = pos.coords.longitude;
|
||||
|
|
@ -852,6 +853,24 @@ window.Page_routes = (() => {
|
|||
}, 5000);
|
||||
}
|
||||
|
||||
async function _recAcquireWakeLock() {
|
||||
if (!('wakeLock' in navigator) || _recWakeLock) return;
|
||||
try {
|
||||
_recWakeLock = await navigator.wakeLock.request('screen');
|
||||
_recWakeLock.addEventListener('release', () => {
|
||||
_recWakeLock = null;
|
||||
// OS hat Lock entzogen (Anruf, Tab-Wechsel etc.) → sofort neu anfordern
|
||||
if (_recActive) _recAcquireWakeLock();
|
||||
});
|
||||
} catch {}
|
||||
}
|
||||
|
||||
function _recOnVisibility() {
|
||||
if (_recActive && document.visibilityState === 'visible' && !_recWakeLock) {
|
||||
_recAcquireWakeLock();
|
||||
}
|
||||
}
|
||||
|
||||
async function _stopRecInOvl(save) {
|
||||
if (!_recActive && save) return;
|
||||
_recActive = false;
|
||||
|
|
@ -859,6 +878,7 @@ window.Page_routes = (() => {
|
|||
if (_recTimerInt) { clearInterval(_recTimerInt); _recTimerInt = null; }
|
||||
if (_recInactTimer){ clearTimeout(_recInactTimer); _recInactTimer = null; }
|
||||
if (_recWakeLock) { try { await _recWakeLock.release(); } catch {} _recWakeLock = null; }
|
||||
document.removeEventListener('visibilitychange', _recOnVisibility);
|
||||
_recOvl?.removeEventListener('touchstart', _onRecOvlTouch);
|
||||
_recOvl?.removeEventListener('pointerdown', _onRecOvlTouch);
|
||||
|
||||
|
|
@ -1706,7 +1726,8 @@ window.Page_routes = (() => {
|
|||
};
|
||||
|
||||
// GPS-Watch
|
||||
navigator.wakeLock?.request('screen').then(wl => { _navWakeLock = wl; }).catch(() => {});
|
||||
await _navAcquireWakeLock();
|
||||
document.addEventListener('visibilitychange', _navOnVisibility);
|
||||
let _navFirstFix = true;
|
||||
_navWatchId = navigator.geolocation.watchPosition(pos => {
|
||||
const { latitude: lat, longitude: lon } = pos.coords;
|
||||
|
|
@ -1852,10 +1873,28 @@ window.Page_routes = (() => {
|
|||
}, 10000);
|
||||
}
|
||||
|
||||
async function _navAcquireWakeLock() {
|
||||
if (!('wakeLock' in navigator) || _navWakeLock) return;
|
||||
try {
|
||||
_navWakeLock = await navigator.wakeLock.request('screen');
|
||||
_navWakeLock.addEventListener('release', () => {
|
||||
_navWakeLock = null;
|
||||
if (_navWatchId !== null) _navAcquireWakeLock();
|
||||
});
|
||||
} catch {}
|
||||
}
|
||||
|
||||
function _navOnVisibility() {
|
||||
if (_navWatchId !== null && document.visibilityState === 'visible' && !_navWakeLock) {
|
||||
_navAcquireWakeLock();
|
||||
}
|
||||
}
|
||||
|
||||
function _closeNav() {
|
||||
if (_navWatchId !== null) { navigator.geolocation.clearWatch(_navWatchId); _navWatchId = null; }
|
||||
if (_navInactTimer) { clearTimeout(_navInactTimer); _navInactTimer = null; }
|
||||
if (_navWakeLock) { try { _navWakeLock.release(); } catch {} _navWakeLock = null; }
|
||||
document.removeEventListener('visibilitychange', _navOnVisibility);
|
||||
if (_navWalkMeta && _navWalkMeta.trackLen > 1) {
|
||||
const pct = Math.round(_navMaxIdx / (_navWalkMeta.trackLen - 1) * 100);
|
||||
if (pct >= 50) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue