Commit a2c9272d authored by Andrew Xu's avatar Andrew Xu Committed by Commit Bot

[Multipaste] Speak a11y announcement when delete button is focused

This CL does two things:
(1) Ignore the MenuItemView instance in accessibility events handling.
Then we can customize accessibility behaviors of the multipaste menu
in ClipboardHistoryItemView class.

(2) When the delete button gets the pseudo focus, the accessibility
side is notified.

Bug: 1145773
Change-Id: Ibd73b04637b89cc8200ca2f74721a10a44e857c4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2513502Reviewed-by: default avatarAlex Newcomer <newcomer@chromium.org>
Commit-Queue: Andrew Xu <andrewxu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#824561}
parent 75157de8
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "ui/base/data_transfer_policy/data_transfer_policy_controller.h" #include "ui/base/data_transfer_policy/data_transfer_policy_controller.h"
#include "ui/base/ui_base_types.h" #include "ui/base/ui_base_types.h"
#include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/rect.h"
#include "ui/views/accessibility/view_accessibility.h"
#include "ui/views/controls/menu/menu_item_view.h" #include "ui/views/controls/menu/menu_item_view.h"
#include "ui/views/controls/menu/menu_runner.h" #include "ui/views/controls/menu/menu_runner.h"
#include "ui/views/controls/menu/menu_types.h" #include "ui/views/controls/menu/menu_types.h"
...@@ -321,6 +322,10 @@ views::MenuItemView* ClipboardHistoryMenuModelAdapter::AppendMenuItem( ...@@ -321,6 +322,10 @@ views::MenuItemView* ClipboardHistoryMenuModelAdapter::AppendMenuItem(
views::MenuItemView* container = menu->AppendMenuItem(command_id); views::MenuItemView* container = menu->AppendMenuItem(command_id);
// Ignore `container` in accessibility events handling. Let `item_view`
// handle.
container->GetViewAccessibility().OverrideIsIgnored(true);
// Margins are managed by `ClipboardHistoryItemView`. // Margins are managed by `ClipboardHistoryItemView`.
container->SetMargins(/*top_margin=*/0, /*bottom_margin=*/0); container->SetMargins(/*top_margin=*/0, /*bottom_margin=*/0);
......
...@@ -182,6 +182,9 @@ ClipboardHistoryItemView::ClipboardHistoryItemView( ...@@ -182,6 +182,9 @@ ClipboardHistoryItemView::ClipboardHistoryItemView(
: clipboard_history_item_(clipboard_history_item), container_(container) {} : clipboard_history_item_(clipboard_history_item), container_(container) {}
void ClipboardHistoryItemView::Init() { void ClipboardHistoryItemView::Init() {
SetFocusBehavior(views::View::FocusBehavior::ACCESSIBLE_ONLY);
GetViewAccessibility().OverrideRole(ax::mojom::Role::kMenuItem);
SetLayoutManager(std::make_unique<views::FillLayout>()); SetLayoutManager(std::make_unique<views::FillLayout>());
// Ensures that MainButton is below any other child views. // Ensures that MainButton is below any other child views.
...@@ -322,6 +325,21 @@ void ClipboardHistoryItemView::SetPseudoFocus(PseudoFocus new_pseudo_focus) { ...@@ -322,6 +325,21 @@ void ClipboardHistoryItemView::SetPseudoFocus(PseudoFocus new_pseudo_focus) {
pseudo_focus_ = new_pseudo_focus; pseudo_focus_ = new_pseudo_focus;
contents_view_->delete_button()->SetVisible(ShouldShowDeleteButton()); contents_view_->delete_button()->SetVisible(ShouldShowDeleteButton());
main_button_->SchedulePaint(); main_button_->SchedulePaint();
switch (pseudo_focus_) {
case PseudoFocus::kEmpty:
break;
case PseudoFocus::kMainButton:
NotifyAccessibilityEvent(ax::mojom::Event::kSelection,
/*send_native_event=*/true);
break;
case PseudoFocus::kDeleteButton:
contents_view_->delete_button()->NotifyAccessibilityEvent(
ax::mojom::Event::kHover, /*send_native_event*/ true);
break;
case PseudoFocus::kMaxValue:
NOTREACHED();
break;
}
} }
} // namespace ash } // namespace ash
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