#!/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