appium-android-driver 5.13.0 → 5.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/build/index.js +43 -40
  3. package/build/lib/android-helpers.d.ts +136 -0
  4. package/build/lib/android-helpers.d.ts.map +1 -0
  5. package/build/lib/android-helpers.js +760 -679
  6. package/build/lib/android-helpers.js.map +1 -1
  7. package/build/lib/bootstrap.d.ts +29 -0
  8. package/build/lib/bootstrap.d.ts.map +1 -0
  9. package/build/lib/bootstrap.js +192 -179
  10. package/build/lib/bootstrap.js.map +1 -1
  11. package/build/lib/commands/actions.d.ts +209 -0
  12. package/build/lib/commands/actions.d.ts.map +1 -0
  13. package/build/lib/commands/actions.js +327 -265
  14. package/build/lib/commands/actions.js.map +1 -1
  15. package/build/lib/commands/alert.d.ts +10 -0
  16. package/build/lib/commands/alert.d.ts.map +1 -0
  17. package/build/lib/commands/alert.js +12 -18
  18. package/build/lib/commands/alert.js.map +1 -1
  19. package/build/lib/commands/app-management.d.ts +314 -0
  20. package/build/lib/commands/app-management.d.ts.map +1 -0
  21. package/build/lib/commands/app-management.js +278 -110
  22. package/build/lib/commands/app-management.js.map +1 -1
  23. package/build/lib/commands/context.d.ts +94 -0
  24. package/build/lib/commands/context.d.ts.map +1 -0
  25. package/build/lib/commands/context.js +412 -260
  26. package/build/lib/commands/context.js.map +1 -1
  27. package/build/lib/commands/coverage.d.ts +5 -0
  28. package/build/lib/commands/coverage.d.ts.map +1 -0
  29. package/build/lib/commands/coverage.js +14 -17
  30. package/build/lib/commands/coverage.js.map +1 -1
  31. package/build/lib/commands/element.d.ts +36 -0
  32. package/build/lib/commands/element.d.ts.map +1 -0
  33. package/build/lib/commands/element.js +97 -127
  34. package/build/lib/commands/element.js.map +1 -1
  35. package/build/lib/commands/emu-console.d.ts +49 -0
  36. package/build/lib/commands/emu-console.d.ts.map +1 -0
  37. package/build/lib/commands/emu-console.js +36 -25
  38. package/build/lib/commands/emu-console.js.map +1 -1
  39. package/build/lib/commands/execute.d.ts +6 -0
  40. package/build/lib/commands/execute.d.ts.map +1 -0
  41. package/build/lib/commands/execute.js +68 -69
  42. package/build/lib/commands/execute.js.map +1 -1
  43. package/build/lib/commands/file-actions.d.ts +129 -0
  44. package/build/lib/commands/file-actions.d.ts.map +1 -0
  45. package/build/lib/commands/file-actions.js +321 -178
  46. package/build/lib/commands/file-actions.js.map +1 -1
  47. package/build/lib/commands/find.d.ts +13 -0
  48. package/build/lib/commands/find.d.ts.map +1 -0
  49. package/build/lib/commands/find.js +69 -51
  50. package/build/lib/commands/find.js.map +1 -1
  51. package/build/lib/commands/general.d.ts +133 -0
  52. package/build/lib/commands/general.d.ts.map +1 -0
  53. package/build/lib/commands/general.js +275 -216
  54. package/build/lib/commands/general.js.map +1 -1
  55. package/build/lib/commands/ime.d.ts +11 -0
  56. package/build/lib/commands/ime.d.ts.map +1 -0
  57. package/build/lib/commands/ime.js +27 -33
  58. package/build/lib/commands/ime.js.map +1 -1
  59. package/build/lib/commands/index.d.ts +3 -0
  60. package/build/lib/commands/index.d.ts.map +1 -0
  61. package/build/lib/commands/index.js +32 -35
  62. package/build/lib/commands/index.js.map +1 -1
  63. package/build/lib/commands/intent.d.ts +418 -0
  64. package/build/lib/commands/intent.d.ts.map +1 -0
  65. package/build/lib/commands/intent.js +281 -151
  66. package/build/lib/commands/intent.js.map +1 -1
  67. package/build/lib/commands/keyboard.d.ts +6 -0
  68. package/build/lib/commands/keyboard.d.ts.map +1 -0
  69. package/build/lib/commands/keyboard.js +6 -14
  70. package/build/lib/commands/keyboard.js.map +1 -1
  71. package/build/lib/commands/log.d.ts +45 -0
  72. package/build/lib/commands/log.d.ts.map +1 -0
  73. package/build/lib/commands/log.js +117 -103
  74. package/build/lib/commands/log.js.map +1 -1
  75. package/build/lib/commands/media-projection.d.ts +144 -0
  76. package/build/lib/commands/media-projection.d.ts.map +1 -0
  77. package/build/lib/commands/media-projection.js +228 -171
  78. package/build/lib/commands/media-projection.js.map +1 -1
  79. package/build/lib/commands/network.d.ts +139 -0
  80. package/build/lib/commands/network.d.ts.map +1 -0
  81. package/build/lib/commands/network.js +249 -181
  82. package/build/lib/commands/network.js.map +1 -1
  83. package/build/lib/commands/performance.d.ts +101 -0
  84. package/build/lib/commands/performance.d.ts.map +1 -0
  85. package/build/lib/commands/performance.js +390 -236
  86. package/build/lib/commands/performance.js.map +1 -1
  87. package/build/lib/commands/permissions.d.ts +93 -0
  88. package/build/lib/commands/permissions.d.ts.map +1 -0
  89. package/build/lib/commands/permissions.js +133 -93
  90. package/build/lib/commands/permissions.js.map +1 -1
  91. package/build/lib/commands/recordscreen.d.ts +194 -0
  92. package/build/lib/commands/recordscreen.d.ts.map +1 -0
  93. package/build/lib/commands/recordscreen.js +293 -224
  94. package/build/lib/commands/recordscreen.js.map +1 -1
  95. package/build/lib/commands/shell.d.ts +8 -0
  96. package/build/lib/commands/shell.d.ts.map +1 -0
  97. package/build/lib/commands/shell.js +38 -43
  98. package/build/lib/commands/shell.js.map +1 -1
  99. package/build/lib/commands/streamscreen.d.ts +104 -0
  100. package/build/lib/commands/streamscreen.d.ts.map +1 -0
  101. package/build/lib/commands/streamscreen.js +364 -305
  102. package/build/lib/commands/streamscreen.js.map +1 -1
  103. package/build/lib/commands/system-bars.d.ts +100 -0
  104. package/build/lib/commands/system-bars.d.ts.map +1 -0
  105. package/build/lib/commands/system-bars.js +148 -90
  106. package/build/lib/commands/system-bars.js.map +1 -1
  107. package/build/lib/commands/touch.d.ts +30 -0
  108. package/build/lib/commands/touch.d.ts.map +1 -0
  109. package/build/lib/commands/touch.js +311 -287
  110. package/build/lib/commands/touch.js.map +1 -1
  111. package/build/lib/desired-caps.d.ts +353 -0
  112. package/build/lib/desired-caps.d.ts.map +1 -0
  113. package/build/lib/desired-caps.js +291 -292
  114. package/build/lib/desired-caps.js.map +1 -1
  115. package/build/lib/driver.d.ts +430 -0
  116. package/build/lib/driver.d.ts.map +1 -0
  117. package/build/lib/driver.js +449 -384
  118. package/build/lib/driver.js.map +1 -1
  119. package/build/lib/logger.d.ts +3 -0
  120. package/build/lib/logger.d.ts.map +1 -0
  121. package/build/lib/logger.js +5 -11
  122. package/build/lib/logger.js.map +1 -1
  123. package/build/lib/method-map.d.ts +389 -0
  124. package/build/lib/method-map.d.ts.map +1 -0
  125. package/build/lib/method-map.js +220 -394
  126. package/build/lib/method-map.js.map +1 -1
  127. package/build/lib/stubs.d.ts +8 -0
  128. package/build/lib/stubs.d.ts.map +1 -0
  129. package/build/lib/stubs.js +5 -0
  130. package/build/lib/stubs.js.map +1 -0
  131. package/build/lib/uiautomator.d.ts +24 -0
  132. package/build/lib/uiautomator.d.ts.map +1 -0
  133. package/build/lib/uiautomator.js +86 -82
  134. package/build/lib/uiautomator.js.map +1 -1
  135. package/build/lib/unlock-helpers.d.ts +38 -0
  136. package/build/lib/unlock-helpers.d.ts.map +1 -0
  137. package/build/lib/unlock-helpers.js +228 -204
  138. package/build/lib/unlock-helpers.js.map +1 -1
  139. package/build/lib/utils.d.ts +11 -0
  140. package/build/lib/utils.d.ts.map +1 -0
  141. package/build/lib/utils.js +23 -18
  142. package/build/lib/utils.js.map +1 -1
  143. package/build/lib/webview-helpers.d.ts +223 -0
  144. package/build/lib/webview-helpers.d.ts.map +1 -0
  145. package/build/lib/webview-helpers.js +476 -298
  146. package/build/lib/webview-helpers.js.map +1 -1
  147. package/index.js +3 -1
  148. package/lib/android-helpers.js +2 -1
  149. package/lib/stubs.ts +8 -0
  150. package/lib/unlock-helpers.js +2 -2
  151. package/package.json +23 -14
@@ -1,15 +1,13 @@
1
1
  "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.helpers = exports.default = exports.PIN_UNLOCK_KEY_EVENT = exports.PIN_UNLOCK = exports.PATTERN_UNLOCK = exports.PASSWORD_UNLOCK = exports.FINGERPRINT_UNLOCK = void 0;
