| // 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/pointer_device_observer.h" |
| |
| #include "base/functional/bind.h" |
| #include "base/functional/callback_helpers.h" |
| #include "chrome/browser/ash/system/input_device_settings.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "ui/events/devices/device_data_manager.h" |
| |
| using content::BrowserThread; |
| |
| namespace ash { |
| namespace system { |
| |
| PointerDeviceObserver::PointerDeviceObserver() = default; |
| |
| PointerDeviceObserver::~PointerDeviceObserver() { |
| ui::DeviceDataManager::GetInstance()->RemoveObserver(this); |
| } |
| |
| void PointerDeviceObserver::Init() { |
| ui::DeviceDataManager::GetInstance()->AddObserver(this); |
| } |
| |
| void PointerDeviceObserver::CheckDevices() { |
| CheckMouseExists(); |
| CheckPointingStickExists(); |
| CheckTouchpadExists(); |
| CheckHapticTouchpadExists(); |
| } |
| |
| void PointerDeviceObserver::AddObserver(Observer* observer) { |
| observers_.AddObserver(observer); |
| } |
| |
| void PointerDeviceObserver::RemoveObserver(Observer* observer) { |
| observers_.RemoveObserver(observer); |
| } |
| |
| void PointerDeviceObserver::OnInputDeviceConfigurationChanged( |
| uint8_t input_device_types) { |
| if (input_device_types & (ui::InputDeviceEventObserver::kMouse | |
| ui::InputDeviceEventObserver::kTouchpad | |
| ui::InputDeviceEventObserver::kPointingStick)) { |
| CheckDevices(); |
| } |
| } |
| |
| void PointerDeviceObserver::CheckTouchpadExists() { |
| InputDeviceSettings::Get()->TouchpadExists(base::BindOnce( |
| &PointerDeviceObserver::OnTouchpadExists, weak_factory_.GetWeakPtr())); |
| } |
| |
| void PointerDeviceObserver::CheckHapticTouchpadExists() { |
| InputDeviceSettings::Get()->HapticTouchpadExists( |
| base::BindOnce(&PointerDeviceObserver::OnHapticTouchpadExists, |
| weak_factory_.GetWeakPtr())); |
| } |
| |
| void PointerDeviceObserver::CheckMouseExists() { |
| InputDeviceSettings::Get()->MouseExists(base::BindOnce( |
| &PointerDeviceObserver::OnMouseExists, weak_factory_.GetWeakPtr())); |
| } |
| |
| void PointerDeviceObserver::CheckPointingStickExists() { |
| InputDeviceSettings::Get()->PointingStickExists( |
| base::BindOnce(&PointerDeviceObserver::OnPointingStickExists, |
| weak_factory_.GetWeakPtr())); |
| } |
| |
| void PointerDeviceObserver::OnTouchpadExists(bool exists) { |
| for (auto& observer : observers_) |
| observer.TouchpadExists(exists); |
| } |
| |
| void PointerDeviceObserver::OnHapticTouchpadExists(bool exists) { |
| for (auto& observer : observers_) |
| observer.HapticTouchpadExists(exists); |
| } |
| |
| void PointerDeviceObserver::OnMouseExists(bool exists) { |
| for (auto& observer : observers_) |
| observer.MouseExists(exists); |
| } |
| |
| void PointerDeviceObserver::OnPointingStickExists(bool exists) { |
| for (auto& observer : observers_) |
| observer.PointingStickExists(exists); |
| } |
| |
| PointerDeviceObserver::Observer::~Observer() = default; |
| |
| } // namespace system |
| } // namespace ash |