# 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