From 176e5df7712a9d89bbe4da77e830a35d365fa8b0 Mon Sep 17 00:00:00 2001 From: Huang Xin Date: Sat, 2 May 2026 00:44:41 +0800 Subject: [PATCH] refactor(settings): move Keep Screen Awake to Behavior > Device (#4027) Relocate the toggle from the library settings menu to the Behavior settings panel under the Device section. Add a matching command palette entry so the setting remains discoverable via search. Co-authored-by: Claude Opus 4.7 (1M context) --- .../app/library/components/SettingsMenu.tsx | 12 --- .../src/components/settings/ControlPanel.tsx | 94 +++++++++++-------- .../src/services/commandRegistry.ts | 6 ++ 3 files changed, 60 insertions(+), 52 deletions(-) diff --git a/apps/readest-app/src/app/library/components/SettingsMenu.tsx b/apps/readest-app/src/app/library/components/SettingsMenu.tsx index 352487e0..65c900d3 100644 --- a/apps/readest-app/src/app/library/components/SettingsMenu.tsx +++ b/apps/readest-app/src/app/library/components/SettingsMenu.tsx @@ -55,7 +55,6 @@ const SettingsMenu: React.FC = ({ onPullLibrary, setIsDropdow const [isAutoCheckUpdates, setIsAutoCheckUpdates] = useState(settings.autoCheckUpdates); const [isAlwaysOnTop, setIsAlwaysOnTop] = useState(settings.alwaysOnTop); const [isAlwaysShowStatusBar, setIsAlwaysShowStatusBar] = useState(settings.alwaysShowStatusBar); - const [isScreenWakeLock, setIsScreenWakeLock] = useState(settings.screenWakeLock); const [isOpenLastBooks, setIsOpenLastBooks] = useState(settings.openLastBooks); const [isAutoImportBooksOnOpen, setIsAutoImportBooksOnOpen] = useState( settings.autoImportBooksOnOpen, @@ -153,12 +152,6 @@ const SettingsMenu: React.FC = ({ onPullLibrary, setIsDropdow setIsAutoCheckUpdates(newValue); }; - const toggleScreenWakeLock = () => { - const newValue = !settings.screenWakeLock; - saveSysSettings(envConfig, 'screenWakeLock', newValue); - setIsScreenWakeLock(newValue); - }; - const toggleOpenLastBooks = () => { const newValue = !settings.openLastBooks; saveSysSettings(envConfig, 'openLastBooks', newValue); @@ -398,11 +391,6 @@ const SettingsMenu: React.FC = ({ onPullLibrary, setIsDropdow onClick={toggleAlwaysShowStatusBar} /> )} - {appService?.isAndroidApp && ( = ({ bookKey, onRegisterRes const [isEink, setIsEink] = useState(viewSettings.isEink); const [isColorEink, setIsColorEink] = useState(viewSettings.isColorEink); const [autoScreenBrightness, setAutoScreenBrightness] = useState(settings.autoScreenBrightness); + const [screenWakeLock, setScreenWakeLock] = useState(settings.screenWakeLock); const [allowScript, setAllowScript] = useState(viewSettings.allowScript); const resetToDefaults = useResetViewSettings(); @@ -188,6 +189,12 @@ const ControlPanel: React.FC = ({ bookKey, onRegisterRes // eslint-disable-next-line react-hooks/exhaustive-deps }, [autoScreenBrightness]); + useEffect(() => { + if (screenWakeLock === settings.screenWakeLock) return; + saveSysSettings(envConfig, 'screenWakeLock', screenWakeLock); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [screenWakeLock]); + useEffect(() => { if (viewSettings.allowScript === allowScript) return; saveViewSettings(envConfig, bookKey, 'allowScript', allowScript, true, false).then(() => { @@ -411,49 +418,56 @@ const ControlPanel: React.FC = ({ bookKey, onRegisterRes - {(appService?.isMobileApp || appService?.appPlatform === 'web') && ( -
-

{_('Device')}

-
-
- {(appService?.isAndroidApp || appService?.appPlatform === 'web') && ( -
- {_('E-Ink Mode')} - setIsEink(!isEink)} - /> -
- )} - {(appService?.isAndroidApp || appService?.appPlatform === 'web') && ( -
- {_('Color E-Ink Mode')} - setIsColorEink(!isColorEink)} - /> -
- )} - {appService?.isMobileApp && ( -
- {_('System Screen Brightness')} - setAutoScreenBrightness(!autoScreenBrightness)} - /> -
- )} +
+

{_('Device')}

+
+
+ {(appService?.isAndroidApp || appService?.appPlatform === 'web') && ( +
+ {_('E-Ink Mode')} + setIsEink(!isEink)} + /> +
+ )} + {(appService?.isAndroidApp || appService?.appPlatform === 'web') && ( +
+ {_('Color E-Ink Mode')} + setIsColorEink(!isColorEink)} + /> +
+ )} + {appService?.isMobileApp && ( +
+ {_('System Screen Brightness')} + setAutoScreenBrightness(!autoScreenBrightness)} + /> +
+ )} +
+ {_('Keep Screen Awake')} + setScreenWakeLock(!screenWakeLock)} + />
- )} +

{_('Security')}

diff --git a/apps/readest-app/src/services/commandRegistry.ts b/apps/readest-app/src/services/commandRegistry.ts index 53967723..622b02e1 100644 --- a/apps/readest-app/src/services/commandRegistry.ts +++ b/apps/readest-app/src/services/commandRegistry.ts @@ -483,6 +483,12 @@ const controlPanelItems = [ keywords: ['color', 'eink', 'e-ink', 'kaleido'], section: 'Device', }, + { + id: 'settings.control.screenWakeLock', + labelKey: _('Keep Screen Awake'), + keywords: ['screen', 'wake', 'lock', 'awake', 'sleep', 'display'], + section: 'Device', + }, { id: 'settings.control.allowJavascript', labelKey: _('Allow JavaScript'),