0

customization: Add specific case for "Middle Button" in button strings

Bug: b/241965717
Change-Id: Ied81ff5a9f79a261277ae2d033df18904db9dce2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4981230
Reviewed-by: Danny Wang <wangdanny@google.com>
Commit-Queue: David Padlipsky <dpad@google.com>
Cr-Commit-Position: refs/heads/main@{#1215889}
This commit is contained in:
David Padlipsky
2023-10-27 01:42:29 +00:00
committed by Chromium LUCI CQ
parent 2970db5ceb
commit 1850fa325b
5 changed files with 73 additions and 12 deletions

@ -7304,6 +7304,13 @@ To shut down the device, press and hold the power button on the device again.
<message name="IDS_ASH_DEVICE_SETTINGS_LEARN_MORE_BUTTON" desc="Button shown for device settings notifications which opens an article with helpful information related to the notification.">
Learn more
</message>
<message name="IDS_SETTINGS_CUSTOMIZATION_MIDDLE_BUTTON_DEFAULT_NAME" desc="The name of the middle mouse button on a mouse">
Middle Button
</message>
<message name="IDS_SETTINGS_CUSTOMIZATION_OTHER_BUTTON_DEFAULT_NAME" desc="The default name to give additional buttons on a mouse or graphics tablet">
Other Button <ph name="BUTTON_NUMBER">$1<ex>1</ex></ph>
</message>
<!-- Compat Mode Resize States-->
<message name="IDS_ARC_COMPAT_MODE_RESIZE_TOGGLE_MENU_PHONE" desc="Item in a list of possible sizes for the app. Makes the app in a portrait, phone size.">

@ -0,0 +1 @@
0ae1c13a8895bf71f94f77b988a3c14ef4b98ba6

@ -0,0 +1 @@
0ae1c13a8895bf71f94f77b988a3c14ef4b98ba6

@ -17,6 +17,7 @@
#include "ash/public/mojom/input_device_settings.mojom.h"
#include "ash/session/session_controller_impl.h"
#include "ash/shell.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/system/input_device_settings/input_device_duplicate_id_finder.h"
#include "ash/system/input_device_settings/input_device_key_alias_manager.h"
#include "ash/system/input_device_settings/input_device_notifier.h"
@ -35,6 +36,7 @@
#include "base/functional/callback_forward.h"
#include "base/metrics/histogram_functions.h"
#include "base/strings/strcat.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/to_string.h"
#include "base/task/sequenced_task_runner.h"
#include "base/values.h"
@ -45,6 +47,7 @@
#include "components/prefs/pref_service.h"
#include "components/user_manager/known_user.h"
#include "mojo/public/cpp/bindings/struct_ptr.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/ui_base_features.h"
#include "ui/events/ash/keyboard_capability.h"
#include "ui/events/devices/input_device.h"
@ -229,11 +232,34 @@ bool IsGraphicsTabletPenButton(const mojom::Button& button) {
void AddButtonToButtonRemappingList(
const mojom::Button& button,
std::vector<mojom::ButtonRemappingPtr>& button_remappings) {
// TODO(b/286930911): Translate "Button" string to other languages.
std::string button_name;
// If its a middle click, give it the default middle button name.
if (button.is_customizable_button() &&
button.get_customizable_button() == mojom::CustomizableButton::kMiddle) {
button_name = l10n_util::GetStringUTF8(
IDS_SETTINGS_CUSTOMIZATION_MIDDLE_BUTTON_DEFAULT_NAME);
} else {
// Otherwise, give it the default button name indexed at the number of
// non-middle click buttons in `button_remappings` + 1.
auto iter =
base::ranges::find(button_remappings,
*mojom::Button::NewCustomizableButton(
mojom::CustomizableButton::kMiddle),
[](const mojom::ButtonRemappingPtr& remapping) {
return *remapping->button;
});
int button_number = button_remappings.size() + 1;
if (iter != button_remappings.end()) {
--button_number;
}
button_name = l10n_util::GetStringFUTF8(
IDS_SETTINGS_CUSTOMIZATION_OTHER_BUTTON_DEFAULT_NAME,
base::NumberToString16(button_number));
}
button_remappings.push_back(mojom::ButtonRemapping::New(
/*name=*/base::StrCat(
{"Button ", base::ToString(button_remappings.size() + 1)}),
button.Clone(), /*remapping_action=*/nullptr));
std::move(button_name), button.Clone(), /*remapping_action=*/nullptr));
}
// suppress_meta_fkey_rewrites must never be non-default for internal

