0

desk_profiles: Update chromevox strings for UIs within the desk bar

This updates chromevox strings for UIs within the desk bar.

Bug: b/324001545
Test: Manual
Change-Id: I00270f21cc1fe36edddae07c7c096b09d1ca4b68
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5278924
Reviewed-by: Daniel Andersson <dandersson@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1258178}
This commit is contained in:
Yongshun Liu
2024-02-08 21:54:49 +00:00
parent 38c84b9f79
commit e2213fe186
23 changed files with 69 additions and 83 deletions

@@ -2456,9 +2456,6 @@ Style notes:
</message> </message>
<message name="IDS_ASH_OVERVIEW_CLOSABLE_HIGHLIGHT_ITEM_A11Y_EXTRA_TIP" desc="The accessibility tooltip read by screen readers for a close-able overview item."> <message name="IDS_ASH_OVERVIEW_CLOSABLE_HIGHLIGHT_ITEM_A11Y_EXTRA_TIP" desc="The accessibility tooltip read by screen readers for a close-able overview item.">
Press Ctrl + W to close. Press Ctrl + W to close.
</message>
<message name="IDS_ASH_OVERVIEW_CLOSABLE_DESK_MINIVIEW_A11Y_EXTRA_TIP" desc="The accessibility text read by screen readers for a closeable desk mini view when the close all feature is enabled.">
Press Ctrl + W to combine with <ph name="DESK_NAME">$1<ex>Desk 1</ex></ph>. Press Ctrl + Shift + W to close desk and windows.
</message> </message>
<message name="IDS_ASH_OVERVIEW_SETTINGS_BUTTON_LABEL" desc="The accessible name for the Overview Settings button during faster splitscreen setup."> <message name="IDS_ASH_OVERVIEW_SETTINGS_BUTTON_LABEL" desc="The accessible name for the Overview Settings button during faster splitscreen setup.">
Windows and desks settings Windows and desks settings
@@ -2602,7 +2599,10 @@ Style notes:
</message> </message>
<!-- Virtual Desks --> <!-- Virtual Desks -->
<message name="IDS_ASH_DESKS_NEW_DESK_BUTTON" desc="The label of the new virtual desk (a.k.a. workspaces) button."> <message name="IDS_ASH_DESKS_NEW_DESK_BUTTON" desc="The new desk button's accessible name">
Add new desk
</message>
<message name="IDS_ASH_DESKS_NEW_DESK_BUTTON_LABEL" desc="The label of the new virtual desk (a.k.a. workspaces) button.">
New desk New desk
</message> </message>
<message name="IDS_ASH_DESKS_DESK_1_MINI_VIEW_TITLE" desc="The label of the first virtual desk thumbnail."> <message name="IDS_ASH_DESKS_DESK_1_MINI_VIEW_TITLE" desc="The label of the first virtual desk thumbnail.">
@@ -2659,24 +2659,21 @@ Style notes:
<message name="IDS_ASH_DESKS_MIN_NUM_REACHED" desc="Message shown to users when they attempt to remove the last virtual."> <message name="IDS_ASH_DESKS_MIN_NUM_REACHED" desc="Message shown to users when they attempt to remove the last virtual.">
Last desk can't be removed. Last desk can't be removed.
</message> </message>
<message name="IDS_ASH_DESKS_ACTIVE_DESK_MINIVIEW_A11Y_EXTRA_TIP" desc="The accessibility tooltip read by screen readers for a highlighted active desk mini_view.">
active desk
</message>
<message name="IDS_ASH_DESKS_INACTIVE_DESK_MINIVIEW_A11Y_EXTRA_TIP" desc="The accessibility tooltip read by screen readers for a highlighted inactive desk mini_view.">
inactive desk
</message>
<message name="IDS_ASH_DESKS_DESK_NAME" desc="Alert when highlighting the desk name"> <message name="IDS_ASH_DESKS_DESK_NAME" desc="Alert when highlighting the desk name">
Desk name Desk name
</message> </message>
<message name="IDS_ASH_DESKS_DESK_PREVIEW" desc="The desk preview accessible name"> <message name="IDS_ASH_DESKS_DESK_PREVIEW_ACTIVE" desc="The desk preview's accessible name when active">
Desk preview <ph name="DESK_NAME">$1<ex>Desk 2</ex></ph> preview. Active desk.
</message>
<message name="IDS_ASH_DESKS_DESK_PREVIEW_INACTIVE" desc="The desk preview's accessible name when inactive">
<ph name="DESK_NAME">$1<ex>Desk 2</ex></ph> preview. Inactive desk.
</message>
<message name="IDS_ASH_DESKS_DESK_PREVIEW_ROLE_DESCRIPTION" desc="The desk preview's role description">
Use tab for more options. Use left and right arrows to access all desks.
</message> </message>
<message name="IDS_ASH_DESKS_DESK_ACCESSIBLE_NAME" desc="The full accessible desk name"> <message name="IDS_ASH_DESKS_DESK_ACCESSIBLE_NAME" desc="The full accessible desk name">
Desk: <ph name="DESK_NAME">$1</ph> Desk: <ph name="DESK_NAME">$1</ph>
</message> </message>
<message name="IDS_ASH_DESKS_DESK_PREVIEW_A11Y_NAME" desc="The full accessible desk name">
Go to <ph name="ACTIVE_STATE">$1</ph> <ph name="DESK_NAME">$2</ph> button.
</message>
<message name="IDS_ASH_DESKS_DESK_NAME_COMMIT" desc="Alert when the desk name is committed"> <message name="IDS_ASH_DESKS_DESK_NAME_COMMIT" desc="Alert when the desk name is committed">
Desk name was changed to <ph name="DESK_NAME">$1</ph> Desk name was changed to <ph name="DESK_NAME">$1</ph>
</message> </message>
@@ -2684,7 +2681,10 @@ Style notes:
Combine with <ph name="DESK_NAME">$1</ph> Combine with <ph name="DESK_NAME">$1</ph>
</message> </message>
<message name="IDS_ASH_DESKS_CLOSE_ALL_DESCRIPTION" desc="The tooltip and context menu text that describes the action of closing a desk and all of its windows."> <message name="IDS_ASH_DESKS_CLOSE_ALL_DESCRIPTION" desc="The tooltip and context menu text that describes the action of closing a desk and all of its windows.">
Close desk and windows Close <ph name="DESK_NAME">$1<ex>Desk 2</ex></ph> and windows
</message>
<message name="IDS_ASH_DESKS_DESK_PROFILES_BUTTON" desc="The desk profile button's accessible name">
Desk profile menu
</message> </message>
<message name="IDS_ASH_DESKS_OPEN_PROFILE_MANAGER" desc="The tooltip and context menu text that describes the action of open the profile manager."> <message name="IDS_ASH_DESKS_OPEN_PROFILE_MANAGER" desc="The tooltip and context menu text that describes the action of open the profile manager.">
Manage profiles Manage profiles

