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..9bf624e2c99fea7a6053e3dcc38f38073dc807c9 100644 |
| --- a/ash/wm/maximize_mode/maximize_mode_controller.cc |
| +++ b/ash/wm/maximize_mode/maximize_mode_controller.cc |
| @@ -103,6 +103,9 @@ MaximizeModeController::MaximizeModeController() |
| 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_was_on_(false), |
| +#endif |
| lid_is_closed_(false) { |
| Shell* shell = Shell::GetInstance(); |
| shell->AddShellObserver(this); |
| @@ -224,6 +227,18 @@ void MaximizeModeController::LidEventReceived(bool open, |
| LeaveMaximizeMode(); |
| } |
| +void MaximizeModeController::TabletModeEventReceived( |
| + bool on, |
| + const base::TimeTicks& time) { |
| + if (on) { |
| + chromeos::AccelerometerReader::GetInstance()->RemoveObserver(this); |
| + EnterMaximizeMode(); |
| + } else { |
| + tablet_mode_switch_was_on_ = true; |
| + chromeos::AccelerometerReader::GetInstance()->AddObserver(this); |
|
Daniel Erat
2016/06/06 15:24:55
this approach seems problematic. if powerd sends m
jcliang
2016/06/06 16:48:36
I didn't realize that {Add|Remove}Observer() are n
|
| + } |
| +} |
| + |
| void MaximizeModeController::SuspendImminent() { |
| // The system is about to suspend, so record TouchView usage interval metrics |
| // based on whether TouchView mode is currently active. |
| @@ -255,6 +270,8 @@ void MaximizeModeController::HandleHingeRotation( |
| kHingeVerticalSmoothingStart) / |
| (kHingeVerticalSmoothingMaximum - |
| kHingeVerticalSmoothingStart))); |
| + bool is_base_vertical = |
| + std::abs(base_reading.x()) > kHingeVerticalSmoothingMaximum; |
| base_smoothed_.Scale(smoothing_ratio); |
| base_reading.Scale(1.0f - smoothing_ratio); |
| @@ -277,7 +294,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_base_vertical && lid_angle >= kMinStableAngle && |
| lid_angle <= kMaxStableAngle; |
| // Clear the last_lid_open_time_ for a stable reading so that there is less |
| @@ -287,9 +304,10 @@ 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 ((lid_open_past_180_ || tablet_mode_switch_was_on_) && is_angle_stable && |
| lid_angle <= kExitMaximizeModeAngle) { |
| lid_open_past_180_ = false; |
| + tablet_mode_switch_was_on_ = false; |
| LeaveMaximizeMode(); |
| } else if (!lid_open_past_180_ && !lid_is_closed_ && |
| lid_angle >= kEnterMaximizeModeAngle && |