| # This Source Code Form is subject to the terms of the Mozilla Public |
| # License, v. 2.0. If a copy of the MPL was not distributed with this file, |
| # You can obtain one at http://mozilla.org/MPL/2.0/. |
| |
| from devicemanagerADB import DeviceManagerADB |
| from devicemanagerSUT import DeviceManagerSUT |
| import StringIO |
| |
| |
| class DroidMixin(object): |
| """Mixin to extend DeviceManager with Android-specific functionality""" |
| |
| def launchApplication(self, appName, activityName, intent, url=None, |
| extras=None): |
| """ |
| Launches an Android application |
| returns: |
| success: True |
| failure: False |
| """ |
| # only one instance of an application may be running at once |
| if self.processExist(appName): |
| return False |
| |
| acmd = ["am", "start", "-W", "-n", "%s/%s" % (appName, activityName)] |
| |
| if intent: |
| acmd.extend(["-a", intent]) |
| |
| if extras: |
| for (key, val) in extras.iteritems(): |
| if type(val) is int: |
| extraTypeParam = "--ei" |
| elif type(val) is bool: |
| extraTypeParam = "--ez" |
| else: |
| extraTypeParam = "--es" |
| acmd.extend([extraTypeParam, str(key), str(val)]) |
| |
| if url: |
| acmd.extend(["-d", url]) |
| |
| # shell output not that interesting and debugging logs should already |
| # show what's going on here... so just create an empty memory buffer |
| # and ignore |
| shellOutput = StringIO.StringIO() |
| if self.shell(acmd, shellOutput) == 0: |
| return True |
| |
| return False |
| |
| def launchFennec(self, appName, intent="android.intent.action.VIEW", |
| mozEnv=None, extraArgs=None, url=None): |
| """ |
| Convenience method to launch Fennec on Android with various debugging |
| arguments |
| WARNING: FIXME: This would go better in mozrunner. Please do not |
| use this method if you are not comfortable with it going away sometime |
| in the near future |
| returns: |
| success: True |
| failure: False |
| """ |
| extras = {} |
| |
| if mozEnv: |
| # mozEnv is expected to be a dictionary of environment variables: Fennec |
| # itself will set them when launched |
| for (envCnt, (envkey, envval)) in enumerate(mozEnv.iteritems()): |
| extras["env" + str(envCnt)] = envkey + "=" + envval |
| |
| # Additional command line arguments that fennec will read and use (e.g. |
| # with a custom profile) |
| if extraArgs: |
| extras['args'] = " ".join(extraArgs) |
| |
| return self.launchApplication(appName, ".App", intent, url=url, |
| extras=extras) |
| |
| |
| class DroidADB(DeviceManagerADB, DroidMixin): |
| pass |
| |
| |
| class DroidSUT(DeviceManagerSUT, DroidMixin): |
| pass |