Change:
We should not prompt IMO anymore since we detect the screen reader.
let's discuss this on Monday
I like the idea, but I suggest that we leave the prompt for at least one more milestone. After that, we can compare the number of accessibility users we have after changes and see how precise the detection is. We might also see that the detection is more precise on some platforms, in which case we can leave the prompt only for some platforms. Does that make sense? What do you think? fyi who introduced the prompt initially
Safe to remove now?
I suggest to leave it on for at least one more milestone since our accessibility detection got off. I will assign it to March for now. Hope that is ok.
Thanks for fixing this. I just assigned to October and verification-needed. I think the verify steps are the following: On Windows turn on NVDA VS Code insiders (have no settings set). an editor, type some text sure NVDA reads this text as you navigate through it character by character Same on macOS with VoiceOver.
I haven't heard user complaints, so let's just keep this

Discussion:
*--------------------------------------------------------------------------------------------*/ import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle'; <del> import { Event } from 'vs/base/common/event'; import Severity from 'vs/base/common/severity'; </del> import { localize } from 'vs/nls'; import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; <del> import { CommandsRegistry } from 'vs/platform/commands/common/commands'; import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { INotificationHandle, INotificationService, NotificationPriority } from 'vs/platform/notification/common/notification'; </del> <ins> import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; </ins> import { IWorkbenchContribution } from 'vs/workbench/common/contributions'; import { IStatusbarEntryAccessor, IStatusbarService, StatusbarAlignment } from 'vs/workbench/services/statusbar/browser/statusbar'; export class AccessibilityStatus extends Disposable implements IWorkbenchContribution { <del> private screenReaderNotification: INotificationHandle | null = null; private promptedScreenReader: boolean = false; </del> private readonly screenReaderModeElement = this._register(new MutableDisposable<IStatusbarEntryAccessor>()); constructor( <del> @IConfigurationService private readonly configurationService: IConfigurationService, @INotificationService private readonly notificationService: INotificationService, </del> <ins> @IConfigurationService configurationService: IConfigurationService, </ins> @IAccessibilityService private readonly _accessibilityService: IAccessibilityService, @IStatusbarService private readonly statusbarService: IStatusbarService ) {

this.onScreenReaderModeChange(); } })); <del> CommandsRegistry.registerCommand({ id: 'showEditorScreenReaderNotification', handler: () => this.showScreenReaderNotification() }); </del> this.updateScreenReaderModeElement(this._accessibilityService.isScreenReaderOptimized()); } <del> private showScreenReaderNotification(): void { this.screenReaderNotification = this.notificationService.prompt( Severity.Info, localize('screenReaderDetectedExplanation.question', "Are you using a screen reader to operate VS Code?"), [{ label: localize('screenReaderDetectedExplanation.answerYes', "Yes"), run: () => { this.configurationService.updateValue('editor.accessibilitySupport', 'on', ConfigurationTarget.USER); } }, { label: localize('screenReaderDetectedExplanation.answerNo', "No"), run: () => { this.configurationService.updateValue('editor.accessibilitySupport', 'off', ConfigurationTarget.USER); } }], { sticky: true, priority: NotificationPriority.URGENT } ); Event.once(this.screenReaderNotification.onDidClose)(() => this.screenReaderNotification = null); } </del> private updateScreenReaderModeElement(visible: boolean): void { if (visible) { if (!this.screenReaderModeElement.value) {

name: localize('status.editor.screenReaderMode', "Screen Reader Mode"), text, ariaLabel: text, <del> command: 'showEditorScreenReaderNotification', </del> kind: 'prominent' }, 'status.editor.screenReaderMode', StatusbarAlignment.RIGHT, 100.6); }

} private onScreenReaderModeChange(): void { <del> // We only support text based editors const screenReaderDetected = this._accessibilityService.isScreenReaderOptimized(); if (screenReaderDetected) { const screenReaderConfiguration = this.configurationService.getValue('editor.accessibilitySupport'); if (screenReaderConfiguration === 'auto') { if (!this.promptedScreenReader) { this.promptedScreenReader = true; setTimeout(() => this.showScreenReaderNotification(), 100); } } } if (this.screenReaderNotification) { this.screenReaderNotification.close(); } </del> this.updateScreenReaderModeElement(this._accessibilityService.isScreenReaderOptimized()); } }