Index: build/android/pylib/android_commands.py |
diff --git a/build/android/pylib/android_commands.py b/build/android/pylib/android_commands.py |
index 08ffa6e2ba282b120acdc3fc47a37bb66515c622..0ec96cb0728e0a0d01ddf7c7f4d05e2d377740ac 100644 |
--- a/build/android/pylib/android_commands.py |
+++ b/build/android/pylib/android_commands.py |
@@ -530,25 +530,14 @@ class AndroidCommands(object): |
return 0 |
return processes_killed |
- def StartActivity(self, package, activity, wait_for_completion=False, |
- action='android.intent.action.VIEW', |
- category=None, data=None, |
- extras=None, trace_file_name=None, |
- force_stop=False): |
- """Starts |package|'s activity on the device. |
+ def _GetActivityCommand(self, package, activity, wait_for_completion, action, |
+ category, data, extras, trace_file_name, force_stop): |
+ """Creates command to start |package|'s activity on the device. |
- Args: |
- package: Name of package to start (e.g. 'com.google.android.apps.chrome'). |
- activity: Name of activity (e.g. '.Main' or |
- 'com.google.android.apps.chrome.Main'). |
- wait_for_completion: wait for the activity to finish launching (-W flag). |
- action: string (e.g. "android.intent.action.MAIN"). Default is VIEW. |
- category: string (e.g. "android.intent.category.HOME") |
- data: Data string to pass to activity (e.g. 'http://www.example.com/'). |
- extras: Dict of extras to pass to activity. Values are significant. |
- trace_file_name: If used, turns on and saves the trace to this file name. |
- force_stop: force stop the target app before starting the activity (-S |
- flag). |
+ Args - as for StartActivity |
+ |
+ Returns: |
+ the command to run on the target to start the activity |
""" |
cmd = 'am start -a %s' % action |
if force_stop: |
@@ -576,8 +565,56 @@ class AndroidCommands(object): |
cmd += ' %s %s' % (key, value) |
if trace_file_name: |
cmd += ' --start-profiler ' + trace_file_name |
+ return cmd |
+ |
+ def StartActivity(self, package, activity, wait_for_completion=False, |
+ action='android.intent.action.VIEW', |
+ category=None, data=None, |
+ extras=None, trace_file_name=None, |
+ force_stop=False): |
+ """Starts |package|'s activity on the device. |
+ |
+ Args: |
+ package: Name of package to start (e.g. 'com.google.android.apps.chrome'). |
+ activity: Name of activity (e.g. '.Main' or |
+ 'com.google.android.apps.chrome.Main'). |
+ wait_for_completion: wait for the activity to finish launching (-W flag). |
+ action: string (e.g. "android.intent.action.MAIN"). Default is VIEW. |
+ category: string (e.g. "android.intent.category.HOME") |
+ data: Data string to pass to activity (e.g. 'http://www.example.com/'). |
+ extras: Dict of extras to pass to activity. Values are significant. |
+ trace_file_name: If used, turns on and saves the trace to this file name. |
+ force_stop: force stop the target app before starting the activity (-S |
+ flag). |
+ """ |
+ cmd = self._GetActivityCommand(package, activity, wait_for_completion, |
+ action, category, data, extras, |
+ trace_file_name, force_stop) |
self.RunShellCommand(cmd) |
+ def StartActivityTimed(self, package, activity, wait_for_completion=False, |
+ action='android.intent.action.VIEW', |
+ category=None, data=None, |
+ extras=None, trace_file_name=None, |
+ force_stop=False): |
+ """Starts |package|'s activity on the device, returning the start time |
+ |
+ Args - as for StartActivity |
+ |
+ Returns: |
+ a timestamp string for the time at which the activity started |
+ """ |
+ cmd = self._GetActivityCommand(package, activity, wait_for_completion, |
+ action, category, data, extras, |
+ trace_file_name, force_stop) |
+ self.StartMonitoringLogcat() |
+ self.RunShellCommand('log starting activity; ' + cmd) |
+ activity_started_re = re.compile('.*starting activity.*') |
+ m = self.WaitForLogMatch(activity_started_re, None) |
+ assert m |
+ start_line = m.group(0) |
+ return GetLogTimestamp(start_line, self.GetDeviceYear()) |
+ |
def GoHome(self): |
"""Tell the device to return to the home screen. Blocks until completion.""" |
self.RunShellCommand('am start -W ' |
@@ -858,7 +895,7 @@ class AndroidCommands(object): |
raise pexpect.TIMEOUT( |
'Timeout (%ds) exceeded waiting for pattern "%s" (tip: use -vv ' |
'to debug)' % |
- (self._logcat.timeout, success_re.pattern)) |
+ (timeout, success_re.pattern)) |
except pexpect.EOF: |
# It seems that sometimes logcat can end unexpectedly. This seems |
# to happen during Chrome startup after a reboot followed by a cache |