blob: ff069ede7c3d1fd739452c52b343ab8b3e645349 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/wm/tablet_mode/tablet_mode_controller_test_api.h"
#include "ash/shell.h"
#include "base/run_loop.h"
#include "base/time/default_tick_clock.h"
#include "services/ws/public/cpp/input_devices/input_device_client_test_api.h"
#include "ui/events/devices/input_device.h"
namespace ash {
TabletModeControllerTestApi::TabletModeControllerTestApi()
: tablet_mode_controller_(Shell::Get()->tablet_mode_controller()) {}
TabletModeControllerTestApi::~TabletModeControllerTestApi() = default;
void TabletModeControllerTestApi::EnterTabletMode() {
tablet_mode_controller_->AttemptEnterTabletMode();
}
void TabletModeControllerTestApi::LeaveTabletMode() {
tablet_mode_controller_->AttemptLeaveTabletMode();
}
void TabletModeControllerTestApi::AttachExternalMouse() {
ws::InputDeviceClientTestApi().SetMouseDevices(
{ui::InputDevice(3, ui::InputDeviceType::INPUT_DEVICE_USB, "mouse")});
base::RunLoop().RunUntilIdle();
tablet_mode_controller_->OnInputDeviceConfigurationChanged(
ui::InputDeviceEventObserver::kMouse);
}
void TabletModeControllerTestApi::TriggerLidUpdate(const gfx::Vector3dF& lid) {
scoped_refptr<AccelerometerUpdate> update(new AccelerometerUpdate());
update->Set(ACCELEROMETER_SOURCE_SCREEN, false, lid.x(), lid.y(), lid.z());
tablet_mode_controller_->OnAccelerometerUpdated(update);
}
void TabletModeControllerTestApi::TriggerBaseAndLidUpdate(
const gfx::Vector3dF& base,
const gfx::Vector3dF& lid) {
scoped_refptr<AccelerometerUpdate> update(new AccelerometerUpdate());
update->Set(ACCELEROMETER_SOURCE_ATTACHED_KEYBOARD, false,
base.x(), base.y(), base.z());
update->Set(ACCELEROMETER_SOURCE_SCREEN, false, lid.x(), lid.y(), lid.z());
tablet_mode_controller_->OnAccelerometerUpdated(update);
}
void TabletModeControllerTestApi::OpenLidToAngle(float degrees) {
DCHECK(degrees >= 0.0f);
DCHECK(degrees <= 360.0f);
float radians = degrees * kDegreesToRadians;
gfx::Vector3dF base_vector(0.0f, -kMeanGravity, 0.0f);
gfx::Vector3dF lid_vector(0.0f, kMeanGravity * cos(radians),
kMeanGravity * sin(radians));
TriggerBaseAndLidUpdate(base_vector, lid_vector);
}
void TabletModeControllerTestApi::HoldDeviceVertical() {
gfx::Vector3dF base_vector(9.8f, 0.0f, 0.0f);
gfx::Vector3dF lid_vector(9.8f, 0.0f, 0.0f);
TriggerBaseAndLidUpdate(base_vector, lid_vector);
}
void TabletModeControllerTestApi::OpenLid() {
tablet_mode_controller_->LidEventReceived(
chromeos::PowerManagerClient::LidState::OPEN, tick_clock()->NowTicks());
}
void TabletModeControllerTestApi::CloseLid() {
tablet_mode_controller_->LidEventReceived(
chromeos::PowerManagerClient::LidState::CLOSED, tick_clock()->NowTicks());
}
void TabletModeControllerTestApi::SetTabletMode(bool on) {
tablet_mode_controller_->TabletModeEventReceived(
on ? chromeos::PowerManagerClient::TabletMode::ON
: chromeos::PowerManagerClient::TabletMode::OFF,
tick_clock()->NowTicks());
}
void TabletModeControllerTestApi::SuspendImminent() {
tablet_mode_controller_->SuspendImminent(
power_manager::SuspendImminent::Reason::SuspendImminent_Reason_IDLE);
}
void TabletModeControllerTestApi::SuspendDone(base::TimeDelta sleep_duration) {
tablet_mode_controller_->SuspendDone(sleep_duration);
}
} // namespace ash