5
5
#include " chrome/browser/ui/webui/chromeos/login/oobe_display_chooser.h"
6
6
7
7
#include < memory>
8
+ #include < vector>
8
9
9
10
#include " ash/display/display_configuration_controller.h"
10
11
#include " ash/shell.h"
13
14
#include " testing/gtest/include/gtest/gtest.h"
14
15
#include " ui/display/display.h"
15
16
#include " ui/display/display_observer.h"
17
+ #include " ui/display/manager/chromeos/touchscreen_util.h"
16
18
#include " ui/display/manager/display_manager.h"
17
19
#include " ui/display/screen.h"
18
20
#include " ui/display/test/display_manager_test_api.h"
21
+ #include " ui/events/devices/device_data_manager.h"
22
+ #include " ui/events/devices/touchscreen_device.h"
19
23
20
24
namespace chromeos {
21
25
@@ -25,63 +29,93 @@ class OobeDisplayChooserTest : public ash::AshTestBase {
25
29
public:
26
30
OobeDisplayChooserTest () : ash::AshTestBase() {}
27
31
28
- void SetUp () override {
29
- ash::AshTestBase::SetUp ();
30
- display_manager_test_api_.reset (
31
- new display::test::DisplayManagerTestApi (display_manager ()));
32
+ int64_t GetPrimaryDisplay () {
33
+ return display::Screen::GetScreen ()->GetPrimaryDisplay ().id ();
32
34
}
33
35
34
- void EnableTouch (int64_t id) {
35
- display_manager_test_api_->SetTouchSupport (
36
- id, display::Display::TouchSupport::TOUCH_SUPPORT_AVAILABLE);
37
- }
36
+ void UpdateTouchscreenDevices (const ui::TouchscreenDevice& touchscreen) {
37
+ std::vector<ui::TouchscreenDevice> devices{touchscreen};
38
38
39
- void DisableTouch (int64_t id) {
40
- display_manager_test_api_->SetTouchSupport (
41
- id, display::Display::TouchSupport::TOUCH_SUPPORT_UNAVAILABLE);
42
- }
43
-
44
- int64_t GetPrimaryDisplay () {
45
- return display::Screen::GetScreen ()->GetPrimaryDisplay ().id ();
39
+ ui::DeviceHotplugEventObserver* manager =
40
+ ui::DeviceDataManager::GetInstance ();
41
+ manager->OnTouchscreenDevicesUpdated (devices);
46
42
}
47
43
48
44
private:
49
- std::unique_ptr<display::test::DisplayManagerTestApi>
50
- display_manager_test_api_;
51
-
52
45
DISALLOW_COPY_AND_ASSIGN (OobeDisplayChooserTest);
53
46
};
54
47
48
+ const uint16_t kWhitelistedId = 0x266e ;
49
+
55
50
} // namespace
56
51
57
52
TEST_F (OobeDisplayChooserTest, PreferTouchAsPrimary) {
58
- OobeDisplayChooser display_chooser;
53
+ // Setup 2 displays, second one is intended to be a touch display
54
+ std::vector<display::ManagedDisplayInfo> display_info;
55
+ display_info.push_back (
56
+ display::ManagedDisplayInfo::CreateFromSpecWithID (" 0+0-3000x2000" , 1 ));
57
+ display_info.push_back (
58
+ display::ManagedDisplayInfo::CreateFromSpecWithID (" 3000+0-800x600" , 2 ));
59
+ display_manager ()->OnNativeDisplaysChanged (display_info);
60
+ base::RunLoop ().RunUntilIdle ();
59
61
60
- UpdateDisplay (" 3000x2000,800x600" );
61
- display::DisplayIdList ids = display_manager ()->GetCurrentDisplayIdList ();
62
- DisableTouch (ids[0 ]);
63
- EnableTouch (ids[1 ]);
62
+ // Make sure the non-touch display is primary
63
+ ash::Shell::Get ()->window_tree_host_manager ()->SetPrimaryDisplayId (1 );
64
64
65
- EXPECT_EQ (ids[0 ], GetPrimaryDisplay ());
66
- display_chooser.TryToPlaceUiOnTouchDisplay ();
65
+ // Setup corresponding TouchscreenDevice object
66
+ ui::TouchscreenDevice touchscreen =
67
+ ui::TouchscreenDevice (1 , ui::InputDeviceType::INPUT_DEVICE_EXTERNAL,
68
+ " Touchscreen" , gfx::Size (800 , 600 ), 1 );
69
+ touchscreen.vendor_id = kWhitelistedId ;
70
+ UpdateTouchscreenDevices (touchscreen);
67
71
base::RunLoop ().RunUntilIdle ();
68
72
69
- EXPECT_EQ (ids[1 ], GetPrimaryDisplay ());
70
- }
73
+ // Associate touchscreen device with display
74
+ display_info[1 ].AddInputDevice (touchscreen.id );
75
+ display_info[1 ].set_touch_support (display::Display::TOUCH_SUPPORT_AVAILABLE);
76
+ display_manager ()->OnNativeDisplaysChanged (display_info);
77
+ base::RunLoop ().RunUntilIdle ();
71
78
72
- TEST_F (OobeDisplayChooserTest, AddingSecondTouchDisplayShouldbeNOP) {
73
79
OobeDisplayChooser display_chooser;
80
+ EXPECT_EQ (1 , GetPrimaryDisplay ());
81
+ display_chooser.TryToPlaceUiOnTouchDisplay ();
82
+ base::RunLoop ().RunUntilIdle ();
83
+ EXPECT_EQ (2 , GetPrimaryDisplay ());
84
+ }
74
85
75
- UpdateDisplay (" 3000x2000,800x600" );
76
- display::DisplayIdList ids = display_manager ()->GetCurrentDisplayIdList ();
77
- EnableTouch (ids[0 ]);
78
- EnableTouch (ids[1 ]);
86
+ TEST_F (OobeDisplayChooserTest, DontSwitchFromTouch) {
87
+ // Setup 2 displays, second one is intended to be a touch display
88
+ std::vector<display::ManagedDisplayInfo> display_info;
89
+ display_info.push_back (
90
+ display::ManagedDisplayInfo::CreateFromSpecWithID (" 0+0-3000x2000" , 1 ));
91
+ display_info.push_back (
92
+ display::ManagedDisplayInfo::CreateFromSpecWithID (" 3000+0-800x600" , 2 ));
93
+ display_info[0 ].set_touch_support (display::Display::TOUCH_SUPPORT_AVAILABLE);
94
+ display_manager ()->OnNativeDisplaysChanged (display_info);
95
+ base::RunLoop ().RunUntilIdle ();
79
96
80
- EXPECT_EQ (ids[0 ], GetPrimaryDisplay ());
81
- display_chooser.TryToPlaceUiOnTouchDisplay ();
97
+ // Make sure the non-touch display is primary
98
+ ash::Shell::Get ()->window_tree_host_manager ()->SetPrimaryDisplayId (1 );
99
+
100
+ // Setup corresponding TouchscreenDevice object
101
+ ui::TouchscreenDevice touchscreen =
102
+ ui::TouchscreenDevice (1 , ui::InputDeviceType::INPUT_DEVICE_EXTERNAL,
103
+ " Touchscreen" , gfx::Size (800 , 600 ), 1 );
104
+ touchscreen.vendor_id = kWhitelistedId ;
105
+ UpdateTouchscreenDevices (touchscreen);
106
+ base::RunLoop ().RunUntilIdle ();
107
+
108
+ // Associate touchscreen device with display
109
+ display_info[1 ].AddInputDevice (touchscreen.id );
110
+ display_info[1 ].set_touch_support (display::Display::TOUCH_SUPPORT_AVAILABLE);
111
+ display_manager ()->OnNativeDisplaysChanged (display_info);
82
112
base::RunLoop ().RunUntilIdle ();
83
113
84
- EXPECT_EQ (ids[0 ], GetPrimaryDisplay ());
114
+ OobeDisplayChooser display_chooser;
115
+ EXPECT_EQ (1 , GetPrimaryDisplay ());
116
+ display_chooser.TryToPlaceUiOnTouchDisplay ();
117
+ base::RunLoop ().RunUntilIdle ();
118
+ EXPECT_EQ (1 , GetPrimaryDisplay ());
85
119
}
86
120
87
121
} // namespace chromeos
0 commit comments