Merge change Ie905f9b5 into eclair
* changes:
Add support for xdpi and ydpi in the device config for the GLE.
diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/GraphicalEditorPart.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/GraphicalEditorPart.java
index ef0db5a..f6fa0ea 100755
--- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/GraphicalEditorPart.java
+++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/GraphicalEditorPart.java
@@ -24,8 +24,6 @@
import com.android.ide.eclipse.adt.internal.editors.uimodel.UiDocumentNode;
import com.android.ide.eclipse.adt.internal.editors.uimodel.UiElementNode;
import com.android.ide.eclipse.adt.internal.resources.configurations.FolderConfiguration;
-import com.android.ide.eclipse.adt.internal.resources.configurations.PixelDensityQualifier;
-import com.android.ide.eclipse.adt.internal.resources.configurations.PixelDensityQualifier.Density;
import com.android.ide.eclipse.adt.internal.resources.manager.ProjectResources;
import com.android.ide.eclipse.adt.internal.resources.manager.ResourceFile;
import com.android.ide.eclipse.adt.internal.resources.manager.ResourceFolderType;
@@ -849,22 +847,14 @@
Rectangle rect = getBounds();
boolean isProjectTheme = mConfigComposite.isProjectTheme();
- // FIXME pass the density/dpi from somewhere (resource config or skin).
- // For now, get it from the config
- int density = Density.MEDIUM.getDpiValue();
- PixelDensityQualifier qual =
- mConfigComposite.getCurrentConfig().getPixelDensityQualifier();
- if (qual != null) {
- int d = qual.getValue().getDpiValue();
- if (d > 0) {
- density = d;
- }
- }
+ int density = mConfigComposite.getDensity().getDpiValue();
+ float xdpi = mConfigComposite.getXDpi();
+ float ydpi = mConfigComposite.getYDpi();
ILayoutResult result = computeLayout(bridge, parser,
iProject /* projectKey */,
rect.width, rect.height, !mConfigComposite.getClipping(),
- density, density, density,
+ density, xdpi, ydpi,
theme, isProjectTheme,
configuredProjectRes, frameworkResources, mProjectCallback,
mLogger);
diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/GraphicalLayoutEditor.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/GraphicalLayoutEditor.java
index f3fd97a..4f4ebb1 100644
--- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/GraphicalLayoutEditor.java
+++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/GraphicalLayoutEditor.java
@@ -31,8 +31,6 @@
import com.android.ide.eclipse.adt.internal.editors.uimodel.UiDocumentNode;
import com.android.ide.eclipse.adt.internal.editors.uimodel.UiElementNode;
import com.android.ide.eclipse.adt.internal.resources.configurations.FolderConfiguration;
-import com.android.ide.eclipse.adt.internal.resources.configurations.PixelDensityQualifier;
-import com.android.ide.eclipse.adt.internal.resources.configurations.PixelDensityQualifier.Density;
import com.android.ide.eclipse.adt.internal.resources.manager.ProjectResources;
import com.android.ide.eclipse.adt.internal.resources.manager.ResourceFile;
import com.android.ide.eclipse.adt.internal.resources.manager.ResourceFolderType;
@@ -949,22 +947,14 @@
Rectangle rect = getBounds();
boolean isProjectTheme = mConfigComposite.isProjectTheme();
- // FIXME pass the density/dpi from somewhere (resource config or skin).
- // For now, get it from the config
- int density = Density.MEDIUM.getDpiValue();
- PixelDensityQualifier qual =
- mConfigComposite.getCurrentConfig().getPixelDensityQualifier();
- if (qual != null) {
- int d = qual.getValue().getDpiValue();
- if (d > 0) {
- density = d;
- }
- }
+ int density = mConfigComposite.getDensity().getDpiValue();
+ float xdpi = mConfigComposite.getXDpi();
+ float ydpi = mConfigComposite.getYDpi();
ILayoutResult result = computeLayout(bridge, parser,
iProject /* projectKey */,
rect.width, rect.height, !mConfigComposite.getClipping(),
- density, density, density,
+ density, xdpi, ydpi,
theme, isProjectTheme,
configuredProjectRes, frameworkResources, mProjectCallback,
mLogger);
diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationComposite.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationComposite.java
index 969050a..598b11d 100644
--- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationComposite.java
+++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationComposite.java
@@ -20,11 +20,13 @@
import com.android.ide.eclipse.adt.internal.resources.ResourceType;
import com.android.ide.eclipse.adt.internal.resources.configurations.FolderConfiguration;
import com.android.ide.eclipse.adt.internal.resources.configurations.LanguageQualifier;
+import com.android.ide.eclipse.adt.internal.resources.configurations.PixelDensityQualifier;
import com.android.ide.eclipse.adt.internal.resources.configurations.RegionQualifier;
import com.android.ide.eclipse.adt.internal.resources.configurations.ResourceQualifier;
import com.android.ide.eclipse.adt.internal.resources.configurations.ScreenDimensionQualifier;
import com.android.ide.eclipse.adt.internal.resources.configurations.ScreenOrientationQualifier;
import com.android.ide.eclipse.adt.internal.resources.configurations.VersionQualifier;
+import com.android.ide.eclipse.adt.internal.resources.configurations.PixelDensityQualifier.Density;
import com.android.ide.eclipse.adt.internal.resources.configurations.ScreenOrientationQualifier.ScreenOrientation;
import com.android.ide.eclipse.adt.internal.resources.manager.ProjectResources;
import com.android.ide.eclipse.adt.internal.sdk.DeviceConfiguration;
@@ -84,6 +86,8 @@
private boolean mClipping = true;
+ private DeviceConfiguration mCurrentDevice;
+
/**
* Interface implemented by the part which owns a {@link ConfigurationComposite}.
* This notifies the owners when the configuration change.
@@ -227,15 +231,73 @@
config.set(mCurrentConfig);
}
+ /**
+ * Returns the currently selected {@link Density}. This is guaranteed to be non null.
+ */
+ public Density getDensity() {
+ if (mCurrentConfig != null) {
+ PixelDensityQualifier qual = mCurrentConfig.getPixelDensityQualifier();
+ if (qual != null) {
+ // just a sanity check
+ Density d = qual.getValue();
+ if (d != Density.NODPI) {
+ return d;
+ }
+ }
+ }
+
+ // no config? return medium as the default density.
+ return Density.MEDIUM;
+ }
+
+ /**
+ * Returns the current device xdpi.
+ */
+ public float getXDpi() {
+ if (mCurrentDevice != null) {
+ float dpi = mCurrentDevice.getXDpi();
+ if (Float.isNaN(dpi) == false) {
+ return dpi;
+ }
+ }
+
+ // get the pixel density as the density.
+ return getDensity().getDpiValue();
+ }
+
+ /**
+ * Returns the current device ydpi.
+ */
+ public float getYDpi() {
+ if (mCurrentDevice != null) {
+ float dpi = mCurrentDevice.getYDpi();
+ if (Float.isNaN(dpi) == false) {
+ return dpi;
+ }
+ }
+
+ // get the pixel density as the density.
+ return getDensity().getDpiValue();
+ }
+
public Rectangle getScreenBounds() {
// get the orientation from the current device config
ScreenOrientationQualifier qual = mCurrentConfig.getScreenOrientationQualifier();
- ScreenOrientation orientation = qual.getValue();
+ ScreenOrientation orientation = ScreenOrientation.PORTRAIT;
+ if (qual != null) {
+ orientation = qual.getValue();
+ }
// get the device screen dimension
ScreenDimensionQualifier qual2 = mCurrentConfig.getScreenDimensionQualifier();
- int s1 = qual2.getValue1();
- int s2 = qual2.getValue2();
+ int s1, s2;
+ if (qual2 != null) {
+ s1 = qual2.getValue1();
+ s2 = qual2.getValue2();
+ } else {
+ s1 = 480;
+ s2 = 320;
+ }
switch (orientation) {
default:
@@ -512,33 +574,36 @@
private void onDeviceChange(boolean recomputeLayout) {
int deviceIndex = mDeviceList.getSelectionIndex();
- DeviceConfiguration device = mDevices.get(deviceIndex);
+ if (deviceIndex != -1) {
+ mCurrentDevice = mDevices.get(deviceIndex);
+ } else {
+ mCurrentDevice = null;
+ }
mDeviceConfigs.removeAll();
- Set<String> configNames = device.getConfigs().keySet();
- for (String name : configNames) {
- mDeviceConfigs.add(name);
- }
+ if (mCurrentDevice != null) {
+ Set<String> configNames = mCurrentDevice.getConfigs().keySet();
+ for (String name : configNames) {
+ mDeviceConfigs.add(name);
+ }
- mDeviceConfigs.select(0);
- if (configNames.size() == 1) {
- mDeviceConfigs.setEnabled(false);
- }
+ mDeviceConfigs.select(0);
+ if (configNames.size() == 1) {
+ mDeviceConfigs.setEnabled(false);
+ }
+ }
if (recomputeLayout) {
onDeviceConfigChange();
}
}
private void onDeviceConfigChange() {
- if (mDevices != null) {
- int deviceIndex = mDeviceList.getSelectionIndex();
- DeviceConfiguration device = mDevices.get(deviceIndex);
-
+ if (mCurrentDevice != null) {
int configIndex = mDeviceConfigs.getSelectionIndex();
String name = mDeviceConfigs.getItem(configIndex);
- FolderConfiguration config = device.getConfigs().get(name);
+ FolderConfiguration config = mCurrentDevice.getConfigs().get(name);
// get the current qualifiers from the current config
LanguageQualifier lang = mCurrentConfig.getLanguageQualifier();
diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/DeviceConfiguration.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/DeviceConfiguration.java
index f483de8..eb1ddc2 100644
--- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/DeviceConfiguration.java
+++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/DeviceConfiguration.java
@@ -25,8 +25,11 @@
public class DeviceConfiguration {
private final String mName;
+
private Map<String, FolderConfiguration> mMap =
new HashMap<String, FolderConfiguration>();
+ private float mXDpi = Float.NaN;
+ private float mYDpi = Float.NaN;
DeviceConfiguration(String name) {
mName = name;
@@ -40,6 +43,14 @@
mMap = Collections.unmodifiableMap(mMap);
}
+ void setXDpi(float xdpi) {
+ mXDpi = xdpi;
+ }
+
+ void setYDpi(float ydpi) {
+ mYDpi = ydpi;
+ }
+
public String getName() {
return mName;
}
@@ -47,4 +58,20 @@
public Map<String, FolderConfiguration> getConfigs() {
return mMap;
}
+
+ /**
+ * Returns the dpi of the Device screen in X.
+ * @return the dpi of screen or {@link Float#NaN} if it's not set.
+ */
+ public float getXDpi() {
+ return mXDpi;
+ }
+
+ /**
+ * Returns the dpi of the Device screen in Y.
+ * @return the dpi of screen or {@link Float#NaN} if it's not set.
+ */
+ public float getYDpi() {
+ return mYDpi;
+ }
}
diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/Sdk.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/Sdk.java
index 4003d88..960636e 100644
--- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/Sdk.java
+++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/Sdk.java
@@ -670,6 +670,8 @@
*/
private void createDefaultLayoutDevices() {
DeviceConfiguration adp1 = new DeviceConfiguration("ADP1");
+ adp1.setXDpi(180.6f);
+ adp1.setYDpi(182.f);
mLayoutDevices.add(adp1);
// default config
FolderConfiguration defConfig = new FolderConfiguration();
@@ -700,6 +702,8 @@
adp1.addConfig("Landscape, opened", opened);
DeviceConfiguration ion = new DeviceConfiguration("Ion");
+ ion.setXDpi(180.6f);
+ ion.setYDpi(182.f);
mLayoutDevices.add(ion);
// default config
defConfig = new FolderConfiguration();