| #!/bin/bash -x |
| # Utilities to interact with android more easily |
| |
| function run_quiet() { eval "$* >/dev/null 2>&1"; } |
| |
| make_csv() { |
| out="" |
| in=$1 |
| for p in $in; do |
| if [ "x$out" == "x" ]; then |
| out=$p |
| else |
| out="$out,$p" |
| fi |
| done |
| echo $out |
| } |
| |
| make_spaces() { |
| out="" |
| in=$1 |
| for p in $in; do |
| if [ "x$out" == "x" ]; then |
| out=$p |
| else |
| out="$out $p" |
| fi |
| done |
| echo $out |
| } |
| |
| cmd_exists() { |
| which $1 > /dev/null |
| return $? |
| } |
| |
| do_adb_root() { |
| ADB="$1" |
| $ADB root > /dev/null 2>&1 |
| return $? |
| } |
| |
| die() { |
| exit_code=$1 |
| msg=$2 |
| c_error "$msg" |
| exit $exit_code |
| } |
| |
| die_if_no_androdeb() { |
| set +e |
| $ADB shell ls /data/androdeb/debian > /dev/null 2>&1 |
| if [ $? -ne 0 ]; then die 8 "Existing androdeb env not found on device. $1"; fi |
| set -e |
| } |
| |
| # Helper function to count number of source arguments in a list |
| # when more than one argument is supplied, it is assumed the last argument |
| # is a destination |
| count_sources() { |
| local source_count=$# |
| if [ $source_count -gt 1 ]; then |
| source_count=$((source_count - 1)) |
| fi |
| echo "$source_count" |
| } |
| |
| # Borrowed from project LISA. |
| ################################################################################ |
| # Logging functions |
| ################################################################################ |
| c_error() { |
| NOW=$(date +"%H:%m:%S") |
| # If there is only one parameter, let's assume it's just the message |
| if [ $# -gt 1 ]; then |
| local parent_lineno="$1" |
| local message="$2" |
| echo -e "${red}$NOW - ERROR: on or near line ${parent_lineno}: ${message}${nocol}" |
| return |
| fi |
| |
| local message="$1" |
| echo -e "${red}$NOW - ERROR : ${message}${nocol}" |
| } |
| |
| c_warning() { |
| NOW=$(date +"%H:%m:%S") |
| # If there is only one parameter, let's assume it's just the message |
| if [ $# -gt 1 ]; then |
| local parent_lineno="$1" |
| local message="$2" |
| echo -e "${yellow}$NOW - WARNING: on or near line ${parent_lineno}: ${message}${nocol}" |
| return |
| fi |
| local message="$1" |
| echo -e "${yellow}$NOW - WARNING : ${message}${nocol}" |
| } |
| |
| c_info() { |
| NOW=$(date +"%H:%m:%S") |
| # If there is only one parameter, let's assume it's just the message |
| if [ $# -gt 1 ]; then |
| local parent_lineno="$1" |
| local message="$2" |
| echo -e "${blue}$NOW - INFO: on or near line ${parent_lineno}: ${message}${nocol}" |
| return |
| fi |
| local message="$1" |
| echo -e "${blue}$NOW - INFO : ${message}${nocol}" |
| } |
| |
| d_notify() { |
| MESSAGE=$1 |
| ICON=$2 |
| # Let's try to send a desktop notification, |
| # silently fails if there is not support. |
| notify-send \ |
| --icon=$ICON \ |
| --urgency=critical \ |
| --expire-time=1500 \ |
| "Test Series" \ |
| "$MESSAGE" \ |
| 2>/dev/null |
| } |
| |
| my_tput() { |
| if [ "${TERM-dumb}" == dumb ]; then |
| return |
| fi |
| tput $* |
| } |
| |
| box_out() |
| { |
| local s=("$@") b w |
| for l in "${s[@]}"; do |
| ((w<${#l})) && { b="$l"; w="${#l}"; } |
| done |
| my_tput setaf 3 |
| echo -e "|-${b//?/-}-|" |
| for l in "${s[@]}"; do |
| printf '| %s%*s%s |\n' "$(my_tput setaf 4)" "-$w" "$l" "$(my_tput setaf 3)" |
| # echo "|-${b//?/-}-|" |
| done |
| echo "|-${b//?/-}-|" |
| my_tput sgr 0 |
| } |
| |
| |
| ################################################################################ |
| # Colors |
| ################################################################################ |
| |
| if [ -t 1 ]; then |
| ncolors=$(my_tput colors) |
| if [ -n "${ncolors}" ] && [ ${ncolors} -ge 8 ]; then |
| nocol='\e[0m' # No Color |
| white='\e[1;37m' |
| black='\e[0;30m' |
| blue='\e[0;34m' |
| lblue='\e[1;34m' |
| green='\e[0;32m' |
| lgreen='\e[1;32m' |
| cyan='\e[0;36m' |
| lcyan='\e[1;36m' |
| red='\e[0;31m' |
| lred='\e[1;31m' |
| purple='\e[0;35m' |
| lpurple='\e[1;35m' |
| brown='\e[0;33m' |
| yellow='\e[1;33m' |
| grey='\e[0;30m' |
| lgrey='\e[0;37m' |
| fi |
| fi |