Skip to content

Commit

Permalink
Input: Create pref for touchpad haptic feedback
Browse files Browse the repository at this point in the history
Adds plumbing to send value to gesture library.

Bug: 1257318
Change-Id: Iba9942b18002a7fddf280eaa6bd9c474f2b3ecef
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3219533
Reviewed-by: Sean O'Brien <seobrien@chromium.org>
Reviewed-by: Zentaro Kavanagh <zentaro@chromium.org>
Reviewed-by: James Cook <jamescook@chromium.org>
Reviewed-by: Michael Spang <spang@chromium.org>
Commit-Queue: Gavin Williams <gavinwill@chromium.org>
Cr-Commit-Position: refs/heads/main@{#930921}
  • Loading branch information
Gavin Williams authored and Chromium LUCI CQ committed Oct 13, 2021
1 parent 2fdfae6 commit c567824
Show file tree
Hide file tree
Showing 18 changed files with 93 additions and 0 deletions.
1 change: 1 addition & 0 deletions ash/host/ash_window_tree_host_platform_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ class TestInputController : public ui::InputController {
}
void SetTouchpadSensitivity(int value) override {}
void SetTouchpadScrollSensitivity(int value) override {}
void SetTouchpadHapticFeedback(bool enabled) override {}
void SetTapToClick(bool enabled) override {}
void SetThreeFingerClick(bool enabled) override {}
void SetTapDragging(bool enabled) override {}
Expand Down
13 changes: 13 additions & 0 deletions chrome/browser/ash/preferences.cc
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,9 @@ void Preferences::RegisterProfilePrefs(
registry->RegisterBooleanPref(
::prefs::kTouchpadScrollAcceleration, true,
user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PRIORITY_PREF);
registry->RegisterBooleanPref(
::prefs::kTouchpadHapticFeedback, true,
user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PRIORITY_PREF);
registry->RegisterBooleanPref(::prefs::kLabsMediaplayerEnabled, false);
registry->RegisterBooleanPref(::prefs::kLabsAdvancedFilesystemEnabled, false);
registry->RegisterBooleanPref(::prefs::kAppReinstallRecommendationEnabled,
Expand Down Expand Up @@ -518,6 +521,8 @@ void Preferences::InitUserPrefs(sync_preferences::PrefServiceSyncable* prefs) {
touchpad_acceleration_.Init(::prefs::kTouchpadAcceleration, prefs, callback);
touchpad_scroll_acceleration_.Init(::prefs::kTouchpadScrollAcceleration,
prefs, callback);
touchpad_haptic_feedback_.Init(::prefs::kTouchpadHapticFeedback, prefs,
callback);
download_default_directory_.Init(::prefs::kDownloadDefaultDirectory, prefs,
callback);
preload_engines_.Init(::prefs::kLanguagePreloadEngines, prefs, callback);
Expand Down Expand Up @@ -875,6 +880,14 @@ void Preferences::ApplyPreferences(ApplyReason reason,
"Touchpad.ScrollAcceleration.Started",
enabled);
}
if (reason != REASON_PREF_CHANGED ||
pref_name == ::prefs::kTouchpadHapticFeedback) {
const bool enabled = touchpad_haptic_feedback_.GetValue();
if (user_is_active)
touchpad_settings.SetHapticFeedback(enabled);
ReportBooleanPrefApplication(reason, "Touchpad.HapticFeedback.Changed",
"Touchpad.HapticFeedback.Started", enabled);
}
if (reason != REASON_PREF_CHANGED ||
pref_name == ::prefs::kDownloadDefaultDirectory) {
const bool default_download_to_drive = drive::util::IsUnderDriveMountPoint(
Expand Down
1 change: 1 addition & 0 deletions chrome/browser/ash/preferences.h
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@ class Preferences : public sync_preferences::PrefServiceSyncableObserver,
BooleanPrefMember pointing_stick_acceleration_;
BooleanPrefMember touchpad_acceleration_;
BooleanPrefMember touchpad_scroll_acceleration_;
BooleanPrefMember touchpad_haptic_feedback_;
FilePathPrefMember download_default_directory_;

StringListPrefMember allowed_languages_;
Expand Down
3 changes: 3 additions & 0 deletions chrome/browser/ash/preferences_ash_browsertest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ class PreferencesTest : public LoginManagerTest {
prefs->SetBoolean(::prefs::kPointingStickAcceleration, variant);
prefs->SetBoolean(::prefs::kTouchpadAcceleration, variant);
prefs->SetBoolean(::prefs::kTouchpadScrollAcceleration, variant);
prefs->SetBoolean(::prefs::kTouchpadHapticFeedback, variant);
prefs->SetBoolean(::prefs::kEnableTouchpadThreeFingerClick, !variant);
prefs->SetInteger(::prefs::kMouseSensitivity, !variant);
prefs->SetInteger(::prefs::kMouseScrollSensitivity, variant ? 1 : 4);
Expand Down Expand Up @@ -107,6 +108,8 @@ class PreferencesTest : public LoginManagerTest {
EXPECT_EQ(
prefs->GetBoolean(::prefs::kTouchpadScrollAcceleration),
input_settings_->current_touchpad_settings().GetScrollAcceleration());
EXPECT_EQ(prefs->GetBoolean(::prefs::kTouchpadHapticFeedback),
input_settings_->current_touchpad_settings().GetHapticFeedback());
EXPECT_EQ(
prefs->GetBoolean(::prefs::kEnableTouchpadThreeFingerClick),
input_settings_->current_touchpad_settings().GetThreeFingerClick());
Expand Down
6 changes: 6 additions & 0 deletions chrome/browser/ash/system/fake_input_device_settings.cc
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,12 @@ void FakeInputDeviceSettings::SetTouchpadScrollSensitivity(int value) {
UpdateTouchpadSettings(settings);
}

void FakeInputDeviceSettings::SetTouchpadHapticFeedback(bool enabled) {
TouchpadSettings settings;
settings.SetHapticFeedback(enabled);
UpdateTouchpadSettings(settings);
}

void FakeInputDeviceSettings::SetTapToClick(bool enabled) {
TouchpadSettings settings;
settings.SetTapToClick(enabled);
Expand Down
1 change: 1 addition & 0 deletions chrome/browser/ash/system/fake_input_device_settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ class FakeInputDeviceSettings : public InputDeviceSettings,
void UpdateTouchpadSettings(const TouchpadSettings& settings) override;
void SetTouchpadSensitivity(int value) override;
void SetTouchpadScrollSensitivity(int value) override;
void SetTouchpadHapticFeedback(bool enabled) override;
void SetTapToClick(bool enabled) override;
void SetThreeFingerClick(bool enabled) override;
void SetTapDragging(bool enabled) override;
Expand Down
19 changes: 19 additions & 0 deletions chrome/browser/ash/system/input_device_settings.cc
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ TouchpadSettings::TouchpadSettings(const TouchpadSettings& other) = default;
TouchpadSettings& TouchpadSettings::operator=(const TouchpadSettings& other) {
if (&other != this) {
acceleration_ = other.acceleration_;
haptic_feedback_ = other.haptic_feedback_;
natural_scroll_ = other.natural_scroll_;
scroll_acceleration_ = other.scroll_acceleration_;
scroll_sensitivity_ = other.scroll_sensitivity_;
Expand Down Expand Up @@ -141,6 +142,18 @@ bool TouchpadSettings::IsScrollAccelerationSet() const {
return scroll_acceleration_.has_value();
}

void TouchpadSettings::SetHapticFeedback(bool enabled) {
haptic_feedback_ = enabled;
}

bool TouchpadSettings::GetHapticFeedback() const {
return *haptic_feedback_;
}

bool TouchpadSettings::IsHapticFeedbackSet() const {
return haptic_feedback_.has_value();
}

bool TouchpadSettings::Update(const TouchpadSettings& settings) {
bool updated = false;
if (UpdateIfHasValue(settings.sensitivity_, &sensitivity_))
Expand All @@ -157,6 +170,8 @@ bool TouchpadSettings::Update(const TouchpadSettings& settings) {
updated = true;
if (UpdateIfHasValue(settings.scroll_acceleration_, &scroll_acceleration_))
updated = true;
if (UpdateIfHasValue(settings.haptic_feedback_, &haptic_feedback_))
updated = true;
UpdateIfHasValue(settings.natural_scroll_, &natural_scroll_);
// Always send natural scrolling to the shell command, as a workaround.
// See crbug.com/406480
Expand Down Expand Up @@ -202,6 +217,10 @@ void TouchpadSettings::Apply(const TouchpadSettings& touchpad_settings,
input_device_settings->SetTouchpadScrollAcceleration(
touchpad_settings.scroll_acceleration_.value());
}
if (touchpad_settings.haptic_feedback_.has_value()) {
input_device_settings->SetTouchpadHapticFeedback(
touchpad_settings.haptic_feedback_.value());
}
}

MouseSettings::MouseSettings() = default;
Expand Down
8 changes: 8 additions & 0 deletions chrome/browser/ash/system/input_device_settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,10 @@ class TouchpadSettings {
bool GetScrollAcceleration() const;
bool IsScrollAccelerationSet() const;

void SetHapticFeedback(bool enabled);
bool GetHapticFeedback() const;
bool IsHapticFeedbackSet() const;

// Updates |this| with |settings|. If at least one setting was updated returns
// true.
bool Update(const TouchpadSettings& settings);
Expand All @@ -78,6 +82,7 @@ class TouchpadSettings {

private:
absl::optional<bool> acceleration_;
absl::optional<bool> haptic_feedback_;
absl::optional<bool> natural_scroll_;
absl::optional<int> sensitivity_;
absl::optional<bool> scroll_acceleration_;
Expand Down Expand Up @@ -222,6 +227,9 @@ class InputDeviceSettings {
// kMaxPointerSensitivity].
virtual void SetTouchpadScrollSensitivity(int value) = 0;

// Turns touchpad haptic feedback on/off.
virtual void SetTouchpadHapticFeedback(bool enabled) = 0;

// Turns tap to click on/off.
virtual void SetTapToClick(bool enabled) = 0;

Expand Down
6 changes: 6 additions & 0 deletions chrome/browser/ash/system/input_device_settings_impl_ozone.cc
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ class InputDeviceSettingsImplOzone : public InputDeviceSettings {
void UpdateTouchpadSettings(const TouchpadSettings& settings) override;
void SetTouchpadSensitivity(int value) override;
void SetTouchpadScrollSensitivity(int value) override;
void SetTouchpadHapticFeedback(bool enabled) override;
void SetTapToClick(bool enabled) override;
void SetThreeFingerClick(bool enabled) override;
void SetTapDragging(bool enabled) override;
Expand Down Expand Up @@ -103,6 +104,11 @@ void InputDeviceSettingsImplOzone::SetTouchpadScrollSensitivity(int value) {
input_controller()->SetTouchpadScrollSensitivity(value);
}

void InputDeviceSettingsImplOzone::SetTouchpadHapticFeedback(bool enabled) {
current_touchpad_settings_.SetHapticFeedback(enabled);
input_controller()->SetTouchpadHapticFeedback(enabled);
}

void InputDeviceSettingsImplOzone::SetNaturalScroll(bool enabled) {
current_touchpad_settings_.SetNaturalScroll(enabled);
input_controller()->SetNaturalScroll(enabled);
Expand Down
2 changes: 2 additions & 0 deletions chrome/browser/extensions/api/settings_private/prefs_util.cc
Original file line number Diff line number Diff line change
Expand Up @@ -736,6 +736,8 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() {
settings_api::PrefType::PREF_TYPE_NUMBER;
(*s_allowlist)[::prefs::kTouchpadScrollSensitivity] =
settings_api::PrefType::PREF_TYPE_NUMBER;
(*s_allowlist)[::prefs::kTouchpadHapticFeedback] =
settings_api::PrefType::PREF_TYPE_BOOLEAN;
(*s_allowlist)[::prefs::kPrimaryMouseButtonRight] =
settings_api::PrefType::PREF_TYPE_BOOLEAN;
(*s_allowlist)[::prefs::kPrimaryPointingStickButtonRight] =
Expand Down
3 changes: 3 additions & 0 deletions chrome/common/pref_names.cc
Original file line number Diff line number Diff line change
Expand Up @@ -532,6 +532,9 @@ const char kTouchpadAcceleration[] = "settings.touchpad.acceleration";
const char kTouchpadScrollAcceleration[] =
"settings.touchpad.scroll_acceleration";

// A boolean pref set to true if touchpad haptic feedback is enabled.
const char kTouchpadHapticFeedback[] = "settings.touchpad.haptic_feedback";

// A integer pref for the touchpad sensitivity.
const char kMouseSensitivity[] = "settings.mouse.sensitivity2";

Expand Down
1 change: 1 addition & 0 deletions chrome/common/pref_names.h
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,7 @@ extern const char kMouseScrollAcceleration[];
extern const char kPointingStickAcceleration[];
extern const char kTouchpadAcceleration[];
extern const char kTouchpadScrollAcceleration[];
extern const char kTouchpadHapticFeedback[];
extern const char kMouseSensitivity[];
extern const char kMouseScrollSensitivity[];
extern const char kTouchpadSensitivity[];
Expand Down
20 changes: 20 additions & 0 deletions tools/metrics/histograms/metadata/others/histograms.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18011,6 +18011,26 @@ should be kept until we use this API. -->
<summary>Tracks touchpad device state.</summary>
</histogram>

<histogram name="Touchpad.HapticFeedback.Changed" enum="BooleanEnabled"
expires_after="2022-10-07">
<owner>gavinwill@chromium.org</owner>
<owner>cros-peripherals@chromium.org</owner>
<summary>
Tracks touchpad haptic feedback setting changes by the user. Only reported
on Chrome OS.
</summary>
</histogram>

<histogram name="Touchpad.HapticFeedback.Started" enum="BooleanEnabled"
expires_after="2022-10-07">
<owner>gavinwill@chromium.org</owner>
<owner>cros-peripherals@chromium.org</owner>
<summary>
Tracks touchpad haptic feedback setting on startup. Only reported on Chrome
OS.
</summary>
</histogram>

<histogram name="Touchpad.NaturalScroll.Changed" enum="BooleanEnabled"
expires_after="2022-06-15">
<owner>zentaro@chromium.org</owner>
Expand Down
5 changes: 5 additions & 0 deletions ui/events/ozone/evdev/input_controller_evdev.cc
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,11 @@ void InputControllerEvdev::SetTouchpadScrollSensitivity(int value) {
ScheduleUpdateDeviceSettings();
}

void InputControllerEvdev::SetTouchpadHapticFeedback(bool enabled) {
input_device_settings_.touchpad_haptic_feedback_enabled = enabled;
ScheduleUpdateDeviceSettings();
}

void InputControllerEvdev::SetTapToClick(bool enabled) {
input_device_settings_.tap_to_click_enabled = enabled;
ScheduleUpdateDeviceSettings();
Expand Down
1 change: 1 addition & 0 deletions ui/events/ozone/evdev/input_controller_evdev.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ class COMPONENT_EXPORT(EVDEV) InputControllerEvdev : public InputController {
void SetTouchEventLoggingEnabled(bool enabled) override;
void SetTouchpadSensitivity(int value) override;
void SetTouchpadScrollSensitivity(int value) override;
void SetTouchpadHapticFeedback(bool enabled) override;
void SetTapToClick(bool enabled) override;
void SetThreeFingerClick(bool enabled) override;
void SetTapDragging(bool enabled) override;
Expand Down
1 change: 1 addition & 0 deletions ui/events/ozone/evdev/input_device_settings_evdev.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ struct InputDeviceSettingsEvdev {
bool pointing_stick_acceleration_enabled = true;
bool touchpad_acceleration_enabled = true;
bool touchpad_scroll_acceleration_enabled = true;
bool touchpad_haptic_feedback_enabled = true;

int touchpad_sensitivity = kDefaultSensitivity;
int touchpad_scroll_sensitivity = kDefaultSensitivity;
Expand Down
1 change: 1 addition & 0 deletions ui/ozone/public/input_controller.cc
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ class StubInputController : public InputController {
void SetPointingStickAcceleration(bool enabled) override {}
void SetTouchpadAcceleration(bool enabled) override {}
void SetTouchpadScrollAcceleration(bool enabled) override {}
void SetTouchpadHapticFeedback(bool enabled) override {}
void SetTapToClickPaused(bool state) override {}
void GetTouchDeviceStatus(GetTouchDeviceStatusReply reply) override {
std::move(reply).Run(std::string());
Expand Down
1 change: 1 addition & 0 deletions ui/ozone/public/input_controller.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ class COMPONENT_EXPORT(OZONE_BASE) InputController {
virtual void SetNaturalScroll(bool enabled) = 0;
virtual void SetTouchpadAcceleration(bool enabled) = 0;
virtual void SetTouchpadScrollAcceleration(bool enabled) = 0;
virtual void SetTouchpadHapticFeedback(bool enabled) = 0;

// Mouse settings.
virtual void SetMouseSensitivity(int value) = 0;
Expand Down

0 comments on commit c567824

Please sign in to comment.