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 9d8b18dae29de82390b61d4e439eca666dfd59db..f74a31d72e3d4c360f171f2eac1f1f53642d54d2 100644 |
| --- a/ash/wm/maximize_mode/maximize_mode_controller.cc |
| +++ b/ash/wm/maximize_mode/maximize_mode_controller.cc |
| @@ -100,9 +100,11 @@ bool IsAngleBetweenAccelerometerReadingsStable( |
| MaximizeModeController::MaximizeModeController() |
| : have_seen_accelerometer_data_(false), |
| - lid_open_past_180_(false), |
| touchview_usage_interval_start_time_(base::Time::Now()), |
| tick_clock_(new base::DefaultTickClock()), |
| +#if defined(OS_CHROMEOS) |
| + tablet_mode_switch_is_on_(false), |
| +#endif |
| lid_is_closed_(false) { |
| Shell* shell = Shell::GetInstance(); |
| shell->AddShellObserver(this); |
| @@ -208,6 +210,8 @@ void MaximizeModeController::OnAccelerometerUpdated( |
| ui::IsAccelerometerReadingStable( |
| *update, chromeos::ACCELEROMETER_SOURCE_ATTACHED_KEYBOARD) && |
| IsAngleBetweenAccelerometerReadingsStable(*update)) { |
| + if (tablet_mode_switch_is_on_) |
| + return; |
| // update.has(chromeos::ACCELEROMETER_SOURCE_ATTACHED_KEYBOARD) |
| // Ignore the reading if it appears unstable. The reading is considered |
| // unstable if it deviates too much from gravity and/or the magnitude of the |
| @@ -224,6 +228,14 @@ void MaximizeModeController::LidEventReceived(bool open, |
| LeaveMaximizeMode(); |
| } |
| +void MaximizeModeController::TabletModeEventReceived( |
| + bool on, |
| + const base::TimeTicks& time) { |
| + tablet_mode_switch_is_on_ = on; |
| + if (on && !IsMaximizeModeWindowManagerEnabled()) |
| + EnterMaximizeMode(); |
| +} |
| + |
| void MaximizeModeController::SuspendImminent() { |
| // The system is about to suspend, so record TouchView usage interval metrics |
| // based on whether TouchView mode is currently active. |
| @@ -256,6 +268,10 @@ void MaximizeModeController::HandleHingeRotation( |
| (kHingeVerticalSmoothingMaximum - |
| kHingeVerticalSmoothingStart))); |
| + // We cannot trust the computed lid angle when the device is held vertically. |
| + bool is_angle_reliable = |
| + std::abs(base_reading.x()) > kHingeVerticalSmoothingMaximum; |
| + |
| base_smoothed_.Scale(smoothing_ratio); |
| base_reading.Scale(1.0f - smoothing_ratio); |
| base_smoothed_.Add(base_reading); |
| @@ -277,7 +293,7 @@ void MaximizeModeController::HandleHingeRotation( |
| if (lid_angle < 0.0f) |
| lid_angle += 360.0f; |
| - bool is_angle_stable = lid_angle >= kMinStableAngle && |
| + bool is_angle_stable = !is_angle_reliable && lid_angle >= kMinStableAngle && |
|
jonross
2016/06/07 15:27:15
On devices without a tablet mode switch, does this
jcliang
2016/06/07 16:57:23
Ah, there's a typo here. I forgot to invert the co
jonross
2016/06/07 22:04:42
That SGTM
|
| lid_angle <= kMaxStableAngle; |
| // Clear the last_lid_open_time_ for a stable reading so that there is less |
| @@ -287,14 +303,12 @@ void MaximizeModeController::HandleHingeRotation( |
| last_lid_open_time_ = base::TimeTicks(); |
| // Toggle maximize mode on or off when corresponding thresholds are passed. |
| - if (lid_open_past_180_ && is_angle_stable && |
| + if (IsMaximizeModeWindowManagerEnabled() && is_angle_stable && |
| lid_angle <= kExitMaximizeModeAngle) { |
| - lid_open_past_180_ = false; |
| LeaveMaximizeMode(); |
| - } else if (!lid_open_past_180_ && !lid_is_closed_ && |
| + } else if (!IsMaximizeModeWindowManagerEnabled() && !lid_is_closed_ && |
| lid_angle >= kEnterMaximizeModeAngle && |
| (is_angle_stable || !WasLidOpenedRecently())) { |
| - lid_open_past_180_ = true; |
| EnterMaximizeMode(); |
| } |
| } |