8
- require("source-map-support/register");
9
- var _logger = _interopRequireDefault(require("./logger"));
10
- var _asyncbox = require("asyncbox");
11
- var _lodash = _interopRequireDefault(require("lodash"));
12
- var _support = require("@appium/support");
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FINGERPRINT_UNLOCK = exports.PATTERN_UNLOCK = exports.PASSWORD_UNLOCK = exports.PIN_UNLOCK_KEY_EVENT = exports.PIN_UNLOCK = exports.helpers = void 0;
7
+ const logger_1 = __importDefault(require("./logger"));
8
+ const asyncbox_1 = require("asyncbox");
9
+ const lodash_1 = __importDefault(require("lodash"));
10
+ const support_1 = require("@appium/support");
13
11
  const PIN_UNLOCK = 'pin';
14
12
  exports.PIN_UNLOCK = PIN_UNLOCK;
15
13
  const PIN_UNLOCK_KEY_EVENT = 'pinWithKeyEvent';
@@ -20,223 +18,249 @@ const PATTERN_UNLOCK = 'pattern';
20
18
  exports.PATTERN_UNLOCK = PATTERN_UNLOCK;
21
19
  const FINGERPRINT_UNLOCK = 'fingerprint';
22
20
  exports.FINGERPRINT_UNLOCK = FINGERPRINT_UNLOCK;
23
- const UNLOCK_TYPES = [PIN_UNLOCK, PIN_UNLOCK_KEY_EVENT, PASSWORD_UNLOCK, PATTERN_UNLOCK, FINGERPRINT_UNLOCK];
21
+ const UNLOCK_TYPES = [
22
+ PIN_UNLOCK, PIN_UNLOCK_KEY_EVENT, PASSWORD_UNLOCK,
23
+ PATTERN_UNLOCK, FINGERPRINT_UNLOCK
24
+ ];
24
25
  const KEYCODE_NUMPAD_ENTER = 66;
25
26
  const UNLOCK_WAIT_TIME = 100;
26
27
  const INPUT_KEYS_WAIT_TIME = 100;
27
28
  const NUMBER_ZERO_KEYCODE = 7;
