on xenial help sign in
Refactor to use signal for power and full events
commit7888692ca534e6583e3d251c005260a0e4d4053c authorMichał Sawicz <michal.sawicz@canonical.com> dateMon 16 Feb 2015, 22:29 (12 years ago) parent7accc0b
3 files changed+37−47
qml/Components/PhysicalKeysMapper.qml+12−18 qml/Shell.qml+2−2 tests/qmltests/Components/tst_PhysicalKeysMapper.qml+23−27
qml/Components/PhysicalKeysMapper.qml+12−18
@@ -40,7 +40,6 @@ Item {
4040 property bool screenshotPressed: d.volumeUpKeyPressed && d.volumeDownKeyPressed
4141 property bool volumeDownPressed: d.volumeDownKeyPressed && !d.volumeUpKeyPressed
4242 property bool volumeUpPressed: d.volumeUpKeyPressed && !d.volumeDownKeyPressed
43− property int powerKeyLongPressTimeMs: 2000 // Is writable for testing purposes
4443
4544 QtObject {
4645 id: d
@@ -49,24 +48,19 @@ Item {
4948 property bool volumeUpKeyPressed: false
5049 }
5150
52− // FIXME: event.isAutoRepeat is always false on Nexus 4.
53− // So we use powerKeyTimer.running to avoid the PowerOff key repeat
54− // https://launchpad.net/bugs/1349416
5551 Timer {
5652 id: powerKeyLongPressTimer
5753
58− interval: powerKeyLongPressTimeMs
59− repeat: false
60− triggeredOnStart: false
61− onTriggered: powerKeyLongPress();
54+ interval: 2000
55+ onTriggered: root.powerKeyLongPress();
6256 }
6357
6458
65− function onKeyPressed(key) {
59+ function onKeyPressed(event) {
6660 var eventAccepted = false;
6761
6862 /* Determine what key was pressed */
69− if (key == Qt.Key_PowerDown || key == Qt.Key_PowerOff) {
63+ if (event.key == Qt.Key_PowerDown || event.key == Qt.Key_PowerOff) {
7064
7165 // FIXME: We only consider power key presses if the screen is
7266 // on because of bugs 1410830/1409003. The theory is that when
@@ -77,31 +71,31 @@ Item {
7771 // initiate any dialogs when the screen is off.
7872 // This also prevents taking screenshots when the screen is off.
7973 if (Powerd.status === Powerd.On) {
80− if (!powerKeyLongPressTimer.running) {
74+ if (!event.isAutoRepeat) {
8175 powerKeyLongPressTimer.restart();
8276 }
8377 eventAccepted = true;
8478 }
85− } else if (key == Qt.Key_MediaTogglePlayPause || key == Qt.Key_MediaPlay) {
79+ } else if (event.key == Qt.Key_MediaTogglePlayPause || event.key == Qt.Key_MediaPlay) {
8680 eventAccepted = callManager.handleMediaKey(false);
87− } else if (key == Qt.Key_VolumeDown) {
81+ } else if (event.key == Qt.Key_VolumeDown) {
8882 d.volumeDownKeyPressed = true;
89− } else if (key == Qt.Key_VolumeUp) {
83+ } else if (event.key == Qt.Key_VolumeUp) {
9084 d.volumeUpKeyPressed = true;
9185 }
9286
9387 return eventAccepted;
9488 }
9589
96− function onKeyReleased(key) {
90+ function onKeyReleased(event) {
9791 var eventAccepted = false;
9892
99− if (key == Qt.Key_PowerDown || key == Qt.Key_PowerOff) {
93+ if (event.key == Qt.Key_PowerDown || event.key == Qt.Key_PowerOff) {
10094 powerKeyLongPressTimer.stop();
10195 eventAccepted = true;
102− } else if (key == Qt.Key_VolumeDown) {
96+ } else if (event.key == Qt.Key_VolumeDown) {
10397 d.volumeDownKeyPressed = false;
104− } else if (key == Qt.Key_VolumeUp) {
98+ } else if (event.key == Qt.Key_VolumeUp) {
10599 d.volumeUpKeyPressed = false;
106100 }
107101
qml/Shell.qml+2−2
@@ -184,11 +184,11 @@ Item {
184184
185185 WindowKeysFilter {
186186 Keys.onPressed: {
187− event.accepted = physicalKeysMapper.onKeyPressed(event.key);
187+ event.accepted = physicalKeysMapper.onKeyPressed(event);
188188 }
189189
190190 Keys.onReleased: {
191− event.accepted = physicalKeysMapper.onKeyReleased(event.key);
191+ event.accepted = physicalKeysMapper.onKeyReleased(event);
192192 }
193193 }
194194
tests/qmltests/Components/tst_PhysicalKeysMapper.qml+23−27
@@ -21,65 +21,61 @@ import "../../../qml/Components"
2121TestCase {
2222 name: "PhysicalKeysMapper"
2323
24− property int onPowerKeyLongPressCount: 0
25− property int initialLongPressTimerValue
26−
2724 PhysicalKeysMapper {
2825 id: physicalKeysMapper
29−
30− onPowerKeyLongPress: onPowerKeyLongPressCount += 1
3126 }
3227
33− function initTestCase() {
34− initialLongPressTimerValue = physicalKeysMapper.powerKeyLongPressTimeMs
28+ SignalSpy {
29+ id: powerSpy
30+ target: physicalKeysMapper
31+ signalName: "powerKeyLongPress"
3532 }
3633
3734 function cleanup() {
38− physicalKeysMapper.onKeyReleased(Qt.Key_PowerDown);
39− physicalKeysMapper.onKeyReleased(Qt.Key_PowerOff);
40− physicalKeysMapper.onKeyReleased(Qt.Key_VolumeDown);
41− physicalKeysMapper.onKeyReleased(Qt.Key_VolumeUp);
35+ physicalKeysMapper.onKeyReleased({ key: Qt.Key_PowerDown });
36+ physicalKeysMapper.onKeyReleased({ key: Qt.Key_VolumeDown });
37+ physicalKeysMapper.onKeyReleased({ key: Qt.Key_VolumeUp });
4238
43− onPowerKeyLongPressCount = 0;
44−
45− physicalKeysMapper.powerKeyLongPressTimeMs = initialLongPressTimerValue
39+ powerSpy.clear();
4640 }
4741
4842 function test_LongPressPowerButton() {
49− // Delays chosen are lowest reliable values
50− physicalKeysMapper.powerKeyLongPressTimeMs = 2
51− physicalKeysMapper.onKeyPressed(Qt.Key_PowerDown);
52− wait(15);
43+ physicalKeysMapper.onKeyPressed({ key: Qt.Key_PowerDown });
44+
45+ expectFailContinue("", "Power signal should not be emitted within a second");
46+ powerSpy.wait(1000);
47+ powerSpy.clear();
5348
54− compare(onPowerKeyLongPressCount, 1);
49+ physicalKeysMapper.onKeyPressed({ key: Qt.Key_PowerDown, isAutoRepeat: true });
50+ powerSpy.wait(1500);
5551 }
5652
5753 function test_ScreenshotButtons() {
5854 /* Behavior when VolumeUp is pressed 1st */
59− physicalKeysMapper.onKeyPressed(Qt.Key_VolumeUp);
60− physicalKeysMapper.onKeyPressed(Qt.Key_VolumeDown);
55+ physicalKeysMapper.onKeyPressed({ key: Qt.Key_VolumeUp });
56+ physicalKeysMapper.onKeyPressed({ key: Qt.Key_VolumeDown });
6157 compare(physicalKeysMapper.screenshotPressed, true);
6258 compare(physicalKeysMapper.volumeDownPressed, false);
6359
64− physicalKeysMapper.onKeyReleased(Qt.Key_VolumeUp);
65− physicalKeysMapper.onKeyReleased(Qt.Key_VolumeDown);
60+ physicalKeysMapper.onKeyReleased({ key: Qt.Key_VolumeUp });
61+ physicalKeysMapper.onKeyReleased({ key: Qt.Key_VolumeDown });
6662
6763 /* Behavior when VolumeDown is pressed 1st */
68− physicalKeysMapper.onKeyPressed(Qt.Key_VolumeDown);
64+ physicalKeysMapper.onKeyPressed({ key: Qt.Key_VolumeDown });
6965 compare(physicalKeysMapper.volumeDownPressed, true);
70− physicalKeysMapper.onKeyPressed(Qt.Key_VolumeUp);
66+ physicalKeysMapper.onKeyPressed({ key: Qt.Key_VolumeUp });
7167 compare(physicalKeysMapper.screenshotPressed, true);
7268 }
7369
7470 function test_VolumeDownButton() {
7571 compare(physicalKeysMapper.volumeDownPressed, false);
76− physicalKeysMapper.onKeyPressed(Qt.Key_VolumeDown);
72+ physicalKeysMapper.onKeyPressed({ key: Qt.Key_VolumeDown });
7773 compare(physicalKeysMapper.volumeDownPressed, true);
7874 }
7975
8076 function test_VolumeUpButton() {
8177 compare(physicalKeysMapper.volumeUpPressed, false);
82− physicalKeysMapper.onKeyPressed(Qt.Key_VolumeUp);
78+ physicalKeysMapper.onKeyPressed({ key: Qt.Key_VolumeUp });
8379 compare(physicalKeysMapper.volumeUpPressed, true);
8480 }
8581}