| 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 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 WmShell::Get()->RemoveDisplayObserver(this); | 126 WmShell::Get()->RemoveDisplayObserver(this); |
| 127 | 127 |
| 128 #if defined(OS_CHROMEOS) | 128 #if defined(OS_CHROMEOS) |
| 129 if (is_enabled) | 129 if (is_enabled) |
| 130 chromeos::AccelerometerReader::GetInstance()->RemoveObserver(this); | 130 chromeos::AccelerometerReader::GetInstance()->RemoveObserver(this); |
| 131 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver( | 131 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver( |
| 132 this); | 132 this); |
| 133 #endif // OS_CHROMEOS | 133 #endif // OS_CHROMEOS |
| 134 } | 134 } |
| 135 | 135 |
| 136 void MaximizeModeController::AddObserver(Observer* observer) { | |
| 137 observers_.AddObserver(observer); | |
| 138 } | |
| 139 | |
| 140 void MaximizeModeController::RemoveObserver(Observer* observer) { | |
| 141 observers_.RemoveObserver(observer); | |
| 142 } | |
| 143 | |
| 144 bool MaximizeModeController::CanEnterMaximizeMode() { | 136 bool MaximizeModeController::CanEnterMaximizeMode() { |
| 145 // If we have ever seen accelerometer data, then HandleHingeRotation may | 137 // If we have ever seen accelerometer data, then HandleHingeRotation may |
| 146 // trigger maximize mode at some point in the future. | 138 // trigger maximize mode at some point in the future. |
| 147 // The --enable-touch-view-testing switch can also mean that we may enter | 139 // The --enable-touch-view-testing switch can also mean that we may enter |
| 148 // maximize mode. | 140 // maximize mode. |
| 149 // TODO(mgiuca): This can result in false positives, as it returns true for | 141 // TODO(mgiuca): This can result in false positives, as it returns true for |
| 150 // any device with an accelerometer. Have TouchView-enabled devices explicitly | 142 // any device with an accelerometer. Have TouchView-enabled devices explicitly |
| 151 // set a flag, and change this implementation to simply return true iff the | 143 // set a flag, and change this implementation to simply return true iff the |
| 152 // flag is present (http://crbug.com/457445). | 144 // flag is present (http://crbug.com/457445). |
| 153 return have_seen_accelerometer_data_ || | 145 return have_seen_accelerometer_data_ || |
| (...skipping 11 matching lines...) Expand all Loading... |
| 165 | 157 |
| 166 WmShell* shell = WmShell::Get(); | 158 WmShell* shell = WmShell::Get(); |
| 167 | 159 |
| 168 if (should_enable) { | 160 if (should_enable) { |
| 169 maximize_mode_window_manager_.reset(new MaximizeModeWindowManager()); | 161 maximize_mode_window_manager_.reset(new MaximizeModeWindowManager()); |
| 170 // TODO(jonross): Move the maximize mode notifications from ShellObserver | 162 // TODO(jonross): Move the maximize mode notifications from ShellObserver |
| 171 // to MaximizeModeController::Observer | 163 // to MaximizeModeController::Observer |
| 172 shell->RecordUserMetricsAction(UMA_MAXIMIZE_MODE_ENABLED); | 164 shell->RecordUserMetricsAction(UMA_MAXIMIZE_MODE_ENABLED); |
| 173 shell->OnMaximizeModeStarted(); | 165 shell->OnMaximizeModeStarted(); |
| 174 | 166 |
| 175 touchview_observers_.ForAllPtrs([](mojom::TouchViewObserver* observer) { | 167 observers_.ForAllPtrs([](mojom::TouchViewObserver* observer) { |
| 176 observer->OnTouchViewToggled(true); | 168 observer->OnTouchViewToggled(true); |
| 177 }); | 169 }); |
| 178 | 170 |
| 179 } else { | 171 } else { |
| 180 maximize_mode_window_manager_.reset(); | 172 maximize_mode_window_manager_.reset(); |
| 181 shell->RecordUserMetricsAction(UMA_MAXIMIZE_MODE_DISABLED); | 173 shell->RecordUserMetricsAction(UMA_MAXIMIZE_MODE_DISABLED); |
| 182 shell->OnMaximizeModeEnded(); | 174 shell->OnMaximizeModeEnded(); |
| 183 | 175 |
| 184 touchview_observers_.ForAllPtrs([](mojom::TouchViewObserver* observer) { | 176 observers_.ForAllPtrs([](mojom::TouchViewObserver* observer) { |
| 185 observer->OnTouchViewToggled(false); | 177 observer->OnTouchViewToggled(false); |
| 186 }); | 178 }); |
| 187 } | 179 } |
| 188 } | 180 } |
| 189 | 181 |
| 190 bool MaximizeModeController::IsMaximizeModeWindowManagerEnabled() const { | 182 bool MaximizeModeController::IsMaximizeModeWindowManagerEnabled() const { |
| 191 return maximize_mode_window_manager_.get() != NULL; | 183 return maximize_mode_window_manager_.get() != NULL; |
| 192 } | 184 } |
| 193 | 185 |
| 194 void MaximizeModeController::AddWindow(WmWindow* window) { | 186 void MaximizeModeController::AddWindow(WmWindow* window) { |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 342 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 334 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 343 switches::kAshEnableTouchViewTesting)) { | 335 switches::kAshEnableTouchViewTesting)) { |
| 344 // We don't let accelerometer updates interfere with the maximize mode | 336 // We don't let accelerometer updates interfere with the maximize mode |
| 345 // status as set by the touch-view-testing keyboard shortcut. | 337 // status as set by the touch-view-testing keyboard shortcut. |
| 346 return; | 338 return; |
| 347 } | 339 } |
| 348 | 340 |
| 349 if (IsMaximizeModeWindowManagerEnabled()) | 341 if (IsMaximizeModeWindowManagerEnabled()) |
| 350 return; | 342 return; |
| 351 EnableMaximizeModeWindowManager(true); | 343 EnableMaximizeModeWindowManager(true); |
| 352 | |
| 353 for (auto& observer : observers_) | |
| 354 observer.OnEnterMaximizeMode(); | |
| 355 } | 344 } |
| 356 | 345 |
| 357 void MaximizeModeController::LeaveMaximizeMode() { | 346 void MaximizeModeController::LeaveMaximizeMode() { |
| 358 event_blocker_.reset(); | 347 event_blocker_.reset(); |
| 359 | 348 |
| 360 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 349 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 361 switches::kAshEnableTouchViewTesting)) { | 350 switches::kAshEnableTouchViewTesting)) { |
| 362 // We don't let accelerometer updates interfere with the maximize mode | 351 // We don't let accelerometer updates interfere with the maximize mode |
| 363 // status as set by the touch-view-testing keyboard shortcut. | 352 // status as set by the touch-view-testing keyboard shortcut. |
| 364 return; | 353 return; |
| 365 } | 354 } |
| 366 | 355 |
| 367 if (!IsMaximizeModeWindowManagerEnabled()) | 356 if (!IsMaximizeModeWindowManagerEnabled()) |
| 368 return; | 357 return; |
| 369 EnableMaximizeModeWindowManager(false); | 358 EnableMaximizeModeWindowManager(false); |
| 370 | |
| 371 for (auto& observer : observers_) | |
| 372 observer.OnLeaveMaximizeMode(); | |
| 373 } | 359 } |
| 374 | 360 |
| 375 // Called after maximize mode has started, windows might still animate though. | 361 // Called after maximize mode has started, windows might still animate though. |
| 376 void MaximizeModeController::OnMaximizeModeStarted() { | 362 void MaximizeModeController::OnMaximizeModeStarted() { |
| 377 RecordTouchViewUsageInterval(TOUCH_VIEW_INTERVAL_INACTIVE); | 363 RecordTouchViewUsageInterval(TOUCH_VIEW_INTERVAL_INACTIVE); |
| 378 } | 364 } |
| 379 | 365 |
| 380 // Called after maximize mode has ended, windows might still be returning to | 366 // Called after maximize mode has ended, windows might still be returning to |
| 381 // their original position. | 367 // their original position. |
| 382 void MaximizeModeController::OnMaximizeModeEnded() { | 368 void MaximizeModeController::OnMaximizeModeEnded() { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 414 | 400 |
| 415 MaximizeModeController::TouchViewIntervalType | 401 MaximizeModeController::TouchViewIntervalType |
| 416 MaximizeModeController::CurrentTouchViewIntervalType() { | 402 MaximizeModeController::CurrentTouchViewIntervalType() { |
| 417 if (IsMaximizeModeWindowManagerEnabled()) | 403 if (IsMaximizeModeWindowManagerEnabled()) |
| 418 return TOUCH_VIEW_INTERVAL_ACTIVE; | 404 return TOUCH_VIEW_INTERVAL_ACTIVE; |
| 419 return TOUCH_VIEW_INTERVAL_INACTIVE; | 405 return TOUCH_VIEW_INTERVAL_INACTIVE; |
| 420 } | 406 } |
| 421 | 407 |
| 422 void MaximizeModeController::AddObserver(mojom::TouchViewObserverPtr observer) { | 408 void MaximizeModeController::AddObserver(mojom::TouchViewObserverPtr observer) { |
| 423 observer->OnTouchViewToggled(IsMaximizeModeWindowManagerEnabled()); | 409 observer->OnTouchViewToggled(IsMaximizeModeWindowManagerEnabled()); |
| 424 touchview_observers_.AddPtr(std::move(observer)); | 410 observers_.AddPtr(std::move(observer)); |
| 425 } | 411 } |
| 426 | 412 |
| 427 void MaximizeModeController::OnAppTerminating() { | 413 void MaximizeModeController::OnAppTerminating() { |
| 428 // The system is about to shut down, so record TouchView usage interval | 414 // The system is about to shut down, so record TouchView usage interval |
| 429 // metrics based on whether TouchView mode is currently active. | 415 // metrics based on whether TouchView mode is currently active. |
| 430 RecordTouchViewUsageInterval(CurrentTouchViewIntervalType()); | 416 RecordTouchViewUsageInterval(CurrentTouchViewIntervalType()); |
| 431 | 417 |
| 432 if (CanEnterMaximizeMode()) { | 418 if (CanEnterMaximizeMode()) { |
| 433 UMA_HISTOGRAM_CUSTOM_COUNTS("Ash.TouchView.TouchViewActiveTotal", | 419 UMA_HISTOGRAM_CUSTOM_COUNTS("Ash.TouchView.TouchViewActiveTotal", |
| 434 total_touchview_time_.InMinutes(), 1, | 420 total_touchview_time_.InMinutes(), 1, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 456 return elapsed_time.InSeconds() <= kLidRecentlyOpenedDurationSeconds; | 442 return elapsed_time.InSeconds() <= kLidRecentlyOpenedDurationSeconds; |
| 457 } | 443 } |
| 458 | 444 |
| 459 void MaximizeModeController::SetTickClockForTest( | 445 void MaximizeModeController::SetTickClockForTest( |
| 460 std::unique_ptr<base::TickClock> tick_clock) { | 446 std::unique_ptr<base::TickClock> tick_clock) { |
| 461 DCHECK(tick_clock_); | 447 DCHECK(tick_clock_); |
| 462 tick_clock_ = std::move(tick_clock); | 448 tick_clock_ = std::move(tick_clock); |
| 463 } | 449 } |
| 464 | 450 |
| 465 } // namespace ash | 451 } // namespace ash |
| OLD | NEW |