Relax startup scripts to devices not supporting nfc
This also extends apk_masseur.py with an option to store the dex compressed.
Change-Id: I4695acc9d7f41f4020225f54cdea93de384dce72
diff --git a/tools/startup/adb_utils.py b/tools/startup/adb_utils.py
index 6ce19ab..0a4ae59 100755
--- a/tools/startup/adb_utils.py
+++ b/tools/startup/adb_utils.py
@@ -41,10 +41,14 @@
OFF_UNLOCKED = 2
ON_LOCKED = 3
ON_UNLOCKED = 4
+ UNKNOWN = 5
def is_off(self):
return self == ScreenState.OFF_LOCKED or self == ScreenState.OFF_UNLOCKED
+ def is_off_or_unknown(self):
+ return self.is_off() or self.is_unknown()
+
def is_on(self):
return self == ScreenState.ON_LOCKED or self == ScreenState.ON_UNLOCKED
@@ -54,6 +58,15 @@
def is_on_and_unlocked(self):
return self == ScreenState.ON_UNLOCKED
+ def is_on_and_unlocked_or_unknown(self):
+ return self.is_on_and_unlocked() or self.is_unknown()
+
+ def is_on_or_unknown(self):
+ return self.is_on() or self.is_unknown()
+
+ def is_unknown(self):
+ return self == ScreenState.UNKNOWN
+
def broadcast(action, component, device_id=None):
print('Sending broadcast %s' % action)
@@ -147,13 +160,13 @@
def ensure_screen_on(device_id=None):
if get_screen_state(device_id).is_off():
toggle_screen(device_id)
- assert get_screen_state(device_id).is_on()
+ assert get_screen_state(device_id).is_on_or_unknown()
def ensure_screen_off(device_id=None):
if get_screen_state(device_id).is_on():
toggle_screen(device_id)
- assert get_screen_state(device_id).is_off()
+ assert get_screen_state(device_id).is_off_or_unknown()
def force_compilation(app_id, device_id=None):
@@ -243,7 +256,11 @@
def get_screen_state(device_id=None):
cmd = create_adb_cmd('shell dumpsys nfc', device_id)
- stdout = subprocess.check_output(cmd).decode('utf-8').strip()
+ process_result = subprocess.run(cmd, capture_output=True)
+ stderr = process_result.stderr.decode('utf-8')
+ if "Can't find service: nfc" in stderr:
+ return ScreenState.UNKNOWN
+ stdout = process_result.stdout.decode('utf-8').strip()
screen_state_value = None
for line in stdout.splitlines():
if line.startswith('mScreenState='):
@@ -480,6 +497,8 @@
def unlock(device_id=None, device_pin=None):
ensure_screen_on(device_id)
screen_state = get_screen_state(device_id)
+ if screen_state.is_unknown():
+ return
assert screen_state.is_on(), 'was %s' % screen_state
if screen_state.is_on_and_locked():
if device_pin is not None: