This commit is contained in:
meganrogge
2024-01-29 15:12:14 -08:00
parent b9d46af136
commit ea700efe61
2 changed files with 66 additions and 47 deletions
@@ -97,6 +97,10 @@ Registry.as<IConfigurationRegistry>(ConfigurationExtensions.Configuration).regis
'description': localize('audioCues.terminalQuickFix', "Plays a sound when terminal Quick Fixes are available."),
...audioCueFeatureBase,
},
'audioCues.terminalBell': {
'description': localize('audioCues.terminalBell', "Plays a sound when the terminal bell is ringing."),
...audioCueFeatureBase,
},
'audioCues.diffLineInserted': {
'description': localize('audioCues.diffLineInserted', "Plays a sound when the focus moves to an inserted line in Accessible Diff Viewer mode or to the next/previous change."),
...audioCueFeatureBase,
@@ -9,9 +9,9 @@ import { localize } from 'vs/nls';
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
import { Action2 } from 'vs/platform/actions/common/actions';
import { AudioCue, IAudioCueService } from 'vs/platform/audioCues/browser/audioCueService';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
import { IQuickInputService, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput';
import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences';
export class ShowAudioCueHelp extends Action2 {
static readonly ID = 'audioCues.help';
@@ -29,36 +29,44 @@ export class ShowAudioCueHelp extends Action2 {
override async run(accessor: ServicesAccessor): Promise<void> {
const audioCueService = accessor.get(IAudioCueService);
const quickPickService = accessor.get(IQuickInputService);
const preferencesService = accessor.get(IPreferencesService);
const quickInputService = accessor.get(IQuickInputService);
const configurationService = accessor.get(IConfigurationService);
const accessibilityService = accessor.get(IAccessibilityService);
const userGestureCues = [AudioCue.save, AudioCue.format];
const items: (IQuickPickItem & { audioCue: AudioCue })[] = AudioCue.allAudioCues.map((cue, idx) => ({
label: accessibilityService.isScreenReaderOptimized() ?
`${cue.name}${audioCueService.isCueEnabled(cue) ? '' : ' (' + localize('disabled', "Disabled") + ')'}`
: `${audioCueService.isCueEnabled(cue) ? '$(check)' : ' '} ${cue.name}`,
label: userGestureCues.includes(cue) ? `${cue.name} (${configurationService.getValue(cue.settingsKey)})` : cue.name,
audioCue: cue,
buttons: [{
buttons: userGestureCues.includes(cue) ? [{
iconClass: ThemeIcon.asClassName(Codicon.settingsGear),
tooltip: localize('audioCues.help.settings', 'Enable/Disable Audio Cue'),
}],
alwaysVisible: true
}] : []
}));
const quickPick = quickPickService.pick<IQuickPickItem & { audioCue: AudioCue }>(
items,
{
activeItem: items[0],
onDidFocus: (item) => {
audioCueService.playSound(item.audioCue.sound.getSound(true), true);
},
onDidTriggerItemButton: (context) => {
preferencesService.openSettings({ query: context.item.audioCue.settingsKey });
},
placeHolder: localize('audioCues.help.placeholder', 'Select an audio cue to play'),
const qp = quickInputService.createQuickPick<IQuickPickItem & { audioCue: AudioCue }>();
qp.items = items;
qp.selectedItems = items.filter(i => audioCueService.isCueEnabled(i.audioCue));
qp.onDidHide(() => {
const enabledCues = qp.selectedItems.map(i => i.audioCue);
const disabledCues = AudioCue.allAudioCues.filter(cue => !enabledCues.includes(cue));
for (const cue of enabledCues) {
if (!userGestureCues.includes(cue)) {
configurationService.updateValue(cue.settingsKey, accessibilityService.isScreenReaderOptimized() ? 'auto' : 'on');
}
}
);
await quickPick;
for (const cue of disabledCues) {
if (userGestureCues.includes(cue)) {
configurationService.updateValue(cue.settingsKey, 'never');
} else {
configurationService.updateValue(cue.settingsKey, 'off');
}
}
});
qp.onDidChangeActive(() => {
audioCueService.playSound(qp.activeItems[0].audioCue.sound.getSound(true), true);
});
qp.placeholder = localize('audioCues.help.placeholder', 'Select an audio cue to play and configure');
qp.canSelectMany = true;
await qp.show();
}
}
@@ -78,32 +86,39 @@ export class ShowAccessibilityAlertHelp extends Action2 {
override async run(accessor: ServicesAccessor): Promise<void> {
const audioCueService = accessor.get(IAudioCueService);
const quickPickService = accessor.get(IQuickInputService);
const preferencesService = accessor.get(IPreferencesService);
const accessibilityService = accessor.get(IAccessibilityService);
const items: (IQuickPickItem & { audioCue: AudioCue })[] = AudioCue.allAudioCues.filter(c => !!c.alertMessage).map((cue, idx) => ({
label: accessibilityService.isScreenReaderOptimized() ?
`${cue.name}${audioCueService.isAlertEnabled(cue) ? '' : ' (' + localize('disabled', "Disabled") + ')'}`
: `${audioCueService.isAlertEnabled(cue) ? '$(check)' : ' '} ${cue.name}`,
const quickInputService = accessor.get(IQuickInputService);
const configurationService = accessor.get(IConfigurationService);
const userGestureAlerts = [AudioCue.save, AudioCue.format];
const items: (IQuickPickItem & { audioCue: AudioCue })[] = AudioCue.allAudioCues.filter(c => c.alertSettingsKey).map((cue, idx) => ({
label: userGestureAlerts.includes(cue) && cue.alertSettingsKey ? `${cue.name} (${configurationService.getValue(cue.alertSettingsKey)})` : cue.name,
audioCue: cue,
buttons: [{
buttons: userGestureAlerts.includes(cue) ? [{
iconClass: ThemeIcon.asClassName(Codicon.settingsGear),
tooltip: localize('alerts.help.settings', 'Enable/Disable Audio Cue'),
}],
tooltip: localize('alert.help.settings', 'Enable/Disable Alert'),
alwaysVisible: true
}] : []
}));
const quickPick = quickPickService.pick<IQuickPickItem & { audioCue: AudioCue }>(
items,
{
activeItem: items[0],
onDidTriggerItemButton: (context) => {
preferencesService.openSettings({ query: context.item.audioCue.alertSettingsKey });
},
placeHolder: localize('alerts.help.placeholder', 'Inspect and configure the status of an alert'),
const qp = quickInputService.createQuickPick<IQuickPickItem & { audioCue: AudioCue }>();
qp.items = items;
qp.selectedItems = items.filter(i => audioCueService.isAlertEnabled(i.audioCue));
qp.onDidHide(() => {
const enabledAlerts = qp.selectedItems.map(i => i.audioCue);
const disabledAlerts = AudioCue.allAudioCues.filter(cue => !enabledAlerts.includes(cue));
for (const cue of enabledAlerts) {
if (!userGestureAlerts.includes(cue)) {
configurationService.updateValue(cue.alertSettingsKey!, true);
}
}
);
await quickPick;
for (const cue of disabledAlerts) {
if (userGestureAlerts.includes(cue)) {
configurationService.updateValue(cue.alertSettingsKey!, 'never');
} else {
configurationService.updateValue(cue.alertSettingsKey!, false);
}
}
});
qp.placeholder = localize('alert.help.placeholder', 'Select an alert to configure');
qp.canSelectMany = true;
await qp.show();
}
}