Skip to content

Commit 66d2137

Browse files
committed
accessibility service cleanup
1 parent 4234daa commit 66d2137

17 files changed

Lines changed: 67 additions & 131 deletions

File tree

src/vs/editor/browser/config/configuration.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { CommonEditorConfiguration, IEnvConfiguration } from 'vs/editor/common/c
1414
import { EditorOption, IEditorConstructionOptions, EditorFontLigatures } from 'vs/editor/common/config/editorOptions';
1515
import { BareFontInfo, FontInfo } from 'vs/editor/common/config/fontInfo';
1616
import { IDimension } from 'vs/editor/common/editorCommon';
17-
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
17+
import { IAccessibilityService, AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility';
1818

1919
class CSSBasedConfigurationCache {
2020

@@ -338,7 +338,7 @@ export class Configuration extends CommonEditorConfiguration {
338338
}
339339

340340
this._register(browser.onDidChangeZoomLevel(_ => this._recomputeOptions()));
341-
this._register(this.accessibilityService.onDidChangeAccessibilitySupport(() => this._recomputeOptions()));
341+
this._register(this.accessibilityService.onDidChangeScreenReaderOptimized(() => this._recomputeOptions()));
342342

343343
this._recomputeOptions();
344344
}
@@ -379,7 +379,7 @@ export class Configuration extends CommonEditorConfiguration {
379379
emptySelectionClipboard: browser.isWebKit || browser.isFirefox,
380380
pixelRatio: browser.getPixelRatio(),
381381
zoomLevel: browser.getZoomLevel(),
382-
accessibilitySupport: this.accessibilityService.getAccessibilitySupport()
382+
accessibilitySupport: this.accessibilityService.isScreenReaderOptimized() ? AccessibilitySupport.Enabled : AccessibilitySupport.Disabled
383383
};
384384
}
385385

src/vs/editor/standalone/browser/standaloneServices.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ import { MenuService } from 'vs/platform/actions/common/menuService';
4545
import { IMarkerDecorationsService } from 'vs/editor/common/services/markersDecorationService';
4646
import { MarkerDecorationsService } from 'vs/editor/common/services/markerDecorationsServiceImpl';
4747
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
48-
import { BrowserAccessibilityService } from 'vs/platform/accessibility/common/accessibilityService';
4948
import { ILayoutService } from 'vs/platform/layout/browser/layoutService';
5049
import { getSingletonServiceDescriptors } from 'vs/platform/instantiation/common/extensions';
50+
import { AccessibilityService } from 'vs/platform/accessibility/common/accessibilityService';
5151

