| // Copyright 2017 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import {Settings} from '/common/settings.js'; |
| |
| import {AutoScanManager} from './auto_scan_manager.js'; |
| |
| /** |
| * Class to manage user preferences. |
| */ |
| export class SettingsManager { |
| static async init(): Promise<void> { |
| await Settings.init(Object.values(Preference)); |
| Settings.addListener( |
| Preference.AUTO_SCAN_ENABLED, |
| (value: boolean|number) => AutoScanManager.setEnabled( |
| value as boolean)); |
| Settings.addListener( |
| Preference.AUTO_SCAN_TIME, |
| (value: boolean|number) => AutoScanManager.setPrimaryScanTime( |
| value as number)); |
| Settings.addListener( |
| Preference.AUTO_SCAN_KEYBOARD_TIME, |
| (value: boolean|number) => AutoScanManager.setKeyboardScanTime( |
| value as number)); |
| |
| if (!SettingsManager.settingsAreConfigured_()) { |
| chrome.accessibilityPrivate.openSettingsSubpage( |
| 'manageAccessibility/switchAccess'); |
| } |
| } |
| |
| // =============== Private Methods ============== |
| |
| /** |
| * Whether the current settings configuration is reasonably usable; |
| * specifically, whether there is a way to select and a way to navigate. |
| */ |
| private static settingsAreConfigured_(): boolean { |
| const selectPref = Settings.get(Preference.SELECT_DEVICE_KEY_CODES); |
| const selectSet = selectPref ? Object.keys(selectPref).length : false; |
| |
| const nextPref = Settings.get(Preference.NEXT_DEVICE_KEY_CODES); |
| const nextSet = nextPref ? Object.keys(nextPref).length : false; |
| |
| const previousPref = Settings.get(Preference.PREVIOUS_DEVICE_KEY_CODES); |
| const previousSet = previousPref ? Object.keys(previousPref).length : false; |
| |
| const autoScanEnabled = Settings.get(Preference.AUTO_SCAN_ENABLED); |
| |
| if (!selectSet) { |
| return false; |
| } |
| |
| if (nextSet || previousSet) { |
| return true; |
| } |
| |
| return Boolean(autoScanEnabled); |
| } |
| } |
| |
| /** Preferences that are configurable in Switch Access. */ |
| enum Preference { |
| AUTO_SCAN_ENABLED = 'settings.a11y.switch_access.auto_scan.enabled', |
| AUTO_SCAN_TIME = 'settings.a11y.switch_access.auto_scan.speed_ms', |
| AUTO_SCAN_KEYBOARD_TIME = |
| 'settings.a11y.switch_access.auto_scan.keyboard.speed_ms', |
| NEXT_DEVICE_KEY_CODES = 'settings.a11y.switch_access.next.device_key_codes', |
| PREVIOUS_DEVICE_KEY_CODES = |
| 'settings.a11y.switch_access.previous.device_key_codes', |
| SELECT_DEVICE_KEY_CODES = |
| 'settings.a11y.switch_access.select.device_key_codes', |
| } |