// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromeos/ash/components/hid_detection/fake_hid_detection_manager.h"
namespace ash::hid_detection {
namespace {
bool IsInputMissing(const HidDetectionManager::InputMetadata& metadata) {
return metadata.state == HidDetectionManager::InputState::kSearching ||
metadata.state ==
HidDetectionManager::InputState::kPairingViaBluetooth;
}
} // namespace
FakeHidDetectionManager::FakeHidDetectionManager() = default;
FakeHidDetectionManager::~FakeHidDetectionManager() = default;
void FakeHidDetectionManager::SetHidStatusTouchscreenDetected(
bool touchscreen_detected) {
touchscreen_detected_ = touchscreen_detected;
if (!is_hid_detection_active_)
return;
NotifyHidDetectionStatusChanged();
}
void FakeHidDetectionManager::SetHidStatusPointerMetadata(
InputMetadata metadata) {
pointer_metadata_ = metadata;
if (!is_hid_detection_active_)
return;
NotifyHidDetectionStatusChanged();
}
void FakeHidDetectionManager::SetHidStatusKeyboardMetadata(
InputMetadata metadata) {
keyboard_metadata_ = metadata;
if (!is_hid_detection_active_)
return;
NotifyHidDetectionStatusChanged();
}
void FakeHidDetectionManager::SetPairingState(
std::optional<BluetoothHidPairingState> pairing_state) {
pairing_state_ = std::move(pairing_state);
NotifyHidDetectionStatusChanged();
}
base::WeakPtr<FakeHidDetectionManager> FakeHidDetectionManager::GetWeakPtr() {
return weak_ptr_factory_.GetWeakPtr();
}
void FakeHidDetectionManager::GetIsHidDetectionRequired(
base::OnceCallback<void(bool)> callback) {
std::move(callback).Run(IsInputMissing(pointer_metadata_) ||
IsInputMissing(keyboard_metadata_));
}
void FakeHidDetectionManager::PerformStartHidDetection() {
DCHECK(!is_hid_detection_active_);
is_hid_detection_active_ = true;
NotifyHidDetectionStatusChanged();
}
void FakeHidDetectionManager::PerformStopHidDetection() {
DCHECK(is_hid_detection_active_);
is_hid_detection_active_ = false;
}
HidDetectionManager::HidDetectionStatus
FakeHidDetectionManager::ComputeHidDetectionStatus() const {
std::optional<BluetoothHidPairingState> pairing_state;
if (pairing_state_.has_value()) {
pairing_state = BluetoothHidPairingState{
pairing_state_.value().code, pairing_state_.value().num_keys_entered};
}
return HidDetectionStatus(pointer_metadata_, keyboard_metadata_,
touchscreen_detected_, std::move(pairing_state));
}
} // namespace ash::hid_detection