| 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/wm/maximize_mode/maximize_mode_controller.h" | 5 #include "ash/wm/maximize_mode/maximize_mode_controller.h" |
| 6 | 6 |
| 7 #include "ash/accelerometer/accelerometer_controller.h" | 7 #include "ash/accelerometer/accelerometer_controller.h" |
| 8 #include "ash/display/display_manager.h" | 8 #include "ash/display/display_manager.h" |
| 9 #include "ash/shell.h" | 9 #include "ash/shell.h" |
| 10 #include "ash/system/tray/system_tray_delegate.h" |
| 10 #include "ash/test/ash_test_base.h" | 11 #include "ash/test/ash_test_base.h" |
| 11 #include "ash/test/display_manager_test_api.h" | 12 #include "ash/test/display_manager_test_api.h" |
| 13 #include "ash/test/volume_control_delegate_stub.h" |
| 12 #include "ui/aura/test/event_generator.h" | 14 #include "ui/aura/test/event_generator.h" |
| 13 #include "ui/events/event_handler.h" | 15 #include "ui/events/event_handler.h" |
| 14 #include "ui/gfx/vector3d_f.h" | 16 #include "ui/gfx/vector3d_f.h" |
| 15 | 17 |
| 16 namespace ash { | 18 namespace ash { |
| 17 | 19 |
| 18 namespace { | 20 namespace { |
| 19 | 21 |
| 20 const float kDegreesToRadians = 3.14159265f / 180.0f; | 22 const float kDegreesToRadians = 3.14159265f / 180.0f; |
| 21 | 23 |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 EXPECT_TRUE(IsMaximizeModeStarted()); | 143 EXPECT_TRUE(IsMaximizeModeStarted()); |
| 142 | 144 |
| 143 // Open 90 degrees. | 145 // Open 90 degrees. |
| 144 TriggerAccelerometerUpdate(base, gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); | 146 TriggerAccelerometerUpdate(base, gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); |
| 145 EXPECT_FALSE(IsMaximizeModeStarted()); | 147 EXPECT_FALSE(IsMaximizeModeStarted()); |
| 146 } | 148 } |
| 147 | 149 |
| 148 // Tests that when the hinge is nearly vertically aligned, the current state | 150 // Tests that when the hinge is nearly vertically aligned, the current state |
| 149 // persists as the computed angle is highly inaccurate in this orientation. | 151 // persists as the computed angle is highly inaccurate in this orientation. |
| 150 TEST_F(MaximizeModeControllerTest, HingeAligned) { | 152 TEST_F(MaximizeModeControllerTest, HingeAligned) { |
| 151 // Laptop in normal orientation lid open 90 degrees. | 153 // Laptop in normal orientation lid open 90 degrees. |
| 152 TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, 0.0f, 1.0f), | 154 TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, 0.0f, 1.0f), |
| 153 gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); | 155 gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); |
| 154 EXPECT_FALSE(IsMaximizeModeStarted()); | 156 EXPECT_FALSE(IsMaximizeModeStarted()); |
| 155 | 157 |
| 156 // Completely vertical. | 158 // Completely vertical. |
| 157 TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, -1.0f, 0.0f), | 159 TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, -1.0f, 0.0f), |
| 158 gfx::Vector3dF(0.0f, -1.0f, 0.0f)); | 160 gfx::Vector3dF(0.0f, -1.0f, 0.0f)); |
| 159 EXPECT_FALSE(IsMaximizeModeStarted()); | 161 EXPECT_FALSE(IsMaximizeModeStarted()); |
| 160 | 162 |
| 161 // Close to vertical but with hinge appearing to be open 270 degrees. | 163 // Close to vertical but with hinge appearing to be open 270 degrees. |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 302 // Open up 270 degrees. | 304 // Open up 270 degrees. |
| 303 TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, 0.0f, 1.0f), | 305 TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, 0.0f, 1.0f), |
| 304 gfx::Vector3dF(1.0f, 0.0f, 0.0f)); | 306 gfx::Vector3dF(1.0f, 0.0f, 0.0f)); |
| 305 ASSERT_TRUE(IsMaximizeModeStarted()); | 307 ASSERT_TRUE(IsMaximizeModeStarted()); |
| 306 | 308 |
| 307 event_generator.PressKey(ui::VKEY_ESCAPE, 0); | 309 event_generator.PressKey(ui::VKEY_ESCAPE, 0); |
| 308 event_generator.ReleaseKey(ui::VKEY_ESCAPE, 0); | 310 event_generator.ReleaseKey(ui::VKEY_ESCAPE, 0); |
| 309 EXPECT_EQ(0u, counter.event_count()); | 311 EXPECT_EQ(0u, counter.event_count()); |
| 310 counter.reset(); | 312 counter.reset(); |
| 311 | 313 |
| 312 // Touch should not be blocked. | 314 // Touch should not be blocked. |
| 313 event_generator.PressTouch(); | 315 event_generator.PressTouch(); |
| 314 event_generator.ReleaseTouch(); | 316 event_generator.ReleaseTouch(); |
| 315 EXPECT_GT(counter.event_count(), 0u); | 317 EXPECT_GT(counter.event_count(), 0u); |
| 316 counter.reset(); | 318 counter.reset(); |
| 317 | 319 |
| 318 gfx::Vector3dF base; | 320 gfx::Vector3dF base; |
| 319 | 321 |
| 320 // Lid open 90 degrees. | 322 // Lid open 90 degrees. |
| 321 TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, 0.0f, 1.0f), | 323 TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, 0.0f, 1.0f), |
| 322 gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); | 324 gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); |
| 323 | 325 |
| 324 event_generator.PressKey(ui::VKEY_ESCAPE, 0); | 326 event_generator.PressKey(ui::VKEY_ESCAPE, 0); |
| 325 event_generator.ReleaseKey(ui::VKEY_ESCAPE, 0); | 327 event_generator.ReleaseKey(ui::VKEY_ESCAPE, 0); |
| 326 EXPECT_GT(counter.event_count(), 0u); | 328 EXPECT_GT(counter.event_count(), 0u); |
| 327 counter.reset(); | 329 counter.reset(); |
| 328 } | 330 } |
| 329 | 331 |
| 332 // Tests that maximize mode does not block Volume Up & Down events. |
| 333 TEST_F(MaximizeModeControllerTest, AllowsVolumeControl) { |
| 334 aura::Window* root = Shell::GetPrimaryRootWindow(); |
| 335 aura::test::EventGenerator event_generator(root, root); |
| 336 |
| 337 VolumeControlDelegateStub* volume_delegate = |
| 338 new VolumeControlDelegateStub(false); |
| 339 ash::Shell::GetInstance()->system_tray_delegate()->SetVolumeControlDelegate( |
| 340 scoped_ptr<VolumeControlDelegate>(volume_delegate).Pass()); |
| 341 |
| 342 // Trigger maximize mode by opening to 270 to begin the test in maximize mode. |
| 343 TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, 0.0f, -1.0f), |
| 344 gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); |
| 345 ASSERT_TRUE(IsMaximizeModeStarted()); |
| 346 |
| 347 // Verify volume down button event is not blocked |
| 348 ASSERT_EQ(0, volume_delegate->handle_volume_down_count()); |
| 349 event_generator.PressKey(ui::VKEY_VOLUME_DOWN, 0); |
| 350 event_generator.ReleaseKey(ui::VKEY_VOLUME_DOWN, 0); |
| 351 EXPECT_EQ(1, volume_delegate->handle_volume_down_count()); |
| 352 |
| 353 // Verify volume up event is not blocked |
| 354 ASSERT_EQ(0, volume_delegate->handle_volume_up_count()); |
| 355 event_generator.PressKey(ui::VKEY_VOLUME_UP, 0); |
| 356 event_generator.ReleaseKey(ui::VKEY_VOLUME_UP, 0); |
| 357 EXPECT_EQ(1, volume_delegate->handle_volume_up_count()); |
| 358 } |
| 359 |
| 330 TEST_F(MaximizeModeControllerTest, LaptopTest) { | 360 TEST_F(MaximizeModeControllerTest, LaptopTest) { |
| 331 // Feeds in sample accelerometer data and verifies that there are no | 361 // Feeds in sample accelerometer data and verifies that there are no |
| 332 // transitions into touchview / maximize mode while shaking the device around | 362 // transitions into touchview / maximize mode while shaking the device around |
| 333 // with the hinge at less than 180 degrees. | 363 // with the hinge at less than 180 degrees. |
| 334 ASSERT_TRUE(kAccelerometerLaptopModeTestDataLength % 6 == 0); | 364 ASSERT_TRUE(kAccelerometerLaptopModeTestDataLength % 6 == 0); |
| 335 for (size_t i = 0; i < kAccelerometerLaptopModeTestDataLength / 6; ++i) { | 365 for (size_t i = 0; i < kAccelerometerLaptopModeTestDataLength / 6; ++i) { |
| 336 gfx::Vector3dF base(kAccelerometerLaptopModeTestData[i * 6], | 366 gfx::Vector3dF base(kAccelerometerLaptopModeTestData[i * 6], |
| 337 kAccelerometerLaptopModeTestData[i * 6 + 1], | 367 kAccelerometerLaptopModeTestData[i * 6 + 1], |
| 338 kAccelerometerLaptopModeTestData[i * 6 + 2]); | 368 kAccelerometerLaptopModeTestData[i * 6 + 2]); |
| 339 gfx::Vector3dF lid(kAccelerometerLaptopModeTestData[i * 6 + 3], | 369 gfx::Vector3dF lid(kAccelerometerLaptopModeTestData[i * 6 + 3], |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 410 // Open 90 degrees. | 440 // Open 90 degrees. |
| 411 TriggerAccelerometerUpdate(base, gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); | 441 TriggerAccelerometerUpdate(base, gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); |
| 412 EXPECT_FALSE(IsMaximizeModeStarted()); | 442 EXPECT_FALSE(IsMaximizeModeStarted()); |
| 413 | 443 |
| 414 // Send an update that would not relaunch MaximizeMode. 90 degrees. | 444 // Send an update that would not relaunch MaximizeMode. 90 degrees. |
| 415 TriggerAccelerometerUpdate(base, gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); | 445 TriggerAccelerometerUpdate(base, gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); |
| 416 EXPECT_FALSE(maximize_mode_controller()->rotation_locked()); | 446 EXPECT_FALSE(maximize_mode_controller()->rotation_locked()); |
| 417 } | 447 } |
| 418 | 448 |
| 419 } // namespace ash | 449 } // namespace ash |
| OLD | NEW |