class BADB::Runner

Constants

CONFIG_FILE

Public Class Methods

new() click to toggle source
# File lib/badb.rb, line 10
def initialize
  read_settings
end

Public Instance Methods

adb_path() click to toggle source
# File lib/badb.rb, line 28
def adb_path
  return @adb_path if @adb_path
  @adb_path = `which adb`.strip
  if @adb_path.empty?
    raise "Can't find your adb command. Is your path set\?"
  end
  @adb_path
end
choose_device(opt={}) { |devices| ... } click to toggle source
# File lib/badb.rb, line 48
def choose_device(opt={})
  opt = {
    :all => false,
    :save_choice => true
  }.merge(opt)
  devices = get_devices
  devices = filter_latest_device(devices) if !opt[:all]
  
  if devices.empty?
    raise "No devices attached"
  elsif devices.size == 1
    yield devices[0] if block_given?
  else
    choose do |menu|
      menu.prompt = "Choose your adb device: "
      
      devices.each do |device|
        menu.choice device_label(device) do
          save_choice(device) if opt[:save_choice]
          yield device if block_given?
        end
      end
    end
  end
end
create_alias() click to toggle source
# File lib/badb.rb, line 139
def create_alias
  puts "Create an alias: "
  
  choose_device(:all => true,:save_choice => false) do |device|
    device_alias = ask("Enter an alias for #{device_label(device)}: ")
    Settings[:aliases][device] = device_alias
    save_settings
  end
end
current_device() click to toggle source
# File lib/badb.rb, line 100
def current_device
  devices = get_devices
  devices = filter_latest_device(devices)
  
  return devices[0] if devices.size == 1
  return nil
end
device_label(device) click to toggle source
# File lib/badb.rb, line 129
def device_label(device)
  device_alias = Settings[:aliases][device]
  
  if device_alias
    "#{device} (#{device_alias})"
  else
    device
  end
end
filter_latest_device(devices) click to toggle source
# File lib/badb.rb, line 82
def filter_latest_device(devices)
  hist = Settings[:device_history]
  
  latest_history_device = nil
  latest_history_index = -1
  
  devices.each do |d|
    index = hist.index(d)
    if index && index > latest_history_index
      latest_history_index = index
      latest_history_device = d
    end
  end
  
  return [latest_history_device] if latest_history_device
  devices
end
get_devices() click to toggle source
# File lib/badb.rb, line 37
def get_devices
  devices = []
  IO.popen("#{adb_path} devices").each_line do |line|
    line = line.strip
    if line =~ /^(.*)\tdevice$/
      devices << $1
    end
  end      
  devices
end
list_devices() click to toggle source
# File lib/badb.rb, line 149
def list_devices
  devices = get_devices
  current = current_device
  
  puts "List of devices: "
  devices.each do |d|
    
    if d == current_device
      puts device_label(d) + " #current"
    else
      puts device_label(d)
    end
  end
end
read_settings() click to toggle source
# File lib/badb.rb, line 14
def read_settings
  Settings.use :config_file
  Settings({
             :device_history => [],
             :aliases => {}
           })
  FileUtils.touch(CONFIG_FILE)
  Settings.read(CONFIG_FILE)
end
run() click to toggle source
# File lib/badb.rb, line 164
def run
  if !ARGV.empty?
    if ARGV[0] == "choose"
      choose_device(:all => true)
      return
    elsif ARGV[0] == "current"
      show_current_device
      return
    elsif ARGV[0] == "alias"
      create_alias
      return
    elsif ARGV[0] == "list"
      list_devices
      return
    elsif ARGV[0] == "help"
      show_help
      return
    elsif ARGV[0] == "adbhelp"
      Kernel.exec(adb_path,"help")
      return
    end
  end
  
  choose_device do |device|
    ENV["ANDROID_SERIAL"] = device
    # p [:device, device]
    # p [:cmd, adb_path, ARGV]
    Kernel.exec(adb_path,*ARGV)
  end
end
save_choice(device) click to toggle source
# File lib/badb.rb, line 74
def save_choice(device)
  hist = Settings[:device_history]
  hist.delete(device)
  hist << device
  Settings[:device_history] = hist
  save_settings
end
save_settings() click to toggle source
# File lib/badb.rb, line 24
def save_settings
  Settings.save!(CONFIG_FILE)
end
show_current_device() click to toggle source
# File lib/badb.rb, line 108
def show_current_device
  d = current_device
  
  if d
    puts "Current device is " + device_label(current_device)
  else
    puts "No current device."
  end
end
show_help() click to toggle source
# File lib/badb.rb, line 118
def show_help
  puts "badb - Better Android Debug Bridge\n\n"
  puts "Usage:"
  puts "badb choose - choose the current android device to map badb command to, via prompt"
  puts "badb alias - add a friendly name for a specific device, via prompt"
  puts "badb current - the current android device"
  puts "badb list - lists android devices, with aliases, indicating the current one"
  puts "badb help - this message"
  puts "badb adbhelp - the original adb help command"
end