private static String getGenericLabel(Device d) {
    // * Replace "'in'" with '"' (e.g. 2.7" QVGA instead of 2.7in QVGA)
    // * Use the same precision for all devices (all but one specify decimals)
    // * Add some leading space such that the dot ends up roughly in the
    //   same space
    // * Add in screen resolution and density
    String name = d.getName();
    if (name.equals("3.7 FWVGA slider")) { // $NON-NLS-1$
      // Fix metadata: this one entry doesn't have "in" like the rest of them
      name = "3.7in FWVGA slider"; // $NON-NLS-1$
    }

    Matcher matcher = PATTERN.matcher(name);
    if (matcher.matches()) {
      String size = matcher.group(1);
      String n = matcher.group(2);
      int dot = size.indexOf('.');
      if (dot == -1) {
        size = size + ".0";
        dot = size.length() - 2;
      }
      for (int i = 0; i < 2 - dot; i++) {
        size = ' ' + size;
      }
      name = size + "\" " + n;
    }

    return String.format(java.util.Locale.US, "%1$s (%2$s)", name, getResolutionString(d));
  }
 private static String getNexusLabel(Device d) {
   String name = d.getName();
   Screen screen = d.getDefaultHardware().getScreen();
   float length = (float) screen.getDiagonalLength();
   return String.format(
       java.util.Locale.US,
       "%1$s (%3$s\", %2$s)",
       name,
       getResolutionString(d),
       Float.toString(length));
 }
示例#3
0
 public Builder(Device d) {
   mName = d.getName();
   mManufacturer = d.getManufacturer();
   for (Software s : d.getAllSoftware()) {
     mSoftware.add(s.deepCopy());
   }
   for (State s : d.getAllStates()) {
     mState.add(s.deepCopy());
   }
   mSoftware.addAll(d.getAllSoftware());
   mState.addAll(d.getAllStates());
   mMeta = d.getMeta();
   mDefaultState = d.getDefaultState();
 }
示例#4
0
 @Override
 public boolean equals(Object o) {
   if (o == this) {
     return true;
   }
   if (!(o instanceof Device)) {
     return false;
   }
   Device d = (Device) o;
   return mName.equals(d.getName())
       && mManufacturer.equals(d.getManufacturer())
       && mSoftware.equals(d.getAllSoftware())
       && mState.equals(d.getAllStates())
       && mMeta.equals(d.getMeta())
       && mDefaultState.equals(d.getDefaultState());
 }
  static void show(final ConfigurationChooser chooser, ToolItem combo) {
    Configuration configuration = chooser.getConfiguration();
    Device current = configuration.getDevice();
    Menu menu = new Menu(chooser.getShell(), SWT.POP_UP);

    List<Device> deviceList = chooser.getDeviceList();
    Sdk sdk = Sdk.getCurrent();
    if (sdk != null) {
      AvdManager avdManager = sdk.getAvdManager();
      if (avdManager != null) {
        boolean separatorNeeded = false;
        AvdInfo[] avds = avdManager.getValidAvds();
        for (AvdInfo avd : avds) {
          for (Device device : deviceList) {
            if (device.getManufacturer().equals(avd.getDeviceManufacturer())
                && device.getName().equals(avd.getDeviceName())) {
              separatorNeeded = true;
              MenuItem item = new MenuItem(menu, SWT.CHECK);
              item.setText(avd.getName());
              item.setSelection(current == device);

              item.addSelectionListener(new DeviceMenuListener(chooser, device));
            }
          }
        }

        if (separatorNeeded) {
          @SuppressWarnings("unused")
          MenuItem separator = new MenuItem(menu, SWT.SEPARATOR);
        }
      }
    }

    // Group the devices by manufacturer, then put them in the menu.
    // If we don't have anything but Nexus devices, group them together rather than
    // make many manufacturer submenus.
    boolean haveNexus = false;
    boolean haveNonNexus = false;
    if (!deviceList.isEmpty()) {
      Map<String, List<Device>> manufacturers = new TreeMap<String, List<Device>>();
      for (Device device : deviceList) {
        List<Device> devices;
        if (isNexus(device)) {
          haveNexus = true;
        } else if (!isGeneric(device)) {
          haveNonNexus = true;
        }
        if (manufacturers.containsKey(device.getManufacturer())) {
          devices = manufacturers.get(device.getManufacturer());
        } else {
          devices = new ArrayList<Device>();
          manufacturers.put(device.getManufacturer(), devices);
        }
        devices.add(device);
      }
      if (haveNonNexus) {
        for (List<Device> devices : manufacturers.values()) {
          Menu manufacturerMenu = menu;
          if (manufacturers.size() > 1) {
            MenuItem item = new MenuItem(menu, SWT.CASCADE);
            item.setText(devices.get(0).getManufacturer());
            manufacturerMenu = new Menu(menu);
            item.setMenu(manufacturerMenu);
          }
          for (final Device device : devices) {
            MenuItem deviceItem = new MenuItem(manufacturerMenu, SWT.CHECK);
            deviceItem.setText(getGenericLabel(device));
            deviceItem.setSelection(current == device);
            deviceItem.addSelectionListener(new DeviceMenuListener(chooser, device));
          }
        }
      } else {
        List<Device> nexus = new ArrayList<Device>();
        List<Device> generic = new ArrayList<Device>();
        if (haveNexus) {
          // Nexus
          for (List<Device> devices : manufacturers.values()) {
            for (Device device : devices) {
              if (isNexus(device)) {
                if (device.getManufacturer().equals(GENERIC)) {
                  generic.add(device);
                } else {
                  nexus.add(device);
                }
              } else {
                generic.add(device);
              }
            }
          }
        }

        if (!nexus.isEmpty()) {
          sortNexusList(nexus);
          for (final Device device : nexus) {
            MenuItem item = new MenuItem(menu, SWT.CHECK);
            item.setText(getNexusLabel(device));
            item.setSelection(current == device);
            item.addSelectionListener(new DeviceMenuListener(chooser, device));
          }

          @SuppressWarnings("unused")
          MenuItem separator = new MenuItem(menu, SWT.SEPARATOR);
        }

        // Generate the generic menu.
        Collections.reverse(generic);
        for (final Device device : generic) {
          MenuItem item = new MenuItem(menu, SWT.CHECK);
          item.setText(getGenericLabel(device));
          item.setSelection(current == device);
          item.addSelectionListener(new DeviceMenuListener(chooser, device));
        }
      }
    }

    @SuppressWarnings("unused")
    MenuItem separator = new MenuItem(menu, SWT.SEPARATOR);

    ConfigurationMenuListener.addTogglePreviewModeAction(
        menu, "Preview All Screens", chooser, RenderPreviewMode.SCREENS);

    Rectangle bounds = combo.getBounds();
    Point location = new Point(bounds.x, bounds.y + bounds.height);
    location = combo.getParent().toDisplay(location);
    menu.setLocation(location.x, location.y);
    menu.setVisible(true);
  }
 private static boolean isNexus(Device device) {
   return device.getName().contains(NEXUS);
 }