@@ -1 +0,0 @@
f0ab6cae002646d549b453d8462bb660fa4f46b2

@@ -1 +1 @@
e750f98895cd72c8c44a4e0483f27308903f61b2 4ff217fea312ef190dbb055ee8c9a6cbbeca03ae

@@ -1 +0,0 @@
c14144b250b790a2418b3df1a4faf92ba4a50d26

@@ -1 +0,0 @@
828c0f8080f2886b58e92b5ce5de44366924f884

@@ -0,0 +1 @@
dad27b76216be34429331d82d18e786e2c21fccd

@@ -0,0 +1 @@
b11f43b8e9b36b728417d529696680df6eadbf9f

@@ -0,0 +1 @@
44a8f247c68b8761a6f36b1c96cc3aa137f38221

@@ -0,0 +1 @@
47eaeeb6c75c473c8f8b6e16940952e8ea19f35a

@@ -1 +0,0 @@
052eae4fae5a6f4cfec48cce64759f0a3e615d7d

@@ -1 +1 @@
2811b931f24f85df00b6918842a8e381dad7e27e e5d34c6aa5ab0a793c1ae72ec837bb51bd9d2c6b

@@ -0,0 +1 @@
16eafc18e8c75a3995fd62768bce75e5bf72543a

@@ -1 +0,0 @@
c0ffe8f27b8c2930819fe7b0648bbf06e1ac1c62

