From d73a50c980784ffab8fc90bc07f4dde5416081c9 Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Fri, 17 May 2024 16:48:08 +0200 Subject: [PATCH] feat(theming): Add checkbox for force enable / disable blurry background Signed-off-by: Ferdinand Thiessen --- .../lib/Listener/BeforePreferenceListener.php | 19 +++++++++++-- apps/theming/lib/Settings/Personal.php | 1 + apps/theming/src/UserThemes.vue | 27 +++++++++++++++++++ apps/theming/tests/Settings/PersonalTest.php | 22 ++++++++++----- 4 files changed, 60 insertions(+), 9 deletions(-) diff --git a/apps/theming/lib/Listener/BeforePreferenceListener.php b/apps/theming/lib/Listener/BeforePreferenceListener.php index 5eaf84d5226..1190c20c2d4 100644 --- a/apps/theming/lib/Listener/BeforePreferenceListener.php +++ b/apps/theming/lib/Listener/BeforePreferenceListener.php @@ -33,6 +33,12 @@ use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; class BeforePreferenceListener implements IEventListener { + + /** + * @var string[] + */ + private const ALLOWED_KEYS = ['force_enable_blur_filter', 'shortcuts_disabled']; + public function __construct( private IAppManager $appManager, ) { @@ -54,13 +60,22 @@ class BeforePreferenceListener implements IEventListener { } private function handleThemingValues(BeforePreferenceSetEvent|BeforePreferenceDeletedEvent $event): void { - if ($event->getConfigKey() !== 'shortcuts_disabled') { + if (!in_array($event->getConfigKey(), self::ALLOWED_KEYS)) { // Not allowed config key return; } if ($event instanceof BeforePreferenceSetEvent) { - $event->setValid($event->getConfigValue() === 'yes'); + switch ($event->getConfigKey()) { + case 'force_enable_blur_filter': + $event->setValid($event->getConfigValue() === 'yes' || $event->getConfigValue() === 'no'); + break; + case 'shortcuts_disabled': + $event->setValid($event->getConfigValue() === 'yes'); + break; + default: + $event->setValid(false); + } return; } diff --git a/apps/theming/lib/Settings/Personal.php b/apps/theming/lib/Settings/Personal.php index f24aaa2f8f8..eb61e126271 100644 --- a/apps/theming/lib/Settings/Personal.php +++ b/apps/theming/lib/Settings/Personal.php @@ -74,6 +74,7 @@ class Personal implements ISettings { $this->initialStateService->provideInitialState('themes', array_values($themes)); $this->initialStateService->provideInitialState('enforceTheme', $enforcedTheme); $this->initialStateService->provideInitialState('isUserThemingDisabled', $this->themingDefaults->isUserThemingDisabled()); + $this->initialStateService->provideInitialState('enableBlurFilter', $this->config->getUserValue($this->userId, 'theming', 'force_enable_blur_filter', '')); $this->initialStateService->provideInitialState('navigationBar', [ 'userAppOrder' => json_decode($this->config->getUserValue($this->userId, 'core', 'apporder', '[]'), true, flags:JSON_THROW_ON_ERROR), 'enforcedDefaultApp' => $forcedDefaultApp diff --git a/apps/theming/src/UserThemes.vue b/apps/theming/src/UserThemes.vue index d941bf9c1db..75d88962243 100644 --- a/apps/theming/src/UserThemes.vue +++ b/apps/theming/src/UserThemes.vue @@ -51,6 +51,14 @@ type="font" @change="changeFont" /> + +

{{ t('theming', 'Misc accessibility options') }}

+ + {{ t('theming', 'Enable blur background filter (may increase GPU load)') }} + theme.enabled === true).map(theme => theme.id) const enabledFontsIDs = this.fonts.filter(font => font.enabled === true).map(font => font.id) diff --git a/apps/theming/tests/Settings/PersonalTest.php b/apps/theming/tests/Settings/PersonalTest.php index 8e7ee4fb602..d9327eaed80 100644 --- a/apps/theming/tests/Settings/PersonalTest.php +++ b/apps/theming/tests/Settings/PersonalTest.php @@ -47,14 +47,15 @@ use OCP\IConfig; use OCP\IL10N; use OCP\IURLGenerator; use OCP\IUserSession; +use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class PersonalTest extends TestCase { - private IConfig $config; - private ThemesService $themesService; - private IInitialState $initialStateService; - private ThemingDefaults $themingDefaults; - private IAppManager $appManager; + private IConfig|MockObject $config; + private ThemesService|MockObject $themesService; + private IInitialState|MockObject $initialStateService; + private ThemingDefaults|MockObject $themingDefaults; + private IAppManager|MockObject $appManager; private Personal $admin; /** @var ITheme[] */ @@ -129,12 +130,13 @@ class PersonalTest extends TestCase { $this->initialStateService->expects($this->exactly(5)) ->method('provideInitialState') - ->withConsecutive( + ->willReturnMap([ ['themes', $themesState], + ['enableBlurFilter', ''], ['enforceTheme', $enforcedTheme], ['isUserThemingDisabled', false], ['navigationBar', ['userAppOrder' => [], 'enforcedDefaultApp' => 'forcedapp']], - ); + ]); $expected = new TemplateResponse('theming', 'settings-personal'); $this->assertEquals($expected, $this->admin->getForm()); @@ -176,6 +178,7 @@ class PersonalTest extends TestCase { $config, $l10n, $appManager, + null, ), 'light' => new LightTheme( $util, @@ -186,6 +189,7 @@ class PersonalTest extends TestCase { $config, $l10n, $appManager, + null, ), 'dark' => new DarkTheme( $util, @@ -196,6 +200,7 @@ class PersonalTest extends TestCase { $config, $l10n, $appManager, + null, ), 'light-highcontrast' => new HighContrastTheme( $util, @@ -206,6 +211,7 @@ class PersonalTest extends TestCase { $config, $l10n, $appManager, + null, ), 'dark-highcontrast' => new DarkHighContrastTheme( $util, @@ -216,6 +222,7 @@ class PersonalTest extends TestCase { $config, $l10n, $appManager, + null, ), 'opendyslexic' => new DyslexiaFont( $util, @@ -226,6 +233,7 @@ class PersonalTest extends TestCase { $config, $l10n, $appManager, + null, ), ]; } -- 2.39.5