Pull common parts into abstract a11y service

This commit is contained in:
Daniel Imms
2019-07-24 16:32:59 -07:00
parent 0d2926c076
commit 64766900ba
3 changed files with 57 additions and 49 deletions

View File

@@ -0,0 +1,43 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { Disposable } from 'vs/base/common/lifecycle';
import { IAccessibilityService, AccessibilitySupport, CONTEXT_ACCESSIBILITY_MODE_ENABLED } from 'vs/platform/accessibility/common/accessibility';
import { Event, Emitter } from 'vs/base/common/event';
import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
export abstract class AbstractAccessibilityService extends Disposable implements IAccessibilityService {
_serviceBrand: any;
private _accessibilityModeEnabledContext: IContextKey<boolean>;
protected readonly _onDidChangeAccessibilitySupport = new Emitter<void>();
readonly onDidChangeAccessibilitySupport: Event<void> = this._onDidChangeAccessibilitySupport.event;
constructor(
@IContextKeyService private readonly _contextKeyService: IContextKeyService,
@IConfigurationService private readonly _configurationService: IConfigurationService,
) {
super();
this._accessibilityModeEnabledContext = CONTEXT_ACCESSIBILITY_MODE_ENABLED.bindTo(this._contextKeyService);
this._register(this._configurationService.onDidChangeConfiguration(e => {
if (e.affectsConfiguration('editor.accessibilitySupport')) {
this._updateContextKey();
}
}));
this._updateContextKey();
this.onDidChangeAccessibilitySupport(() => this._updateContextKey());
}
abstract alwaysUnderlineAccessKeys(): Promise<boolean>;
abstract getAccessibilitySupport(): AccessibilitySupport;
abstract setAccessibilitySupport(accessibilitySupport: AccessibilitySupport): void;
private _updateContextKey(): void {
const detected = this.getAccessibilitySupport() === AccessibilitySupport.Enabled;
const config = this._configurationService.getValue('editor.accessibilitySupport');
this._accessibilityModeEnabledContext.set(config === 'on' || (config === 'auto' && detected));
}
}

View File

@@ -3,33 +3,22 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { Emitter, Event } from 'vs/base/common/event';
import { IAccessibilityService, AccessibilitySupport, CONTEXT_ACCESSIBILITY_MODE_ENABLED } from 'vs/platform/accessibility/common/accessibility';
import { Disposable } from 'vs/base/common/lifecycle';
import { IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/contextkey';
import { IAccessibilityService, AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility';
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { AbstractAccessibilityService } from 'vs/platform/accessibility/common/abstractAccessibilityService';
export class BrowserAccessibilityService extends Disposable implements IAccessibilityService {
export class BrowserAccessibilityService extends AbstractAccessibilityService implements IAccessibilityService {
_serviceBrand: any;
private _accessibilitySupport = AccessibilitySupport.Unknown;
private _accessibilityModeEnabledContext: IContextKey<boolean>;
private readonly _onDidChangeAccessibilitySupport = new Emitter<void>();
readonly onDidChangeAccessibilitySupport: Event<void> = this._onDidChangeAccessibilitySupport.event;
constructor(
@IContextKeyService private readonly _contextKeyService: IContextKeyService,
@IConfigurationService private readonly _configurationService: IConfigurationService,
@IContextKeyService readonly contextKeyService: IContextKeyService,
@IConfigurationService readonly configurationService: IConfigurationService,
) {
super();
this._accessibilityModeEnabledContext = CONTEXT_ACCESSIBILITY_MODE_ENABLED.bindTo(this._contextKeyService);
this._register(this._configurationService.onDidChangeConfiguration(e => {
if (e.affectsConfiguration('editor.accessibilitySupport')) {
this._updateContextKey();
}
}));
this._updateContextKey();
super(contextKeyService, configurationService);
}
alwaysUnderlineAccessKeys(): Promise<boolean> {
@@ -43,16 +32,9 @@ export class BrowserAccessibilityService extends Disposable implements IAccessib
this._accessibilitySupport = accessibilitySupport;
this._onDidChangeAccessibilitySupport.fire();
this._updateContextKey();
}
getAccessibilitySupport(): AccessibilitySupport {
return this._accessibilitySupport;
}
private _updateContextKey(): void {
const detected = this.getAccessibilitySupport() === AccessibilitySupport.Enabled;
const config = this._configurationService.getValue('editor.accessibilitySupport');
this._accessibilityModeEnabledContext.set(config === 'on' || (config === 'auto' && detected));
}
}

View File

@@ -3,35 +3,24 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { IAccessibilityService, AccessibilitySupport, CONTEXT_ACCESSIBILITY_MODE_ENABLED } from 'vs/platform/accessibility/common/accessibility';
import { IAccessibilityService, AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility';
import { isWindows } from 'vs/base/common/platform';
import { Emitter, Event } from 'vs/base/common/event';
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
import { IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/contextkey';
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { Disposable } from 'vs/base/common/lifecycle';
import { AbstractAccessibilityService } from 'vs/platform/accessibility/common/abstractAccessibilityService';
export class AccessibilityService extends Disposable implements IAccessibilityService {
export class AccessibilityService extends AbstractAccessibilityService implements IAccessibilityService {
_serviceBrand: any;
private _accessibilitySupport = AccessibilitySupport.Unknown;
private _accessibilityModeEnabledContext: IContextKey<boolean>;
private readonly _onDidChangeAccessibilitySupport = new Emitter<void>();
readonly onDidChangeAccessibilitySupport: Event<void> = this._onDidChangeAccessibilitySupport.event;
constructor(
@IWorkbenchEnvironmentService private readonly environmentService: IWorkbenchEnvironmentService,
@IContextKeyService private readonly _contextKeyService: IContextKeyService,
@IConfigurationService private readonly _configurationService: IConfigurationService
@IContextKeyService readonly contextKeyService: IContextKeyService,
@IConfigurationService readonly configurationService: IConfigurationService
) {
super();
this._accessibilityModeEnabledContext = CONTEXT_ACCESSIBILITY_MODE_ENABLED.bindTo(this._contextKeyService);
this._register(this._configurationService.onDidChangeConfiguration(e => {
if (e.affectsConfiguration('editor.accessibilitySupport')) {
this._updateContextKey();
}
}));
this._updateContextKey();
super(contextKeyService, configurationService);
}
alwaysUnderlineAccessKeys(): Promise<boolean> {
@@ -70,10 +59,4 @@ export class AccessibilityService extends Disposable implements IAccessibilitySe
return this._accessibilitySupport;
}
private _updateContextKey(): void {
const detected = this.getAccessibilitySupport() === AccessibilitySupport.Enabled;
const config = this._configurationService.getValue('editor.accessibilitySupport');
this._accessibilityModeEnabledContext.set(config === 'on' || (config === 'auto' && detected));
}
}