5252
export interface IEditorOverrideServices {
5353
[index: string]: any;
@@ -192,7 +192,7 @@ export class DynamicStandaloneServices extends Disposable {
192192

193193
let contextKeyService = ensure(IContextKeyService, () => this._register(new ContextKeyService(configurationService)));
194194

195-
ensure(IAccessibilityService, () => new BrowserAccessibilityService(contextKeyService, configurationService));
195+
ensure(IAccessibilityService, () => new AccessibilityService(contextKeyService, configurationService));
196196

197197
ensure(IListService, () => new ListService(themeService));
198198

src/vs/platform/accessibility/common/abstractAccessibilityService.ts

Lines changed: 0 additions & 43 deletions
This file was deleted.

src/vs/platform/accessibility/common/accessibility.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ export const IAccessibilityService = createDecorator<IAccessibilityService>('acc
1212
export interface IAccessibilityService {
1313
_serviceBrand: undefined;
1414

15-
readonly onDidChangeAccessibilitySupport: Event<void>;
15+
readonly onDidChangeScreenReaderOptimized: Event<void>;
1616

1717
alwaysUnderlineAccessKeys(): Promise<boolean>;
18-
getAccessibilitySupport(): AccessibilitySupport;
18+
isScreenReaderOptimized(): boolean;
1919
setAccessibilitySupport(accessibilitySupport: AccessibilitySupport): void;
2020
}
2121

src/vs/platform/accessibility/common/accessibilityService.ts

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,43 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { IAccessibilityService, AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility';
7-
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
6+
import { Disposable } from 'vs/base/common/lifecycle';
7+
import { IAccessibilityService, AccessibilitySupport, CONTEXT_ACCESSIBILITY_MODE_ENABLED } from 'vs/platform/accessibility/common/accessibility';
8+
import { Event, Emitter } from 'vs/base/common/event';
9+
import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
810
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
9-
import { AbstractAccessibilityService } from 'vs/platform/accessibility/common/abstractAccessibilityService';
10-
11-
export class BrowserAccessibilityService extends AbstractAccessibilityService implements IAccessibilityService {
1211

12+
export class AccessibilityService extends Disposable implements IAccessibilityService {
1313
_serviceBrand: undefined;
1414

15-
private _accessibilitySupport = AccessibilitySupport.Unknown;
15+
private _accessibilityModeEnabledContext: IContextKey<boolean>;
16+
protected _accessibilitySupport = AccessibilitySupport.Unknown;
17+
protected readonly _onDidChangeScreenReaderOptimized = new Emitter<void>();
1618

1719
constructor(
18-
@IContextKeyService readonly contextKeyService: IContextKeyService,
19-
@IConfigurationService readonly configurationService: IConfigurationService,
20+
@IContextKeyService private readonly _contextKeyService: IContextKeyService,
21+
@IConfigurationService protected readonly _configurationService: IConfigurationService,
2022
) {
21-
super(contextKeyService, configurationService);
23+
super();
24+
this._accessibilityModeEnabledContext = CONTEXT_ACCESSIBILITY_MODE_ENABLED.bindTo(this._contextKeyService);
25+
const updateContextKey = () => this._accessibilityModeEnabledContext.set(this.isScreenReaderOptimized());
26+
this._register(this._configurationService.onDidChangeConfiguration(e => {
27+
if (e.affectsConfiguration('editor.accessibilitySupport')) {
28+
updateContextKey();
29+
this._onDidChangeScreenReaderOptimized.fire();
30+
}
31+
}));
32+
updateContextKey();
33+
this.onDidChangeScreenReaderOptimized(() => updateContextKey());
34+
}
35+
36+
get onDidChangeScreenReaderOptimized(): Event<void> {
37+
return this._onDidChangeScreenReaderOptimized.event;
38+
}
39+
40+
isScreenReaderOptimized(): boolean {
41+
const config = this._configurationService.getValue('editor.accessibilitySupport');
42+
return config === 'on' || (config === 'auto' && this._accessibilitySupport === AccessibilitySupport.Enabled);
2243
}
2344

2445
alwaysUnderlineAccessKeys(): Promise<boolean> {
@@ -31,10 +52,6 @@ export class BrowserAccessibilityService extends AbstractAccessibilityService im
3152
}
3253

3354
this._accessibilitySupport = accessibilitySupport;
34-
this._onDidChangeAccessibilitySupport.fire();
35-
}
36-
37-
getAccessibilitySupport(): AccessibilitySupport {
38-
return this._accessibilitySupport;
55+
this._onDidChangeScreenReaderOptimized.fire();
3956
}
40-
}
57+
}

src/vs/platform/list/browser/listService.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import { ITreeEvent, ITreeRenderer, IAsyncDataSource, IDataSource, ITreeMouseEve
3030
import { AsyncDataTree, IAsyncDataTreeOptions, CompressibleAsyncDataTree, ITreeCompressionDelegate, ICompressibleAsyncDataTreeOptions } from 'vs/base/browser/ui/tree/asyncDataTree';
3131
import { DataTree, IDataTreeOptions } from 'vs/base/browser/ui/tree/dataTree';
3232
import { IKeyboardNavigationEventFilter, IAbstractTreeOptions, RenderIndentGuides } from 'vs/base/browser/ui/tree/abstractTree';
33-
import { IAccessibilityService, AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility';
33+
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
3434

3535
export type ListWidget = List<any> | PagedList<any> | ITree | ObjectTree<any, any> | DataTree<any, any, any> | AsyncDataTree<any, any, any>;
3636

@@ -900,7 +900,7 @@ function workbenchTreeDataPreamble<T, TFilterData, TOptions extends IAbstractTre
900900
return automaticKeyboardNavigation;
901901
};
902902

903-
const accessibilityOn = accessibilityService.getAccessibilitySupport() === AccessibilitySupport.Enabled;
903+
const accessibilityOn = accessibilityService.isScreenReaderOptimized();
904904
const keyboardNavigation = accessibilityOn ? 'simple' : configurationService.getValue<string>(keyboardNavigationSettingKey);
905905
const horizontalScrolling = typeof options.horizontalScrolling !== 'undefined' ? options.horizontalScrolling : getHorizontalScrollingSetting(configurationService);
906906
const openOnSingleClick = useSingleClickToOpen(configurationService);
@@ -962,7 +962,7 @@ class WorkbenchTreeInternals<TInput, T, TFilterData> {
962962
const interestingContextKeys = new Set();
963963
interestingContextKeys.add(WorkbenchListAutomaticKeyboardNavigationKey);
964964
const updateKeyboardNavigation = () => {
965-
const accessibilityOn = accessibilityService.getAccessibilitySupport() === AccessibilitySupport.Enabled;
965+
const accessibilityOn = accessibilityService.isScreenReaderOptimized();
966966
const keyboardNavigation = accessibilityOn ? 'simple' : configurationService.getValue<string>(keyboardNavigationSettingKey);
967967
tree.updateOptions({
968968
simpleKeyboardNavigation: keyboardNavigation === 'simple',
@@ -1015,7 +1015,7 @@ class WorkbenchTreeInternals<TInput, T, TFilterData> {
10151015
tree.updateOptions({ automaticKeyboardNavigation: getAutomaticKeyboardNavigation() });
10161016
}
10171017
}),
1018-
accessibilityService.onDidChangeAccessibilitySupport(() => updateKeyboardNavigation())
1018+
accessibilityService.onDidChangeScreenReaderOptimized(() => updateKeyboardNavigation())
10191019
);
10201020
}
10211021

src/vs/workbench/browser/parts/editor/editorStatus.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -709,7 +709,7 @@ export class EditorStatus extends Disposable implements IWorkbenchContribution {
709709

710710
// We only support text based editors
711711
if (editorWidget) {
712-
const screenReaderDetected = (this.accessibilityService.getAccessibilitySupport() === AccessibilitySupport.Enabled);
712+
const screenReaderDetected = this.accessibilityService.isScreenReaderOptimized();
713713
if (screenReaderDetected) {
714714
const screenReaderConfiguration = this.configurationService.getValue<IEditorOptions>('editor').accessibilitySupport;
715715
if (screenReaderConfiguration === 'auto') {

src/vs/workbench/browser/parts/quickinput/quickInput.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,8 @@ import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
4040
import { equals } from 'vs/base/common/arrays';
4141
import { TimeoutTimer } from 'vs/base/common/async';
4242
import { getIconClass } from 'vs/workbench/browser/parts/quickinput/quickInputUtils';
43-
import { IEditorOptions } from 'vs/editor/common/config/editorOptions';
4443
import { IStorageService } from 'vs/platform/storage/common/storage';
45-
import { IAccessibilityService, AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility';
44+
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
4645
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
4746
import { registerAndGetAmdImageURL } from 'vs/base/common/amd';
4847

@@ -1209,7 +1208,7 @@ export class QuickInputService extends Component implements IQuickInputService {
12091208
onDidTriggerButton: this.onDidTriggerButtonEmitter.event,
12101209
ignoreFocusOut: false,
12111210
keyMods: this.keyMods,
1212-
isScreenReaderOptimized: () => this.isScreenReaderOptimized(),
1211+
isScreenReaderOptimized: () => this.accessibilityService.isScreenReaderOptimized(),
12131212
show: controller => this.show(controller),
12141213
hide: () => this.hide(),
12151214
setVisibilities: visibilities => this.setVisibilities(visibilities),
@@ -1465,12 +1464,6 @@ export class QuickInputService extends Component implements IQuickInputService {
14651464
}
14661465
}
14671466

1468-
private isScreenReaderOptimized() {
1469-
const detected = this.accessibilityService.getAccessibilitySupport() === AccessibilitySupport.Enabled;
1470-
const config = this.configurationService.getValue<IEditorOptions>('editor').accessibilitySupport;
1471-
return config === 'on' || (config === 'auto' && detected);
1472-
}
1473-
14741467
private setEnabled(enabled: boolean) {
14751468
if (enabled !== this.enabled) {
14761469
this.enabled = enabled;

src/vs/workbench/browser/parts/titlebar/menubarControl.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import { SubmenuAction, Direction } from 'vs/base/browser/ui/menu/menu';
3131
import { attachMenuStyler } from 'vs/platform/theme/common/styler';
3232
import { assign } from 'vs/base/common/objects';
3333
import { mnemonicMenuLabel, unmnemonicLabel } from 'vs/base/common/labels';
34-
import { IAccessibilityService, AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility';
34+
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
3535
import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService';
3636
import { isFullscreen } from 'vs/base/browser/browser';
3737
import { IHostService } from 'vs/workbench/services/host/browser/host';
@@ -249,10 +249,8 @@ export abstract class MenubarControl extends Disposable {
249249

250250
const hasBeenNotified = this.storageService.getBoolean('menubar/accessibleMenubarNotified', StorageScope.GLOBAL, false);
251251
const usingCustomMenubar = getTitleBarStyle(this.configurationService, this.environmentService) === 'custom';
252-
const detected = this.accessibilityService.getAccessibilitySupport() === AccessibilitySupport.Enabled;
253-
const config = this.configurationService.getValue('editor.accessibilitySupport');
254252

255-
if (hasBeenNotified || usingCustomMenubar || !(config === 'on' || (config === 'auto' && detected))) {
253+
if (hasBeenNotified || usingCustomMenubar || !this.accessibilityService.isScreenReaderOptimized()) {
256254
return;
257255
}
258256

src/vs/workbench/contrib/search/browser/searchView.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ import { ACTIVE_GROUP, IEditorService, SIDE_GROUP } from 'vs/workbench/services/
5555
import { IPreferencesService, ISettingsEditorOptions } from 'vs/workbench/services/preferences/common/preferences';
5656
import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles';
5757
import { relativePath } from 'vs/base/common/resources';
58-
import { IAccessibilityService, AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility';
58+
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
5959
import { ViewPane, IViewPaneOptions } from 'vs/workbench/browser/parts/views/viewPaneContainer';
6060
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
6161
import { Memento, MementoObject } from 'vs/workbench/common/memento';
@@ -277,7 +277,7 @@ export class SearchView extends ViewPane {
277277

278278
this._register(dom.addDisposableListener(this.toggleQueryDetailsButton, dom.EventType.CLICK, e => {
279279
dom.EventHelper.stop(e);
280-
this.toggleQueryDetails(!this.isScreenReaderOptimized());
280+
this.toggleQueryDetails(!this.accessibilityService.isScreenReaderOptimized());
281281
}));
282282
this._register(dom.addDisposableListener(this.toggleQueryDetailsButton, dom.EventType.KEY_UP, (e: KeyboardEvent) => {
283283
const event = new StandardKeyboardEvent(e);
@@ -410,12 +410,6 @@ export class SearchView extends ViewPane {
410410
super.updateActions();
411411
}
412412

413-
private isScreenReaderOptimized() {
414-
const detected = this.accessibilityService.getAccessibilitySupport() === AccessibilitySupport.Enabled;
415-
const config = this.configurationService.getValue<IEditorOptions>('editor').accessibilitySupport;
416-
return config === 'on' || (config === 'auto' && detected);
417-
}
418-
419413
private createSearchWidget(container: HTMLElement): void {
420414
const contentPattern = this.viewletState['query.contentPattern'] || '';
421415
const replaceText = this.viewletState['query.replaceText'] || '';

0 commit comments

Comments
 (0)