adb_wait_for_device: Add battery fallback, support no battery
authorborenet <borenet@google.com>
Mon, 14 Dec 2015 18:07:36 +0000 (10:07 -0800)
committerCommit bot <commit-bot@chromium.org>
Mon, 14 Dec 2015 18:07:37 +0000 (10:07 -0800)
BUG=skia:4690
TBR=rmistry

Review URL: https://codereview.chromium.org/1528563002

platform_tools/android/bin/adb_wait_for_device

index 914b5fb..fc8a0f1 100755 (executable)
@@ -6,18 +6,58 @@ SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
 source $SCRIPT_DIR/android_setup.sh
 source $SCRIPT_DIR/utils/setup_adb.sh
 
-function get_battery_level {
-  STATS="$($ADB $DEVICE_SERIAL shell dumpsys batteryproperties)"
-  SPLIT=( $STATS )
+function _get_battery_level {
+  SPLIT=( $@ )
+
+  HAS_BATTERY=1
+  LEVEL=""
+
   for i in "${!SPLIT[@]}"; do
     if [ "${SPLIT[$i]}" = "level:" ]; then
-      echo "${SPLIT[$i+1]}"
-      return
+      LEVEL="${SPLIT[$i+1]}"
+    fi
+    if [ "${SPLIT[$i]}" = "present:" ]; then
+      PRESENT="$(echo "${SPLIT[$i+1]}" | tr -d '\r')"
+      if [ "$PRESENT" -eq "0" ]; then
+        HAS_BATTERY=0
+      fi
+      if [ "$PRESENT" = "false" ]; then
+        HAS_BATTERY=0
+      fi
     fi
   done
+
+  if [ "$HAS_BATTERY" = "1" ]; then
+    echo "$LEVEL" | tr -d '\r'
+    return
+  fi
+  # If there's no battery, report a full battery.
+  echo "Device has no battery." 1>&2
+  echo "100"
+}
+
+function get_battery_level {
+  STATS="$($ADB $DEVICE_SERIAL shell dumpsys batteryproperties)"
+  SPLIT=( $STATS )
+  RV="$(_get_battery_level ${SPLIT[@]})"
+  if [ -n "$RV" ]; then
+    echo "$RV"
+    return
+  fi
+
+  echo "Battery level fallback..." 1>&2
+
+  STATS="$($ADB $DEVICE_SERIAL shell dumpsys battery)"
+  SPLIT=( $STATS )
+  RV="$(_get_battery_level ${SPLIT[@]})"
+  if [ "$RV" != "-1" ]; then
+    echo "$RV"
+    return
+  fi
+
   echo "Could not determine battery level!" 1>&2
   # Just exit to prevent hanging forever or failing the build.
-  exit 0
+  echo "0"
 }
 
 set -e