Reuse device display code from sdk-common

Change-Id: I49b5cd8352587a723d91d660a3f782322aa33033
diff --git a/eclipse/dictionary.txt b/eclipse/dictionary.txt
index 8615a46..bc901fa 100644
--- a/eclipse/dictionary.txt
+++ b/eclipse/dictionary.txt
@@ -81,6 +81,7 @@
 dir
 dirs
 discoverable
+displayable
 ditto
 div
 docs
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/DeviceMenuListener.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/DeviceMenuListener.java
index 4890fe5..4489b52 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/DeviceMenuListener.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/DeviceMenuListener.java
@@ -16,12 +16,18 @@
 
 package com.android.ide.eclipse.adt.internal.editors.layout.configuration;
 
+import static com.android.ide.common.rendering.HardwareConfigHelper.MANUFACTURER_GENERIC;
+import static com.android.ide.common.rendering.HardwareConfigHelper.getGenericLabel;
+import static com.android.ide.common.rendering.HardwareConfigHelper.getNexusLabel;
+import static com.android.ide.common.rendering.HardwareConfigHelper.isGeneric;
+import static com.android.ide.common.rendering.HardwareConfigHelper.isNexus;
+import static com.android.ide.common.rendering.HardwareConfigHelper.sortNexusList;
+
 import com.android.annotations.NonNull;
 import com.android.annotations.Nullable;
 import com.android.ide.eclipse.adt.internal.editors.layout.gle2.RenderPreviewMode;
 import com.android.ide.eclipse.adt.internal.sdk.Sdk;
 import com.android.sdklib.devices.Device;
-import com.android.sdklib.devices.Screen;
 import com.android.sdklib.internal.avd.AvdInfo;
 import com.android.sdklib.internal.avd.AvdManager;
 
@@ -36,23 +42,15 @@
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 /**
  * The {@linkplain DeviceMenuListener} class is responsible for generating the device
  * menu in the {@link ConfigurationChooser}.
  */
 class DeviceMenuListener extends SelectionAdapter {
-    private static final String NEXUS = "Nexus";       //$NON-NLS-1$
-    private static final String GENERIC = "Generic";   //$NON-NLS-1$
-    private static Pattern PATTERN = Pattern.compile(
-            "(\\d+\\.?\\d*)in (.+?)( \\(.*Nexus.*\\))?"); //$NON-NLS-1$
-
     private final ConfigurationChooser mConfigChooser;
     private final Device mDevice;
 
@@ -148,7 +146,7 @@
                     for (List<Device> devices : manufacturers.values()) {
                         for (Device device : devices) {
                             if (isNexus(device)) {
-                                if (device.getManufacturer().equals(GENERIC)) {
+                                if (device.getManufacturer().equals(MANUFACTURER_GENERIC)) {
                                     generic.add(device);
                                 } else {
                                     nexus.add(device);
@@ -197,96 +195,4 @@
         menu.setLocation(location.x, location.y);
         menu.setVisible(true);
     }
-
-    private static String getNexusLabel(Device d) {
-        String name = d.getName();
-        Screen screen = d.getDefaultHardware().getScreen();
-        float length = (float) screen.getDiagonalLength();
-        // Round dimensions to the nearest tenth
-        length = Math.round(10 * length) / 10.0f;
-        return String.format(java.util.Locale.US, "%1$s (%3$s\", %2$s)",
-                name, getResolutionString(d), Float.toString(length));
-    }
-
-    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));
-    }
-
-    @Nullable
-    private static String getResolutionString(Device device) {
-        Screen screen = device.getDefaultHardware().getScreen();
-        return String.format(java.util.Locale.US,
-                "%1$d \u00D7 %2$d: %3$s", // U+00D7: Unicode multiplication sign
-                screen.getXDimension(),
-                screen.getYDimension(),
-                screen.getPixelDensity().getResourceValue());
-    }
-
-    private static boolean isGeneric(Device device) {
-        return device.getManufacturer().equals(GENERIC);
-    }
-
-    private static boolean isNexus(Device device) {
-        return device.getName().contains(NEXUS);
-    }
-
-    private static void sortNexusList(List<Device> list) {
-        Collections.sort(list, new Comparator<Device>() {
-            @Override
-            public int compare(Device device1, Device device2) {
-                // Descending order of age
-                return nexusRank(device2) - nexusRank(device1);
-            }
-            private int nexusRank(Device device) {
-                String name = device.getName();
-                if (name.endsWith(" One")) {     //$NON-NLS-1$
-                    return 1;
-                }
-                if (name.endsWith(" S")) {       //$NON-NLS-1$
-                    return 2;
-                }
-                if (name.startsWith("Galaxy")) { //$NON-NLS-1$
-                    return 3;
-                }
-                if (name.endsWith(" 7")) {       //$NON-NLS-1$
-                    return 4;
-                }
-                if (name.endsWith(" 10")) {       //$NON-NLS-1$
-                    return 5;
-                }
-                if (name.endsWith(" 4")) {       //$NON-NLS-1$
-                    return 6;
-                }
-
-                return 7;
-            }
-        });
-    }
 }