gecko/build/mobile/droid.py

84 lines
2.6 KiB
Python

# 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