blob: 9b069c995e15ab52244b7db7711cc2982169e000 [file] [log] [blame]
#!/usr/bin/env python3
import time
from uiautomator import Device
import sys
import subprocess
import pathlib
# Prepare the DUT
def prepare_dut(serial, scenarios_dir, data_dir, apps):
# Copy the scenarios
ret = subprocess.run(['adb', '-s', serial, 'push', scenarios_dir,
'/sdcard/viser'], stdout=subprocess.PIPE, stderr=subprocess.PIPE,
universal_newlines=True)
if 0 < ret.returncode:
print('Could not push the scenarios, error was: {}'.format(ret.stderr),
file=sys.stderr)
else:
print('Scenarios pushed.')
# Copy the scenarios data
ret = subprocess.run(['adb', '-s', serial, 'push', data_dir,
'/sdcard/viser/data'], stdout=subprocess.PIPE,
stderr=subprocess.PIPE, universal_newlines=True)
if 0 < ret.returncode:
print('Could not push the scenarios data, error was: {}'.format(ret.stderr),
file=sys.stderr)
else:
print('Scenarios data pushed.')
# Install the smartviser apps
for app in apps:
ret = subprocess.run(['adb', '-s', serial, 'install', '-r', app],
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
universal_newlines=True)
if 0 < ret.returncode:
print('Could not install app `{}`, error was: {}'.format(app,
ret.stderr), file=sys.stderr)
else:
print('App `{}` installed.'.format(app))
# Grant the permissions through the UI
def configure_perms(dut):
prompt = dut(resourceId='android:id/content') \
.child_by_text('You need to grant access for the Permissions Group '
'Calendar Camera Contacts Microphone SMS Storage Telephone Location',
className='android.widget.LinearLayout') \
.child(text='OK', className='android.widget.Button').click()
# Accept any permission that is asked for
prompt = dut(resourceId='com.android.packageinstaller:id/permission_allow_button',
className='android.widget.Button')
while prompt.exists:
prompt.click()
# Input the credentials
dut(resourceId='android:id/content') \
.child(text='Username') \
.child(className='android.widget.EditText') \
.set_text('borjan@fairphone.com')
dut(resourceId='android:id/content') \
.child(text='Password') \
.child(className='android.widget.EditText') \
.set_text('Rickisalso1niceguy!')
# Sign in
dut(resourceId='android:id/content') \
.child(text='Sign in', className='android.widget.Button') \
.click()
def configure_sms(dut):
# TODO wait for the connection to be established and time-out
prompt = dut(resourceId='android:id/content') \
.child(text='Viser must be your SMS app to send messages')
while not prompt.exists:
time.sleep(1)
# Make viser the default SMS app
dut(resourceId='android:id/content') \
.child_by_text('Viser must be your SMS app to send messages',
className='android.widget.LinearLayout') \
.child(text='OK', className='android.widget.Button') \
.click()
dut(resourceId='android:id/content') \
.child_by_text('Change SMS app?', className='android.widget.LinearLayout') \
.child(text='Yes', className='android.widget.Button') \
.click()
def configure_settings(dut):
# Set the e-mail account
dut(text='Settings', className='android.widget.TextView') \
.click()
dut(resourceId='android:id/list') \
.child_by_text('User settings', className='android.widget.LinearLayout') \
.click()
dut(resourceId='android:id/list') \
.child_by_text('Email account', className='android.widget.LinearLayout') \
.click()
prompt = dut(resourceId='android:id/content') \
.child_by_text('Email account', className='android.widget.LinearLayout')
prompt.child(resourceId='android:id/edit') \
.set_text('fairphone.viser@gmail.com')
prompt.child(text='OK', className='android.widget.Button') \
.click()
dut(resourceId='android:id/list') \
.child_by_text('Email password', className='android.widget.LinearLayout') \
.click()
dut(text='Password :') \
.child(className='android.widget.EditText') \
.set_text('fairphoneviser2017')
dut(description='OK', className='android.widget.TextView') \
.click()
dut.press.back()
dut.press.back()
serials = []
if len(sys.argv) > 1:
serials.append(sys.argv[1])
else:
# List devices attached to adb
ret = subprocess.run(
"adb devices | grep -E '^[a-z0-9-]+\s+device$' | awk '{{print $1}}'",
shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
universal_newlines=True)
if 0 < ret.returncode:
# TODO handle the error
raise Exception('Failed to list adb devices')
elif ret.stdout:
for line in ret.stdout.splitlines():
serial = line.strip()
if serial:
serials.append(serial)
for serial in serials:
print('Configuring device {}'.format(serial))
dut = Device(serial)
# Push the scenarios, their data, and install the apps
prepare_dut(serial, '../scenarios', '../scenarios-data', [
'../../vendor/smartviser/viser/prebuilts/apk/com.smartviser.demogame.apk',
'../../vendor/smartviser/viser/prebuilts/apk/com.lunarlabs.panda.proxy.apk',
'../../vendor/smartviser/viser/prebuilts/apk/com.lunarlabs.panda.apk'
])
# Start the viser app
ret = subprocess.run(['adb', '-s', serial, 'shell', 'monkey', '-p',
'com.lunarlabs.panda', '-c', 'android.intent.category.LAUNCHER',
'1'], stdout=subprocess.PIPE, stderr=subprocess.PIPE,
universal_newlines=True)
if 0 < ret.returncode:
print('Could not start the viser app, error was: {}'.format(app,
ret.stderr), file=sys.stderr)
exit(-1)
configure_perms(dut)
# TODO DO NOT DO THE FOLLOWING IF NO SIM CARD IS IN THE DUT
# time.sleep(10)
# configure_sms(dut)
configure_settings(dut)