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" | |
11 #include "ash/test/ash_test_base.h" | 10 #include "ash/test/ash_test_base.h" |
12 #include "ash/test/display_manager_test_api.h" | 11 #include "ash/test/display_manager_test_api.h" |
13 #include "ash/test/test_volume_control_delegate.h" | |
14 #include "ui/aura/test/event_generator.h" | 12 #include "ui/aura/test/event_generator.h" |
15 #include "ui/events/event_handler.h" | 13 #include "ui/events/event_handler.h" |
16 #include "ui/gfx/vector3d_f.h" | 14 #include "ui/gfx/vector3d_f.h" |
17 | 15 |
18 namespace ash { | 16 namespace ash { |
19 | 17 |
20 namespace { | 18 namespace { |
21 | 19 |
22 const float kDegreesToRadians = 3.14159265f / 180.0f; | 20 const float kDegreesToRadians = 3.14159265f / 180.0f; |
23 | 21 |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 EXPECT_TRUE(IsMaximizeModeStarted()); | 141 EXPECT_TRUE(IsMaximizeModeStarted()); |
144 | 142 |
145 // Open 90 degrees. | 143 // Open 90 degrees. |
146 TriggerAccelerometerUpdate(base, gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); | 144 TriggerAccelerometerUpdate(base, gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); |
147 EXPECT_FALSE(IsMaximizeModeStarted()); | 145 EXPECT_FALSE(IsMaximizeModeStarted()); |
148 } | 146 } |
149 | 147 |
150 // Tests that when the hinge is nearly vertically aligned, the current state | 148 // Tests that when the hinge is nearly vertically aligned, the current state |
151 // persists as the computed angle is highly inaccurate in this orientation. | 149 // persists as the computed angle is highly inaccurate in this orientation. |
152 TEST_F(MaximizeModeControllerTest, HingeAligned) { | 150 TEST_F(MaximizeModeControllerTest, HingeAligned) { |
153 // Laptop in normal orientation lid open 90 degrees. | 151 // Laptop in normal orientation lid open 90 degrees. |
154 TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, 0.0f, 1.0f), | 152 TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, 0.0f, 1.0f), |
155 gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); | 153 gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); |
156 EXPECT_FALSE(IsMaximizeModeStarted()); | 154 EXPECT_FALSE(IsMaximizeModeStarted()); |
157 | 155 |
158 // Completely vertical. | 156 // Completely vertical. |
159 TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, -1.0f, 0.0f), | 157 TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, -1.0f, 0.0f), |
160 gfx::Vector3dF(0.0f, -1.0f, 0.0f)); | 158 gfx::Vector3dF(0.0f, -1.0f, 0.0f)); |
161 EXPECT_FALSE(IsMaximizeModeStarted()); | 159 EXPECT_FALSE(IsMaximizeModeStarted()); |
162 | 160 |
163 // Close to vertical but with hinge appearing to be open 270 degrees. | 161 // 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... |
304 // Open up 270 degrees. | 302 // Open up 270 degrees. |
305 TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, 0.0f, 1.0f), | 303 TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, 0.0f, 1.0f), |
306 gfx::Vector3dF(1.0f, 0.0f, 0.0f)); | 304 gfx::Vector3dF(1.0f, 0.0f, 0.0f)); |
307 ASSERT_TRUE(IsMaximizeModeStarted()); | 305 ASSERT_TRUE(IsMaximizeModeStarted()); |
308 | 306 |
309 event_generator.PressKey(ui::VKEY_ESCAPE, 0); | 307 event_generator.PressKey(ui::VKEY_ESCAPE, 0); |
310 event_generator.ReleaseKey(ui::VKEY_ESCAPE, 0); | 308 event_generator.ReleaseKey(ui::VKEY_ESCAPE, 0); |
311 EXPECT_EQ(0u, counter.event_count()); | 309 EXPECT_EQ(0u, counter.event_count()); |
312 counter.reset(); | 310 counter.reset(); |
313 | 311 |
314 // Touch should not be blocked. | 312 // Touch should not be blocked. |
315 event_generator.PressTouch(); | 313 event_generator.PressTouch(); |
316 event_generator.ReleaseTouch(); | 314 event_generator.ReleaseTouch(); |
317 EXPECT_GT(counter.event_count(), 0u); | 315 EXPECT_GT(counter.event_count(), 0u); |
318 counter.reset(); | 316 counter.reset(); |
319 | 317 |
320 gfx::Vector3dF base; | 318 gfx::Vector3dF base; |
321 | 319 |
322 // Lid open 90 degrees. | 320 // Lid open 90 degrees. |
323 TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, 0.0f, 1.0f), | 321 TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, 0.0f, 1.0f), |
324 gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); | 322 gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); |
325 | 323 |
326 event_generator.PressKey(ui::VKEY_ESCAPE, 0); | 324 event_generator.PressKey(ui::VKEY_ESCAPE, 0); |
327 event_generator.ReleaseKey(ui::VKEY_ESCAPE, 0); | 325 event_generator.ReleaseKey(ui::VKEY_ESCAPE, 0); |
328 EXPECT_GT(counter.event_count(), 0u); | 326 EXPECT_GT(counter.event_count(), 0u); |
329 counter.reset(); | 327 counter.reset(); |
330 } | 328 } |
331 | 329 |
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 TestVolumeControlDelegate* volume_delegate = | |
338 new TestVolumeControlDelegate(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 | |
360 TEST_F(MaximizeModeControllerTest, LaptopTest) { | 330 TEST_F(MaximizeModeControllerTest, LaptopTest) { |
361 // Feeds in sample accelerometer data and verifies that there are no | 331 // Feeds in sample accelerometer data and verifies that there are no |
362 // transitions into touchview / maximize mode while shaking the device around | 332 // transitions into touchview / maximize mode while shaking the device around |
363 // with the hinge at less than 180 degrees. | 333 // with the hinge at less than 180 degrees. |
364 ASSERT_TRUE(kAccelerometerLaptopModeTestDataLength % 6 == 0); | 334 ASSERT_TRUE(kAccelerometerLaptopModeTestDataLength % 6 == 0); |
365 for (size_t i = 0; i < kAccelerometerLaptopModeTestDataLength / 6; ++i) { | 335 for (size_t i = 0; i < kAccelerometerLaptopModeTestDataLength / 6; ++i) { |
366 gfx::Vector3dF base(kAccelerometerLaptopModeTestData[i * 6], | 336 gfx::Vector3dF base(kAccelerometerLaptopModeTestData[i * 6], |
367 kAccelerometerLaptopModeTestData[i * 6 + 1], | 337 kAccelerometerLaptopModeTestData[i * 6 + 1], |
368 kAccelerometerLaptopModeTestData[i * 6 + 2]); | 338 kAccelerometerLaptopModeTestData[i * 6 + 2]); |
369 gfx::Vector3dF lid(kAccelerometerLaptopModeTestData[i * 6 + 3], | 339 gfx::Vector3dF lid(kAccelerometerLaptopModeTestData[i * 6 + 3], |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
440 // Open 90 degrees. | 410 // Open 90 degrees. |
441 TriggerAccelerometerUpdate(base, gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); | 411 TriggerAccelerometerUpdate(base, gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); |
442 EXPECT_FALSE(IsMaximizeModeStarted()); | 412 EXPECT_FALSE(IsMaximizeModeStarted()); |
443 | 413 |
444 // Send an update that would not relaunch MaximizeMode. 90 degrees. | 414 // Send an update that would not relaunch MaximizeMode. 90 degrees. |
445 TriggerAccelerometerUpdate(base, gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); | 415 TriggerAccelerometerUpdate(base, gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); |
446 EXPECT_FALSE(maximize_mode_controller()->rotation_locked()); | 416 EXPECT_FALSE(maximize_mode_controller()->rotation_locked()); |
447 } | 417 } |
448 | 418 |
449 } // namespace ash | 419 } // namespace ash |
OLD | NEW |