Commit 4646e56f authored by Andrew Xu's avatar Andrew Xu Committed by Commit Bot

[Multipaste] Correct the menu item's accessible name

This CL provides the correct a11y name for each multipaste menu item.

Bug: 1145220
Change-Id: Ibbc41cd36eca6f713154d2c360479661edaf2efa
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2513526
Commit-Queue: Andrew Xu <andrewxu@chromium.org>
Reviewed-by: default avatarAlex Newcomer <newcomer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#823747}
parent b9a1950b
......@@ -12,11 +12,13 @@
#include "ash/style/scoped_light_mode_as_default.h"
#include "base/time/time.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/compositor/layer.h"
#include "ui/compositor/layer_animation_observer.h"
#include "ui/compositor/scoped_layer_animation_settings.h"
#include "ui/gfx/image/image_skia.h"
#include "ui/gfx/image/image_skia_operations.h"
#include "ui/strings/grit/ui_strings.h"
#include "ui/views/controls/image_view.h"
#include "ui/views/layout/box_layout.h"
#include "ui/views/layout/fill_layout.h"
......@@ -177,14 +179,10 @@ class ClipboardHistoryBitmapItemView::BitmapContentsView
: public ClipboardHistoryBitmapItemView::ContentsView {
public:
explicit BitmapContentsView(ClipboardHistoryBitmapItemView* container)
: ContentsView(container),
container_(container),
data_format_(ClipboardHistoryUtil::CalculateMainFormat(
container_->clipboard_history_item()->data())) {
: ContentsView(container), container_(container) {
SetLayoutManager(std::make_unique<views::FillLayout>());
DCHECK(data_format_.has_value());
auto image_view = BuildImageView(*data_format_);
auto image_view = BuildImageView();
image_view->SetPreferredSize(gfx::Size(INT_MAX, kBitmapHeight));
image_view->SetBorder(views::CreateRoundedRectBorder(
kBorderThickness, kRoundedCornerRadius, gfx::kPlaceholderColor));
......@@ -235,8 +233,7 @@ class ClipboardHistoryBitmapItemView::BitmapContentsView
AshColorProvider::ControlsLayerType::kHairlineBorderColor));
}
std::unique_ptr<RoundedImageView> BuildImageView(
ui::ClipboardInternalFormat data_format) {
std::unique_ptr<RoundedImageView> BuildImageView() {
// `BuildImageView()` achieves the image's rounded corners through
// RoundedImageView instead of layer. Because the menu's container does not
// cut the children's layers outside of the container's bounds. As a result,
......@@ -246,7 +243,7 @@ class ClipboardHistoryBitmapItemView::BitmapContentsView
const float image_opacity =
container_->IsItemEnabled() ? 1.f : kDisabledAlpha;
const auto* clipboard_history_item = container_->clipboard_history_item();
switch (data_format) {
switch (container_->data_format_) {
case ui::ClipboardInternalFormat::kHtml:
return std::make_unique<FadeImageView>(
clipboard_history_item, container_->resource_manager_,
......@@ -284,7 +281,7 @@ class ClipboardHistoryBitmapItemView::BitmapContentsView
// should fill the contents bounds while an image rendered from HTML
// should meet at least one edge of the contents bounds.
float scaling_up_ratio = 0.f;
switch (*data_format_) {
switch (container_->data_format_) {
case ui::ClipboardInternalFormat::kBitmap: {
if (width_ratio >= 1.f && height_ratio >= 1.f)
scaling_up_ratio = 1.f;
......@@ -315,7 +312,6 @@ class ClipboardHistoryBitmapItemView::BitmapContentsView
ClipboardHistoryBitmapItemView* const container_;
RoundedImageView* image_view_ = nullptr;
const base::Optional<ui::ClipboardInternalFormat> data_format_;
base::WeakPtrFactory<BitmapContentsView> weak_ptr_factory_{this};
};
......@@ -328,7 +324,9 @@ ClipboardHistoryBitmapItemView::ClipboardHistoryBitmapItemView(
const ClipboardHistoryResourceManager* resource_manager,
views::MenuItemView* container)
: ClipboardHistoryItemView(clipboard_history_item, container),
resource_manager_(resource_manager) {}
resource_manager_(resource_manager),
data_format_(*ClipboardHistoryUtil::CalculateMainFormat(
clipboard_history_item->data())) {}
ClipboardHistoryBitmapItemView::~ClipboardHistoryBitmapItemView() = default;
......@@ -341,4 +339,16 @@ ClipboardHistoryBitmapItemView::CreateContentsView() {
return std::make_unique<BitmapContentsView>(this);
}
base::string16 ClipboardHistoryBitmapItemView::GetAccessibleName() const {
switch (data_format_) {
case ui::ClipboardInternalFormat::kHtml:
return l10n_util::GetStringUTF16(IDS_CLIPBOARD_HISTORY_MENU_HTML_IMAGE);
case ui::ClipboardInternalFormat::kBitmap:
return l10n_util::GetStringUTF16(IDS_CLIPBOARD_HISTORY_MENU_BITMAP_IMAGE);
default:
NOTREACHED();
return base::string16();
}
}
} // namespace ash
......@@ -31,9 +31,13 @@ class ClipboardHistoryBitmapItemView : public ClipboardHistoryItemView {
// ClipboardHistoryItemView:
const char* GetClassName() const override;
std::unique_ptr<ContentsView> CreateContentsView() override;
base::string16 GetAccessibleName() const override;
// Owned by ClipboardHistoryController.
const ClipboardHistoryResourceManager* const resource_manager_;
// The format of the associated `ClipboardData`.
const ui::ClipboardInternalFormat data_format_;
};
} // namespace ash
......
......@@ -15,6 +15,7 @@
#include "base/metrics/histogram_macros.h"
#include "base/strings/utf_string_conversions.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/accessibility/ax_node_data.h"
#include "ui/base/clipboard/clipboard_data.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/image/image.h"
......@@ -22,6 +23,7 @@
#include "ui/gfx/image/image_skia_operations.h"
#include "ui/gfx/paint_vector_icon.h"
#include "ui/native_theme/native_theme.h"
#include "ui/views/accessibility/view_accessibility.h"
#include "ui/views/controls/menu/menu_config.h"
#include "ui/views/controls/menu/menu_item_view.h"
#include "ui/views/layout/fill_layout.h"
......@@ -78,7 +80,9 @@ class ash::ClipboardHistoryItemView::MainButton : public views::Button {
explicit MainButton(ClipboardHistoryItemView* container)
: Button(), container_(container) {
SetFocusBehavior(views::View::FocusBehavior::ALWAYS);
SetAccessibleName(base::ASCIIToUTF16(std::string(GetClassName())));
// Let the parent handle accessibility features.
GetViewAccessibility().OverrideIsIgnored(/*value=*/true);
}
MainButton(const MainButton& rhs) = delete;
MainButton& operator=(const MainButton& rhs) = delete;
......@@ -266,6 +270,10 @@ gfx::Size ClipboardHistoryItemView::CalculatePreferredSize() const {
return gfx::Size(preferred_width, GetHeightForWidth(preferred_width));
}
void ClipboardHistoryItemView::GetAccessibleNodeData(ui::AXNodeData* data) {
data->SetName(GetAccessibleName());
}
void ClipboardHistoryItemView::ExecuteCommand(int command_id,
const ui::Event& event) {
RecordButtonPressedHistogram(/*is_delete_button=*/command_id ==
......
......@@ -104,6 +104,9 @@ class ClipboardHistoryItemView : public views::View {
// Creates the contents view.
virtual std::unique_ptr<ContentsView> CreateContentsView() = 0;
// Returns the name of the accessible node.
virtual base::string16 GetAccessibleName() const = 0;
// Returns whether the item view is enabled. The item view is disabled when
// it is not allowed to read clipboard data.
bool IsItemEnabled() const;
......@@ -134,6 +137,7 @@ class ClipboardHistoryItemView : public views::View {
// views::View:
gfx::Size CalculatePreferredSize() const override;
void GetAccessibleNodeData(ui::AXNodeData* data) override;
// Executes |command_id| on the delegate.
void ExecuteCommand(int command_id, const ui::Event& event);
......
......@@ -68,10 +68,6 @@ ClipboardHistoryTextItemView::ClipboardHistoryTextItemView(
ClipboardHistoryTextItemView::~ClipboardHistoryTextItemView() = default;
const char* ClipboardHistoryTextItemView::GetClassName() const {
return "ClipboardHistoryTextItemView";
}
std::unique_ptr<ClipboardHistoryTextItemView::ContentsView>
ClipboardHistoryTextItemView::CreateContentsView() {
auto contents_view = std::make_unique<TextContentsView>(this);
......@@ -95,6 +91,14 @@ ClipboardHistoryTextItemView::CreateContentsView() {
return contents_view;
}
base::string16 ClipboardHistoryTextItemView::GetAccessibleName() const {
return text_;
}
const char* ClipboardHistoryTextItemView::GetClassName() const {
return "ClipboardHistoryTextItemView";
}
void ClipboardHistoryTextItemView::OnThemeChanged() {
// Use the light mode as default because the light mode is the default mode of
// the native theme which decides the context menu's background color.
......
......@@ -30,8 +30,9 @@ class ClipboardHistoryTextItemView : public ClipboardHistoryItemView {
class TextContentsView;
// ClipboardHistoryItemView:
const char* GetClassName() const override;
std::unique_ptr<ContentsView> CreateContentsView() override;
base::string16 GetAccessibleName() const override;
const char* GetClassName() const override;
void OnThemeChanged() override;
// Text to show.
......
......@@ -1059,6 +1059,14 @@ need to be translated for each locale.-->
Search your device, apps, settings, web...
</message>
<!-- Clipboard history menu -->
<message name="IDS_CLIPBOARD_HISTORY_MENU_BITMAP_IMAGE" desc="Accessibility text for the bitmap image shown on the clipboard history menu">
Image.
</message>
<message name="IDS_CLIPBOARD_HISTORY_MENU_HTML_IMAGE" desc="Accessibility text for the HTML-rendered image shown on the clipboard history menu">
HTML content.
</message>
<!-- Strings describing the touch calibration UX -->
<message name="IDS_DISPLAY_TOUCH_CALIBRATION_EXIT_LABEL" desc="A message to notify the user about using the escape key to exit the calibration mode.">
To exit calibration press Esc.
......
bdc063cec886fe69f0905680df4a966f6b2d7e82
\ No newline at end of file
d725f77dca975340556b037bd7c94fa4fdde8d71
\ No newline at end of file
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