Index: ash/system/chromeos/power/tablet_power_button_controller.cc |
diff --git a/ash/system/chromeos/power/tablet_power_button_controller.cc b/ash/system/chromeos/power/tablet_power_button_controller.cc |
deleted file mode 100644 |
index 672e54c199841b6ecf569733fd6ad71c0a2b1baa..0000000000000000000000000000000000000000 |
--- a/ash/system/chromeos/power/tablet_power_button_controller.cc |
+++ /dev/null |
@@ -1,265 +0,0 @@ |
-// Copyright 2016 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/system/chromeos/power/tablet_power_button_controller.h" |
- |
-#include "ash/common/accessibility_delegate.h" |
-#include "ash/common/session/session_state_delegate.h" |
-#include "ash/common/shell_delegate.h" |
-#include "ash/common/wm/maximize_mode/maximize_mode_controller.h" |
-#include "ash/common/wm_shell.h" |
-#include "ash/shell.h" |
-#include "ash/wm/lock_state_controller.h" |
-#include "base/time/default_tick_clock.h" |
-#include "chromeos/dbus/dbus_thread_manager.h" |
-#include "ui/events/devices/input_device_manager.h" |
-#include "ui/events/devices/stylus_state.h" |
-#include "ui/events/event.h" |
- |
-namespace ash { |
- |
-namespace { |
- |
-// Amount of time the power button must be held to start the pre-shutdown |
-// animation when in tablet mode. This differs depending on whether the screen |
-// is on or off when the power button is initially pressed. |
-constexpr int kShutdownWhenScreenOnTimeoutMs = 500; |
-// TODO(derat): This is currently set to a high value to work around delays in |
-// powerd's reports of button-up events when the preceding button-down event |
-// turns the display on. Set it to a lower value once powerd no longer blocks on |
-// asking Chrome to turn the display on: http://crbug.com/685734 |
-constexpr int kShutdownWhenScreenOffTimeoutMs = 2000; |
- |
-// Amount of time since last SuspendDone() that power button event needs to be |
-// ignored. |
-constexpr int kIgnorePowerButtonAfterResumeMs = 2000; |
- |
-// Ignore button-up events occurring within this many milliseconds of the |
-// previous button-up event. This prevents us from falling behind if the power |
-// button is pressed repeatedly. |
-constexpr int kIgnoreRepeatedButtonUpMs = 500; |
- |
-// Returns true if device is a convertible/tablet device, otherwise false. |
-bool IsTabletModeSupported() { |
- MaximizeModeController* maximize_mode_controller = |
- WmShell::Get()->maximize_mode_controller(); |
- return maximize_mode_controller && |
- maximize_mode_controller->CanEnterMaximizeMode(); |
-} |
- |
-// Returns true if device is currently in tablet/maximize mode, otherwise false. |
-bool IsTabletModeActive() { |
- MaximizeModeController* maximize_mode_controller = |
- WmShell::Get()->maximize_mode_controller(); |
- return maximize_mode_controller && |
- maximize_mode_controller->IsMaximizeModeWindowManagerEnabled(); |
-} |
- |
-} // namespace |
- |
-TabletPowerButtonController::TestApi::TestApi( |
- TabletPowerButtonController* controller) |
- : controller_(controller) {} |
- |
-TabletPowerButtonController::TestApi::~TestApi() {} |
- |
-bool TabletPowerButtonController::TestApi::ShutdownTimerIsRunning() const { |
- return controller_->shutdown_timer_.IsRunning(); |
-} |
- |
-void TabletPowerButtonController::TestApi::TriggerShutdownTimeout() { |
- DCHECK(ShutdownTimerIsRunning()); |
- controller_->OnShutdownTimeout(); |
- controller_->shutdown_timer_.Stop(); |
-} |
- |
-TabletPowerButtonController::TabletPowerButtonController( |
- LockStateController* controller) |
- : tick_clock_(new base::DefaultTickClock()), |
- force_off_on_button_up_(true), |
- controller_(controller), |
- weak_ptr_factory_(this) { |
- chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver( |
- this); |
- WmShell::Get()->AddShellObserver(this); |
- // TODO(mash): Provide a way for this class to observe stylus events: |
- // http://crbug.com/682460 |
- if (ui::InputDeviceManager::HasInstance()) |
- ui::InputDeviceManager::GetInstance()->AddObserver(this); |
- Shell::GetInstance()->PrependPreTargetHandler(this); |
- |
- GetInitialBacklightsForcedOff(); |
-} |
- |
-TabletPowerButtonController::~TabletPowerButtonController() { |
- Shell::GetInstance()->RemovePreTargetHandler(this); |
- if (ui::InputDeviceManager::HasInstance()) |
- ui::InputDeviceManager::GetInstance()->RemoveObserver(this); |
- WmShell::Get()->RemoveShellObserver(this); |
- chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver( |
- this); |
-} |
- |
-bool TabletPowerButtonController::ShouldHandlePowerButtonEvents() const { |
- return IsTabletModeSupported(); |
-} |
- |
-void TabletPowerButtonController::OnPowerButtonEvent( |
- bool down, |
- const base::TimeTicks& timestamp) { |
- if (down) { |
- force_off_on_button_up_ = true; |
- // When the system resumes in response to the power button being pressed, |
- // Chrome receives powerd's SuspendDone signal and notification that the |
- // backlight has been turned back on before seeing the power button events |
- // that woke the system. Avoid forcing off display just after resuming to |
- // ensure that we don't turn the display off in response to the events. |
- if (timestamp - last_resume_time_ <= |
- base::TimeDelta::FromMilliseconds(kIgnorePowerButtonAfterResumeMs)) { |
- force_off_on_button_up_ = false; |
- } |
- screen_off_when_power_button_down_ = brightness_level_is_zero_; |
- SetDisplayForcedOff(false); |
- StartShutdownTimer(); |
- } else { |
- // When power button is released, cancel shutdown animation whenever it is |
- // still cancellable. |
- if (controller_->CanCancelShutdownAnimation()) |
- controller_->CancelShutdownAnimation(); |
- |
- const base::TimeTicks previous_up_time = last_button_up_time_; |
- last_button_up_time_ = tick_clock_->NowTicks(); |
- // Ignore the event if it comes too soon after the last one. |
- if (timestamp - previous_up_time <= |
- base::TimeDelta::FromMilliseconds(kIgnoreRepeatedButtonUpMs)) { |
- shutdown_timer_.Stop(); |
- return; |
- } |
- |
- if (shutdown_timer_.IsRunning()) { |
- shutdown_timer_.Stop(); |
- if (!screen_off_when_power_button_down_ && force_off_on_button_up_) { |
- SetDisplayForcedOff(true); |
- LockScreenIfRequired(); |
- } |
- } |
- } |
-} |
- |
-void TabletPowerButtonController::PowerManagerRestarted() { |
- chromeos::DBusThreadManager::Get() |
- ->GetPowerManagerClient() |
- ->SetBacklightsForcedOff(backlights_forced_off_); |
-} |
- |
-void TabletPowerButtonController::BrightnessChanged(int level, |
- bool user_initiated) { |
- brightness_level_is_zero_ = level == 0; |
-} |
- |
-void TabletPowerButtonController::SuspendDone( |
- const base::TimeDelta& sleep_duration) { |
- last_resume_time_ = tick_clock_->NowTicks(); |
-} |
- |
-void TabletPowerButtonController::OnMaximizeModeStarted() { |
- shutdown_timer_.Stop(); |
- if (controller_->CanCancelShutdownAnimation()) |
- controller_->CancelShutdownAnimation(); |
-} |
- |
-void TabletPowerButtonController::OnMaximizeModeEnded() { |
- shutdown_timer_.Stop(); |
- if (controller_->CanCancelShutdownAnimation()) |
- controller_->CancelShutdownAnimation(); |
-} |
- |
-void TabletPowerButtonController::OnKeyEvent(ui::KeyEvent* event) { |
- // Ignore key events generated by the power button since power button activity |
- // is already handled by OnPowerButtonEvent(). |
- if (event->key_code() == ui::VKEY_POWER) |
- return; |
- |
- if (!IsTabletModeActive() && backlights_forced_off_) |
- SetDisplayForcedOff(false); |
-} |
- |
-void TabletPowerButtonController::OnMouseEvent(ui::MouseEvent* event) { |
- if (event->flags() & ui::EF_IS_SYNTHESIZED) |
- return; |
- |
- if (!IsTabletModeActive() && backlights_forced_off_) |
- SetDisplayForcedOff(false); |
-} |
- |
-void TabletPowerButtonController::OnStylusStateChanged(ui::StylusState state) { |
- if (IsTabletModeSupported() && state == ui::StylusState::REMOVED && |
- backlights_forced_off_) { |
- SetDisplayForcedOff(false); |
- } |
-} |
- |
-void TabletPowerButtonController::SetTickClockForTesting( |
- std::unique_ptr<base::TickClock> tick_clock) { |
- DCHECK(tick_clock); |
- tick_clock_ = std::move(tick_clock); |
-} |
- |
-void TabletPowerButtonController::SetDisplayForcedOff(bool forced_off) { |
- if (backlights_forced_off_ == forced_off) |
- return; |
- |
- // Set the display and keyboard backlights (if present) to |forced_off|. |
- chromeos::DBusThreadManager::Get() |
- ->GetPowerManagerClient() |
- ->SetBacklightsForcedOff(forced_off); |
- backlights_forced_off_ = forced_off; |
- |
- ShellDelegate* delegate = WmShell::Get()->delegate(); |
- delegate->SetTouchscreenEnabledInPrefs(!forced_off, |
- true /* use_local_state */); |
- delegate->UpdateTouchscreenStatusFromPrefs(); |
- |
- // Send an a11y alert. |
- WmShell::Get()->accessibility_delegate()->TriggerAccessibilityAlert( |
- forced_off ? A11Y_ALERT_SCREEN_OFF : A11Y_ALERT_SCREEN_ON); |
-} |
- |
-void TabletPowerButtonController::GetInitialBacklightsForcedOff() { |
- chromeos::DBusThreadManager::Get() |
- ->GetPowerManagerClient() |
- ->GetBacklightsForcedOff(base::Bind( |
- &TabletPowerButtonController::OnGotInitialBacklightsForcedOff, |
- weak_ptr_factory_.GetWeakPtr())); |
-} |
- |
-void TabletPowerButtonController::OnGotInitialBacklightsForcedOff( |
- bool is_forced_off) { |
- backlights_forced_off_ = is_forced_off; |
-} |
- |
-void TabletPowerButtonController::StartShutdownTimer() { |
- base::TimeDelta timeout = base::TimeDelta::FromMilliseconds( |
- screen_off_when_power_button_down_ ? kShutdownWhenScreenOffTimeoutMs |
- : kShutdownWhenScreenOnTimeoutMs); |
- shutdown_timer_.Start(FROM_HERE, timeout, this, |
- &TabletPowerButtonController::OnShutdownTimeout); |
-} |
- |
-void TabletPowerButtonController::OnShutdownTimeout() { |
- controller_->StartShutdownAnimation(); |
-} |
- |
-void TabletPowerButtonController::LockScreenIfRequired() { |
- SessionStateDelegate* session_state_delegate = |
- WmShell::Get()->GetSessionStateDelegate(); |
- if (session_state_delegate->ShouldLockScreenAutomatically() && |
- session_state_delegate->CanLockScreen() && |
- !session_state_delegate->IsUserSessionBlocked() && |
- !controller_->LockRequested()) { |
- session_state_delegate->LockScreen(); |
- } |
-} |
- |
-} // namespace ash |