From 6017a74706d5391eac48c2bb8d9b141ed599ddc2 Mon Sep 17 00:00:00 2001 From: yanguoyu <841185308@qq.com> Date: Fri, 8 Mar 2024 18:19:47 +0800 Subject: [PATCH] feat: Keep screen awake --- .../GeneralSetting/generalSetting.module.scss | 9 ++++-- .../src/components/GeneralSetting/index.tsx | 27 ++++++++++++++++-- .../components/Settings/settings.module.scss | 2 +- .../neuron-ui/src/containers/Main/index.tsx | 11 ++++++-- packages/neuron-ui/src/locales/en.json | 3 +- packages/neuron-ui/src/locales/es.json | 3 +- packages/neuron-ui/src/locales/fr.json | 3 +- packages/neuron-ui/src/locales/zh-tw.json | 3 +- packages/neuron-ui/src/locales/zh.json | 3 +- packages/neuron-ui/src/services/localCache.ts | 11 ++++++++ packages/neuron-ui/src/utils/index.ts | 1 + packages/neuron-ui/src/utils/wakeScreen.ts | 28 +++++++++++++++++++ 12 files changed, 92 insertions(+), 12 deletions(-) create mode 100644 packages/neuron-ui/src/utils/wakeScreen.ts diff --git a/packages/neuron-ui/src/components/GeneralSetting/generalSetting.module.scss b/packages/neuron-ui/src/components/GeneralSetting/generalSetting.module.scss index e55142e967..bd41cc7b53 100644 --- a/packages/neuron-ui/src/components/GeneralSetting/generalSetting.module.scss +++ b/packages/neuron-ui/src/components/GeneralSetting/generalSetting.module.scss @@ -4,14 +4,19 @@ $action-button-width: 11.25rem; .container { display: flex; + flex-wrap: wrap; width: 100%; + gap: 16px; .content { width: 176px; padding: 16px; background: var(--input-disabled-color); border-radius: 8px; - margin-right: 16px; + display: flex; + flex-direction: column; + justify-content: space-between; + flex-shrink: 0; p { font-size: 14px; @@ -19,7 +24,7 @@ $action-button-width: 11.25rem; margin: 0 0 12px; color: var(--main-text-color); } - button { + button[data-button-type='text'] { font-size: 14px; line-height: 20px; border: none; diff --git a/packages/neuron-ui/src/components/GeneralSetting/index.tsx b/packages/neuron-ui/src/components/GeneralSetting/index.tsx index 7866c4eaaa..bc0dcc5ba0 100644 --- a/packages/neuron-ui/src/components/GeneralSetting/index.tsx +++ b/packages/neuron-ui/src/components/GeneralSetting/index.tsx @@ -8,8 +8,10 @@ import { ReactComponent as VersionLogo } from 'widgets/Icons/VersionLogo.svg' import { ReactComponent as ArrowNext } from 'widgets/Icons/ArrowNext.svg' import { ReactComponent as Update } from 'widgets/Icons/Update.svg' import { cancelCheckUpdates, downloadUpdate, installUpdate, getVersion } from 'services/remote' -import { uniformTimeFormatter, bytesFormatter, clsx } from 'utils' +import { uniformTimeFormatter, bytesFormatter, clsx, wakeScreen, releaseWakeLock } from 'utils' import { LanguageSelect } from 'widgets/Icons/icon' +import Switch from 'widgets/Switch' +import { keepScreenAwake } from 'services/localCache' import styles from './generalSetting.module.scss' import { useCheckUpdate, useUpdateDownloadStatus } from './hooks' @@ -173,13 +175,29 @@ const GeneralSetting = ({ updater }: GeneralSettingProps) => { } }, [updater.errorMsg, setErrorMsg]) + const [isScreenKeepAwake, setIsScreenKeepAwake] = useState(keepScreenAwake.get()) + const onChangeScreenKeepAwake = useCallback((v: boolean) => { + keepScreenAwake.save(v) + setIsScreenKeepAwake(v) + if (v) { + wakeScreen() + } else { + releaseWakeLock() + } + }, []) + return (

{t('settings.general.version')} v{newVersion || currentVersion}

- @@ -189,6 +207,7 @@ const GeneralSetting = ({ updater }: GeneralSettingProps) => {

{t('settings.general.language')}

+
+

{t('settings.general.keep-awake')}

+ +
{ } = useNoDiskSpace(navigate) const needConfirm = newCkbDataPath && newCkbDataPath !== oldCkbDataPath + useEffect(() => { + if (keepScreenAwake.get()) { + wakeScreen() + } + }, []) + return (
diff --git a/packages/neuron-ui/src/locales/en.json b/packages/neuron-ui/src/locales/en.json index 4204d777e0..112cf0b1b7 100644 --- a/packages/neuron-ui/src/locales/en.json +++ b/packages/neuron-ui/src/locales/en.json @@ -394,7 +394,8 @@ "version": "Version", "language": "Language", "select-language": "Select Language", - "apply": "Apply" + "apply": "Apply", + "keep-awake": "Keep the screen awake during synchronization" }, "wallet-manager": { "edit-wallet": { diff --git a/packages/neuron-ui/src/locales/es.json b/packages/neuron-ui/src/locales/es.json index dc163b043b..e3a88c27d2 100644 --- a/packages/neuron-ui/src/locales/es.json +++ b/packages/neuron-ui/src/locales/es.json @@ -386,7 +386,8 @@ "version": "Versión", "language": "Idioma", "select-language": "Seleccionar Idioma", - "apply": "Aplicar" + "apply": "Aplicar", + "keep-awake": "Mantener la pantalla encendida durante la sincronización" }, "wallet-manager": { "edit-wallet": { diff --git a/packages/neuron-ui/src/locales/fr.json b/packages/neuron-ui/src/locales/fr.json index 6a76f0d5e4..9aec6595b2 100644 --- a/packages/neuron-ui/src/locales/fr.json +++ b/packages/neuron-ui/src/locales/fr.json @@ -393,7 +393,8 @@ "version": "Version", "language": "Langue", "select-language": "Sélectionner la langue", - "apply": "Appliquer" + "apply": "Appliquer", + "keep-awake": "Maintenir l'écran allumé pendant la synchronisation" }, "wallet-manager": { "edit-wallet": { diff --git a/packages/neuron-ui/src/locales/zh-tw.json b/packages/neuron-ui/src/locales/zh-tw.json index 32130fbf4e..455607ff5a 100644 --- a/packages/neuron-ui/src/locales/zh-tw.json +++ b/packages/neuron-ui/src/locales/zh-tw.json @@ -389,7 +389,8 @@ "version": "版本", "language": "語言", "select-language": "選擇語言", - "apply": "應用" + "apply": "應用", + "keep-awake": "同步期間保持屏幕喚醒" }, "wallet-manager": { "edit-wallet": { diff --git a/packages/neuron-ui/src/locales/zh.json b/packages/neuron-ui/src/locales/zh.json index bef868f0b4..a4ec8f80da 100644 --- a/packages/neuron-ui/src/locales/zh.json +++ b/packages/neuron-ui/src/locales/zh.json @@ -387,7 +387,8 @@ "version": "版本", "language": "系统语言", "select-language": "选择语言", - "apply": "应用" + "apply": "应用", + "keep-awake": "同步期间保持屏幕唤醒" }, "wallet-manager": { "edit-wallet": { diff --git a/packages/neuron-ui/src/services/localCache.ts b/packages/neuron-ui/src/services/localCache.ts index 02ae5b823e..a53f75513c 100644 --- a/packages/neuron-ui/src/services/localCache.ts +++ b/packages/neuron-ui/src/services/localCache.ts @@ -11,6 +11,7 @@ export enum LocalCacheKey { LoadedWalletIDs = 'loadedWalletIDs', ImportedWallet = 'ImportedWallet', ShownNodeId = 'ShownNodeId', + ScreenAwake = 'ScreenAwake', } export const addresses = { @@ -165,3 +166,13 @@ export const lastShowInternalNodeIds = { window.localStorage.setItem(`${type}_${LocalCacheKey.ShownNodeId}`, id) }, } + +export const keepScreenAwake = { + get: () => { + const value = window.localStorage.getItem(LocalCacheKey.ScreenAwake) + return !!value && value === 'true' + }, + save: (value: boolean) => { + window.localStorage.setItem(LocalCacheKey.ScreenAwake, value.toString()) + }, +} diff --git a/packages/neuron-ui/src/utils/index.ts b/packages/neuron-ui/src/utils/index.ts index eb762f388d..4fe2f818d6 100644 --- a/packages/neuron-ui/src/utils/index.ts +++ b/packages/neuron-ui/src/utils/index.ts @@ -28,5 +28,6 @@ export * from './multisig' export * from './getNetworkLabel' export * from './calculateUsedCapacity' export * from './outPointTransform' +export * from './wakeScreen' export { CONSTANTS } diff --git a/packages/neuron-ui/src/utils/wakeScreen.ts b/packages/neuron-ui/src/utils/wakeScreen.ts new file mode 100644 index 0000000000..20e2ff6109 --- /dev/null +++ b/packages/neuron-ui/src/utils/wakeScreen.ts @@ -0,0 +1,28 @@ +let wakeLock: WakeLockSentinel | undefined + +async function reAwake() { + if (document.visibilityState === 'visible') { + wakeLock = await navigator.wakeLock.request('screen') + } else { + wakeLock?.release() + wakeLock = undefined + } +} + +export async function wakeScreen() { + if (wakeLock) return + try { + wakeLock = await navigator.wakeLock.request('screen') + document.addEventListener('visibilitychange', reAwake) + } catch (err) { + // do nothing here + } +} + +export async function releaseWakeLock() { + if (wakeLock) { + await wakeLock.release() + document.removeEventListener('visibilitychange', reAwake) + wakeLock = undefined + } +}