Commit bf661b7c authored by Gavin Williams's avatar Gavin Williams Committed by Commit Bot

Include printer status in ChromeVox output

To comply with GAR4 standards, this change adds the current error
printer status to the aria-description. So when the element is
navigated to in ChromeVox, the status will be announced as well.

Also fixed destination and See More label by adding single quotes. This
will pass the values into i18n as a string and not a variable.

Bug: 1059607
Change-Id: I7a5c6e715eb056534b15295d913d85e3621b9d60
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2317777
Commit-Queue: Gavin Williams <gavinwill@chromium.org>
Reviewed-by: default avatarRebekah Potter <rbpotter@chromium.org>
Cr-Commit-Position: refs/heads/master@{#791733}
parent cb411698
...@@ -54,3 +54,22 @@ export const PrinterStatusSeverity = { ...@@ -54,3 +54,22 @@ export const PrinterStatusSeverity = {
* }} * }}
*/ */
export let PrinterStatus; export let PrinterStatus;
/** @const {!Map<!PrinterStatusReason, string>} */
export const ERROR_STRING_KEY_MAP = new Map([
[PrinterStatusReason.CONNECTING_TO_DEVICE, 'printerStatusConnectingToDevice'],
[PrinterStatusReason.DEVICE_ERROR, 'printerStatusDeviceError'],
[PrinterStatusReason.DOOR_OPEN, 'printerStatusDoorOpen'],
[PrinterStatusReason.LOW_ON_INK, 'printerStatusLowOnInk'],
[PrinterStatusReason.LOW_ON_PAPER, 'printerStatusLowOnPaper'],
[PrinterStatusReason.OUT_OF_INK, 'printerStatusOutOfInk'],
[PrinterStatusReason.OUT_OF_PAPER, 'printerStatusOutOfPaper'],
[PrinterStatusReason.OUTPUT_ALMOST_FULL, 'printerStatusOutputAlmostFull'],
[PrinterStatusReason.OUTPUT_FULL, 'printerStatusOutputFull'],
[PrinterStatusReason.PAPER_JAM, 'printerStatusPaperJam'],
[PrinterStatusReason.PAUSED, 'printerStatusPaused'],
[PrinterStatusReason.PRINTER_QUEUE_FULL, 'printerStatusPrinterQueueFull'],
[PrinterStatusReason.PRINTER_UNREACHABLE, 'printerStatusPrinterUnreachable'],
[PrinterStatusReason.STOPPED, 'printerStatusStopped'],
[PrinterStatusReason.TRAY_MISSING, 'printerStatusTrayMissing'],
]);
...@@ -101,7 +101,9 @@ ...@@ -101,7 +101,9 @@
} }
</style> </style>
<div id="destination-dropdown" on-keydown="onKeyDown_" tabindex="0" <div id="destination-dropdown" on-keydown="onKeyDown_" tabindex="0"
on-blur="onBlur_" on-click="onClick_" role="button" aria-haspopup="true"> on-blur="onBlur_" on-click="onClick_" role="button" aria-haspopup="true"
aria-label="$i18n{destinationLabel} [[value.displayName]]"
aria-description$="[[destinationStatusText]]">
<div id="destination-display-container"> <div id="destination-display-container">
<div id="destination-icon-box"> <div id="destination-icon-box">
<iron-icon icon="[[destinationIcon]]" <iron-icon icon="[[destinationIcon]]"
...@@ -126,7 +128,9 @@ ...@@ -126,7 +128,9 @@
on-click="onSelect_" on-blur="onBlur_" role="menuitem" on-click="onSelect_" on-blur="onBlur_" role="menuitem"
aria-setsize$="[[dropdownLength_]]" aria-setsize$="[[dropdownLength_]]"
class$="list-item [[getHighlightedClass_(item.key, class$="list-item [[getHighlightedClass_(item.key,
highlightedIndex_)]]"> highlightedIndex_)]]"
aria-description$="[[getPrinterStatusErrorString_(
item.printerStatusReason)]]">
<printer-status-icon-cros icon-location="[[IconLocation.DROPDOWN]]" <printer-status-icon-cros icon-location="[[IconLocation.DROPDOWN]]"
printer-state="[[computePrinterState_( printer-state="[[computePrinterState_(
item.printerStatusReason)]]" item.printerStatusReason)]]"
...@@ -157,7 +161,7 @@ ...@@ -157,7 +161,7 @@
$i18n{noDestinationsMessage} $i18n{noDestinationsMessage}
</button> </button>
<button on-click="onSelect_" tabindex="-1" value="seeMore" <button on-click="onSelect_" tabindex="-1" value="seeMore"
aria-label$="[[i18n(seeMoreDestinationsLabel)]]" on-blur="onBlur_" aria-label="$i18n{seeMoreDestinationsLabel}" on-blur="onBlur_"
role="menuitem" aria-setsize$="[[dropdownLength_]]" role="menuitem" aria-setsize$="[[dropdownLength_]]"
class$="list-item [[getHighlightedClass_('seeMore', class$="list-item [[getHighlightedClass_('seeMore',
highlightedIndex_)]]"> highlightedIndex_)]]">
......
...@@ -10,10 +10,11 @@ import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js'; ...@@ -10,10 +10,11 @@ import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js';
import './print_preview_vars_css.js'; import './print_preview_vars_css.js';
import {I18nBehavior} from 'chrome://resources/js/i18n_behavior.m.js';
import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {Destination, DestinationOrigin} from '../data/destination.js'; import {Destination, DestinationOrigin} from '../data/destination.js';
import {PrinterStatusReason} from '../data/printer_status_cros.js'; import {ERROR_STRING_KEY_MAP, PrinterStatusReason} from '../data/printer_status_cros.js';
import {IconLocation, PrinterState} from './printer_status_icon_cros.js'; import {IconLocation, PrinterState} from './printer_status_icon_cros.js';
...@@ -22,6 +23,8 @@ Polymer({ ...@@ -22,6 +23,8 @@ Polymer({
_template: html`{__html_template__}`, _template: html`{__html_template__}`,
behaviors: [I18nBehavior],
properties: { properties: {
/** @type {!Destination} */ /** @type {!Destination} */
value: Object, value: Object,
...@@ -67,6 +70,8 @@ Polymer({ ...@@ -67,6 +70,8 @@ Polymer({
computed: computed:
'computeDropdownLength_(itemList, pdfPrinterDisabled, driveDestinationKey, noDestinations, )', 'computeDropdownLength_(itemList, pdfPrinterDisabled, driveDestinationKey, noDestinations, )',
}, },
destinationStatusText: String,
}, },
listeners: { listeners: {
...@@ -333,4 +338,14 @@ Polymer({ ...@@ -333,4 +338,14 @@ Polymer({
} }
return length; return length;
}, },
/**
* @param {!PrinterStatusReason} printerStatusReason
* @return {string}
* @private
*/
getPrinterStatusErrorString_: function(printerStatusReason) {
const errorStringKey = ERROR_STRING_KEY_MAP.get(printerStatusReason);
return errorStringKey ? this.i18n(errorStringKey) : '';
},
}); });
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
</div> </div>
<template is="dom-if" if="[[!printerStatusFlagEnabled_]]"> <template is="dom-if" if="[[!printerStatusFlagEnabled_]]">
<select id="dropdown" class="md-select" <select id="dropdown" class="md-select"
aria-label$="[[i18n(destinationLabel)]]" hidden$="[[!loaded]]" aria-label="$i18n{destinationLabel}" hidden$="[[!loaded]]"
style="background-image:[[backgroundImages_]];" style="background-image:[[backgroundImages_]];"
disabled$="[[disabled]]" disabled$="[[disabled]]"
value="{{selectedValue::change}}"> value="{{selectedValue::change}}">
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
$i18n{noDestinationsMessage} $i18n{noDestinationsMessage}
</option> </option>
<option value="seeMore" <option value="seeMore"
aria-label$="[[i18n(seeMoreDestinationsLabel)]]"> aria-label="$i18n{seeMoreDestinationsLabel}">
$i18n{seeMore} $i18n{seeMore}
</option> </option>
</select> </select>
...@@ -49,7 +49,8 @@ ...@@ -49,7 +49,8 @@
pdf-printer-disabled="[[pdfPrinterDisabled]]" pdf-printer-disabled="[[pdfPrinterDisabled]]"
destination-icon="[[destinationIcon_]]" disabled="[[disabled]]" destination-icon="[[destinationIcon_]]" disabled="[[disabled]]"
is-current-destination-cros-local="[[isCurrentDestinationCrosLocal_]]" is-current-destination-cros-local="[[isCurrentDestinationCrosLocal_]]"
on-dropdown-value-selected="onDropdownValueSelected_"> on-dropdown-value-selected="onDropdownValueSelected_"
destination-status-text="[[statusText_]]">
</print-preview-destination-dropdown-cros> </print-preview-destination-dropdown-cros>
</template> </template>
</div> </div>
...@@ -58,7 +59,8 @@ ...@@ -58,7 +59,8 @@
hidden$="[[!statusText_]]"> hidden$="[[!statusText_]]">
<div slot="title"></div> <div slot="title"></div>
<div slot="controls"> <div slot="controls">
<div id="statusText" class="destination-status" title="[[statusText_]]"> <div id="statusText" class="destination-status" title="[[statusText_]]"
aria-hidden="true">
[[statusText_]] [[statusText_]]
</div> </div>
</div> </div>
......
...@@ -22,31 +22,12 @@ import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; ...@@ -22,31 +22,12 @@ import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
import {Base, html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {Base, html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {CloudOrigins, Destination, DestinationOrigin, PDF_DESTINATION_KEY, RecentDestination} from '../data/destination.js'; import {CloudOrigins, Destination, DestinationOrigin, PDF_DESTINATION_KEY, RecentDestination} from '../data/destination.js';
import {PrinterStatus, PrinterStatusReason, PrinterStatusSeverity} from '../data/printer_status_cros.js'; import {ERROR_STRING_KEY_MAP, PrinterStatus, PrinterStatusReason, PrinterStatusSeverity} from '../data/printer_status_cros.js';
import {NativeLayer, NativeLayerImpl} from '../native_layer.js'; import {NativeLayer, NativeLayerImpl} from '../native_layer.js';
import {getSelectDropdownBackground} from '../print_preview_utils.js'; import {getSelectDropdownBackground} from '../print_preview_utils.js';
import {SelectBehavior} from './select_behavior.js'; import {SelectBehavior} from './select_behavior.js';
/** @const {!Map<!PrinterStatusReason, string>} */
const ERROR_STRING_KEY_MAP = new Map([
[PrinterStatusReason.CONNECTING_TO_DEVICE, 'printerStatusConnectingToDevice'],
[PrinterStatusReason.DEVICE_ERROR, 'printerStatusDeviceError'],
[PrinterStatusReason.DOOR_OPEN, 'printerStatusDoorOpen'],
[PrinterStatusReason.LOW_ON_INK, 'printerStatusLowOnInk'],
[PrinterStatusReason.LOW_ON_PAPER, 'printerStatusLowOnPaper'],
[PrinterStatusReason.OUT_OF_INK, 'printerStatusOutOfInk'],
[PrinterStatusReason.OUT_OF_PAPER, 'printerStatusOutOfPaper'],
[PrinterStatusReason.OUTPUT_ALMOST_FULL, 'printerStatusOutputAlmostFull'],
[PrinterStatusReason.OUTPUT_FULL, 'printerStatusOutputFull'],
[PrinterStatusReason.PAPER_JAM, 'printerStatusPaperJam'],
[PrinterStatusReason.PAUSED, 'printerStatusPaused'],
[PrinterStatusReason.PRINTER_QUEUE_FULL, 'printerStatusPrinterQueueFull'],
[PrinterStatusReason.PRINTER_UNREACHABLE, 'printerStatusPrinterUnreachable'],
[PrinterStatusReason.STOPPED, 'printerStatusStopped'],
[PrinterStatusReason.TRAY_MISSING, 'printerStatusTrayMissing'],
]);
Polymer({ Polymer({
is: 'print-preview-destination-select-cros', is: 'print-preview-destination-select-cros',
...@@ -391,8 +372,8 @@ Polymer({ ...@@ -391,8 +372,8 @@ Polymer({
* @private * @private
*/ */
getErrorString_: function(printerStatusReason) { getErrorString_: function(printerStatusReason) {
const errorTextKey = ERROR_STRING_KEY_MAP.get(printerStatusReason); const errorStringKey = ERROR_STRING_KEY_MAP.get(printerStatusReason);
return errorTextKey ? this.i18n(errorTextKey) : ''; return errorStringKey ? this.i18n(errorStringKey) : '';
}, },
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment