OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library android; | 5 library android; |
6 | 6 |
7 import "dart:async"; | 7 import "dart:async"; |
8 import "dart:convert" show LineSplitter, UTF8; | 8 import "dart:convert" show LineSplitter, UTF8; |
9 import "dart:core"; | 9 import "dart:core"; |
10 import "dart:collection"; | 10 import "dart:collection"; |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 } | 69 } |
70 | 70 |
71 var results = await Future.wait([ | 71 var results = await Future.wait([ |
72 getOutput(process.stdout), | 72 getOutput(process.stdout), |
73 getOutput(process.stderr), | 73 getOutput(process.stderr), |
74 process.exitCode | 74 process.exitCode |
75 ]); | 75 ]); |
76 if (timer != null) timer.cancel(); | 76 if (timer != null) timer.cancel(); |
77 | 77 |
78 String command = "$executable ${args.join(' ')}"; | 78 String command = "$executable ${args.join(' ')}"; |
79 return new AdbCommandResult( | 79 return new AdbCommandResult(command, results[0] as String, |
80 command, results[0], results[1], results[2], timedOut); | 80 results[1] as String, results[2] as int, timedOut); |
81 }); | 81 }); |
82 } | 82 } |
83 | 83 |
84 /** | 84 /** |
85 * Helper class to loop through all adb ports. | 85 * Helper class to loop through all adb ports. |
86 * | 86 * |
87 * The ports come in pairs: | 87 * The ports come in pairs: |
88 * - even number: console connection | 88 * - even number: console connection |
89 * - odd number: adb connection | 89 * - odd number: adb connection |
90 * Note that this code doesn't check if the ports are used. | 90 * Note that this code doesn't check if the ports are used. |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 * Upload data to the device. | 244 * Upload data to the device. |
245 */ | 245 */ |
246 Future pushData(Path local, Path remote) { | 246 Future pushData(Path local, Path remote) { |
247 return _adbCommand(['push', '$local', '$remote']); | 247 return _adbCommand(['push', '$local', '$remote']); |
248 } | 248 } |
249 | 249 |
250 /** | 250 /** |
251 * Upload data to the device, unless [local] is the same as the most recently | 251 * Upload data to the device, unless [local] is the same as the most recently |
252 * used source for [remote]. | 252 * used source for [remote]. |
253 */ | 253 */ |
254 Future pushCachedData(String local, String remote) { | 254 Future<AdbCommandResult> pushCachedData(String local, String remote) { |
255 if (_cachedData[remote] == local) { | 255 if (_cachedData[remote] == local) { |
256 return new Future.value( | 256 return new Future.value( |
257 new AdbCommandResult("Skipped cached push", "", "", 0, false)); | 257 new AdbCommandResult("Skipped cached push", "", "", 0, false)); |
258 } | 258 } |
259 _cachedData[remote] = local; | 259 _cachedData[remote] = local; |
260 return _adbCommand(['push', local, remote]); | 260 return _adbCommand(['push', local, remote]); |
261 } | 261 } |
262 | 262 |
263 /** | 263 /** |
264 * Change permission of directory recursively. | 264 * Change permission of directory recursively. |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
383 static RegExp _deviceLineRegexp = | 383 static RegExp _deviceLineRegexp = |
384 new RegExp(r'^([a-zA-Z0-9_-]+)[ \t]+device$', multiLine: true); | 384 new RegExp(r'^([a-zA-Z0-9_-]+)[ \t]+device$', multiLine: true); |
385 | 385 |
386 static Future<List<String>> listDevices() { | 386 static Future<List<String>> listDevices() { |
387 return Process.run('adb', ['devices']).then((ProcessResult result) { | 387 return Process.run('adb', ['devices']).then((ProcessResult result) { |
388 if (result.exitCode != 0) { | 388 if (result.exitCode != 0) { |
389 throw new Exception("Could not list devices [stdout: ${result.stdout}," | 389 throw new Exception("Could not list devices [stdout: ${result.stdout}," |
390 "stderr: ${result.stderr}]"); | 390 "stderr: ${result.stderr}]"); |
391 } | 391 } |
392 return _deviceLineRegexp | 392 return _deviceLineRegexp |
393 .allMatches(result.stdout) | 393 .allMatches(result.stdout as String) |
394 .map((Match m) => m.group(1)) | 394 .map((Match m) => m.group(1)) |
395 .toList(); | 395 .toList(); |
396 }); | 396 }); |
397 } | 397 } |
398 } | 398 } |
399 | 399 |
400 /** | 400 /** |
401 * Represents an android intent. | 401 * Represents an android intent. |
402 */ | 402 */ |
403 class Intent { | 403 class Intent { |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
443 | 443 |
444 void releaseDevice(AdbDevice device) { | 444 void releaseDevice(AdbDevice device) { |
445 if (_waiter.length > 0) { | 445 if (_waiter.length > 0) { |
446 Completer completer = _waiter.removeFirst(); | 446 Completer completer = _waiter.removeFirst(); |
447 completer.complete(device); | 447 completer.complete(device); |
448 } else { | 448 } else { |
449 _idleDevices.add(device); | 449 _idleDevices.add(device); |
450 } | 450 } |
451 } | 451 } |
452 } | 452 } |
OLD | NEW |