Change:
Environment Details: VSCode Version : 1.24.1 OS Version : Win10 Additional Details: ScreenReader Version: NVDA2018.2 Repro Steps: VS Code while NVDA is ON. to View menu and Select Extensions. something in the Search Textbox and tab till install button. Actual: When we Click on install button, the text above the button changes..i.e.(installing) which is not read by the screenreader and after installing, a Reload button appears and also a icon which is not informed by the screenreader and after pressing tab key focus does not move on the text which has installed,it goes somewhere else. Expected: NVDA should announce some information about the reload button and should also read the "installing" when it is getting installed and focus should go on the very first item which has got installed. Recommendations: Refer below link which is repository of bug fixes code snippets: User Impact: User will not be able to know about the controls which has appeared after installing the particular extensions. Attachment for Reference: Does this issue occur when all extensions are disabled?: Yes
(Experimental duplicate detection) Thanks for submitting this issue. Please also check if it is already covered by an existing one, like: <!-- score: 0.588 --- <!-- score: 0.526 --- <!-- score: 0.462 --- <!-- score: 0.458 --- <!-- score: 0.451 --<!-- potentialduplicates_comment --
Makes sense. This sounds as easy as an aria alert based on the state of the installation. I would expect at least a notification once the instalation is done so the user is reminded that a reload is necessery. Feels low hanging, assigning to July
do we plan to tackle this in September? It would be great since we depend on this one for a better accessibility score?
Yes, this is for September
Note to verifier: Also test cases of uninstall and update and ensure that appropriate text is read out. Ensure that the need to reload VS Code is also mentioned

Discussion:
import { IQuickPickItem, IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; import { CancellationToken } from 'vs/base/common/cancellation'; import { IPartService } from 'vs/workbench/services/part/common/partService'; <ins> import { alert } from 'vs/base/browser/ui/aria/aria'; </ins> const promptDownloadManually = (extension: IGalleryExtension, message: string, instantiationService: IInstantiationService, notificationService: INotificationService, openerService: IOpenerService) => { const downloadUrl = `${product.extensionsGallery.serviceUrl}/publishers/${extension.publisher}/vsextensions/${extension.name}/${extension.version}/vspackage`;

run(): TPromise<any> { this.extensionsWorkbenchService.open(this.extension); <ins> alert(localize('installExtensionStart', "Installing extension {0} started. An editor is now open with more details on this extension", this.extension.displayName)); </ins> return this.install(this.extension); } private install(extension: IExtension): TPromise<void> { <del> return this.extensionsWorkbenchService.install(extension).then(null, err => { </del> <ins> return this.extensionsWorkbenchService.install(extension).then(() => { alert(localize('installExtensionComplete', "Installing extension {0} is completed. Please reload Visual Studio Code to enable it.", this.extension.displayName)); }, err => { </ins> if (!extension.gallery) { return this.notificationService.error(err); }

} run(): TPromise<any> { <del> return this.extensionsWorkbenchService.uninstall(this.extension); </del> <ins> alert(localize('uninstallExtensionStart', "Uninstalling extension {0} started.", this.extension.displayName)); return this.extensionsWorkbenchService.uninstall(this.extension).then(() => { alert(localize('uninstallExtensionComplete', "Please reload Visual Studio Code to complete the uninstallation of the extension {0}.", this.extension.displayName)); }); </ins> } dispose(): void {

} run(): TPromise<any> { <ins> alert(localize('updateExtensionStart', "Updating extension {0} to version {1} started.", this.extension.displayName, this.extension.latestVersion)); </ins> return this.install(this.extension); } private install(extension: IExtension): TPromise<void> { <del> return this.extensionsWorkbenchService.install(extension).then(null, err => { </del> <ins> return this.extensionsWorkbenchService.install(extension).then(() => { alert(localize('updateExtensionComplete', "Updating extension {0} to version {1} completed.", this.extension.displayName, this.extension.latestVersion)); }, err => { </ins> if (!extension.gallery) { return this.notificationService.error(err); }