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 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.
</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 name="IDS_ASH_OVERVIEW_SETTINGS_BUTTON_LABEL" desc="The accessible name for the Overview Settings button during faster splitscreen setup.">
Windows and desks settings
@ -2602,7 +2599,10 @@ Style notes:
</message>
<!-- 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
</message>
<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.">
Last desk can't be removed.
</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">
Desk name
</message>
<message name="IDS_ASH_DESKS_DESK_PREVIEW" desc="The desk preview accessible name">
Desk preview
<message name="IDS_ASH_DESKS_DESK_PREVIEW_ACTIVE" desc="The desk preview's accessible name when active">
<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 name="IDS_ASH_DESKS_DESK_ACCESSIBLE_NAME" desc="The full accessible desk name">
Desk: <ph name="DESK_NAME">$1</ph>
</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">
Desk name was changed to <ph name="DESK_NAME">$1</ph>
</message>
@ -2684,7 +2681,10 @@ Style notes:
Combine with <ph name="DESK_NAME">$1</ph>
</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.">
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 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

@ -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));
}
if (config_.close_all_callback) {
if (config_.close_all_target_name) {
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(
CommandId::kCloseAll,
l10n_util::GetStringUTF16(IDS_ASH_DESKS_CLOSE_ALL_DESCRIPTION),
CommandId::kCloseAll, close_all_a11y,
ui::ImageModel::FromVectorIcon(kMediumOrLargeCloseButtonIcon,
ui::kColorAshSystemUIMenuIcon));
}

@ -52,6 +52,7 @@ class DeskActionContextMenu : public views::ContextMenuController,
base::RepeatingClosure combine_desks_callback;
// 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;
// Optional, invoked when the menu is closed.

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

@ -25,7 +25,8 @@ class ASH_EXPORT DeskActionView : public views::BoxLayoutView,
public:
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 close_all_callback,
base::RepeatingClosure focus_change_callback);

@ -328,7 +328,7 @@ class DeskBarScrollViewLayout : public views::LayoutManager {
new_desk_button->SetBoundsRect(new_desk_button_bounds);
LayoutDeskIconButtonLabel(bar_view_->new_desk_button_label(),
new_desk_button_bounds, desk_name_view,
IDS_ASH_DESKS_NEW_DESK_BUTTON);
IDS_ASH_DESKS_NEW_DESK_BUTTON_LABEL);
x +=
(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();
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) {
MoveFocusToView(name_view);

@ -120,13 +120,6 @@ DeskMiniView::DeskMiniView(DeskBarViewBase* owner_bar,
desk_name_view->set_controller(this);
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();
layer()->SetFillsBoundsOpaquely(false);
@ -196,7 +189,9 @@ DeskMiniView::DeskMiniView(DeskBarViewBase* owner_bar,
}
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=*/
base::BindRepeating(&DeskMiniView::OnRemovingDesk, base::Unretained(this),
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.
DesksController* desk_controller = DesksController::Get();
if (desk_controller->CanRemoveDesks()) {
menu_config.close_all_target_name = desk_->name();
menu_config.close_all_callback = base::BindRepeating(
&DeskMiniView::OnRemovingDesk, base::Unretained(this),
DeskCloseType::kCloseAllWindowsAndWait);
@ -603,7 +599,7 @@ void DeskMiniView::OnDeskNameChanged(const std::u16string& new_name) {
return;
desk_name_view_->SetText(new_name);
desk_preview_->SetAccessibleName(new_name);
desk_preview_->UpdateAccessibleName();
DeprecatedLayoutImmediately();
}

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

@ -350,7 +350,6 @@ DeskPreviewView::DeskPreviewView(PressedCallback callback,
views::InkDrop::Get(this)->SetMode(views::InkDropHost::InkDropMode::OFF);
SetFocusBehavior(views::View::FocusBehavior::ALWAYS);
SetPaintToLayer(ui::LAYER_TEXTURED);
SetAccessibleName(l10n_util::GetStringUTF16(IDS_ASH_DESKS_DESK_PREVIEW));
layer()->SetFillsBoundsOpaquely(false);
layer()->SetMasksToBounds(false);
@ -378,6 +377,8 @@ DeskPreviewView::DeskPreviewView(PressedCallback callback,
highlight_overlay_layer->SetIsFastRoundedCorner(true);
RecreateDeskContentsMirrorLayers();
UpdateAccessibleName();
}
DeskPreviewView::~DeskPreviewView() = default;
@ -487,40 +488,26 @@ void DeskPreviewView::Swap(bool right) {
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) {
// Avoid failing accessibility checks if we don't have a name.
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();
// 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
// can use an accelerator.
if (!DesksController::Get()->CanRemoveDesks()) {
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);
node_data->AddStringAttribute(
ax::mojom::StringAttribute::kRoleDescription,
l10n_util::GetStringUTF8(IDS_ASH_DESKS_DESK_PREVIEW_ROLE_DESCRIPTION));
}
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.
void Swap(bool right);
// Updates accessible name for this desk preview.
void UpdateAccessibleName();
// views::View:
void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
void Layout(PassKey) override;

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