class DevicesCommand

Public Instance Methods

description() click to toggle source
# File lib/replicant/commands/devices_command.rb, line 2
def description
  "print a list of connected devices"
end
run() click to toggle source
# File lib/replicant/commands/devices_command.rb, line 6
def run
  adb = AdbCommand.new(@repl, "devices -l", :silent => true)
  device_lines = adb.execute.output.lines.to_a.reject do |line|
    line.strip.empty? || line.include?("daemon") || line.include?("List of devices")
  end

  device_lines.reject! { |l| l =~ /offline/ }
  device_ids = device_lines.map { |l| /([\S]+)\s+device/.match(l)[1] }
  device_products = device_lines.map { |l| /product:([\S]+)/.match(l).try(:[], 1) }

  device_names = device_lines.zip(device_ids).map do |l, id|
    /model:([\S]+)/.match(l).try(:[], 1) || detect_device_name(id)
  end

  device_indices = (1..device_ids.size).to_a
  devices = device_indices.zip(device_ids, device_names, device_products).map do |idx, id, name, product|
    Device.new(idx, id, humanize_name(name, product))
  end

  output ""
  output devices_string(devices)
  output ""
  devices
end

Private Instance Methods

detect_device_name(id) click to toggle source
# File lib/replicant/commands/devices_command.rb, line 33
def detect_device_name(id)
  if id.start_with?("emulator-")
    "Android emulator"
  else
    "Unknown device"
  end
end
devices_string(devices) click to toggle source
# File lib/replicant/commands/devices_command.rb, line 49
def devices_string(devices)
  device_string = if devices.any?
    padding = devices.map { |d| d.name.length }.max
    devices.map { |d| "[#{d.idx}] #{d.name}#{' ' * (padding - d.name.length)} | #{d.id}" }.join("\n")
  else
    "No devices found"
  end
end
humanize_name(name_string, product) click to toggle source
# File lib/replicant/commands/devices_command.rb, line 41
def humanize_name(name_string, product)
  if product == "vbox86p"
    "Genymotion " + name_string.gsub(/___[\d_]+___/, "_")
  else
    name_string
  end.gsub('_', ' ').squish
end