import os, sys, subprocess, tempfile
import time

ANDROID_TMPDIR = '/data/local/tmp/Output'
ADB = os.environ.get('ADB', 'adb')

verbose = False
if os.environ.get('ANDROID_RUN_VERBOSE') == '1':
    verbose = True

def host_to_device_path(path):
    rel = os.path.relpath(path, "/")
    dev = os.path.join(ANDROID_TMPDIR, rel)
    return dev

def adb(args, attempts = 1, timeout_sec = 600):
    if verbose:
        print(args)
    tmpname = tempfile.mktemp()
    out = open(tmpname, 'w')
    ret = 255
    while attempts > 0 and ret != 0:
      attempts -= 1
      ret = subprocess.call(['timeout', str(timeout_sec), ADB] + args, stdout=out, stderr=subprocess.STDOUT)
    if ret != 0:
      print("adb command failed", args)
      print(tmpname)
      out.close()
      out = open(tmpname, 'r')
      print(out.read())
    out.close()
    os.unlink(tmpname)
    return ret

def pull_from_device(path):
    tmp = tempfile.mktemp()
    adb(['pull', path, tmp], 5, 60)
    text = open(tmp, 'r').read()
    os.unlink(tmp)
    return text

def push_to_device(path):
    dst_path = host_to_device_path(path)
    adb(['push', path, dst_path], 5, 60)
