Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(283)

Side by Side Diff: build/android/pylib/device/device_utils.py

Issue 783543003: Update from https://crrev.com/306901 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 """Provides a variety of device interactions based on adb. 5 """Provides a variety of device interactions based on adb.
6 6
7 Eventually, this will be based on adb_wrapper. 7 Eventually, this will be based on adb_wrapper.
8 """ 8 """
9 # pylint: disable=W0613 9 # pylint: disable=W0613
10 10
(...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 550
551 Args: 551 Args:
552 intent: An Intent to broadcast. 552 intent: An Intent to broadcast.
553 timeout: timeout in seconds 553 timeout: timeout in seconds
554 retries: number of retries 554 retries: number of retries
555 555
556 Raises: 556 Raises:
557 CommandTimeoutError on timeout. 557 CommandTimeoutError on timeout.
558 DeviceUnreachableError on missing device. 558 DeviceUnreachableError on missing device.
559 """ 559 """
560 package, old_intent = intent.action.rsplit('.', 1) 560 cmd = ['am', 'broadcast', '-a', intent.action]
561 if intent.extras is None: 561 if intent.extras:
562 args = [] 562 for key, value in intent.extras.iteritems():
563 else: 563 if key:
564 args = ['-e %s%s' % (k, ' "%s"' % v if v else '') 564 cmd.extend(['-e', key])
565 for k, v in intent.extras.items() if len(k) > 0] 565 if value:
566 self.old_interface.BroadcastIntent(package, old_intent, *args) 566 cmd.append(str(value))
567 self.RunShellCommand(cmd, check_return=True)
567 568
568 @decorators.WithTimeoutAndRetriesFromInstance() 569 @decorators.WithTimeoutAndRetriesFromInstance()
569 def GoHome(self, timeout=None, retries=None): 570 def GoHome(self, timeout=None, retries=None):
570 """Return to the home screen. 571 """Return to the home screen.
571 572
572 Args: 573 Args:
573 timeout: timeout in seconds 574 timeout: timeout in seconds
574 retries: number of retries 575 retries: number of retries
575 576
576 Raises: 577 Raises:
577 CommandTimeoutError on timeout. 578 CommandTimeoutError on timeout.
578 DeviceUnreachableError on missing device. 579 DeviceUnreachableError on missing device.
579 """ 580 """
580 self.old_interface.GoHome() 581 self.old_interface.GoHome()
581 582
582 @decorators.WithTimeoutAndRetriesFromInstance() 583 @decorators.WithTimeoutAndRetriesFromInstance()
583 def ForceStop(self, package, timeout=None, retries=None): 584 def ForceStop(self, package, timeout=None, retries=None):
584 """Close the application. 585 """Close the application.
585 586
586 Args: 587 Args:
587 package: A string containing the name of the package to stop. 588 package: A string containing the name of the package to stop.
588 timeout: timeout in seconds 589 timeout: timeout in seconds
589 retries: number of retries 590 retries: number of retries
590 591
591 Raises: 592 Raises:
592 CommandTimeoutError on timeout. 593 CommandTimeoutError on timeout.
593 DeviceUnreachableError on missing device. 594 DeviceUnreachableError on missing device.
594 """ 595 """
595 self.old_interface.CloseApplication(package) 596 self.RunShellCommand(['am', 'force-stop', package], check_return=True)
596 597
597 @decorators.WithTimeoutAndRetriesFromInstance() 598 @decorators.WithTimeoutAndRetriesFromInstance()
598 def ClearApplicationState(self, package, timeout=None, retries=None): 599 def ClearApplicationState(self, package, timeout=None, retries=None):
599 """Clear all state for the given package. 600 """Clear all state for the given package.
600 601
601 Args: 602 Args:
602 package: A string containing the name of the package to stop. 603 package: A string containing the name of the package to stop.
603 timeout: timeout in seconds 604 timeout: timeout in seconds
604 retries: number of retries 605 retries: number of retries
605 606
606 Raises: 607 Raises:
607 CommandTimeoutError on timeout. 608 CommandTimeoutError on timeout.
608 DeviceUnreachableError on missing device. 609 DeviceUnreachableError on missing device.
609 """ 610 """
610 self.old_interface.ClearApplicationState(package) 611 # Check that the package exists before clearing it. Necessary because
612 # calling pm clear on a package that doesn't exist may never return.
613 if self.GetApplicationPath(package):
614 self.RunShellCommand(['pm', 'clear', package], check_return=True)
611 615
612 @decorators.WithTimeoutAndRetriesFromInstance() 616 @decorators.WithTimeoutAndRetriesFromInstance()
613 def SendKeyEvent(self, keycode, timeout=None, retries=None): 617 def SendKeyEvent(self, keycode, timeout=None, retries=None):
614 """Sends a keycode to the device. 618 """Sends a keycode to the device.
615 619
616 See: http://developer.android.com/reference/android/view/KeyEvent.html 620 See: http://developer.android.com/reference/android/view/KeyEvent.html
617 621
618 Args: 622 Args:
619 keycode: A integer keycode to send to the device. 623 keycode: A integer keycode to send to the device.
620 timeout: timeout in seconds 624 timeout: timeout in seconds
621 retries: number of retries 625 retries: number of retries
622 626
623 Raises: 627 Raises:
624 CommandTimeoutError on timeout. 628 CommandTimeoutError on timeout.
625 DeviceUnreachableError on missing device. 629 DeviceUnreachableError on missing device.
626 """ 630 """
627 self.old_interface.SendKeyEvent(keycode) 631 self.RunShellCommand(['input', 'keyevent', format(keycode, 'd')],
632 check_return=True)
628 633
629 PUSH_CHANGED_FILES_DEFAULT_TIMEOUT = 10 * _DEFAULT_TIMEOUT 634 PUSH_CHANGED_FILES_DEFAULT_TIMEOUT = 10 * _DEFAULT_TIMEOUT
630 PUSH_CHANGED_FILES_DEFAULT_RETRIES = _DEFAULT_RETRIES 635 PUSH_CHANGED_FILES_DEFAULT_RETRIES = _DEFAULT_RETRIES
631 636
632 @decorators.WithTimeoutAndRetriesDefaults( 637 @decorators.WithTimeoutAndRetriesDefaults(
633 PUSH_CHANGED_FILES_DEFAULT_TIMEOUT, 638 PUSH_CHANGED_FILES_DEFAULT_TIMEOUT,
634 PUSH_CHANGED_FILES_DEFAULT_RETRIES) 639 PUSH_CHANGED_FILES_DEFAULT_RETRIES)
635 def PushChangedFiles(self, host_device_tuples, timeout=None, 640 def PushChangedFiles(self, host_device_tuples, timeout=None,
636 retries=None): 641 retries=None):
637 """Push files to the device, skipping files that don't need updating. 642 """Push files to the device, skipping files that don't need updating.
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
931 def Ls(self, device_path, timeout=None, retries=None): 936 def Ls(self, device_path, timeout=None, retries=None):
932 """Lists the contents of a directory on the device. 937 """Lists the contents of a directory on the device.
933 938
934 Args: 939 Args:
935 device_path: A string containing the path of the directory on the device 940 device_path: A string containing the path of the directory on the device
936 to list. 941 to list.
937 timeout: timeout in seconds 942 timeout: timeout in seconds
938 retries: number of retries 943 retries: number of retries
939 944
940 Returns: 945 Returns:
941 The contents of the directory specified by |device_path|. 946 A list of pairs (filename, stat) for each file found in the directory,
947 where the stat object has the properties: st_mode, st_size, and st_time.
942 948
943 Raises: 949 Raises:
950 AdbCommandFailedError if |device_path| does not specify a valid and
951 accessible directory in the device.
944 CommandTimeoutError on timeout. 952 CommandTimeoutError on timeout.
945 DeviceUnreachableError on missing device. 953 DeviceUnreachableError on missing device.
946 """ 954 """
947 return self.old_interface.ListPathContents(device_path) 955 return self.adb.Ls(device_path)
956
957 @decorators.WithTimeoutAndRetriesFromInstance()
958 def Stat(self, device_path, timeout=None, retries=None):
959 """Get the stat attributes of a file or directory on the device.
960
961 Args:
962 device_path: A string containing the path of from which to get attributes
963 on the device.
964 timeout: timeout in seconds
965 retries: number of retries
966
967 Returns:
968 A stat object with the properties: st_mode, st_size, and st_time
969
970 Raises:
971 CommandFailedError if device_path cannot be found on the device.
972 CommandTimeoutError on timeout.
973 DeviceUnreachableError on missing device.
974 """
975 dirname, target = device_path.rsplit('/', 1)
976 for filename, stat in self.adb.Ls(dirname):
977 if filename == target:
978 return stat
979 raise device_errors.CommandFailedError(
980 'Cannot find file or directory: %r' % device_path, str(self))
948 981
949 @decorators.WithTimeoutAndRetriesFromInstance() 982 @decorators.WithTimeoutAndRetriesFromInstance()
950 def SetJavaAsserts(self, enabled, timeout=None, retries=None): 983 def SetJavaAsserts(self, enabled, timeout=None, retries=None):
951 """Enables or disables Java asserts. 984 """Enables or disables Java asserts.
952 985
953 Args: 986 Args:
954 enabled: A boolean indicating whether Java asserts should be enabled 987 enabled: A boolean indicating whether Java asserts should be enabled
955 or disabled. 988 or disabled.
956 timeout: timeout in seconds 989 timeout: timeout in seconds
957 retries: number of retries 990 retries: number of retries
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
1161 Returns: 1194 Returns:
1162 A Parallelizer operating over |devices|. 1195 A Parallelizer operating over |devices|.
1163 """ 1196 """
1164 if not devices or len(devices) == 0: 1197 if not devices or len(devices) == 0:
1165 devices = pylib.android_commands.GetAttachedDevices() 1198 devices = pylib.android_commands.GetAttachedDevices()
1166 parallelizer_type = (parallelizer.Parallelizer if async 1199 parallelizer_type = (parallelizer.Parallelizer if async
1167 else parallelizer.SyncParallelizer) 1200 else parallelizer.SyncParallelizer)
1168 return parallelizer_type([ 1201 return parallelizer_type([
1169 d if isinstance(d, DeviceUtils) else DeviceUtils(d) 1202 d if isinstance(d, DeviceUtils) else DeviceUtils(d)
1170 for d in devices]) 1203 for d in devices])
OLDNEW
« no previous file with comments | « build/android/pylib/device/adb_wrapper_test.py ('k') | build/android/pylib/device/device_utils_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698