@@ -133,11 +133,12 @@ DeskActionContextMenu::DeskActionContextMenu(Config config)
ui::kColorAshSystemUIMenuIcon)); ui::kColorAshSystemUIMenuIcon));
} }
if (config_.close_all_callback) { if (config_.close_all_target_name) {
maybe_add_separator(); maybe_add_separator();
const std::u16string close_all_a11y = l10n_util::GetStringFUTF16(
IDS_ASH_DESKS_CLOSE_ALL_DESCRIPTION, *config_.close_all_target_name);
context_menu_model_.AddItemWithIcon( context_menu_model_.AddItemWithIcon(
CommandId::kCloseAll, CommandId::kCloseAll, close_all_a11y,
l10n_util::GetStringUTF16(IDS_ASH_DESKS_CLOSE_ALL_DESCRIPTION),
ui::ImageModel::FromVectorIcon(kMediumOrLargeCloseButtonIcon, ui::ImageModel::FromVectorIcon(kMediumOrLargeCloseButtonIcon,
ui::kColorAshSystemUIMenuIcon)); ui::kColorAshSystemUIMenuIcon));
} }

@@ -52,6 +52,7 @@ class DeskActionContextMenu : public views::ContextMenuController,
base::RepeatingClosure combine_desks_callback; base::RepeatingClosure combine_desks_callback;
// If set, the option to close all windows on the desk is shown. // If set, the option to close all windows on the desk is shown.
std::optional<std::u16string> close_all_target_name;
base::RepeatingClosure close_all_callback; base::RepeatingClosure close_all_callback;
// Optional, invoked when the menu is closed. // Optional, invoked when the menu is closed.

