From c1573057df52d92cbfacf214be7527cbe3fc4a48 Mon Sep 17 00:00:00 2001 From: Hristo Terezov Date: Tue, 6 Jun 2023 09:25:44 -0500 Subject: [PATCH] feat(screen-lock): request on conference join. --- package-lock.json | 13 +++++++ package.json | 1 + .../base/conference/middleware.web.ts | 39 ++++++++++++++++++- tsconfig.web.json | 2 +- 4 files changed, 53 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 27eba6a8ab..a4cc677f1c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -127,6 +127,7 @@ "@jitsi/eslint-config": "4.1.5", "@types/amplitude-js": "8.16.2", "@types/audioworklet": "0.0.29", + "@types/dom-screen-wake-lock": "1.0.1", "@types/js-md5": "0.4.3", "@types/lodash": "4.14.182", "@types/punycode": "2.1.0", @@ -5583,6 +5584,12 @@ "@types/node": "*" } }, + "node_modules/@types/dom-screen-wake-lock": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/dom-screen-wake-lock/-/dom-screen-wake-lock-1.0.1.tgz", + "integrity": "sha512-WJQas3OFGcC8AeMzaa7FwzzbNNfanuV2R12kQYNp4BkUMghsRz5JxJ5RgVhJifhw7t0s6LvRSWZArmKbMDZ+5g==", + "dev": true + }, "node_modules/@types/emscripten": { "version": "0.0.34", "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-0.0.34.tgz", @@ -23649,6 +23656,12 @@ "@types/node": "*" } }, + "@types/dom-screen-wake-lock": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/dom-screen-wake-lock/-/dom-screen-wake-lock-1.0.1.tgz", + "integrity": "sha512-WJQas3OFGcC8AeMzaa7FwzzbNNfanuV2R12kQYNp4BkUMghsRz5JxJ5RgVhJifhw7t0s6LvRSWZArmKbMDZ+5g==", + "dev": true + }, "@types/emscripten": { "version": "0.0.34", "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-0.0.34.tgz", diff --git a/package.json b/package.json index 9134581fad..6d95762ee3 100644 --- a/package.json +++ b/package.json @@ -132,6 +132,7 @@ "@jitsi/eslint-config": "4.1.5", "@types/amplitude-js": "8.16.2", "@types/audioworklet": "0.0.29", + "@types/dom-screen-wake-lock": "1.0.1", "@types/js-md5": "0.4.3", "@types/lodash": "4.14.182", "@types/punycode": "2.1.0", diff --git a/react/features/base/conference/middleware.web.ts b/react/features/base/conference/middleware.web.ts index 19b7a4e93d..5bca8e2e32 100644 --- a/react/features/base/conference/middleware.web.ts +++ b/react/features/base/conference/middleware.web.ts @@ -5,9 +5,29 @@ import { import { JitsiConferenceErrors } from '../lib-jitsi-meet'; import MiddlewareRegistry from '../redux/MiddlewareRegistry'; -import { CONFERENCE_FAILED, CONFERENCE_JOINED, CONFERENCE_JOIN_IN_PROGRESS } from './actionTypes'; +import { + CONFERENCE_FAILED, + CONFERENCE_JOINED, + CONFERENCE_JOIN_IN_PROGRESS, + CONFERENCE_LEFT, KICKED_OUT +} from './actionTypes'; +import logger from './logger'; import './middleware.any'; +let screenLock: WakeLockSentinel | undefined; + +/** + * Releases the screen lock. + * + * @returns {void} + */ +function releaseScreenLock() { + if (screenLock) { + screenLock.release(); + screenLock = undefined; + } +} + MiddlewareRegistry.register(store => next => action => { const { dispatch, getState } = store; const { enableForcedReload } = getState()['features/base/config']; @@ -23,6 +43,16 @@ MiddlewareRegistry.register(store => next => action => { dispatch(setSkipPrejoinOnReload(false)); } + if (navigator.wakeLock?.request) { + navigator.wakeLock.request('screen') + .then(lock => { + screenLock = lock; + }) + .catch(e => { + logger.error(`Error while requesting wake lock for screen: ${e}`); + }); + } + break; } case CONFERENCE_FAILED: { @@ -32,8 +62,15 @@ MiddlewareRegistry.register(store => next => action => { dispatch(setSkipPrejoinOnReload(true)); } + releaseScreenLock(); + break; } + case CONFERENCE_LEFT: + case KICKED_OUT: + releaseScreenLock(); + + break; } return next(action); diff --git a/tsconfig.web.json b/tsconfig.web.json index 96103fcc8c..72c80b2169 100644 --- a/tsconfig.web.json +++ b/tsconfig.web.json @@ -5,7 +5,7 @@ "module": "es2020", "target": "es2020", "jsx": "react", - "lib": [ "webworker", "ES2020", "DOM" ], + "lib": [ "ES2020", "DOM" ], "skipLibCheck": true, "moduleResolution": "Node", "strict": true,