28
- const helpers = {};
29
- exports.helpers = helpers;
30
- helpers.validateUnlockCapabilities = function validateUnlockCapabilities(caps = {}) {
31
- const {
32
- unlockKey,
33
- unlockType
34
- } = caps;
35
- if (_lodash.default.isNil(unlockKey) || unlockKey === '') {
36
- throw new Error('A non-empty unlock key value must be provided');
37
- }
38
- if ([PIN_UNLOCK, PIN_UNLOCK_KEY_EVENT, FINGERPRINT_UNLOCK].includes(unlockType)) {
39
- if (!/^[0-9]+$/.test(_lodash.default.trim(unlockKey))) {
40
- throw new Error(`Unlock key value '${unlockKey}' must only consist of digits`);
29
+ exports.helpers = {};
30
+ exports.helpers.validateUnlockCapabilities = function validateUnlockCapabilities(caps = {}) {
31
+ const { unlockKey, unlockType, } = caps;
32
+ if (lodash_1.default.isNil(unlockKey) || unlockKey === '') {
33
+ throw new Error('A non-empty unlock key value must be provided');
41
34
  }
42
- } else if (unlockType === PATTERN_UNLOCK) {
43
- if (!/^[1-9]{2,9}$/.test(_lodash.default.trim(unlockKey))) {
44
- throw new Error(`Unlock key value '${unlockKey}' must only include from two to nine digits in range 1..9`);
35
+ if ([PIN_UNLOCK, PIN_UNLOCK_KEY_EVENT, FINGERPRINT_UNLOCK].includes(unlockType)) {
36
+ if (!/^[0-9]+$/.test(lodash_1.default.trim(unlockKey))) {
37
+ throw new Error(`Unlock key value '${unlockKey}' must only consist of digits`);
38
+ }
45
39
  }
46
- if (/([1-9]).*?\1/.test(_lodash.default.trim(unlockKey))) {
47
- throw new Error(`Unlock key value '${unlockKey}' must define a valid pattern where repeats are not allowed`);
40
+ else if (unlockType === PATTERN_UNLOCK) {
41
+ if (!/^[1-9]{2,9}$/.test(lodash_1.default.trim(unlockKey))) {
42
+ throw new Error(`Unlock key value '${unlockKey}' must only include from two to nine digits in range 1..9`);
43
+ }
44
+ if (/([1-9]).*?\1/.test(lodash_1.default.trim(unlockKey))) {
45
+ throw new Error(`Unlock key value '${unlockKey}' must define a valid pattern where repeats are not allowed`);
46
+ }
48
47
  }
49
- } else if (unlockType === PASSWORD_UNLOCK) {
50
- if (!/.{4,}/g.test(unlockKey)) {
51
- throw new Error(`The minimum allowed length of unlock key value '${unlockKey}' is 4 characters`);
48
+ else if (unlockType === PASSWORD_UNLOCK) {
49
+ // Dont trim password key, you can use blank spaces in your android password
50
+ // ¯\_()_/¯
51
+ if (!/.{4,}/g.test(unlockKey)) {
52
+ throw new Error(`The minimum allowed length of unlock key value '${unlockKey}' is 4 characters`);
53
+ }
52
54
  }
53
- } else {
54
- throw new Error(`Invalid unlock type '${unlockType}'. ` + `Only the following unlock types are supported: ${UNLOCK_TYPES}`);
55
- }
56
- return caps;
55
+ else {
56
+ throw new Error(`Invalid unlock type '${unlockType}'. ` +
57
+ `Only the following unlock types are supported: ${UNLOCK_TYPES}`);
58
+ }
59
+ return caps;
57
60
  };
58
- helpers.fastUnlock = async function fastUnlock(adb, opts = {}) {
59
- const {
60
- credential,
61
- credentialType
62
- } = opts;
63
- _logger.default.info(`Unlocking the device via ADB using ${credentialType} credential '${credential}'`);
64
- const wasLockEnabled = await adb.isLockEnabled();
65
- if (wasLockEnabled) {
66
- await adb.clearLockCredential(credential);
67
- await adb.cycleWakeUp();
68
- } else {
69
- _logger.default.info('No active lock has been detected. Proceeding to the keyguard dismissal');
70
- }
71
- try {
72
- await adb.dismissKeyguard();
73
- } finally {
61
+ exports.helpers.fastUnlock = async function fastUnlock(adb, opts = {}) {
62
+ const { credential, credentialType, } = opts;
63
+ logger_1.default.info(`Unlocking the device via ADB using ${credentialType} credential '${credential}'`);
64
+ const wasLockEnabled = await adb.isLockEnabled();
74
65
  if (wasLockEnabled) {
75
- await adb.setLockCredential(credentialType, credential);
66
+ await adb.clearLockCredential(credential);
67
+ // not sure why, but the device's screen still remains locked
68
+ // if a preliminary wake up cycle has not been performed
69
+ await adb.cycleWakeUp();
70
+ }
71
+ else {
72
+ logger_1.default.info('No active lock has been detected. Proceeding to the keyguard dismissal');
73
+ }
74
+ try {
75
+ await adb.dismissKeyguard();
76
+ }
77
+ finally {
78
+ if (wasLockEnabled) {
79
+ await adb.setLockCredential(credentialType, credential);
80
+ }
76
81
  }
77
- }
78
- };
79
- helpers.encodePassword = function encodePassword(key) {
80
- return `${key}`.replace(/\s/ig, '%s');
81
82
  };
82
- helpers.stringKeyToArr = function stringKeyToArr(key) {
83
- return `${key}`.trim().replace(/\s+/g, '').split(/\s*/);
83
+ exports.helpers.encodePassword = function encodePassword(key) {
84
+ return `${key}`.replace(/\s/ig, '%s');
84
85
  };
85
- helpers.fingerprintUnlock = async function fingerprintUnlock(adb, driver, capabilities) {
86
- if ((await adb.getApiLevel()) < 23) {
87
- throw new Error('Fingerprint unlock only works for Android 6+ emulators');
88
- }
89
- await adb.fingerprint(capabilities.unlockKey);
90
- await (0, _asyncbox.sleep)(UNLOCK_WAIT_TIME);
86
+ exports.helpers.stringKeyToArr = function stringKeyToArr(key) {
87
+ return `${key}`.trim().replace(/\s+/g, '').split(/\s*/);
91
88
  };
92
- helpers.pinUnlock = async function pinUnlock(adb, driver, capabilities) {
93
- _logger.default.info(`Trying to unlock device using pin ${capabilities.unlockKey}`);
94
- await adb.dismissKeyguard();
95
- const keys = helpers.stringKeyToArr(capabilities.unlockKey);
96
- if ((await adb.getApiLevel()) >= 21) {
97
- const els = await driver.findElOrEls('id', 'com.android.systemui:id/digit_text', true);
98
- if (_lodash.default.isEmpty(els)) {
99
- return await helpers.pinUnlockWithKeyEvent(adb, driver, capabilities);
89
+ exports.helpers.fingerprintUnlock = async function fingerprintUnlock(adb, driver, capabilities) {
90
+ if (await adb.getApiLevel() < 23) {
91
+ throw new Error('Fingerprint unlock only works for Android 6+ emulators');
100
92
  }
101
- const pins = {};
102
- for (const el of els) {
103
- const text = await driver.getAttribute('text', _support.util.unwrapElement(el));
104
- pins[text] = el;
105
- }
106
- for (const pin of keys) {
107
- const el = pins[pin];
108
- await driver.click(_support.util.unwrapElement(el));
93
+ await adb.fingerprint(capabilities.unlockKey);
94
+ await (0, asyncbox_1.sleep)(UNLOCK_WAIT_TIME);
95
+ };
96
+ exports.helpers.pinUnlock = async function pinUnlock(adb, driver, capabilities) {
97
+ logger_1.default.info(`Trying to unlock device using pin ${capabilities.unlockKey}`);
98
+ await adb.dismissKeyguard();
99
+ const keys = exports.helpers.stringKeyToArr(capabilities.unlockKey);
100
+ if (await adb.getApiLevel() >= 21) {
101
+ const els = await driver.findElOrEls('id', 'com.android.systemui:id/digit_text', true);
102
+ if (lodash_1.default.isEmpty(els)) {
103
+ // fallback to pin with key event
104
+ return await exports.helpers.pinUnlockWithKeyEvent(adb, driver, capabilities);
105
+ }
106
+ const pins = {};
107
+ for (const el of els) {
108
+ const text = await driver.getAttribute('text', support_1.util.unwrapElement(el));
109
+ pins[text] = el;
110
+ }
111
+ for (const pin of keys) {
112
+ const el = pins[pin];
113
+ await driver.click(support_1.util.unwrapElement(el));
114
+ }
109
115
  }
110
- } else {
111
- for (const pin of keys) {
112
- const el = await driver.findElOrEls('id', `com.android.keyguard:id/key${pin}`, false);
113
- if (el === null) {
114
- return await helpers.pinUnlockWithKeyEvent(adb, driver, capabilities);
115
- }
116
- await driver.click(_support.util.unwrapElement(el));
116
+ else {
117
+ for (const pin of keys) {
118
+ const el = await driver.findElOrEls('id', `com.android.keyguard:id/key${pin}`, false);
119
+ if (el === null) {
120
+ // fallback to pin with key event
121
+ return await exports.helpers.pinUnlockWithKeyEvent(adb, driver, capabilities);
122
+ }
123
+ await driver.click(support_1.util.unwrapElement(el));
124
+ }
117
125
  }
118
- }
119
- await waitForUnlock(adb);
126
+ await waitForUnlock(adb);
120
127
  };
128
+ /**
129
+ * Wait for the display to be unlocked.
130
+ * Some devices automatically accept typed 'pin' and 'password' code
131
+ * without pressing the Enter key. But some devices need it.
132
+ * This method waits a few seconds first for such automatic acceptance case.
133
+ * If the device is still locked, then this method will try to send
134
+ * the enter key code.
135
+ *
136
+ * @param {ADB} adb The instance of ADB
137
+ */
121
138
  async function waitForUnlock(adb) {
122
- await (0, _asyncbox.sleep)(UNLOCK_WAIT_TIME);
123
- if (!(await adb.isScreenLocked())) {
124
- return;
125
- }
126
- await adb.keyevent(KEYCODE_NUMPAD_ENTER);
127
- await (0, _asyncbox.sleep)(UNLOCK_WAIT_TIME);
139
+ await (0, asyncbox_1.sleep)(UNLOCK_WAIT_TIME);
140
+ if (!await adb.isScreenLocked()) {
141
+ return;
142
+ }
143
+ await adb.keyevent(KEYCODE_NUMPAD_ENTER);
144
+ await (0, asyncbox_1.sleep)(UNLOCK_WAIT_TIME);
128
145
  }
129
- helpers.pinUnlockWithKeyEvent = async function pinUnlockWithKeyEvent(adb, driver, capabilities) {
130
- _logger.default.info(`Trying to unlock device using pin with keycode ${capabilities.unlockKey}`);
131
- await adb.dismissKeyguard();
132
- const keys = helpers.stringKeyToArr(capabilities.unlockKey);
133
- for (const pin of keys) {
134
- await adb.shell(['input', 'keyevent', parseInt(pin, 10) + NUMBER_ZERO_KEYCODE]);
135
- }
136
- await waitForUnlock(adb, driver);
146
+ exports.helpers.pinUnlockWithKeyEvent = async function pinUnlockWithKeyEvent(adb, driver, capabilities) {
147
+ logger_1.default.info(`Trying to unlock device using pin with keycode ${capabilities.unlockKey}`);
148
+ await adb.dismissKeyguard();
149
+ const keys = exports.helpers.stringKeyToArr(capabilities.unlockKey);
150
+ // Some device does not have system key ids like 'com.android.keyguard:id/key'
151
+ // Then, sending keyevents are more reliable to unlock the screen.
152
+ for (const pin of keys) {
153
+ // 'pin' is number (0-9) in string.
154
+ // Number '0' is keycode '7'. number '9' is keycode '16'.
155
+ await adb.shell(['input', 'keyevent', parseInt(pin, 10) + NUMBER_ZERO_KEYCODE]);
156
+ }
157
+ await waitForUnlock(adb, driver);
137
158
  };
138
- helpers.passwordUnlock = async function passwordUnlock(adb, driver, capabilities) {
139
- const {
140
- unlockKey
141
- } = capabilities;
142
- _logger.default.info(`Trying to unlock device using password ${unlockKey}`);
143
- await adb.dismissKeyguard();
144
- const key = helpers.encodePassword(unlockKey);
145
- await adb.shell(['input', 'text', key]);
146
- await (0, _asyncbox.sleep)(INPUT_KEYS_WAIT_TIME);
147
- await adb.shell(['input', 'keyevent', KEYCODE_NUMPAD_ENTER]);
148
- await waitForUnlock(adb, driver);
159
+ exports.helpers.passwordUnlock = async function passwordUnlock(adb, driver, capabilities) {
160
+ const { unlockKey } = capabilities;
161
+ logger_1.default.info(`Trying to unlock device using password ${unlockKey}`);
162
+ await adb.dismissKeyguard();
163
+ // Replace blank spaces with %s
164
+ const key = exports.helpers.encodePassword(unlockKey);
165
+ // Why adb ? It was less flaky
166
+ await adb.shell(['input', 'text', key]);
167
+ // Why sleeps ? Avoid some flakyness waiting for the input to receive the keys
168
+ await (0, asyncbox_1.sleep)(INPUT_KEYS_WAIT_TIME);
169
+ await adb.shell(['input', 'keyevent', KEYCODE_NUMPAD_ENTER]);
170
+ // Waits a bit for the device to be unlocked
171
+ await waitForUnlock(adb, driver);
149
172
  };
150
- helpers.getPatternKeyPosition = function getPatternKeyPosition(key, initPos, piece) {
151
- const cols = 3;
152
- const pins = 9;
153
- const xPos = (key, x, piece) => Math.round(x + (key % cols || cols) * piece - piece / 2);
154
- const yPos = (key, y, piece) => Math.round(y + (Math.ceil((key % pins || pins) / cols) * piece - piece / 2));
155
- return {
156
- x: xPos(key, initPos.x, piece),
157
- y: yPos(key, initPos.y, piece)
158
- };
173
+ exports.helpers.getPatternKeyPosition = function getPatternKeyPosition(key, initPos, piece) {
174
+ /*
175
+ How the math works:
176
+ We have 9 buttons divided in 3 columns and 3 rows inside the lockPatternView,
177
+ every button has a position on the screen corresponding to the lockPatternView since
178
+ it is the parent view right at the middle of each column or row.
179
+ */
180
+ const cols = 3;
181
+ const pins = 9;
182
+ const xPos = (key, x, piece) => Math.round(x + ((key % cols) || cols) * piece - piece / 2);
183
+ const yPos = (key, y, piece) => Math.round(y + (Math.ceil(((key % pins) || pins) / cols) * piece - piece / 2));
184
+ return {
185
+ x: xPos(key, initPos.x, piece),
186
+ y: yPos(key, initPos.y, piece)
187
+ };
159
188
  };
160
- helpers.getPatternActions = function getPatternActions(keys, initPos, piece) {
161
- const actions = [];
162
- let lastPos;
163
- for (let key of keys) {
164
- const keyPos = helpers.getPatternKeyPosition(key, initPos, piece);
165
- if (key === keys[0]) {
166
- actions.push({
167
- action: 'press',
168
- options: {
169
- element: null,
170
- x: keyPos.x,
171
- y: keyPos.y
189
+ exports.helpers.getPatternActions = function getPatternActions(keys, initPos, piece) {
190
+ const actions = [];
191
+ let lastPos;
192
+ for (let key of keys) {
193
+ const keyPos = exports.helpers.getPatternKeyPosition(key, initPos, piece);
194
+ if (key === keys[0]) {
195
+ actions.push({ action: 'press', options: { element: null, x: keyPos.x, y: keyPos.y } });
196
+ lastPos = keyPos;
197
+ continue;
172
198
  }
173
- });
174
- lastPos = keyPos;
175
- continue;
176
- }
177
- const moveTo = {
178
- x: 0,
179
- y: 0
180
- };
181
- const diffX = keyPos.x - lastPos.x;
182
- if (diffX > 0) {
183
- moveTo.x = piece;
184
- if (Math.abs(diffX) > piece) {
185
- moveTo.x += piece;
186
- }
187
- } else if (diffX < 0) {
188
- moveTo.x = -1 * piece;
189
- if (Math.abs(diffX) > piece) {
190
- moveTo.x -= piece;
191
- }
192
- }
193
- const diffY = keyPos.y - lastPos.y;
194
- if (diffY > 0) {
195
- moveTo.y = piece;
196
- if (Math.abs(diffY) > piece) {
197
- moveTo.y += piece;
198
- }
199
- } else if (diffY < 0) {
200
- moveTo.y = -1 * piece;
201
- if (Math.abs(diffY) > piece) {
202
- moveTo.y -= piece;
203
- }
199
+ const moveTo = { x: 0, y: 0 };
200
+ const diffX = keyPos.x - lastPos.x;
201
+ if (diffX > 0) {
202
+ moveTo.x = piece;
203
+ if (Math.abs(diffX) > piece) {
204
+ moveTo.x += piece;
205
+ }
206
+ }
207
+ else if (diffX < 0) {
208
+ moveTo.x = -1 * piece;
209
+ if (Math.abs(diffX) > piece) {
210
+ moveTo.x -= piece;
211
+ }
212
+ }
213
+ const diffY = keyPos.y - lastPos.y;
214
+ if (diffY > 0) {
215
+ moveTo.y = piece;
216
+ if (Math.abs(diffY) > piece) {
217
+ moveTo.y += piece;
218
+ }
219
+ }
220
+ else if (diffY < 0) {
221
+ moveTo.y = -1 * piece;
222
+ if (Math.abs(diffY) > piece) {
223
+ moveTo.y -= piece;
224
+ }
225
+ }
226
+ actions.push({
227
+ action: 'moveTo',
228
+ options: { element: null, x: moveTo.x + lastPos.x, y: moveTo.y + lastPos.y }
229
+ });
230
+ lastPos = keyPos;
204
231
  }
205
- actions.push({
206
- action: 'moveTo',
207
- options: {
208
- element: null,
209
- x: moveTo.x + lastPos.x,
210
- y: moveTo.y + lastPos.y
211
- }
212
- });
213
- lastPos = keyPos;
214
- }
215
- actions.push({
216
- action: 'release'
217
- });
218
- return actions;
232
+ actions.push({ action: 'release' });
233
+ return actions;
219
234
  };
220
- helpers.patternUnlock = async function patternUnlock(adb, driver, capabilities) {
221
- const {
222
- unlockKey
223
- } = capabilities;
224
- _logger.default.info(`Trying to unlock device using pattern ${unlockKey}`);
225
- await adb.dismissKeyguard();
226
- const keys = helpers.stringKeyToArr(unlockKey);
227
- const apiLevel = await adb.getApiLevel();
228
- const el = await driver.findElOrEls('id', `com.android.${apiLevel >= 21 ? 'systemui' : 'keyguard'}:id/lockPatternView`, false);
229
- const initPos = await driver.getLocation(_support.util.unwrapElement(el));
230
- const size = await driver.getSize(_support.util.unwrapElement(el));
231
- const actions = helpers.getPatternActions(keys, initPos, size.width / 3);
232
- await driver.performTouch(actions);
233
- await (0, _asyncbox.sleep)(UNLOCK_WAIT_TIME);
235
+ exports.helpers.patternUnlock = async function patternUnlock(adb, driver, capabilities) {
236
+ const { unlockKey } = capabilities;
237
+ logger_1.default.info(`Trying to unlock device using pattern ${unlockKey}`);
238
+ await adb.dismissKeyguard();
239
+ const keys = exports.helpers.stringKeyToArr(unlockKey);
240
+ /* We set the device pattern buttons as number of a regular phone
241
+ * | • | | 1 2 3 |
242
+ * | | --> | 4 5 6 |
243
+ * | | | 7 8 9 |
244
+
245
+ The pattern view buttons are not seeing by the uiautomator since they are
246
+ included inside a FrameLayout, so we are going to try clicking on the buttons
247
+ using the parent view bounds and math.
248
+ */
249
+ const apiLevel = await adb.getApiLevel();
250
+ const el = await driver.findElOrEls('id', `com.android.${apiLevel >= 21 ? 'systemui' : 'keyguard'}:id/lockPatternView`, false);
251
+ const initPos = await driver.getLocation(support_1.util.unwrapElement(el));
252
+ const size = await driver.getSize(support_1.util.unwrapElement(el));
253
+ // Get actions to perform
254
+ const actions = exports.helpers.getPatternActions(keys, initPos, size.width / 3);
255
+ // Perform gesture
256
+ await driver.performTouch(actions);
257
+ // Waits a bit for the device to be unlocked
258
+ await (0, asyncbox_1.sleep)(UNLOCK_WAIT_TIME);
234
259
  };
235
- helpers.PIN_UNLOCK = PIN_UNLOCK;
236
- helpers.PIN_UNLOCK_KEY_EVENT = PIN_UNLOCK_KEY_EVENT;
237
- helpers.PASSWORD_UNLOCK = PASSWORD_UNLOCK;
238
- helpers.PATTERN_UNLOCK = PATTERN_UNLOCK;
239
- helpers.FINGERPRINT_UNLOCK = FINGERPRINT_UNLOCK;
240
- var _default = helpers;
241
- exports.default = _default;
242
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfYXN5bmNib3giLCJfbG9kYXNoIiwiX3N1cHBvcnQiLCJQSU5fVU5MT0NLIiwiZXhwb3J0cyIsIlBJTl9VTkxPQ0tfS0VZX0VWRU5UIiwiUEFTU1dPUkRfVU5MT0NLIiwiUEFUVEVSTl9VTkxPQ0siLCJGSU5HRVJQUklOVF9VTkxPQ0siLCJVTkxPQ0tfVFlQRVMiLCJLRVlDT0RFX05VTVBBRF9FTlRFUiIsIlVOTE9DS19XQUlUX1RJTUUiLCJJTlBVVF9LRVlTX1dBSVRfVElNRSIsIk5VTUJFUl9aRVJPX0tFWUNPREUiLCJoZWxwZXJzIiwidmFsaWRhdGVVbmxvY2tDYXBhYmlsaXRpZXMiLCJjYXBzIiwidW5sb2NrS2V5IiwidW5sb2NrVHlwZSIsIl8iLCJpc05pbCIsIkVycm9yIiwiaW5jbHVkZXMiLCJ0ZXN0IiwidHJpbSIsImZhc3RVbmxvY2siLCJhZGIiLCJvcHRzIiwiY3JlZGVudGlhbCIsImNyZWRlbnRpYWxUeXBlIiwibG9nZ2VyIiwiaW5mbyIsIndhc0xvY2tFbmFibGVkIiwiaXNMb2NrRW5hYmxlZCIsImNsZWFyTG9ja0NyZWRlbnRpYWwiLCJjeWNsZVdha2VVcCIsImRpc21pc3NLZXlndWFyZCIsInNldExvY2tDcmVkZW50aWFsIiwiZW5jb2RlUGFzc3dvcmQiLCJrZXkiLCJyZXBsYWNlIiwic3RyaW5nS2V5VG9BcnIiLCJzcGxpdCIsImZpbmdlcnByaW50VW5sb2NrIiwiZHJpdmVyIiwiY2FwYWJpbGl0aWVzIiwiZ2V0QXBpTGV2ZWwiLCJmaW5nZXJwcmludCIsInNsZWVwIiwicGluVW5sb2NrIiwia2V5cyIsImVscyIsImZpbmRFbE9yRWxzIiwiaXNFbXB0eSIsInBpblVubG9ja1dpdGhLZXlFdmVudCIsInBpbnMiLCJlbCIsInRleHQiLCJnZXRBdHRyaWJ1dGUiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsInBpbiIsImNsaWNrIiwid2FpdEZvclVubG9jayIsImlzU2NyZWVuTG9ja2VkIiwia2V5ZXZlbnQiLCJzaGVsbCIsInBhcnNlSW50IiwicGFzc3dvcmRVbmxvY2siLCJnZXRQYXR0ZXJuS2V5UG9zaXRpb24iLCJpbml0UG9zIiwicGllY2UiLCJjb2xzIiwieFBvcyIsIngiLCJNYXRoIiwicm91bmQiLCJ5UG9zIiwieSIsImNlaWwiLCJnZXRQYXR0ZXJuQWN0aW9ucyIsImFjdGlvbnMiLCJsYXN0UG9zIiwia2V5UG9zIiwicHVzaCIsImFjdGlvbiIsIm9wdGlvbnMiLCJlbGVtZW50IiwibW92ZVRvIiwiZGlmZlgiLCJhYnMiLCJkaWZmWSIsInBhdHRlcm5VbmxvY2siLCJhcGlMZXZlbCIsImdldExvY2F0aW9uIiwic2l6ZSIsImdldFNpemUiLCJ3aWR0aCIsInBlcmZvcm1Ub3VjaCIsIl9kZWZhdWx0IiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91bmxvY2staGVscGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5jb25zdCBQSU5fVU5MT0NLID0gJ3Bpbic7XG5jb25zdCBQSU5fVU5MT0NLX0tFWV9FVkVOVCA9ICdwaW5XaXRoS2V5RXZlbnQnO1xuY29uc3QgUEFTU1dPUkRfVU5MT0NLID0gJ3Bhc3N3b3JkJztcbmNvbnN0IFBBVFRFUk5fVU5MT0NLID0gJ3BhdHRlcm4nO1xuY29uc3QgRklOR0VSUFJJTlRfVU5MT0NLID0gJ2ZpbmdlcnByaW50JztcbmNvbnN0IFVOTE9DS19UWVBFUyA9IFtcbiAgUElOX1VOTE9DSywgUElOX1VOTE9DS19LRVlfRVZFTlQsIFBBU1NXT1JEX1VOTE9DSyxcbiAgUEFUVEVSTl9VTkxPQ0ssIEZJTkdFUlBSSU5UX1VOTE9DS1xuXTtcbmNvbnN0IEtFWUNPREVfTlVNUEFEX0VOVEVSID0gNjY7XG5jb25zdCBVTkxPQ0tfV0FJVF9USU1FID0gMTAwO1xuY29uc3QgSU5QVVRfS0VZU19XQUlUX1RJTUUgPSAxMDA7XG5jb25zdCBOVU1CRVJfWkVST19LRVlDT0RFID0gNztcblxuY29uc3QgaGVscGVycyA9IHt9O1xuXG5oZWxwZXJzLnZhbGlkYXRlVW5sb2NrQ2FwYWJpbGl0aWVzID0gZnVuY3Rpb24gdmFsaWRhdGVVbmxvY2tDYXBhYmlsaXRpZXMgKGNhcHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdW5sb2NrS2V5LFxuICAgIHVubG9ja1R5cGUsXG4gIH0gPSBjYXBzO1xuICBpZiAoXy5pc05pbCh1bmxvY2tLZXkpIHx8IHVubG9ja0tleSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Egbm9uLWVtcHR5IHVubG9jayBrZXkgdmFsdWUgbXVzdCBiZSBwcm92aWRlZCcpO1xuICB9XG5cbiAgaWYgKFtQSU5fVU5MT0NLLCBQSU5fVU5MT0NLX0tFWV9FVkVOVCwgRklOR0VSUFJJTlRfVU5MT0NLXS5pbmNsdWRlcyh1bmxvY2tUeXBlKSkge1xuICAgIGlmICghL15bMC05XSskLy50ZXN0KF8udHJpbSh1bmxvY2tLZXkpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmxvY2sga2V5IHZhbHVlICcke3VubG9ja0tleX0nIG11c3Qgb25seSBjb25zaXN0IG9mIGRpZ2l0c2ApO1xuICAgIH1cbiAgfSBlbHNlIGlmICh1bmxvY2tUeXBlID09PSBQQVRURVJOX1VOTE9DSykge1xuICAgIGlmICghL15bMS05XXsyLDl9JC8udGVzdChfLnRyaW0odW5sb2NrS2V5KSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5sb2NrIGtleSB2YWx1ZSAnJHt1bmxvY2tLZXl9JyBtdXN0IG9ubHkgaW5jbHVkZSBmcm9tIHR3byB0byBuaW5lIGRpZ2l0cyBpbiByYW5nZSAxLi45YCk7XG4gICAgfVxuICAgIGlmICgvKFsxLTldKS4qP1xcMS8udGVzdChfLnRyaW0odW5sb2NrS2V5KSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5sb2NrIGtleSB2YWx1ZSAnJHt1bmxvY2tLZXl9JyBtdXN0IGRlZmluZSBhIHZhbGlkIHBhdHRlcm4gd2hlcmUgcmVwZWF0cyBhcmUgbm90IGFsbG93ZWRgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodW5sb2NrVHlwZSA9PT0gUEFTU1dPUkRfVU5MT0NLKSB7XG4gICAgLy8gRG9udCB0cmltIHBhc3N3b3JkIGtleSwgeW91IGNhbiB1c2UgYmxhbmsgc3BhY2VzIGluIHlvdXIgYW5kcm9pZCBwYXNzd29yZFxuICAgIC8vIMKvXFxfKOODhClfL8KvXG4gICAgaWYgKCEvLns0LH0vZy50ZXN0KHVubG9ja0tleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIG1pbmltdW0gYWxsb3dlZCBsZW5ndGggb2YgdW5sb2NrIGtleSB2YWx1ZSAnJHt1bmxvY2tLZXl9JyBpcyA0IGNoYXJhY3RlcnNgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHVubG9jayB0eXBlICcke3VubG9ja1R5cGV9Jy4gYCArXG4gICAgICBgT25seSB0aGUgZm9sbG93aW5nIHVubG9jayB0eXBlcyBhcmUgc3VwcG9ydGVkOiAke1VOTE9DS19UWVBFU31gKTtcbiAgfVxuICByZXR1cm4gY2Fwcztcbn07XG5cbmhlbHBlcnMuZmFzdFVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIGZhc3RVbmxvY2sgKGFkYiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBjcmVkZW50aWFsLFxuICAgIGNyZWRlbnRpYWxUeXBlLFxuICB9ID0gb3B0cztcbiAgbG9nZ2VyLmluZm8oYFVubG9ja2luZyB0aGUgZGV2aWNlIHZpYSBBREIgdXNpbmcgJHtjcmVkZW50aWFsVHlwZX0gY3JlZGVudGlhbCAnJHtjcmVkZW50aWFsfSdgKTtcbiAgY29uc3Qgd2FzTG9ja0VuYWJsZWQgPSBhd2FpdCBhZGIuaXNMb2NrRW5hYmxlZCgpO1xuICBpZiAod2FzTG9ja0VuYWJsZWQpIHtcbiAgICBhd2FpdCBhZGIuY2xlYXJMb2NrQ3JlZGVudGlhbChjcmVkZW50aWFsKTtcbiAgICAvLyBub3Qgc3VyZSB3aHksIGJ1dCB0aGUgZGV2aWNlJ3Mgc2NyZWVuIHN0aWxsIHJlbWFpbnMgbG9ja2VkXG4gICAgLy8gaWYgYSBwcmVsaW1pbmFyeSB3YWtlIHVwIGN5Y2xlIGhhcyBub3QgYmVlbiBwZXJmb3JtZWRcbiAgICBhd2FpdCBhZGIuY3ljbGVXYWtlVXAoKTtcbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIuaW5mbygnTm8gYWN0aXZlIGxvY2sgaGFzIGJlZW4gZGV0ZWN0ZWQuIFByb2NlZWRpbmcgdG8gdGhlIGtleWd1YXJkIGRpc21pc3NhbCcpO1xuICB9XG4gIHRyeSB7XG4gICAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmICh3YXNMb2NrRW5hYmxlZCkge1xuICAgICAgYXdhaXQgYWRiLnNldExvY2tDcmVkZW50aWFsKGNyZWRlbnRpYWxUeXBlLCBjcmVkZW50aWFsKTtcbiAgICB9XG4gIH1cbn07XG5cbmhlbHBlcnMuZW5jb2RlUGFzc3dvcmQgPSBmdW5jdGlvbiBlbmNvZGVQYXNzd29yZCAoa2V5KSB7XG4gIHJldHVybiBgJHtrZXl9YC5yZXBsYWNlKC9cXHMvaWcsICclcycpO1xufTtcblxuaGVscGVycy5zdHJpbmdLZXlUb0FyciA9IGZ1bmN0aW9uIHN0cmluZ0tleVRvQXJyIChrZXkpIHtcbiAgcmV0dXJuIGAke2tleX1gLnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csICcnKS5zcGxpdCgvXFxzKi8pO1xufTtcblxuaGVscGVycy5maW5nZXJwcmludFVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIGZpbmdlcnByaW50VW5sb2NrIChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKSB7XG4gIGlmIChhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKSA8IDIzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGaW5nZXJwcmludCB1bmxvY2sgb25seSB3b3JrcyBmb3IgQW5kcm9pZCA2KyBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCBhZGIuZmluZ2VycHJpbnQoY2FwYWJpbGl0aWVzLnVubG9ja0tleSk7XG4gIGF3YWl0IHNsZWVwKFVOTE9DS19XQUlUX1RJTUUpO1xufTtcblxuaGVscGVycy5waW5VbmxvY2sgPSBhc3luYyBmdW5jdGlvbiBwaW5VbmxvY2sgKGFkYiwgZHJpdmVyLCBjYXBhYmlsaXRpZXMpIHtcbiAgbG9nZ2VyLmluZm8oYFRyeWluZyB0byB1bmxvY2sgZGV2aWNlIHVzaW5nIHBpbiAke2NhcGFiaWxpdGllcy51bmxvY2tLZXl9YCk7XG4gIGF3YWl0IGFkYi5kaXNtaXNzS2V5Z3VhcmQoKTtcbiAgY29uc3Qga2V5cyA9IGhlbHBlcnMuc3RyaW5nS2V5VG9BcnIoY2FwYWJpbGl0aWVzLnVubG9ja0tleSk7XG4gIGlmIChhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyMSkge1xuICAgIGNvbnN0IGVscyA9IGF3YWl0IGRyaXZlci5maW5kRWxPckVscygnaWQnLCAnY29tLmFuZHJvaWQuc3lzdGVtdWk6aWQvZGlnaXRfdGV4dCcsIHRydWUpO1xuICAgIGlmIChfLmlzRW1wdHkoZWxzKSkge1xuICAgICAgLy8gZmFsbGJhY2sgdG8gcGluIHdpdGgga2V5IGV2ZW50XG4gICAgICByZXR1cm4gYXdhaXQgaGVscGVycy5waW5VbmxvY2tXaXRoS2V5RXZlbnQoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcyk7XG4gICAgfVxuICAgIGNvbnN0IHBpbnMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIGVscykge1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IGRyaXZlci5nZXRBdHRyaWJ1dGUoJ3RleHQnLCB1dGlsLnVud3JhcEVsZW1lbnQoZWwpKTtcbiAgICAgIHBpbnNbdGV4dF0gPSBlbDtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwaW4gb2Yga2V5cykge1xuICAgICAgY29uc3QgZWwgPSBwaW5zW3Bpbl07XG4gICAgICBhd2FpdCBkcml2ZXIuY2xpY2sodXRpbC51bndyYXBFbGVtZW50KGVsKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAoY29uc3QgcGluIG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IGVsID0gYXdhaXQgZHJpdmVyLmZpbmRFbE9yRWxzKCdpZCcsIGBjb20uYW5kcm9pZC5rZXlndWFyZDppZC9rZXkke3Bpbn1gLCBmYWxzZSk7XG4gICAgICBpZiAoZWwgPT09IG51bGwpIHtcbiAgICAgICAgLy8gZmFsbGJhY2sgdG8gcGluIHdpdGgga2V5IGV2ZW50XG4gICAgICAgIHJldHVybiBhd2FpdCBoZWxwZXJzLnBpblVubG9ja1dpdGhLZXlFdmVudChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGRyaXZlci5jbGljayh1dGlsLnVud3JhcEVsZW1lbnQoZWwpKTtcbiAgICB9XG4gIH1cbiAgYXdhaXQgd2FpdEZvclVubG9jayhhZGIpO1xufTtcblxuLyoqXG4gKiBXYWl0IGZvciB0aGUgZGlzcGxheSB0byBiZSB1bmxvY2tlZC5cbiAqIFNvbWUgZGV2aWNlcyBhdXRvbWF0aWNhbGx5IGFjY2VwdCB0eXBlZCAncGluJyBhbmQgJ3Bhc3N3b3JkJyBjb2RlXG4gKiB3aXRob3V0IHByZXNzaW5nIHRoZSBFbnRlciBrZXkuIEJ1dCBzb21lIGRldmljZXMgbmVlZCBpdC5cbiAqIFRoaXMgbWV0aG9kIHdhaXRzIGEgZmV3IHNlY29uZHMgZmlyc3QgZm9yIHN1Y2ggYXV0b21hdGljIGFjY2VwdGFuY2UgY2FzZS5cbiAqIElmIHRoZSBkZXZpY2UgaXMgc3RpbGwgbG9ja2VkLCB0aGVuIHRoaXMgbWV0aG9kIHdpbGwgdHJ5IHRvIHNlbmRcbiAqIHRoZSBlbnRlciBrZXkgY29kZS5cbiAqXG4gKiBAcGFyYW0ge0FEQn0gYWRiIFRoZSBpbnN0YW5jZSBvZiBBREJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gd2FpdEZvclVubG9jayAoYWRiKSB7XG4gIGF3YWl0IHNsZWVwKFVOTE9DS19XQUlUX1RJTUUpO1xuICBpZiAoIWF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgYWRiLmtleWV2ZW50KEtFWUNPREVfTlVNUEFEX0VOVEVSKTtcbiAgYXdhaXQgc2xlZXAoVU5MT0NLX1dBSVRfVElNRSk7XG59XG5cbmhlbHBlcnMucGluVW5sb2NrV2l0aEtleUV2ZW50ID0gYXN5bmMgZnVuY3Rpb24gcGluVW5sb2NrV2l0aEtleUV2ZW50IChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKSB7XG4gIGxvZ2dlci5pbmZvKGBUcnlpbmcgdG8gdW5sb2NrIGRldmljZSB1c2luZyBwaW4gd2l0aCBrZXljb2RlICR7Y2FwYWJpbGl0aWVzLnVubG9ja0tleX1gKTtcbiAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICBjb25zdCBrZXlzID0gaGVscGVycy5zdHJpbmdLZXlUb0FycihjYXBhYmlsaXRpZXMudW5sb2NrS2V5KTtcblxuICAvLyBTb21lIGRldmljZSBkb2VzIG5vdCBoYXZlIHN5c3RlbSBrZXkgaWRzIGxpa2UgJ2NvbS5hbmRyb2lkLmtleWd1YXJkOmlkL2tleSdcbiAgLy8gVGhlbiwgc2VuZGluZyBrZXlldmVudHMgYXJlIG1vcmUgcmVsaWFibGUgdG8gdW5sb2NrIHRoZSBzY3JlZW4uXG4gIGZvciAoY29uc3QgcGluIG9mIGtleXMpIHtcbiAgICAvLyAncGluJyBpcyBudW1iZXIgKDAtOSkgaW4gc3RyaW5nLlxuICAgIC8vIE51bWJlciAnMCcgaXMga2V5Y29kZSAnNycuIG51bWJlciAnOScgaXMga2V5Y29kZSAnMTYnLlxuICAgIGF3YWl0IGFkYi5zaGVsbChbJ2lucHV0JywgJ2tleWV2ZW50JywgcGFyc2VJbnQocGluLCAxMCkgKyBOVU1CRVJfWkVST19LRVlDT0RFXSk7XG4gIH1cbiAgYXdhaXQgd2FpdEZvclVubG9jayhhZGIsIGRyaXZlcik7XG59O1xuXG5oZWxwZXJzLnBhc3N3b3JkVW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gcGFzc3dvcmRVbmxvY2sgKGFkYiwgZHJpdmVyLCBjYXBhYmlsaXRpZXMpIHtcbiAgY29uc3QgeyB1bmxvY2tLZXkgfSA9IGNhcGFiaWxpdGllcztcbiAgbG9nZ2VyLmluZm8oYFRyeWluZyB0byB1bmxvY2sgZGV2aWNlIHVzaW5nIHBhc3N3b3JkICR7dW5sb2NrS2V5fWApO1xuICBhd2FpdCBhZGIuZGlzbWlzc0tleWd1YXJkKCk7XG4gIC8vIFJlcGxhY2UgYmxhbmsgc3BhY2VzIHdpdGggJXNcbiAgY29uc3Qga2V5ID0gaGVscGVycy5lbmNvZGVQYXNzd29yZCh1bmxvY2tLZXkpO1xuICAvLyBXaHkgYWRiID8gSXQgd2FzIGxlc3MgZmxha3lcbiAgYXdhaXQgYWRiLnNoZWxsKFsnaW5wdXQnLCAndGV4dCcsIGtleV0pO1xuICAvLyBXaHkgc2xlZXBzID8gQXZvaWQgc29tZSBmbGFreW5lc3Mgd2FpdGluZyBmb3IgdGhlIGlucHV0IHRvIHJlY2VpdmUgdGhlIGtleXNcbiAgYXdhaXQgc2xlZXAoSU5QVVRfS0VZU19XQUlUX1RJTUUpO1xuICBhd2FpdCBhZGIuc2hlbGwoWydpbnB1dCcsICdrZXlldmVudCcsIEtFWUNPREVfTlVNUEFEX0VOVEVSXSk7XG4gIC8vIFdhaXRzIGEgYml0IGZvciB0aGUgZGV2aWNlIHRvIGJlIHVubG9ja2VkXG4gIGF3YWl0IHdhaXRGb3JVbmxvY2soYWRiLCBkcml2ZXIpO1xufTtcblxuaGVscGVycy5nZXRQYXR0ZXJuS2V5UG9zaXRpb24gPSBmdW5jdGlvbiBnZXRQYXR0ZXJuS2V5UG9zaXRpb24gKGtleSwgaW5pdFBvcywgcGllY2UpIHtcbiAgLypcbiAgSG93IHRoZSBtYXRoIHdvcmtzOlxuICBXZSBoYXZlIDkgYnV0dG9ucyBkaXZpZGVkIGluIDMgY29sdW1ucyBhbmQgMyByb3dzIGluc2lkZSB0aGUgbG9ja1BhdHRlcm5WaWV3LFxuICBldmVyeSBidXR0b24gaGFzIGEgcG9zaXRpb24gb24gdGhlIHNjcmVlbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb2NrUGF0dGVyblZpZXcgc2luY2VcbiAgaXQgaXMgdGhlIHBhcmVudCB2aWV3IHJpZ2h0IGF0IHRoZSBtaWRkbGUgb2YgZWFjaCBjb2x1bW4gb3Igcm93LlxuICAqL1xuICBjb25zdCBjb2xzID0gMztcbiAgY29uc3QgcGlucyA9IDk7XG4gIGNvbnN0IHhQb3MgPSAoa2V5LCB4LCBwaWVjZSkgPT4gTWF0aC5yb3VuZCh4ICsgKChrZXkgJSBjb2xzKSB8fCBjb2xzKSAqIHBpZWNlIC0gcGllY2UgLyAyKTtcbiAgY29uc3QgeVBvcyA9IChrZXksIHksIHBpZWNlKSA9PiBNYXRoLnJvdW5kKHkgKyAoTWF0aC5jZWlsKCgoa2V5ICUgcGlucykgfHwgcGlucykgLyBjb2xzKSAqIHBpZWNlIC0gcGllY2UgLyAyKSk7XG4gIHJldHVybiB7XG4gICAgeDogeFBvcyhrZXksIGluaXRQb3MueCwgcGllY2UpLFxuICAgIHk6IHlQb3Moa2V5LCBpbml0UG9zLnksIHBpZWNlKVxuICB9O1xufTtcblxuaGVscGVycy5nZXRQYXR0ZXJuQWN0aW9ucyA9IGZ1bmN0aW9uIGdldFBhdHRlcm5BY3Rpb25zIChrZXlzLCBpbml0UG9zLCBwaWVjZSkge1xuICBjb25zdCBhY3Rpb25zID0gW107XG4gIGxldCBsYXN0UG9zO1xuICBmb3IgKGxldCBrZXkgb2Yga2V5cykge1xuICAgIGNvbnN0IGtleVBvcyA9IGhlbHBlcnMuZ2V0UGF0dGVybktleVBvc2l0aW9uKGtleSwgaW5pdFBvcywgcGllY2UpO1xuICAgIGlmIChrZXkgPT09IGtleXNbMF0pIHtcbiAgICAgIGFjdGlvbnMucHVzaCh7YWN0aW9uOiAncHJlc3MnLCBvcHRpb25zOiB7ZWxlbWVudDogbnVsbCwgeDoga2V5UG9zLngsIHk6IGtleVBvcy55fX0pO1xuICAgICAgbGFzdFBvcyA9IGtleVBvcztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBtb3ZlVG8gPSB7eDogMCwgeTogMH07XG4gICAgY29uc3QgZGlmZlggPSBrZXlQb3MueCAtIGxhc3RQb3MueDtcbiAgICBpZiAoZGlmZlggPiAwKSB7XG4gICAgICBtb3ZlVG8ueCA9IHBpZWNlO1xuICAgICAgaWYgKE1hdGguYWJzKGRpZmZYKSA+IHBpZWNlKSB7XG4gICAgICAgIG1vdmVUby54ICs9IHBpZWNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGlmZlggPCAwKSB7XG4gICAgICBtb3ZlVG8ueCA9IC0xICogcGllY2U7XG4gICAgICBpZiAoTWF0aC5hYnMoZGlmZlgpID4gcGllY2UpIHtcbiAgICAgICAgbW92ZVRvLnggLT0gcGllY2U7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGRpZmZZID0ga2V5UG9zLnkgLSBsYXN0UG9zLnk7XG4gICAgaWYgKGRpZmZZID4gMCkge1xuICAgICAgbW92ZVRvLnkgPSBwaWVjZTtcbiAgICAgIGlmIChNYXRoLmFicyhkaWZmWSkgPiBwaWVjZSkge1xuICAgICAgICBtb3ZlVG8ueSArPSBwaWVjZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRpZmZZIDwgMCkge1xuICAgICAgbW92ZVRvLnkgPSAtMSAqIHBpZWNlO1xuICAgICAgaWYgKE1hdGguYWJzKGRpZmZZKSA+IHBpZWNlKSB7XG4gICAgICAgIG1vdmVUby55IC09IHBpZWNlO1xuICAgICAgfVxuICAgIH1cbiAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgYWN0aW9uOiAnbW92ZVRvJyxcbiAgICAgIG9wdGlvbnM6IHtlbGVtZW50OiBudWxsLCB4OiBtb3ZlVG8ueCArIGxhc3RQb3MueCwgeTogbW92ZVRvLnkgKyBsYXN0UG9zLnl9XG4gICAgfSk7XG4gICAgbGFzdFBvcyA9IGtleVBvcztcbiAgfVxuICBhY3Rpb25zLnB1c2goe2FjdGlvbjogJ3JlbGVhc2UnfSk7XG4gIHJldHVybiBhY3Rpb25zO1xufTtcblxuaGVscGVycy5wYXR0ZXJuVW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gcGF0dGVyblVubG9jayAoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcykge1xuICBjb25zdCB7IHVubG9ja0tleSB9ID0gY2FwYWJpbGl0aWVzO1xuICBsb2dnZXIuaW5mbyhgVHJ5aW5nIHRvIHVubG9jayBkZXZpY2UgdXNpbmcgcGF0dGVybiAke3VubG9ja0tleX1gKTtcbiAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICBjb25zdCBrZXlzID0gaGVscGVycy5zdHJpbmdLZXlUb0Fycih1bmxvY2tLZXkpO1xuICAvKiBXZSBzZXQgdGhlIGRldmljZSBwYXR0ZXJuIGJ1dHRvbnMgYXMgbnVtYmVyIG9mIGEgcmVndWxhciBwaG9uZVxuICAgKiAgfCDigKIg4oCiIOKAoiB8ICAgICB8IDEgMiAzIHxcbiAgICogIHwg4oCiIOKAoiDigKIgfCAtLT4gfCA0IDUgNiB8XG4gICAqICB8IOKAoiDigKIg4oCiIHwgICAgIHwgNyA4IDkgfFxuXG4gIFRoZSBwYXR0ZXJuIHZpZXcgYnV0dG9ucyBhcmUgbm90IHNlZWluZyBieSB0aGUgdWlhdXRvbWF0b3Igc2luY2UgdGhleSBhcmVcbiAgaW5jbHVkZWQgaW5zaWRlIGEgRnJhbWVMYXlvdXQsIHNvIHdlIGFyZSBnb2luZyB0byB0cnkgY2xpY2tpbmcgb24gdGhlIGJ1dHRvbnNcbiAgdXNpbmcgdGhlIHBhcmVudCB2aWV3IGJvdW5kcyBhbmQgbWF0aC5cbiAgKi9cbiAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgY29uc3QgZWwgPSBhd2FpdCBkcml2ZXIuZmluZEVsT3JFbHMoJ2lkJyxcbiAgICBgY29tLmFuZHJvaWQuJHthcGlMZXZlbCA+PSAyMSA/ICdzeXN0ZW11aScgOiAna2V5Z3VhcmQnfTppZC9sb2NrUGF0dGVyblZpZXdgLFxuICAgIGZhbHNlXG4gICk7XG4gIGNvbnN0IGluaXRQb3MgPSBhd2FpdCBkcml2ZXIuZ2V0TG9jYXRpb24odXRpbC51bndyYXBFbGVtZW50KGVsKSk7XG4gIGNvbnN0IHNpemUgPSBhd2FpdCBkcml2ZXIuZ2V0U2l6ZSh1dGlsLnVud3JhcEVsZW1lbnQoZWwpKTtcbiAgLy8gR2V0IGFjdGlvbnMgdG8gcGVyZm9ybVxuICBjb25zdCBhY3Rpb25zID0gaGVscGVycy5nZXRQYXR0ZXJuQWN0aW9ucyhrZXlzLCBpbml0UG9zLCBzaXplLndpZHRoIC8gMyk7XG4gIC8vIFBlcmZvcm0gZ2VzdHVyZVxuICBhd2FpdCBkcml2ZXIucGVyZm9ybVRvdWNoKGFjdGlvbnMpO1xuICAvLyBXYWl0cyBhIGJpdCBmb3IgdGhlIGRldmljZSB0byBiZSB1bmxvY2tlZFxuICBhd2FpdCBzbGVlcChVTkxPQ0tfV0FJVF9USU1FKTtcbn07XG5cbmhlbHBlcnMuUElOX1VOTE9DSyA9IFBJTl9VTkxPQ0s7XG5oZWxwZXJzLlBJTl9VTkxPQ0tfS0VZX0VWRU5UID0gUElOX1VOTE9DS19LRVlfRVZFTlQ7XG5oZWxwZXJzLlBBU1NXT1JEX1VOTE9DSyA9IFBBU1NXT1JEX1VOTE9DSztcbmhlbHBlcnMuUEFUVEVSTl9VTkxPQ0sgPSBQQVRURVJOX1VOTE9DSztcbmhlbHBlcnMuRklOR0VSUFJJTlRfVU5MT0NLID0gRklOR0VSUFJJTlRfVU5MT0NLO1xuXG5leHBvcnQge1xuICBQSU5fVU5MT0NLLCBQSU5fVU5MT0NLX0tFWV9FVkVOVCwgUEFTU1dPUkRfVU5MT0NLLCBQQVRURVJOX1VOTE9DSyxcbiAgRklOR0VSUFJJTlRfVU5MT0NLLCBoZWxwZXJzXG59O1xuZXhwb3J0IGRlZmF1bHQgaGVscGVycztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxTQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxRQUFBLEdBQUFILE9BQUE7QUFFQSxNQUFNSSxVQUFVLEdBQUcsS0FBSztBQUFDQyxPQUFBLENBQUFELFVBQUEsR0FBQUEsVUFBQTtBQUN6QixNQUFNRSxvQkFBb0IsR0FBRyxpQkFBaUI7QUFBQ0QsT0FBQSxDQUFBQyxvQkFBQSxHQUFBQSxvQkFBQTtBQUMvQyxNQUFNQyxl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
260
+ exports.helpers.PIN_UNLOCK = PIN_UNLOCK;
261
+ exports.helpers.PIN_UNLOCK_KEY_EVENT = PIN_UNLOCK_KEY_EVENT;
262
+ exports.helpers.PASSWORD_UNLOCK = PASSWORD_UNLOCK;
263
+ exports.helpers.PATTERN_UNLOCK = PATTERN_UNLOCK;
264
+ exports.helpers.FINGERPRINT_UNLOCK = FINGERPRINT_UNLOCK;
265
+ exports.default = exports.helpers;
266
+ //# sourceMappingURL=unlock-helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"unlock-helpers.js","names":["_logger","_interopRequireDefault","require","_asyncbox","_lodash","_support","PIN_UNLOCK","exports","PIN_UNLOCK_KEY_EVENT","PASSWORD_UNLOCK","PATTERN_UNLOCK","FINGERPRINT_UNLOCK","UNLOCK_TYPES","KEYCODE_NUMPAD_ENTER","UNLOCK_WAIT_TIME","INPUT_KEYS_WAIT_TIME","NUMBER_ZERO_KEYCODE","helpers","validateUnlockCapabilities","caps","unlockKey","unlockType","_","isNil","Error","includes","test","trim","fastUnlock","adb","opts","credential","credentialType","logger","info","wasLockEnabled","isLockEnabled","clearLockCredential","cycleWakeUp","dismissKeyguard","setLockCredential","encodePassword","key","replace","stringKeyToArr","split","fingerprintUnlock","driver","capabilities","getApiLevel","fingerprint","sleep","pinUnlock","keys","els","findElOrEls","isEmpty","pinUnlockWithKeyEvent","pins","el","text","getAttribute","util","unwrapElement","pin","click","waitForUnlock","isScreenLocked","keyevent","shell","parseInt","passwordUnlock","getPatternKeyPosition","initPos","piece","cols","xPos","x","Math","round","yPos","y","ceil","getPatternActions","actions","lastPos","keyPos","push","action","options","element","moveTo","diffX","abs","diffY","patternUnlock","apiLevel","getLocation","size","getSize","width","performTouch","_default","default"],"sources":["../../lib/unlock-helpers.js"],"sourcesContent":["import logger from './logger';\nimport { sleep } from 'asyncbox';\nimport _ from 'lodash';\nimport { util } from '@appium/support';\n\nconst PIN_UNLOCK = 'pin';\nconst PIN_UNLOCK_KEY_EVENT = 'pinWithKeyEvent';\nconst PASSWORD_UNLOCK = 'password';\nconst PATTERN_UNLOCK = 'pattern';\nconst FINGERPRINT_UNLOCK = 'fingerprint';\nconst UNLOCK_TYPES = [\n PIN_UNLOCK, PIN_UNLOCK_KEY_EVENT, PASSWORD_UNLOCK,\n PATTERN_UNLOCK, FINGERPRINT_UNLOCK\n];\nconst KEYCODE_NUMPAD_ENTER = 66;\nconst UNLOCK_WAIT_TIME = 100;\nconst INPUT_KEYS_WAIT_TIME = 100;\nconst NUMBER_ZERO_KEYCODE = 7;\n\nconst helpers = {};\n\nhelpers.validateUnlockCapabilities = function validateUnlockCapabilities (caps = {}) {\n const {\n unlockKey,\n unlockType,\n } = caps;\n if (_.isNil(unlockKey) || unlockKey === '') {\n throw new Error('A non-empty unlock key value must be provided');\n }\n\n if ([PIN_UNLOCK, PIN_UNLOCK_KEY_EVENT, FINGERPRINT_UNLOCK].includes(unlockType)) {\n if (!/^[0-9]+$/.test(_.trim(unlockKey))) {\n throw new Error(`Unlock key value '${unlockKey}' must only consist of digits`);\n }\n } else if (unlockType === PATTERN_UNLOCK) {\n if (!/^[1-9]{2,9}$/.test(_.trim(unlockKey))) {\n throw new Error(`Unlock key value '${unlockKey}' must only include from two to nine digits in range 1..9`);\n }\n if (/([1-9]).*?\\1/.test(_.trim(unlockKey))) {\n throw new Error(`Unlock key value '${unlockKey}' must define a valid pattern where repeats are not allowed`);\n }\n } else if (unlockType === PASSWORD_UNLOCK) {\n // Dont trim password key, you can use blank spaces in your android password\n // ¯\\_(ツ)_/¯\n if (!/.{4,}/g.test(unlockKey)) {\n throw new Error(`The minimum allowed length of unlock key value '${unlockKey}' is 4 characters`);\n }\n } else {\n throw new Error(`Invalid unlock type '${unlockType}'. ` +\n `Only the following unlock types are supported: ${UNLOCK_TYPES}`);\n }\n return caps;\n};\n\nhelpers.fastUnlock = async function fastUnlock (adb, opts = {}) {\n const {\n credential,\n credentialType,\n } = opts;\n logger.info(`Unlocking the device via ADB using ${credentialType} credential '${credential}'`);\n const wasLockEnabled = await adb.isLockEnabled();\n if (wasLockEnabled) {\n await adb.clearLockCredential(credential);\n // not sure why, but the device's screen still remains locked\n // if a preliminary wake up cycle has not been performed\n await adb.cycleWakeUp();\n } else {\n logger.info('No active lock has been detected. Proceeding to the keyguard dismissal');\n }\n try {\n await adb.dismissKeyguard();\n } finally {\n if (wasLockEnabled) {\n await adb.setLockCredential(credentialType, credential);\n }\n }\n};\n\nhelpers.encodePassword = function encodePassword (key) {\n return `${key}`.replace(/\\s/ig, '%s');\n};\n\nhelpers.stringKeyToArr = function stringKeyToArr (key) {\n return `${key}`.trim().replace(/\\s+/g, '').split(/\\s*/);\n};\n\nhelpers.fingerprintUnlock = async function fingerprintUnlock (adb, driver, capabilities) {\n if (await adb.getApiLevel() < 23) {\n throw new Error('Fingerprint unlock only works for Android 6+ emulators');\n }\n await adb.fingerprint(capabilities.unlockKey);\n await sleep(UNLOCK_WAIT_TIME);\n};\n\nhelpers.pinUnlock = async function pinUnlock (adb, driver, capabilities) {\n logger.info(`Trying to unlock device using pin ${capabilities.unlockKey}`);\n await adb.dismissKeyguard();\n const keys = helpers.stringKeyToArr(capabilities.unlockKey);\n if (await adb.getApiLevel() >= 21) {\n const els = await driver.findElOrEls('id', 'com.android.systemui:id/digit_text', true);\n if (_.isEmpty(els)) {\n // fallback to pin with key event\n return await helpers.pinUnlockWithKeyEvent(adb, driver, capabilities);\n }\n const pins = {};\n for (const el of els) {\n const text = await driver.getAttribute('text', util.unwrapElement(el));\n pins[text] = el;\n }\n for (const pin of keys) {\n const el = pins[pin];\n await driver.click(util.unwrapElement(el));\n }\n } else {\n for (const pin of keys) {\n const el = await driver.findElOrEls('id', `com.android.keyguard:id/key${pin}`, false);\n if (el === null) {\n // fallback to pin with key event\n return await helpers.pinUnlockWithKeyEvent(adb, driver, capabilities);\n }\n await driver.click(util.unwrapElement(el));\n }\n }\n await waitForUnlock(adb);\n};\n\n/**\n * Wait for the display to be unlocked.\n * Some devices automatically accept typed 'pin' and 'password' code\n * without pressing the Enter key. But some devices need it.\n * This method waits a few seconds first for such automatic acceptance case.\n * If the device is still locked, then this method will try to send\n * the enter key code.\n *\n * @param {ADB} adb The instance of ADB\n */\nasync function waitForUnlock (adb) {\n await sleep(UNLOCK_WAIT_TIME);\n if (!await adb.isScreenLocked()) {\n return;\n }\n\n await adb.keyevent(KEYCODE_NUMPAD_ENTER);\n await sleep(UNLOCK_WAIT_TIME);\n}\n\nhelpers.pinUnlockWithKeyEvent = async function pinUnlockWithKeyEvent (adb, driver, capabilities) {\n logger.info(`Trying to unlock device using pin with keycode ${capabilities.unlockKey}`);\n await adb.dismissKeyguard();\n const keys = helpers.stringKeyToArr(capabilities.unlockKey);\n\n // Some device does not have system key ids like 'com.android.keyguard:id/key'\n // Then, sending keyevents are more reliable to unlock the screen.\n for (const pin of keys) {\n // 'pin' is number (0-9) in string.\n // Number '0' is keycode '7'. number '9' is keycode '16'.\n await adb.shell(['input', 'keyevent', parseInt(pin, 10) + NUMBER_ZERO_KEYCODE]);\n }\n await waitForUnlock(adb, driver);\n};\n\nhelpers.passwordUnlock = async function passwordUnlock (adb, driver, capabilities) {\n const { unlockKey } = capabilities;\n logger.info(`Trying to unlock device using password ${unlockKey}`);\n await adb.dismissKeyguard();\n // Replace blank spaces with %s\n const key = helpers.encodePassword(unlockKey);\n // Why adb ? It was less flaky\n await adb.shell(['input', 'text', key]);\n // Why sleeps ? Avoid some flakyness waiting for the input to receive the keys\n await sleep(INPUT_KEYS_WAIT_TIME);\n await adb.shell(['input', 'keyevent', KEYCODE_NUMPAD_ENTER]);\n // Waits a bit for the device to be unlocked\n await waitForUnlock(adb, driver);\n};\n\nhelpers.getPatternKeyPosition = function getPatternKeyPosition (key, initPos, piece) {\n /*\n How the math works:\n We have 9 buttons divided in 3 columns and 3 rows inside the lockPatternView,\n every button has a position on the screen corresponding to the lockPatternView since\n it is the parent view right at the middle of each column or row.\n */\n const cols = 3;\n const pins = 9;\n const xPos = (key, x, piece) => Math.round(x + ((key % cols) || cols) * piece - piece / 2);\n const yPos = (key, y, piece) => Math.round(y + (Math.ceil(((key % pins) || pins) / cols) * piece - piece / 2));\n return {\n x: xPos(key, initPos.x, piece),\n y: yPos(key, initPos.y, piece)\n };\n};\n\nhelpers.getPatternActions = function getPatternActions (keys, initPos, piece) {\n const actions = [];\n let lastPos;\n for (let key of keys) {\n const keyPos = helpers.getPatternKeyPosition(key, initPos, piece);\n if (key === keys[0]) {\n actions.push({action: 'press', options: {element: null, x: keyPos.x, y: keyPos.y}});\n lastPos = keyPos;\n continue;\n }\n const moveTo = {x: 0, y: 0};\n const diffX = keyPos.x - lastPos.x;\n if (diffX > 0) {\n moveTo.x = piece;\n if (Math.abs(diffX) > piece) {\n moveTo.x += piece;\n }\n } else if (diffX < 0) {\n moveTo.x = -1 * piece;\n if (Math.abs(diffX) > piece) {\n moveTo.x -= piece;\n }\n }\n const diffY = keyPos.y - lastPos.y;\n if (diffY > 0) {\n moveTo.y = piece;\n if (Math.abs(diffY) > piece) {\n moveTo.y += piece;\n }\n } else if (diffY < 0) {\n moveTo.y = -1 * piece;\n if (Math.abs(diffY) > piece) {\n moveTo.y -= piece;\n }\n }\n actions.push({\n action: 'moveTo',\n options: {element: null, x: moveTo.x + lastPos.x, y: moveTo.y + lastPos.y}\n });\n lastPos = keyPos;\n }\n actions.push({action: 'release'});\n return actions;\n};\n\nhelpers.patternUnlock = async function patternUnlock (adb, driver, capabilities) {\n const { unlockKey } = capabilities;\n logger.info(`Trying to unlock device using pattern ${unlockKey}`);\n await adb.dismissKeyguard();\n const keys = helpers.stringKeyToArr(unlockKey);\n /* We set the device pattern buttons as number of a regular phone\n * | • • • | | 1 2 3 |\n * | • • • | --> | 4 5 6 |\n * | • • • | | 7 8 9 |\n\n The pattern view buttons are not seeing by the uiautomator since they are\n included inside a FrameLayout, so we are going to try clicking on the buttons\n using the parent view bounds and math.\n */\n const apiLevel = await adb.getApiLevel();\n const el = await driver.findElOrEls('id',\n `com.android.${apiLevel >= 21 ? 'systemui' : 'keyguard'}:id/lockPatternView`,\n false\n );\n const initPos = await driver.getLocation(util.unwrapElement(el));\n const size = await driver.getSize(util.unwrapElement(el));\n // Get actions to perform\n const actions = helpers.getPatternActions(keys, initPos, size.width / 3);\n // Perform gesture\n await driver.performTouch(actions);\n // Waits a bit for the device to be unlocked\n await sleep(UNLOCK_WAIT_TIME);\n};\n\nhelpers.PIN_UNLOCK = PIN_UNLOCK;\nhelpers.PIN_UNLOCK_KEY_EVENT = PIN_UNLOCK_KEY_EVENT;\nhelpers.PASSWORD_UNLOCK = PASSWORD_UNLOCK;\nhelpers.PATTERN_UNLOCK = PATTERN_UNLOCK;\nhelpers.FINGERPRINT_UNLOCK = FINGERPRINT_UNLOCK;\n\nexport {\n PIN_UNLOCK, PIN_UNLOCK_KEY_EVENT, PASSWORD_UNLOCK, PATTERN_UNLOCK,\n FINGERPRINT_UNLOCK, helpers\n};\nexport default helpers;\n"],"mappings":"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"}
1
+ {"version":3,"file":"unlock-helpers.js","sourceRoot":"","sources":["../../lib/unlock-helpers.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Assert the presence of particular keys in the given object
3
+ *
4
+ * @template {Object} T
5
+ * @param {string|string[]} argNames one or more key names
6
+ * @param {T} opts the object to check
7
+ * @returns {T} the same given object
8
+ */
9
+ export function requireArgs<T extends unknown>(argNames: string | string[], opts?: T): T;
10
+ export const ADB_SHELL_FEATURE: "adb_shell";
11
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils.js"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,yDAJW,MAAM,GAAC,MAAM,EAAE,eAWzB;AAjBD,4CAA6C"}