@@ -22,11 +22,11 @@ constexpr int kDeskCloseButtonSize = 24;
} // namespace } // namespace
DeskActionView::DeskActionView( DeskActionView::DeskActionView(const std::u16string& combine_desks_target_name,
const std::u16string& initial_combine_desks_target_name, const std::u16string& close_all_target_name,
base::RepeatingClosure combine_desks_callback, base::RepeatingClosure combine_desks_callback,
base::RepeatingClosure close_all_callback, base::RepeatingClosure close_all_callback,
base::RepeatingClosure focus_change_callback) base::RepeatingClosure focus_change_callback)
: combine_desks_button_(AddChildView( : combine_desks_button_(AddChildView(
std::make_unique<CloseButton>(std::move(combine_desks_callback), std::make_unique<CloseButton>(std::move(combine_desks_callback),
CloseButton::Type::kMediumFloating, CloseButton::Type::kMediumFloating,
@@ -42,9 +42,9 @@ DeskActionView::DeskActionView(
combine_desks_button_->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); combine_desks_button_->SetFocusBehavior(views::View::FocusBehavior::ALWAYS);
close_all_button_->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); close_all_button_->SetFocusBehavior(views::View::FocusBehavior::ALWAYS);
close_all_button_->SetTooltipText( close_all_button_->SetTooltipText(l10n_util::GetStringFUTF16(
l10n_util::GetStringUTF16(IDS_ASH_DESKS_CLOSE_ALL_DESCRIPTION)); IDS_ASH_DESKS_CLOSE_ALL_DESCRIPTION, close_all_target_name));
UpdateCombineDesksTooltip(initial_combine_desks_target_name); UpdateCombineDesksTooltip(combine_desks_target_name);
combine_desks_button_->SetPreferredSize( combine_desks_button_->SetPreferredSize(
gfx::Size(kDeskCloseButtonSize, kDeskCloseButtonSize)); gfx::Size(kDeskCloseButtonSize, kDeskCloseButtonSize));

@@ -25,7 +25,8 @@ class ASH_EXPORT DeskActionView : public views::BoxLayoutView,
public: public:
METADATA_HEADER(DeskActionView); METADATA_HEADER(DeskActionView);
DeskActionView(const std::u16string& initial_combine_desks_target_name, DeskActionView(const std::u16string& combine_desks_target_name,
const std::u16string& close_all_target_name,
base::RepeatingClosure combine_desks_callback, base::RepeatingClosure combine_desks_callback,
base::RepeatingClosure close_all_callback, base::RepeatingClosure close_all_callback,
base::RepeatingClosure focus_change_callback); base::RepeatingClosure focus_change_callback);

@@ -328,7 +328,7 @@ class DeskBarScrollViewLayout : public views::LayoutManager {
new_desk_button->SetBoundsRect(new_desk_button_bounds); new_desk_button->SetBoundsRect(new_desk_button_bounds);
LayoutDeskIconButtonLabel(bar_view_->new_desk_button_label(), LayoutDeskIconButtonLabel(bar_view_->new_desk_button_label(),
new_desk_button_bounds, desk_name_view, new_desk_button_bounds, desk_name_view,
IDS_ASH_DESKS_NEW_DESK_BUTTON); IDS_ASH_DESKS_NEW_DESK_BUTTON_LABEL);
x += x +=
(new_desk_button_size.width() + kDeskBarMiniViewsSpacing) * increment; (new_desk_button_size.width() + kDeskBarMiniViewsSpacing) * increment;
}; };
@@ -865,12 +865,6 @@ void DeskBarViewBase::NudgeDeskName(int desk_index) {
auto* name_view = mini_views_[desk_index]->desk_name_view(); auto* name_view = mini_views_[desk_index]->desk_name_view();
name_view->RequestFocus(); name_view->RequestFocus();
// Set `name_view`'s accessible name if its text is cleared.
if (name_view->GetAccessibleName().empty()) {
name_view->SetAccessibleName(
l10n_util::GetStringUTF16(IDS_ASH_DESKS_DESK_NAME));
}
if (type_ == Type::kOverview) { if (type_ == Type::kOverview) {
MoveFocusToView(name_view); MoveFocusToView(name_view);

@@ -120,13 +120,6 @@ DeskMiniView::DeskMiniView(DeskBarViewBase* owner_bar,
desk_name_view->set_controller(this); desk_name_view->set_controller(this);
desk_name_view->SetText(desk_->name()); desk_name_view->SetText(desk_->name());
// Desks created by the new desk button are initialized with an empty name to
// encourage user to name the desk, but the `desk_name_view` needs a non-empty
// accessible name.
auto* desks_controller = DesksController::Get();
desk_name_view->SetAccessibleName(
l10n_util::GetStringUTF16(IDS_ASH_DESKS_DESK_NAME));
SetPaintToLayer(); SetPaintToLayer();
layer()->SetFillsBoundsOpaquely(false); layer()->SetFillsBoundsOpaquely(false);
@@ -196,7 +189,9 @@ DeskMiniView::DeskMiniView(DeskBarViewBase* owner_bar,
} }
desk_action_view_ = AddChildView(std::make_unique<DeskActionView>( desk_action_view_ = AddChildView(std::make_unique<DeskActionView>(
desks_controller->GetCombineDesksTargetName(desk_), /*combine_desks_target_name=*/DesksController::Get()
->GetCombineDesksTargetName(desk_),
/*close_all_target_name=*/desk_->name(),
/*combine_desks_callback=*/ /*combine_desks_callback=*/
base::BindRepeating(&DeskMiniView::OnRemovingDesk, base::Unretained(this), base::BindRepeating(&DeskMiniView::OnRemovingDesk, base::Unretained(this),
DeskCloseType::kCombineDesks), DeskCloseType::kCombineDesks),
@@ -404,6 +399,7 @@ void DeskMiniView::OpenContextMenu(ui::MenuSourceType source) {
// Only add desk combine/close options if it's possible to remove a desk. // Only add desk combine/close options if it's possible to remove a desk.
DesksController* desk_controller = DesksController::Get(); DesksController* desk_controller = DesksController::Get();
if (desk_controller->CanRemoveDesks()) { if (desk_controller->CanRemoveDesks()) {
menu_config.close_all_target_name = desk_->name();
menu_config.close_all_callback = base::BindRepeating( menu_config.close_all_callback = base::BindRepeating(
&DeskMiniView::OnRemovingDesk, base::Unretained(this), &DeskMiniView::OnRemovingDesk, base::Unretained(this),
DeskCloseType::kCloseAllWindowsAndWait); DeskCloseType::kCloseAllWindowsAndWait);
@@ -603,7 +599,7 @@ void DeskMiniView::OnDeskNameChanged(const std::u16string& new_name) {
return; return;
desk_name_view_->SetText(new_name); desk_name_view_->SetText(new_name);
desk_preview_->SetAccessibleName(new_name); desk_preview_->UpdateAccessibleName();
DeprecatedLayoutImmediately(); DeprecatedLayoutImmediately();
} }

@@ -32,6 +32,8 @@ DeskNameView::DeskNameView(DeskMiniView* mini_view)
set_use_default_focus_manager(mini_view_->owner_bar()->type() == set_use_default_focus_manager(mini_view_->owner_bar()->type() ==
DeskBarViewBase::Type::kDeskButton); DeskBarViewBase::Type::kDeskButton);
SetAccessibleName(l10n_util::GetStringUTF16(IDS_ASH_DESKS_DESK_NAME));
} }
DeskNameView::~DeskNameView() = default; DeskNameView::~DeskNameView() = default;

@@ -350,7 +350,6 @@ DeskPreviewView::DeskPreviewView(PressedCallback callback,
views::InkDrop::Get(this)->SetMode(views::InkDropHost::InkDropMode::OFF); views::InkDrop::Get(this)->SetMode(views::InkDropHost::InkDropMode::OFF);
SetFocusBehavior(views::View::FocusBehavior::ALWAYS); SetFocusBehavior(views::View::FocusBehavior::ALWAYS);
SetPaintToLayer(ui::LAYER_TEXTURED); SetPaintToLayer(ui::LAYER_TEXTURED);
SetAccessibleName(l10n_util::GetStringUTF16(IDS_ASH_DESKS_DESK_PREVIEW));
layer()->SetFillsBoundsOpaquely(false); layer()->SetFillsBoundsOpaquely(false);
layer()->SetMasksToBounds(false); layer()->SetMasksToBounds(false);
@@ -378,6 +377,8 @@ DeskPreviewView::DeskPreviewView(PressedCallback callback,
highlight_overlay_layer->SetIsFastRoundedCorner(true); highlight_overlay_layer->SetIsFastRoundedCorner(true);
RecreateDeskContentsMirrorLayers(); RecreateDeskContentsMirrorLayers();
UpdateAccessibleName();
} }
DeskPreviewView::~DeskPreviewView() = default; DeskPreviewView::~DeskPreviewView() = default;
@@ -487,40 +488,26 @@ void DeskPreviewView::Swap(bool right) {
desks_controller->UpdateDesksDefaultNames(); desks_controller->UpdateDesksDefaultNames();
} }
void DeskPreviewView::UpdateAccessibleName() {
if (Desk* desk = mini_view_->desk()) {
SetAccessibleName(l10n_util::GetStringFUTF16(
desk->is_active() ? IDS_ASH_DESKS_DESK_PREVIEW_ACTIVE
: IDS_ASH_DESKS_DESK_PREVIEW_INACTIVE,
desk->name()));
}
}
void DeskPreviewView::GetAccessibleNodeData(ui::AXNodeData* node_data) { void DeskPreviewView::GetAccessibleNodeData(ui::AXNodeData* node_data) {
// Avoid failing accessibility checks if we don't have a name.
views::Button::GetAccessibleNodeData(node_data); views::Button::GetAccessibleNodeData(node_data);
if (GetAccessibleName().empty())
// Avoid failing accessibility checks if we don't have a name.
if (GetAccessibleName().empty()) {
node_data->SetNameExplicitlyEmpty(); node_data->SetNameExplicitlyEmpty();
// Note that the desk may have already been destroyed.
Desk* desk = mini_view_->desk();
if (desk) {
// Announce desk name.
node_data->AddStringAttribute(
ax::mojom::StringAttribute::kRoleDescription,
l10n_util::GetStringFUTF8(
IDS_ASH_DESKS_DESK_PREVIEW_A11Y_NAME,
l10n_util::GetStringUTF16(
desk->is_active()
? IDS_ASH_DESKS_ACTIVE_DESK_MINIVIEW_A11Y_EXTRA_TIP
: IDS_ASH_DESKS_INACTIVE_DESK_MINIVIEW_A11Y_EXTRA_TIP),
desk->name()));
} }
// If the desk can be combined or closed, add a tip to let the user know they node_data->AddStringAttribute(
// can use an accelerator. ax::mojom::StringAttribute::kRoleDescription,
if (!DesksController::Get()->CanRemoveDesks()) { l10n_util::GetStringUTF8(IDS_ASH_DESKS_DESK_PREVIEW_ROLE_DESCRIPTION));
return;
}
const std::u16string target_desk_name =
DesksController::Get()->GetCombineDesksTargetName(desk);
const std::string extra_tip = l10n_util::GetStringFUTF8(
IDS_ASH_OVERVIEW_CLOSABLE_DESK_MINIVIEW_A11Y_EXTRA_TIP, target_desk_name);
node_data->AddStringAttribute(ax::mojom::StringAttribute::kDescription,
extra_tip);
} }
void DeskPreviewView::Layout(PassKey) { void DeskPreviewView::Layout(PassKey) {

@@ -111,6 +111,9 @@ class ASH_EXPORT DeskPreviewView : public views::Button,
// its right preview; otherwise it swaps with its left preview. // its right preview; otherwise it swaps with its left preview.
void Swap(bool right); void Swap(bool right);
// Updates accessible name for this desk preview.
void UpdateAccessibleName();
// views::View: // views::View:
void GetAccessibleNodeData(ui::AXNodeData* node_data) override; void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
void Layout(PassKey) override; void Layout(PassKey) override;

@@ -14,6 +14,7 @@
#include "ash/wm/desks/desk_mini_view.h" #include "ash/wm/desks/desk_mini_view.h"
#include "ash/wm/desks/desks_histogram_enums.h" #include "ash/wm/desks/desks_histogram_enums.h"
#include "base/check_op.h" #include "base/check_op.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/metadata/metadata_impl_macros.h" #include "ui/base/metadata/metadata_impl_macros.h"
#include "ui/chromeos/styles/cros_tokens_color_mappings.h" #include "ui/chromeos/styles/cros_tokens_color_mappings.h"
#include "ui/compositor/layer.h" #include "ui/compositor/layer.h"
@@ -61,8 +62,8 @@ DeskProfilesButton::DeskProfilesButton(Desk* desk,
LoadIconForProfile(); LoadIconForProfile();
// TODO(shidi):Update the accessible name if get any. SetAccessibleName(
SetAccessibleName(u"", ax::mojom::NameFrom::kAttributeExplicitlyEmpty); l10n_util::GetStringUTF16(IDS_ASH_DESKS_DESK_PROFILES_BUTTON));
} }
DeskProfilesButton::~DeskProfilesButton() { DeskProfilesButton::~DeskProfilesButton() {