| // 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 {TestImportManager} from '/common/testing/test_import_manager.js'; |
| |
| import {ActionManager} from './action_manager.js'; |
| import {AutoScanManager} from './auto_scan_manager.js'; |
| import {Navigator} from './navigator.js'; |
| import {SwitchAccess} from './switch_access.js'; |
| import {ErrorType} from './switch_access_constants.js'; |
| |
| import Command = chrome.accessibilityPrivate.SwitchAccessCommand; |
| |
| /** Runs user commands. */ |
| export class SACommands { |
| static instance?: SACommands; |
| |
| private commandMap_ = new Map<Command, () => void>([ |
| [Command.SELECT, () => ActionManager.onSelect()], |
| [Command.NEXT, () => Navigator.byItem.moveForward()], |
| [Command.PREVIOUS, () => Navigator.byItem.moveBackward()], |
| ]); |
| |
| constructor() { |
| chrome.accessibilityPrivate.onSwitchAccessCommand.addListener( |
| (command: Command) => this.runCommand_(command)); |
| } |
| |
| static init(): void { |
| if (SACommands.instance) { |
| throw SwitchAccess.error( |
| ErrorType.DUPLICATE_INITIALIZATION, |
| 'Cannot create more than one SACommands instance.'); |
| } |
| SACommands.instance = new SACommands(); |
| } |
| |
| private runCommand_(command: Command): void { |
| this.commandMap_.get(command)!(); |
| AutoScanManager.restartIfRunning(); |
| } |
| } |
| |
| TestImportManager.exportForTesting(SACommands); |