| // Copyright 2012 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/ash/system/input_device_settings.h" |
| |
| #include "chrome/browser/ash/policy/enrollment/enrollment_requisition_manager.h" |
| #include "chromeos/ash/components/system/statistics_provider.h" |
| #include "components/prefs/pref_service.h" |
| |
| namespace ash { |
| namespace system { |
| |
| namespace { |
| |
| // Sets |to_set| to |other| if |other| has a value and the value is not equal to |
| // |to_set|. This differs from *to_set = other; in so far as nothing is changed |
| // if |other| has no value. Returns true if |to_set| was updated. |
| template <typename T> |
| bool UpdateIfHasValue(const std::optional<T>& other, std::optional<T>* to_set) { |
| if (!other.has_value() || other == *to_set) |
| return false; |
| *to_set = other; |
| return true; |
| } |
| |
| } // namespace |
| |
| TouchpadSettings::TouchpadSettings() = default; |
| |
| TouchpadSettings::TouchpadSettings(const TouchpadSettings& other) = default; |
| |
| TouchpadSettings& TouchpadSettings::operator=(const TouchpadSettings& other) { |
| if (&other != this) { |
| acceleration_ = other.acceleration_; |
| haptic_feedback_ = other.haptic_feedback_; |
| haptic_click_sensitivity_ = other.haptic_click_sensitivity_; |
| natural_scroll_ = other.natural_scroll_; |
| scroll_acceleration_ = other.scroll_acceleration_; |
| scroll_sensitivity_ = other.scroll_sensitivity_; |
| sensitivity_ = other.sensitivity_; |
| tap_dragging_ = other.tap_dragging_; |
| tap_to_click_ = other.tap_to_click_; |
| three_finger_click_ = other.three_finger_click_; |
| } |
| return *this; |
| } |
| |
| void TouchpadSettings::SetSensitivity(int value) { |
| sensitivity_ = value; |
| } |
| |
| int TouchpadSettings::GetSensitivity() const { |
| return *sensitivity_; |
| } |
| |
| bool TouchpadSettings::IsSensitivitySet() const { |
| return sensitivity_.has_value(); |
| } |
| |
| void TouchpadSettings::SetTapToClick(bool enabled) { |
| tap_to_click_ = enabled; |
| } |
| |
| bool TouchpadSettings::GetTapToClick() const { |
| return *tap_to_click_; |
| } |
| |
| bool TouchpadSettings::IsTapToClickSet() const { |
| return tap_to_click_.has_value(); |
| } |
| |
| void TouchpadSettings::SetThreeFingerClick(bool enabled) { |
| three_finger_click_ = enabled; |
| } |
| |
| bool TouchpadSettings::GetThreeFingerClick() const { |
| return *three_finger_click_; |
| } |
| |
| bool TouchpadSettings::IsThreeFingerClickSet() const { |
| return three_finger_click_.has_value(); |
| } |
| |
| void TouchpadSettings::SetTapDragging(bool enabled) { |
| tap_dragging_ = enabled; |
| } |
| |
| bool TouchpadSettings::GetTapDragging() const { |
| return *tap_dragging_; |
| } |
| |
| bool TouchpadSettings::IsTapDraggingSet() const { |
| return tap_dragging_.has_value(); |
| } |
| |
| void TouchpadSettings::SetAcceleration(bool enabled) { |
| acceleration_ = enabled; |
| } |
| |
| bool TouchpadSettings::GetAcceleration() const { |
| return *acceleration_; |
| } |
| |
| bool TouchpadSettings::IsAccelerationSet() const { |
| return acceleration_.has_value(); |
| } |
| |
| void TouchpadSettings::SetNaturalScroll(bool enabled) { |
| natural_scroll_ = enabled; |
| } |
| |
| bool TouchpadSettings::GetNaturalScroll() const { |
| return *natural_scroll_; |
| } |
| |
| bool TouchpadSettings::IsNaturalScrollSet() const { |
| return natural_scroll_.has_value(); |
| } |
| |
| void TouchpadSettings::SetScrollSensitivity(int value) { |
| scroll_sensitivity_ = value; |
| } |
| |
| int TouchpadSettings::GetScrollSensitivity() const { |
| return *scroll_sensitivity_; |
| } |
| |
| bool TouchpadSettings::IsScrollSensitivitySet() const { |
| return scroll_sensitivity_.has_value(); |
| } |
| |
| void TouchpadSettings::SetScrollAcceleration(bool enabled) { |
| scroll_acceleration_ = enabled; |
| } |
| |
| bool TouchpadSettings::GetScrollAcceleration() const { |
| return *scroll_acceleration_; |
| } |
| |
| 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(); |
| } |
| |
| void TouchpadSettings::SetHapticClickSensitivity(int value) { |
| haptic_click_sensitivity_ = value; |
| } |
| |
| int TouchpadSettings::GetHapticClickSensitivity() const { |
| return *haptic_click_sensitivity_; |
| } |
| |
| bool TouchpadSettings::IsHapticClickSensitivitySet() const { |
| return haptic_click_sensitivity_.has_value(); |
| } |
| |
| bool TouchpadSettings::Update(const TouchpadSettings& settings) { |
| bool updated = false; |
| if (UpdateIfHasValue(settings.sensitivity_, &sensitivity_)) |
| updated = true; |
| if (UpdateIfHasValue(settings.scroll_sensitivity_, &scroll_sensitivity_)) |
| updated = true; |
| if (UpdateIfHasValue(settings.tap_to_click_, &tap_to_click_)) |
| updated = true; |
| if (UpdateIfHasValue(settings.three_finger_click_, &three_finger_click_)) |
| updated = true; |
| if (UpdateIfHasValue(settings.tap_dragging_, &tap_dragging_)) |
| updated = true; |
| if (UpdateIfHasValue(settings.acceleration_, &acceleration_)) |
| updated = true; |
| if (UpdateIfHasValue(settings.scroll_acceleration_, &scroll_acceleration_)) |
| updated = true; |
| if (UpdateIfHasValue(settings.haptic_feedback_, &haptic_feedback_)) |
| updated = true; |
| if (UpdateIfHasValue(settings.haptic_click_sensitivity_, |
| &haptic_click_sensitivity_)) { |
| updated = true; |
| } |
| UpdateIfHasValue(settings.natural_scroll_, &natural_scroll_); |
| // Always send natural scrolling to the shell command, as a workaround. |
| // See crbug.com/406480 |
| if (natural_scroll_.has_value()) |
| updated = true; |
| return updated; |
| } |
| |
| // static |
| void TouchpadSettings::Apply(const TouchpadSettings& touchpad_settings, |
| InputDeviceSettings* input_device_settings) { |
| if (!input_device_settings) |
| return; |
| if (touchpad_settings.sensitivity_.has_value()) { |
| input_device_settings->SetTouchpadSensitivity( |
| touchpad_settings.sensitivity_.value()); |
| } |
| if (touchpad_settings.scroll_sensitivity_.has_value()) { |
| input_device_settings->SetTouchpadScrollSensitivity( |
| touchpad_settings.scroll_sensitivity_.value()); |
| } |
| if (touchpad_settings.tap_to_click_.has_value()) { |
| input_device_settings->SetTapToClick( |
| touchpad_settings.tap_to_click_.value()); |
| } |
| if (touchpad_settings.three_finger_click_.has_value()) { |
| input_device_settings->SetThreeFingerClick( |
| touchpad_settings.three_finger_click_.value()); |
| } |
| if (touchpad_settings.tap_dragging_.has_value()) { |
| input_device_settings->SetTapDragging( |
| touchpad_settings.tap_dragging_.value()); |
| } |
| if (touchpad_settings.natural_scroll_.has_value()) { |
| input_device_settings->SetNaturalScroll( |
| touchpad_settings.natural_scroll_.value()); |
| } |
| if (touchpad_settings.acceleration_.has_value()) { |
| input_device_settings->SetTouchpadAcceleration( |
| touchpad_settings.acceleration_.value()); |
| } |
| if (touchpad_settings.scroll_acceleration_.has_value()) { |
| 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()); |
| } |
| if (touchpad_settings.haptic_click_sensitivity_.has_value()) { |
| input_device_settings->SetTouchpadHapticClickSensitivity( |
| touchpad_settings.haptic_click_sensitivity_.value()); |
| } |
| } |
| |
| MouseSettings::MouseSettings() = default; |
| |
| MouseSettings::MouseSettings(const MouseSettings& other) = default; |
| |
| MouseSettings& MouseSettings::operator=(const MouseSettings& other) { |
| if (&other != this) { |
| acceleration_ = other.acceleration_; |
| primary_button_right_ = other.primary_button_right_; |
| scroll_sensitivity_ = other.scroll_sensitivity_; |
| reverse_scroll_ = other.reverse_scroll_; |
| scroll_acceleration_ = other.scroll_acceleration_; |
| sensitivity_ = other.sensitivity_; |
| } |
| return *this; |
| } |
| |
| void MouseSettings::SetSensitivity(int value) { |
| sensitivity_ = value; |
| } |
| |
| int MouseSettings::GetSensitivity() const { |
| return *sensitivity_; |
| } |
| |
| bool MouseSettings::IsSensitivitySet() const { |
| return sensitivity_.has_value(); |
| } |
| |
| void MouseSettings::SetPrimaryButtonRight(bool right) { |
| primary_button_right_ = right; |
| } |
| |
| bool MouseSettings::GetPrimaryButtonRight() const { |
| return primary_button_right_.value(); |
| } |
| |
| bool MouseSettings::IsPrimaryButtonRightSet() const { |
| return primary_button_right_.has_value(); |
| } |
| |
| void MouseSettings::SetAcceleration(bool enabled) { |
| acceleration_ = enabled; |
| } |
| |
| bool MouseSettings::GetAcceleration() const { |
| return *acceleration_; |
| } |
| |
| bool MouseSettings::IsAccelerationSet() const { |
| return acceleration_.has_value(); |
| } |
| |
| void MouseSettings::SetReverseScroll(bool enabled) { |
| reverse_scroll_ = enabled; |
| } |
| |
| bool MouseSettings::GetReverseScroll() const { |
| return *reverse_scroll_; |
| } |
| |
| bool MouseSettings::IsReverseScrollSet() const { |
| return reverse_scroll_.has_value(); |
| } |
| |
| void MouseSettings::SetScrollSensitivity(int value) { |
| scroll_sensitivity_ = value; |
| } |
| |
| int MouseSettings::GetScrollSensitivity() const { |
| return *scroll_sensitivity_; |
| } |
| |
| bool MouseSettings::IsScrollSensitivitySet() const { |
| return scroll_sensitivity_.has_value(); |
| } |
| |
| void MouseSettings::SetScrollAcceleration(bool enabled) { |
| scroll_acceleration_ = enabled; |
| } |
| |
| bool MouseSettings::GetScrollAcceleration() const { |
| return *scroll_acceleration_; |
| } |
| |
| bool MouseSettings::IsScrollAccelerationSet() const { |
| return scroll_acceleration_.has_value(); |
| } |
| |
| bool MouseSettings::Update(const MouseSettings& settings) { |
| bool updated = false; |
| if (UpdateIfHasValue(settings.sensitivity_, &sensitivity_)) |
| updated = true; |
| if (UpdateIfHasValue(settings.scroll_sensitivity_, &scroll_sensitivity_)) |
| updated = true; |
| if (UpdateIfHasValue(settings.primary_button_right_, |
| &primary_button_right_)) { |
| updated = true; |
| } |
| if (UpdateIfHasValue(settings.reverse_scroll_, &reverse_scroll_)) |
| updated = true; |
| if (UpdateIfHasValue(settings.acceleration_, &acceleration_)) |
| updated = true; |
| if (UpdateIfHasValue(settings.scroll_acceleration_, &scroll_acceleration_)) |
| updated = true; |
| return updated; |
| } |
| |
| // static |
| void MouseSettings::Apply(const MouseSettings& mouse_settings, |
| InputDeviceSettings* input_device_settings) { |
| if (!input_device_settings) |
| return; |
| if (mouse_settings.sensitivity_.has_value()) { |
| input_device_settings->SetMouseSensitivity( |
| mouse_settings.sensitivity_.value()); |
| } |
| if (mouse_settings.scroll_sensitivity_.has_value()) { |
| input_device_settings->SetMouseScrollSensitivity( |
| mouse_settings.scroll_sensitivity_.value()); |
| } |
| if (mouse_settings.primary_button_right_.has_value()) { |
| input_device_settings->SetPrimaryButtonRight( |
| mouse_settings.primary_button_right_.value()); |
| } |
| if (mouse_settings.reverse_scroll_.has_value()) { |
| input_device_settings->SetMouseReverseScroll( |
| mouse_settings.reverse_scroll_.value()); |
| } |
| if (mouse_settings.acceleration_.has_value()) { |
| input_device_settings->SetMouseAcceleration( |
| mouse_settings.acceleration_.value()); |
| } |
| if (mouse_settings.scroll_acceleration_.has_value()) { |
| input_device_settings->SetMouseScrollAcceleration( |
| mouse_settings.scroll_acceleration_.value()); |
| } |
| } |
| |
| PointingStickSettings::PointingStickSettings() = default; |
| |
| PointingStickSettings::PointingStickSettings( |
| const PointingStickSettings& other) = default; |
| |
| PointingStickSettings& PointingStickSettings::operator=( |
| const PointingStickSettings& other) { |
| if (&other != this) { |
| sensitivity_ = other.sensitivity_; |
| } |
| return *this; |
| } |
| |
| void PointingStickSettings::SetSensitivity(int value) { |
| sensitivity_ = value; |
| } |
| |
| int PointingStickSettings::GetSensitivity() const { |
| return *sensitivity_; |
| } |
| |
| bool PointingStickSettings::IsSensitivitySet() const { |
| return sensitivity_.has_value(); |
| } |
| |
| void PointingStickSettings::SetPrimaryButtonRight(bool right) { |
| primary_button_right_ = right; |
| } |
| |
| bool PointingStickSettings::GetPrimaryButtonRight() const { |
| return primary_button_right_.value(); |
| } |
| |
| bool PointingStickSettings::IsPrimaryButtonRightSet() const { |
| return primary_button_right_.has_value(); |
| } |
| |
| void PointingStickSettings::SetAcceleration(bool enabled) { |
| acceleration_ = enabled; |
| } |
| |
| bool PointingStickSettings::GetAcceleration() const { |
| return *acceleration_; |
| } |
| |
| bool PointingStickSettings::IsAccelerationSet() const { |
| return acceleration_.has_value(); |
| } |
| |
| bool PointingStickSettings::Update(const PointingStickSettings& settings) { |
| bool updated = false; |
| if (UpdateIfHasValue(settings.sensitivity_, &sensitivity_)) |
| updated = true; |
| if (UpdateIfHasValue(settings.primary_button_right_, |
| &primary_button_right_)) { |
| updated = true; |
| } |
| if (UpdateIfHasValue(settings.acceleration_, &acceleration_)) |
| updated = true; |
| return updated; |
| } |
| |
| // static |
| void PointingStickSettings::Apply( |
| const PointingStickSettings& pointing_stick_settings, |
| InputDeviceSettings* input_device_settings) { |
| if (!input_device_settings) |
| return; |
| if (pointing_stick_settings.sensitivity_.has_value()) { |
| input_device_settings->SetPointingStickSensitivity( |
| pointing_stick_settings.sensitivity_.value()); |
| } |
| if (pointing_stick_settings.primary_button_right_.has_value()) { |
| input_device_settings->SetPointingStickPrimaryButtonRight( |
| pointing_stick_settings.primary_button_right_.value()); |
| } |
| if (pointing_stick_settings.acceleration_.has_value()) { |
| input_device_settings->SetPointingStickAcceleration( |
| pointing_stick_settings.acceleration_.value()); |
| } |
| } |
| |
| // static |
| bool InputDeviceSettings::ForceKeyboardDrivenUINavigation() { |
| if (policy::EnrollmentRequisitionManager::IsMeetDevice() || |
| policy::EnrollmentRequisitionManager::IsSharkRequisition()) { |
| return true; |
| } |
| |
| return StatisticsProvider::FlagValueToBool( |
| StatisticsProvider::GetInstance()->GetMachineFlag( |
| kOemKeyboardDrivenOobeKey), |
| /*default_value=*/false); |
| } |
| |
| } // namespace system |
| } // namespace ash |