Index: build/android/pylib/device/intent.py |
diff --git a/build/android/pylib/device/intent.py b/build/android/pylib/device/intent.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..333b9f1f10878aded59556f25fe045495a3f4221 |
--- /dev/null |
+++ b/build/android/pylib/device/intent.py |
@@ -0,0 +1,113 @@ |
+# Copyright 2014 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+"""Manages intents and associated information. |
+ |
+This is generally intended to be used with functions that calls Android's |
+Am command. |
+""" |
+ |
+class Intent(object): |
+ |
+ def __init__(self, action='android.intent.action.VIEW', activity=None, |
+ category=None, component=None, data=None, extras=None, |
+ flags=None, package=None): |
+ """Creates an Intent. |
+ |
+ Args: |
+ action: A string containing the action. |
+ activity: A string that, with |package|, can be used to specify the |
+ component. |
+ category: A string or list containing any categories. |
+ component: A string that specifies the component to send the intent to. |
+ data: A string containing a data URI. |
+ extras: A dict containing extra parameters to be passed along with the |
+ intent. |
+ flags: A string containing flags to pass. |
+ package: A string that, with activity, can be used to specify the |
+ component. |
+ """ |
+ self._action = action |
+ self._activity = activity |
+ if isinstance(category, list) or category is None: |
+ self._category = category |
+ else: |
+ self._category = [category] |
+ self._component = component |
+ self._data = data |
+ self._extras = extras |
+ self._flags = flags |
+ self._package = package |
+ |
+ if self._component and '/' in component: |
+ self._package, self._activity = component.split('/', 1) |
+ elif self._package and self._activity: |
+ self._component = '%s/%s' % (package, activity) |
+ |
+ @property |
+ def action(self): |
+ return self._action |
+ |
+ @property |
+ def activity(self): |
+ return self._activity |
+ |
+ @property |
+ def category(self): |
+ return self._category |
+ |
+ @property |
+ def component(self): |
+ return self._component |
+ |
+ @property |
+ def data(self): |
+ return self._data |
+ |
+ @property |
+ def extras(self): |
+ return self._extras |
+ |
+ @property |
+ def flags(self): |
+ return self._flags |
+ |
+ @property |
+ def package(self): |
+ return self._package |
+ |
+ @property |
+ def am_args(self): |
+ """Returns the intent as a list of arguments for the activity manager. |
+ |
+ For details refer to the specification at: |
+ - http://developer.android.com/tools/help/adb.html#IntentSpec |
+ """ |
+ args = [] |
+ if self.action: |
+ args.extend(['-a', self.action]) |
+ if self.data: |
+ args.extend(['-d', self.data]) |
+ if self.category: |
+ args.extend(arg for cat in self.category for arg in ('-c', cat)) |
+ if self.component: |
+ args.extend(['-n', self.component]) |
+ if self.flags: |
+ args.extend(['-f', self.flags]) |
+ if self.extras: |
+ for key, value in self.extras.iteritems(): |
+ if value is None: |
+ args.extend(['--esn', key]) |
+ elif isinstance(value, str): |
+ args.extend(['--es', key, value]) |
+ elif isinstance(value, bool): |
+ args.extend(['--ez', key, str(value)]) |
+ elif isinstance(value, int): |
+ args.extend(['--ei', key, str(value)]) |
+ elif isinstance(value, float): |
+ args.extend(['--ef', key, str(value)]) |
+ else: |
+ raise NotImplementedError( |
+ 'Intent does not know how to pass %s extras' % type(value)) |
+ return args |