Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ash/common/wm/maximize_mode/maximize_mode_controller.h" | 5 #include "ash/common/wm/maximize_mode/maximize_mode_controller.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "ash/common/ash_switches.h" | 9 #include "ash/common/ash_switches.h" |
| 10 #include "ash/common/wm/maximize_mode/maximize_mode_window_manager.h" | 10 #include "ash/common/wm/maximize_mode/maximize_mode_window_manager.h" |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 80 | 80 |
| 81 bool IsEnabled() { | 81 bool IsEnabled() { |
| 82 return base::CommandLine::ForCurrentProcess()->HasSwitch( | 82 return base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 83 switches::kAshEnableTouchView); | 83 switches::kAshEnableTouchView); |
| 84 } | 84 } |
| 85 | 85 |
| 86 } // namespace | 86 } // namespace |
| 87 | 87 |
| 88 MaximizeModeController::MaximizeModeController() | 88 MaximizeModeController::MaximizeModeController() |
| 89 : have_seen_accelerometer_data_(false), | 89 : have_seen_accelerometer_data_(false), |
| 90 force_can_enter_maximize_mode_for_tests_(false), | |
| 90 touchview_usage_interval_start_time_(base::Time::Now()), | 91 touchview_usage_interval_start_time_(base::Time::Now()), |
| 91 tick_clock_(new base::DefaultTickClock()), | 92 tick_clock_(new base::DefaultTickClock()), |
| 92 tablet_mode_switch_is_on_(false), | 93 tablet_mode_switch_is_on_(false), |
| 93 lid_is_closed_(false) { | 94 lid_is_closed_(false) { |
| 94 WmShell::Get()->AddShellObserver(this); | 95 WmShell::Get()->AddShellObserver(this); |
| 95 WmShell::Get()->RecordUserMetricsAction(UMA_MAXIMIZE_MODE_INITIALLY_DISABLED); | 96 WmShell::Get()->RecordUserMetricsAction(UMA_MAXIMIZE_MODE_INITIALLY_DISABLED); |
| 96 | 97 |
| 97 // TODO(jonross): Do not create MaximizeModeController if the flag is | 98 // TODO(jonross): Do not create MaximizeModeController if the flag is |
| 98 // unavailable. This will require refactoring | 99 // unavailable. This will require refactoring |
| 99 // IsMaximizeModeWindowManagerEnabled to check for the existance of the | 100 // IsMaximizeModeWindowManagerEnabled to check for the existance of the |
| 100 // controller. | 101 // controller. |
| 101 const bool is_enabled = IsEnabled(); | 102 if (IsEnabled()) { |
| 102 if (is_enabled) | |
| 103 WmShell::Get()->AddDisplayObserver(this); | 103 WmShell::Get()->AddDisplayObserver(this); |
| 104 | |
| 105 if (is_enabled) | |
| 106 chromeos::AccelerometerReader::GetInstance()->AddObserver(this); | 104 chromeos::AccelerometerReader::GetInstance()->AddObserver(this); |
| 105 } | |
| 107 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver( | 106 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver( |
| 108 this); | 107 this); |
| 109 } | 108 } |
| 110 | 109 |
| 111 MaximizeModeController::~MaximizeModeController() { | 110 MaximizeModeController::~MaximizeModeController() { |
| 112 WmShell::Get()->RemoveShellObserver(this); | 111 WmShell::Get()->RemoveShellObserver(this); |
| 113 const bool is_enabled = IsEnabled(); | 112 |
| 114 if (is_enabled) | 113 if (IsEnabled()) { |
| 115 WmShell::Get()->RemoveDisplayObserver(this); | 114 WmShell::Get()->RemoveDisplayObserver(this); |
| 116 | |
| 117 if (is_enabled) | |
| 118 chromeos::AccelerometerReader::GetInstance()->RemoveObserver(this); | 115 chromeos::AccelerometerReader::GetInstance()->RemoveObserver(this); |
| 116 } | |
| 119 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver( | 117 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver( |
| 120 this); | 118 this); |
| 121 } | 119 } |
| 122 | 120 |
| 123 bool MaximizeModeController::CanEnterMaximizeMode() { | 121 bool MaximizeModeController::CanEnterMaximizeMode() { |
| 124 // If we have ever seen accelerometer data, then HandleHingeRotation may | 122 // If we have ever seen accelerometer data, then HandleHingeRotation may |
| 125 // trigger maximize mode at some point in the future. | 123 // trigger maximize mode at some point in the future. |
| 126 // The --enable-touch-view-testing switch can also mean that we may enter | |
| 127 // maximize mode. | |
| 128 // TODO(mgiuca): This can result in false positives, as it returns true for | 124 // TODO(mgiuca): This can result in false positives, as it returns true for |
| 129 // any device with an accelerometer. Have TouchView-enabled devices explicitly | 125 // any device with an accelerometer. Have TouchView-enabled devices explicitly |
| 130 // set a flag, and change this implementation to simply return true iff the | 126 // set a flag, and change this implementation to simply return true iff the |
| 131 // flag is present (http://crbug.com/457445). | 127 // flag is present (http://crbug.com/457445). |
| 132 return have_seen_accelerometer_data_ || | 128 return have_seen_accelerometer_data_ || |
|
Daniel Erat
2017/01/19 22:33:29
the comment makes me think that this should possib
afakhry
2017/01/24 03:00:09
That's a reasonable alternative, though from mgiuc
Daniel Erat
2017/01/24 04:30:06
would you mind updating/deleting the comment as pa
afakhry
2017/01/24 17:24:08
Done.
| |
| 133 base::CommandLine::ForCurrentProcess()->HasSwitch( | 129 force_can_enter_maximize_mode_for_tests_; |
| 134 switches::kAshEnableTouchViewTesting); | |
| 135 } | 130 } |
| 136 | 131 |
| 137 // TODO(jcliang): Hide or remove EnableMaximizeModeWindowManager | 132 // TODO(jcliang): Hide or remove EnableMaximizeModeWindowManager |
| 138 // (http://crbug.com/620241). | 133 // (http://crbug.com/620241). |
| 139 void MaximizeModeController::EnableMaximizeModeWindowManager( | 134 void MaximizeModeController::EnableMaximizeModeWindowManager( |
| 140 bool should_enable) { | 135 bool should_enable) { |
| 141 bool is_enabled = !!maximize_mode_window_manager_.get(); | 136 bool is_enabled = !!maximize_mode_window_manager_.get(); |
| 142 if (should_enable == is_enabled) | 137 if (should_enable == is_enabled) |
| 143 return; | 138 return; |
| 144 | 139 |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 309 EnterMaximizeMode(); | 304 EnterMaximizeMode(); |
| 310 } | 305 } |
| 311 } | 306 } |
| 312 | 307 |
| 313 void MaximizeModeController::EnterMaximizeMode() { | 308 void MaximizeModeController::EnterMaximizeMode() { |
| 314 // Always reset first to avoid creation before destruction of a previous | 309 // Always reset first to avoid creation before destruction of a previous |
| 315 // object. | 310 // object. |
| 316 event_blocker_ = | 311 event_blocker_ = |
| 317 WmShell::Get()->CreateScopedDisableInternalMouseAndKeyboard(); | 312 WmShell::Get()->CreateScopedDisableInternalMouseAndKeyboard(); |
| 318 | 313 |
| 319 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | |
| 320 switches::kAshEnableTouchViewTesting)) { | |
| 321 // We don't let accelerometer updates interfere with the maximize mode | |
| 322 // status as set by the touch-view-testing keyboard shortcut. | |
| 323 return; | |
| 324 } | |
| 325 | |
| 326 if (IsMaximizeModeWindowManagerEnabled()) | 314 if (IsMaximizeModeWindowManagerEnabled()) |
| 327 return; | 315 return; |
| 328 EnableMaximizeModeWindowManager(true); | 316 EnableMaximizeModeWindowManager(true); |
| 329 } | 317 } |
| 330 | 318 |
| 331 void MaximizeModeController::LeaveMaximizeMode() { | 319 void MaximizeModeController::LeaveMaximizeMode() { |
| 332 event_blocker_.reset(); | 320 event_blocker_.reset(); |
| 333 | 321 |
| 334 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | |
| 335 switches::kAshEnableTouchViewTesting)) { | |
| 336 // We don't let accelerometer updates interfere with the maximize mode | |
| 337 // status as set by the touch-view-testing keyboard shortcut. | |
| 338 return; | |
| 339 } | |
| 340 | |
| 341 if (!IsMaximizeModeWindowManagerEnabled()) | 322 if (!IsMaximizeModeWindowManagerEnabled()) |
| 342 return; | 323 return; |
| 343 EnableMaximizeModeWindowManager(false); | 324 EnableMaximizeModeWindowManager(false); |
| 344 } | 325 } |
| 345 | 326 |
| 346 // Called after maximize mode has started, windows might still animate though. | 327 // Called after maximize mode has started, windows might still animate though. |
| 347 void MaximizeModeController::OnMaximizeModeStarted() { | 328 void MaximizeModeController::OnMaximizeModeStarted() { |
| 348 RecordTouchViewUsageInterval(TOUCH_VIEW_INTERVAL_INACTIVE); | 329 RecordTouchViewUsageInterval(TOUCH_VIEW_INTERVAL_INACTIVE); |
| 349 } | 330 } |
| 350 | 331 |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 427 return elapsed_time.InSeconds() <= kLidRecentlyOpenedDurationSeconds; | 408 return elapsed_time.InSeconds() <= kLidRecentlyOpenedDurationSeconds; |
| 428 } | 409 } |
| 429 | 410 |
| 430 void MaximizeModeController::SetTickClockForTest( | 411 void MaximizeModeController::SetTickClockForTest( |
| 431 std::unique_ptr<base::TickClock> tick_clock) { | 412 std::unique_ptr<base::TickClock> tick_clock) { |
| 432 DCHECK(tick_clock_); | 413 DCHECK(tick_clock_); |
| 433 tick_clock_ = std::move(tick_clock); | 414 tick_clock_ = std::move(tick_clock); |
| 434 } | 415 } |
| 435 | 416 |
| 436 } // namespace ash | 417 } // namespace ash |
| OLD | NEW |