@ -1223,18 +1223,44 @@ TEST_F(InputDeviceSettingsControllerTest, RestoreDefaultKeyboardRemappings) {
TEST_F(InputDeviceSettingsControllerTest, MouseButtonPressed) {
ui::DeviceDataManagerTestApi().SetMouseDevices({kSampleMouseUsb});
mojom::ButtonPtr button =
mojom::Button::NewCustomizableButton(mojom::CustomizableButton::kMiddle);
controller_->OnMouseButtonPressed(kSampleMouseUsb.id, *button);
controller_->OnMouseButtonPressed(kSampleMouseUsb.id,
*mojom::Button::NewCustomizableButton(
mojom::CustomizableButton::kMiddle));
EXPECT_EQ(1u, observer_->num_mouse_settings_updated());
EXPECT_EQ(1u, observer_->num_mouse_buttons_pressed());
controller_->OnMouseButtonPressed(
kSampleMouseUsb.id,
*mojom::Button::NewCustomizableButton(mojom::CustomizableButton::kSide));
EXPECT_EQ(2u, observer_->num_mouse_settings_updated());
EXPECT_EQ(2u, observer_->num_mouse_buttons_pressed());
controller_->OnMouseButtonPressed(
kSampleMouseUsb.id,
*mojom::Button::NewCustomizableButton(mojom::CustomizableButton::kExtra));
EXPECT_EQ(3u, observer_->num_mouse_settings_updated());
EXPECT_EQ(3u, observer_->num_mouse_buttons_pressed());
auto* settings = controller_->GetMouseSettings(kSampleMouseUsb.id);
ASSERT_TRUE(settings);
ASSERT_EQ(1u, settings->button_remappings.size());
EXPECT_EQ(*button, *settings->button_remappings[0]->button);
EXPECT_EQ("Button 1", settings->button_remappings[0]->name);
ASSERT_EQ(3u, settings->button_remappings.size());
EXPECT_EQ(
*mojom::Button::NewCustomizableButton(mojom::CustomizableButton::kMiddle),
*settings->button_remappings[0]->button);
EXPECT_EQ("Middle Button", settings->button_remappings[0]->name);
EXPECT_EQ(nullptr, settings->button_remappings[0]->remapping_action.get());
EXPECT_EQ(
*mojom::Button::NewCustomizableButton(mojom::CustomizableButton::kSide),
*settings->button_remappings[1]->button);
EXPECT_EQ("Other Button 1", settings->button_remappings[1]->name);
EXPECT_EQ(nullptr, settings->button_remappings[1]->remapping_action.get());
EXPECT_EQ(
*mojom::Button::NewCustomizableButton(mojom::CustomizableButton::kExtra),
*settings->button_remappings[2]->button);
EXPECT_EQ("Other Button 2", settings->button_remappings[2]->name);
EXPECT_EQ(nullptr, settings->button_remappings[2]->remapping_action.get());
}
TEST_F(InputDeviceSettingsControllerTest, GraphicsTabletButtonPressed) {
@ -1257,13 +1283,13 @@ TEST_F(InputDeviceSettingsControllerTest, GraphicsTabletButtonPressed) {
ASSERT_TRUE(settings);
ASSERT_EQ(1u, settings->pen_button_remappings.size());
EXPECT_EQ(*pen_button, *settings->pen_button_remappings[0]->button);
EXPECT_EQ("Button 1", settings->pen_button_remappings[0]->name);
EXPECT_EQ("Other Button 1", settings->pen_button_remappings[0]->name);
EXPECT_EQ(nullptr,
settings->pen_button_remappings[0]->remapping_action.get());
ASSERT_EQ(1u, settings->tablet_button_remappings.size());
EXPECT_EQ(*tablet_button, *settings->tablet_button_remappings[0]->button);
EXPECT_EQ("Button 1", settings->tablet_button_remappings[0]->name);
EXPECT_EQ("Other Button 1", settings->tablet_button_remappings[0]->name);
EXPECT_EQ(nullptr,
settings->tablet_button_remappings[0]->remapping_action.get());
}