Chromium Code Reviews| Index: ash/wm/maximize_mode/maximize_mode_controller.cc |
| diff --git a/ash/wm/maximize_mode/maximize_mode_controller.cc b/ash/wm/maximize_mode/maximize_mode_controller.cc |
| index 0e4acd7dc9abd7ec9426af8fa9df70d9b0c3e474..d9263b7a62a93bb349bd8a15cc95d9b3ae3eaccd 100644 |
| --- a/ash/wm/maximize_mode/maximize_mode_controller.cc |
| +++ b/ash/wm/maximize_mode/maximize_mode_controller.cc |
| @@ -12,7 +12,6 @@ |
| #include "ash/shell.h" |
| #include "ash/wm/maximize_mode/maximize_mode_window_manager.h" |
| #include "ash/wm/maximize_mode/scoped_disable_internal_mouse_and_keyboard.h" |
| -#include "base/auto_reset.h" |
| #include "base/command_line.h" |
| #include "base/metrics/histogram.h" |
| #include "base/time/default_tick_clock.h" |
| @@ -27,6 +26,7 @@ |
| #endif |
| #if defined(OS_CHROMEOS) |
| +#include "ash/content/display/screen_orientation_delegate_chromeos.h" |
| #include "chromeos/dbus/dbus_thread_manager.h" |
| #endif // OS_CHROMEOS |
| @@ -76,6 +76,7 @@ const float kDeviationFromGravityThreshold = 1.0f; |
| // under the same acceleration. |
| const float kNoisyMagnitudeDeviation = 1.0f; |
| +#if defined(OS_CHROMEOS) |
| // The angle which the screen has to be rotated past before the display will |
| // rotate to match it (i.e. 45.0f is no stickiness). |
| const float kDisplayRotationStickyAngleDegrees = 60.0f; |
| @@ -86,6 +87,7 @@ const float kDisplayRotationStickyAngleDegrees = 60.0f; |
| // effectively the sine of the rise angle required times the acceleration due |
| // to gravity, with the current value requiring at least a 25 degree rise. |
| const float kMinimumAccelerationScreenRotation = 4.2f; |
| +#endif // OS_CHROMEOS |
| const float kRadiansToDegrees = 180.0f / 3.14159265f; |
| @@ -115,9 +117,7 @@ float ClockwiseAngleBetweenVectorsInDegrees(const gfx::Vector3dF& base, |
| } // namespace |
| MaximizeModeController::MaximizeModeController() |
| - : rotation_locked_(false), |
| - have_seen_accelerometer_data_(false), |
| - ignore_display_configuration_updates_(false), |
| + : have_seen_accelerometer_data_(false), |
| lid_open_past_180_(false), |
| shutting_down_(false), |
| user_rotation_(gfx::Display::ROTATE_0), |
| @@ -141,31 +141,6 @@ MaximizeModeController::~MaximizeModeController() { |
| #endif // OS_CHROMEOS |
| } |
| -void MaximizeModeController::SetRotationLocked(bool rotation_locked) { |
| - if (rotation_locked_ == rotation_locked) |
| - return; |
| - base::AutoReset<bool> auto_ignore_display_configuration_updates( |
| - &ignore_display_configuration_updates_, true); |
| - rotation_locked_ = rotation_locked; |
| - Shell::GetInstance()->display_manager()-> |
| - RegisterDisplayRotationProperties(rotation_locked_, current_rotation_); |
| - FOR_EACH_OBSERVER(Observer, observers_, |
| - OnRotationLockChanged(rotation_locked_)); |
| -} |
| - |
| -void MaximizeModeController::LockRotation(gfx::Display::Rotation rotation) { |
| - SetRotationLocked(true); |
| - SetDisplayRotation(Shell::GetInstance()->display_manager(), rotation); |
| -} |
| - |
| -void MaximizeModeController::AddObserver(Observer* observer) { |
| - observers_.AddObserver(observer); |
| -} |
| - |
| -void MaximizeModeController::RemoveObserver(Observer* observer) { |
| - observers_.RemoveObserver(observer); |
| -} |
| - |
| bool MaximizeModeController::CanEnterMaximizeMode() { |
| // If we have ever seen accelerometer data, then HandleHingeRotation may |
| // trigger maximize mode at some point in the future. |
| @@ -204,7 +179,9 @@ void MaximizeModeController::Shutdown() { |
| void MaximizeModeController::OnAccelerometerUpdated( |
| const ui::AccelerometerUpdate& update) { |
| +#if defined(OS_CHROMEOS) |
| bool first_accelerometer_update = !have_seen_accelerometer_data_; |
| +#endif // OS_CHROMEOS |
| have_seen_accelerometer_data_ = true; |
| // Ignore the reading if it appears unstable. The reading is considered |
| @@ -230,6 +207,7 @@ void MaximizeModeController::OnAccelerometerUpdated( |
| update.get(ui::ACCELEROMETER_SOURCE_ATTACHED_KEYBOARD), |
| update.get(ui::ACCELEROMETER_SOURCE_SCREEN)); |
| } |
| +#if defined(OS_CHROMEOS) |
|
flackr
2014/11/27 15:39:15
There's a lot of "#if defined(OS_CHROMEOS)" going
jonross
2014/12/10 17:57:30
Done.
|
| if (lid_stable) |
| HandleScreenRotation(update.get(ui::ACCELEROMETER_SOURCE_SCREEN)); |
| @@ -237,14 +215,20 @@ void MaximizeModeController::OnAccelerometerUpdated( |
| // On the first accelerometer update we will know if we have entered |
| // maximize mode or not. Update the preferences to reflect the current |
| // state. |
| - Shell::GetInstance()->display_manager()-> |
| - RegisterDisplayRotationProperties(rotation_locked_, current_rotation_); |
| + Shell::GetInstance()->display_manager()->RegisterDisplayRotationProperties( |
| + Shell::GetInstance()->screen_orientation_delegate()->rotation_locked(), |
| + current_rotation_); |
| } |
| +#endif // OS_CHROMEOS |
| } |
| +#if defined(OS_CHROMEOS) |
| void MaximizeModeController::OnDisplayConfigurationChanged() { |
| - if (ignore_display_configuration_updates_) |
| + if (Shell::GetInstance() |
| + ->screen_orientation_delegate() |
| + ->ignore_display_configuration_updates()) { |
| return; |
| + } |
| DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
| gfx::Display::Rotation user_rotation = display_manager-> |
| GetDisplayInfo(gfx::Display::InternalDisplayId()).rotation(); |
| @@ -252,13 +236,13 @@ void MaximizeModeController::OnDisplayConfigurationChanged() { |
| // A user may change other display configuration settings. When the user |
| // does change the rotation setting, then lock rotation to prevent the |
| // accelerometer from erasing their change. |
| - SetRotationLocked(true); |
| + Shell::GetInstance()->screen_orientation_delegate()->SetRotationLocked( |
| + true); |
| user_rotation_ = user_rotation; |
| current_rotation_ = user_rotation; |
| } |
| } |
| -#if defined(OS_CHROMEOS) |
| void MaximizeModeController::LidEventReceived(bool open, |
| const base::TimeTicks& time) { |
| if (open) |
| @@ -333,19 +317,87 @@ void MaximizeModeController::HandleHingeRotation(const gfx::Vector3dF& base, |
| } |
| } |
| +void MaximizeModeController::EnterMaximizeMode() { |
| + if (IsMaximizeModeWindowManagerEnabled()) |
| + return; |
| + DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
| + if (display_manager->HasInternalDisplay()) { |
| + current_rotation_ = user_rotation_ = |
| + display_manager->GetDisplayInfo(gfx::Display::InternalDisplayId()) |
| + .rotation(); |
| +#if defined(OS_CHROMEOS) |
| + LoadDisplayRotationProperties(); |
| +#endif |
| + } |
| + EnableMaximizeModeWindowManager(true); |
| +#if defined(OS_CHROMEOS) |
| + Shell::GetInstance()->display_controller()->AddObserver(this); |
| +#endif // OS_CHROMEOS |
| +} |
| + |
| +void MaximizeModeController::LeaveMaximizeMode() { |
| + if (!IsMaximizeModeWindowManagerEnabled()) |
| + return; |
| +#if defined(OS_CHROMEOS) |
| + DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
| + if (display_manager->HasInternalDisplay()) { |
| + gfx::Display::Rotation current_rotation = |
| + display_manager->GetDisplayInfo(gfx::Display::InternalDisplayId()) |
| + .rotation(); |
| + if (current_rotation != user_rotation_) |
| + SetDisplayRotation(user_rotation_); |
| + } |
| + if (!shutting_down_) { |
| + Shell::GetInstance()->screen_orientation_delegate()->SetRotationLocked( |
| + false); |
| + } |
| + Shell::GetInstance()->display_controller()->RemoveObserver(this); |
| +#endif // OS_CHROMEOS |
| + EnableMaximizeModeWindowManager(false); |
| +} |
| + |
| +// Called after maximize mode has started, windows might still animate though. |
| +void MaximizeModeController::OnMaximizeModeStarted() { |
| + RecordTouchViewStateTransition(); |
| +} |
| + |
| +// Called after maximize mode has ended, windows might still be returning to |
| +// their original position. |
| +void MaximizeModeController::OnMaximizeModeEnded() { |
| + RecordTouchViewStateTransition(); |
| +} |
| + |
| +void MaximizeModeController::RecordTouchViewStateTransition() { |
| + if (CanEnterMaximizeMode()) { |
| + base::Time current_time = base::Time::Now(); |
| + base::TimeDelta delta = current_time - last_touchview_transition_time_; |
| + if (IsMaximizeModeWindowManagerEnabled()) { |
| + UMA_HISTOGRAM_LONG_TIMES("Ash.TouchView.TouchViewInactive", delta); |
| + total_non_touchview_time_ += delta; |
| + } else { |
| + UMA_HISTOGRAM_LONG_TIMES("Ash.TouchView.TouchViewActive", delta); |
| + total_touchview_time_ += delta; |
| + } |
| + last_touchview_transition_time_ = current_time; |
| + } |
| +} |
| + |
| +#if defined(OS_CHROMEOS) |
| void MaximizeModeController::HandleScreenRotation(const gfx::Vector3dF& lid) { |
| bool maximize_mode_engaged = IsMaximizeModeWindowManagerEnabled(); |
| // TODO(jonross): track the updated rotation angle even when locked. So that |
| // when rotation lock is removed the accelerometer rotation can be applied |
| // without waiting for the next update. |
| - if (!maximize_mode_engaged || rotation_locked_) |
| + if (!maximize_mode_engaged || |
| + Shell::GetInstance()->screen_orientation_delegate()->rotation_locked()) |
| return; |
| - DisplayManager* display_manager = |
| - Shell::GetInstance()->display_manager(); |
| - gfx::Display::Rotation current_rotation = display_manager->GetDisplayInfo( |
| - gfx::Display::InternalDisplayId()).rotation(); |
| + gfx::Display::Rotation current_rotation = |
| + Shell::GetInstance() |
| + ->display_manager() |
| + ->GetDisplayInfo(gfx::Display::InternalDisplayId()) |
| + .rotation(); |
| // After determining maximize mode state, determine if the screen should |
| // be rotated. |
| @@ -393,72 +445,14 @@ void MaximizeModeController::HandleScreenRotation(const gfx::Vector3dF& lid) { |
| new_rotation = gfx::Display::ROTATE_180; |
| if (new_rotation != current_rotation) |
| - SetDisplayRotation(display_manager, new_rotation); |
| + SetDisplayRotation(new_rotation); |
| } |
| void MaximizeModeController::SetDisplayRotation( |
| - DisplayManager* display_manager, |
| gfx::Display::Rotation rotation) { |
| - base::AutoReset<bool> auto_ignore_display_configuration_updates( |
| - &ignore_display_configuration_updates_, true); |
| current_rotation_ = rotation; |
| - display_manager->SetDisplayRotation(gfx::Display::InternalDisplayId(), |
| - rotation); |
| -} |
| - |
| -void MaximizeModeController::EnterMaximizeMode() { |
| - if (IsMaximizeModeWindowManagerEnabled()) |
| - return; |
| - DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
| - if (display_manager->HasInternalDisplay()) { |
| - current_rotation_ = user_rotation_ = display_manager-> |
| - GetDisplayInfo(gfx::Display::InternalDisplayId()).rotation(); |
| - LoadDisplayRotationProperties(); |
| - } |
| - EnableMaximizeModeWindowManager(true); |
| - Shell::GetInstance()->display_controller()->AddObserver(this); |
| -} |
| - |
| -void MaximizeModeController::LeaveMaximizeMode() { |
| - if (!IsMaximizeModeWindowManagerEnabled()) |
| - return; |
| - DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
| - if (display_manager->HasInternalDisplay()) { |
| - gfx::Display::Rotation current_rotation = display_manager-> |
| - GetDisplayInfo(gfx::Display::InternalDisplayId()).rotation(); |
| - if (current_rotation != user_rotation_) |
| - SetDisplayRotation(display_manager, user_rotation_); |
| - } |
| - if (!shutting_down_) |
| - SetRotationLocked(false); |
| - EnableMaximizeModeWindowManager(false); |
| - Shell::GetInstance()->display_controller()->RemoveObserver(this); |
| -} |
| - |
| -// Called after maximize mode has started, windows might still animate though. |
| -void MaximizeModeController::OnMaximizeModeStarted() { |
| - RecordTouchViewStateTransition(); |
| -} |
| - |
| -// Called after maximize mode has ended, windows might still be returning to |
| -// their original position. |
| -void MaximizeModeController::OnMaximizeModeEnded() { |
| - RecordTouchViewStateTransition(); |
| -} |
| - |
| -void MaximizeModeController::RecordTouchViewStateTransition() { |
| - if (CanEnterMaximizeMode()) { |
| - base::Time current_time = base::Time::Now(); |
| - base::TimeDelta delta = current_time - last_touchview_transition_time_; |
| - if (IsMaximizeModeWindowManagerEnabled()) { |
| - UMA_HISTOGRAM_LONG_TIMES("Ash.TouchView.TouchViewInactive", delta); |
| - total_non_touchview_time_ += delta; |
| - } else { |
| - UMA_HISTOGRAM_LONG_TIMES("Ash.TouchView.TouchViewActive", delta); |
| - total_touchview_time_ += delta; |
| - } |
| - last_touchview_transition_time_ = current_time; |
| - } |
| + Shell::GetInstance()->screen_orientation_delegate()->SetDisplayRotation( |
| + rotation); |
| } |
| void MaximizeModeController::LoadDisplayRotationProperties() { |
| @@ -466,10 +460,10 @@ void MaximizeModeController::LoadDisplayRotationProperties() { |
| if (!display_manager->registered_internal_display_rotation_lock()) |
| return; |
| - SetDisplayRotation(display_manager, |
| - display_manager->registered_internal_display_rotation()); |
| - SetRotationLocked(true); |
| + SetDisplayRotation(display_manager->registered_internal_display_rotation()); |
| + Shell::GetInstance()->screen_orientation_delegate()->SetRotationLocked(true); |
| } |
| +#endif // OS_CHROMEOS |
| void MaximizeModeController::OnAppTerminating() { |
| if (CanEnterMaximizeMode()) { |
| @@ -487,7 +481,9 @@ void MaximizeModeController::OnAppTerminating() { |
| 100 * total_touchview_time_.InSeconds() / total_runtime.InSeconds()); |
| } |
| } |
| +#if defined(OS_CHROMEOS) |
| Shell::GetInstance()->display_controller()->RemoveObserver(this); |
| +#endif // OS_CHROMEOS |
| } |
| bool MaximizeModeController::WasLidOpenedRecently() const { |