#!/bin/bash
#
# Wait for the device to be charged enough for testing.

SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
SKIP_TOOLCHAIN_SETUP="true"
source $SCRIPT_DIR/android_setup.sh
source $SCRIPT_DIR/utils/setup_adb.sh

# Helper function used by get_battery_level. Parses the battery level from
# dumpsys output.
function _parse_battery_level {
  SPLIT=( $@ )

  HAS_BATTERY=1
  LEVEL=""

  for i in "${!SPLIT[@]}"; do
    if [ "${SPLIT[$i]}" = "level:" ]; then
      LEVEL="${SPLIT[$i+1]}"
    fi
    if [ "${SPLIT[$i]}" = "present:" ]; then
      PRESENT="$(echo "${SPLIT[$i+1]}" | tr -d '\r')"
      if [ "$PRESENT" = "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"
}

# Echo the battery level percentage of the attached Android device.
function get_battery_level {
  STATS="$($ADB $DEVICE_SERIAL shell dumpsys batteryproperties)"
  SPLIT=( $STATS )
  RV="$(_parse_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="$(_parse_battery_level ${SPLIT[@]})"
  if [ -n "$RV" ] && [ "$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.
  echo "0"
}

# Wait for battery charge.
DESIRED_BATTERY_LEVEL=80
CURRENT_BATTERY_LEVEL="$(get_battery_level)"
while [ "${CURRENT_BATTERY_LEVEL}" -lt "${DESIRED_BATTERY_LEVEL}" ]; do
  echo "Battery level is ${CURRENT_BATTERY_LEVEL}; waiting to charge to ${DESIRED_BATTERY_LEVEL}"
  sleep 5
  CURRENT_BATTERY_LEVEL="$(get_battery_level)"
done

echo "Charged!"
