aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@android.com>2011-02-03 11:43:14 -0800
committerXavier Ducrohet <xav@android.com>2011-02-04 09:41:54 -0800
commitf538a020eec631ca19ce493877de2ebca3b8d6f3 (patch)
treecf101d31c6a9fdc69001e6c5c53ae27c4b6a3325
parent8818812b7d824bcd52bb730c6bf659227fb86177 (diff)
downloadsdk-f538a020eec631ca19ce493877de2ebca3b8d6f3.zip
sdk-f538a020eec631ca19ce493877de2ebca3b8d6f3.tar.gz
sdk-f538a020eec631ca19ce493877de2ebca3b8d6f3.tar.bz2
Add app name/icon and current render locale to the LayoutLib API.
This allows the layoutlib to render system/title/action bars as a window decor like it would look on the device. This can be disabled with RenderParams.setForceNoDecor(). (BTW, Params was renamed RenderParams too) Also minor update to the API by replacing an int with Density since the enum is now accessible to the API and layoutlib. Change-Id: Ic37770a9276d12af90c60199a84b04cb64e7c3a1
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PreCompilerBuilder.java1
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/UiElementPullParser.java8
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java27
-rwxr-xr-xeclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/PaletteControl.java2
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/PreviewIconFactory.java2
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/tests/functests/layoutRendering/ApiDemosRenderingTest.java8
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/UiElementPullParserTest.java2
-rw-r--r--ide_common/src/com/android/ide/common/rendering/LayoutLibrary.java16
-rw-r--r--layoutlib_api/src/com/android/ide/common/rendering/api/Bridge.java4
-rw-r--r--layoutlib_api/src/com/android/ide/common/rendering/api/DensityBasedResourceValue.java7
-rw-r--r--layoutlib_api/src/com/android/ide/common/rendering/api/IImageFactory.java2
-rw-r--r--layoutlib_api/src/com/android/ide/common/rendering/api/RenderParams.java (renamed from layoutlib_api/src/com/android/ide/common/rendering/api/Params.java)53
-rw-r--r--layoutlib_api/src/com/android/ide/common/rendering/api/RenderSession.java4
-rw-r--r--layoutlib_api/src/com/android/ide/common/rendering/api/ResourceValue.java8
-rw-r--r--sdkmanager/libs/sdklib/src/com/android/sdklib/xml/AndroidManifest.java66
-rw-r--r--sdkmanager/libs/sdklib/src/com/android/sdklib/xml/AndroidManifestParser.java18
16 files changed, 172 insertions, 56 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PreCompilerBuilder.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PreCompilerBuilder.java
index 5886cff..c1ba22c 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PreCompilerBuilder.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PreCompilerBuilder.java
@@ -532,6 +532,7 @@ public class PreCompilerBuilder extends BaseBuilder {
removeMarkersFromProject(project, AndroidConstants.MARKER_AAPT_COMPILE);
removeMarkersFromProject(project, AndroidConstants.MARKER_XML);
removeMarkersFromProject(project, AndroidConstants.MARKER_AIDL);
+ removeMarkersFromProject(project, AndroidConstants.MARKER_RENDERSCRIPT);
removeMarkersFromProject(project, AndroidConstants.MARKER_ANDROID);
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/UiElementPullParser.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/UiElementPullParser.java
index 790cbc2..8ec3111 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/UiElementPullParser.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/UiElementPullParser.java
@@ -65,7 +65,7 @@ public final class UiElementPullParser extends BasePullParser {
private boolean mZeroAttributeIsPadding = false;
private boolean mIncreaseExistingPadding = false;
private List<ViewElementDescriptor> mLayoutDescriptors;
- private final int mDensityValue;
+ private final Density mDensity;
private final float mXdpi;
/**
@@ -106,12 +106,12 @@ public final class UiElementPullParser extends BasePullParser {
*/
public UiElementPullParser(UiElementNode top, boolean explodeRendering,
Set<UiElementNode> explodeNodes,
- int densityValue, float xdpi, IProject project) {
+ Density density, float xdpi, IProject project) {
super();
mRoot = top;
mExplodedRendering = explodeRendering;
mExplodeNodes = explodeNodes;
- mDensityValue = densityValue;
+ mDensity = density;
mXdpi = xdpi;
if (mExplodedRendering) {
// get the layout descriptor
@@ -571,7 +571,7 @@ public final class UiElementPullParser extends BasePullParser {
case COMPLEX_UNIT_DIP:
case COMPLEX_UNIT_SP: // intended fall-through since we don't
// adjust for font size
- f *= (float)mDensityValue / Density.DEFAULT_DENSITY;
+ f *= (float)mDensity.getDpiValue() / Density.DEFAULT_DENSITY;
break;
case COMPLEX_UNIT_PT:
f *= mXdpi * (1.0f / 72);
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java
index eda6514..f09ef99 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java
@@ -26,11 +26,11 @@ import com.android.ide.common.rendering.StaticRenderSession;
import com.android.ide.common.rendering.api.Capability;
import com.android.ide.common.rendering.api.ILayoutPullParser;
import com.android.ide.common.rendering.api.LayoutLog;
-import com.android.ide.common.rendering.api.Params;
+import com.android.ide.common.rendering.api.RenderParams;
import com.android.ide.common.rendering.api.RenderSession;
import com.android.ide.common.rendering.api.ResourceValue;
import com.android.ide.common.rendering.api.Result;
-import com.android.ide.common.rendering.api.Params.RenderingMode;
+import com.android.ide.common.rendering.api.RenderParams.RenderingMode;
import com.android.ide.common.resources.ResourceResolver;
import com.android.ide.common.sdk.LoadStatus;
import com.android.ide.eclipse.adt.AdtPlugin;
@@ -74,7 +74,6 @@ import com.android.sdklib.SdkConstants;
import com.android.sdklib.io.IAbstractFile;
import com.android.sdklib.io.StreamException;
import com.android.sdklib.xml.AndroidManifest;
-import com.android.sdklib.xml.AndroidManifestParser;
import com.android.sdkuilib.internal.widgets.ResolutionChooserDialog;
import org.eclipse.core.resources.IFile;
@@ -1618,7 +1617,7 @@ public class GraphicalEditorPart extends EditorPart
}
}
- int density = mConfigComposite.getDensity().getDpiValue();
+ Density density = mConfigComposite.getDensity();
float xdpi = mConfigComposite.getXDpi();
float ydpi = mConfigComposite.getYDpi();
boolean isProjectTheme = mConfigComposite.isProjectTheme();
@@ -1661,7 +1660,7 @@ public class GraphicalEditorPart extends EditorPart
configuredProjectRes, frameworkResources,
theme, isProjectTheme);
- Params params = new Params(
+ RenderParams params = new RenderParams(
topParser,
iProject /* projectKey */,
width, height,
@@ -1673,6 +1672,22 @@ public class GraphicalEditorPart extends EditorPart
mTargetSdkVersion,
logger);
+ // FIXME make persistent and only reload when the manifest (or at least resources) chanage.
+ IFolderWrapper projectFolder = new IFolderWrapper(getProject());
+ IAbstractFile manifest = AndroidManifest.getManifest(projectFolder);
+ if (manifest != null) {
+ try {
+ params.setAppIcon(AndroidManifest.getApplicationIcon(manifest));
+ } catch (Exception e) {
+ // ignore.
+ }
+ try {
+ params.setAppLabel(AndroidManifest.getApplicationLabel(manifest));
+ } catch (Exception e) {
+ // ignore.
+ }
+ }
+
ScreenSizeQualifier ssq = mConfigComposite.getCurrentConfig().getScreenSizeQualifier();
if (ssq != null) {
params.setConfigScreenSize(ssq.getValue());
@@ -2429,7 +2444,7 @@ public class GraphicalEditorPart extends EditorPart
int oldMinSdkVersion = mMinSdkVersion;
int oldTargetSdkVersion = mTargetSdkVersion;
- IAbstractFile manifestFile = AndroidManifestParser.getManifest(
+ IAbstractFile manifestFile = AndroidManifest.getManifest(
new IFolderWrapper(mEditedFile.getProject()));
if (manifestFile != null) {
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/PaletteControl.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/PaletteControl.java
index 00604d6..08aef31 100755
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/PaletteControl.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/PaletteControl.java
@@ -27,9 +27,9 @@ import com.android.ide.common.api.Rect;
import com.android.ide.common.rendering.LayoutLibrary;
import com.android.ide.common.rendering.api.Capability;
import com.android.ide.common.rendering.api.LayoutLog;
+import com.android.ide.common.rendering.api.RenderParams.RenderingMode;
import com.android.ide.common.rendering.api.RenderSession;
import com.android.ide.common.rendering.api.ViewInfo;
-import com.android.ide.common.rendering.api.Params.RenderingMode;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
import com.android.ide.eclipse.adt.internal.editors.descriptors.DocumentDescriptor;
import com.android.ide.eclipse.adt.internal.editors.descriptors.ElementDescriptor;
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/PreviewIconFactory.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/PreviewIconFactory.java
index 2fb2ebe..1d92f3a 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/PreviewIconFactory.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/PreviewIconFactory.java
@@ -25,7 +25,7 @@ import com.android.ide.common.rendering.api.RenderSession;
import com.android.ide.common.rendering.api.ResourceValue;
import com.android.ide.common.rendering.api.StyleResourceValue;
import com.android.ide.common.rendering.api.ViewInfo;
-import com.android.ide.common.rendering.api.Params.RenderingMode;
+import com.android.ide.common.rendering.api.RenderParams.RenderingMode;
import com.android.ide.common.resources.ResourceResolver;
import com.android.ide.eclipse.adt.AdtPlugin;
import com.android.ide.eclipse.adt.internal.editors.descriptors.DocumentDescriptor;
diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/tests/functests/layoutRendering/ApiDemosRenderingTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/tests/functests/layoutRendering/ApiDemosRenderingTest.java
index 13d9a49..0fa0df9 100644
--- a/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/tests/functests/layoutRendering/ApiDemosRenderingTest.java
+++ b/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/tests/functests/layoutRendering/ApiDemosRenderingTest.java
@@ -19,10 +19,10 @@ package com.android.ide.eclipse.tests.functests.layoutRendering;
import com.android.ide.common.rendering.LayoutLibrary;
import com.android.ide.common.rendering.api.ILayoutPullParser;
import com.android.ide.common.rendering.api.IProjectCallback;
-import com.android.ide.common.rendering.api.Params;
+import com.android.ide.common.rendering.api.RenderParams;
import com.android.ide.common.rendering.api.RenderSession;
import com.android.ide.common.rendering.api.ResourceValue;
-import com.android.ide.common.rendering.api.Params.RenderingMode;
+import com.android.ide.common.rendering.api.RenderParams.RenderingMode;
import com.android.ide.common.resources.ResourceResolver;
import com.android.ide.common.sdk.LoadStatus;
import com.android.ide.eclipse.adt.internal.resources.configurations.FolderConfiguration;
@@ -207,13 +207,13 @@ public class ApiDemosRenderingTest extends SdkTestCase {
configuredProject, configuredFramework,
"Theme", false /*isProjectTheme*/);
- RenderSession session = layoutLib.createSession(new Params(
+ RenderSession session = layoutLib.createSession(new RenderParams(
parser,
null /*projectKey*/,
320,
480,
RenderingMode.NORMAL,
- 160, //density
+ Density.MEDIUM,
160, //xdpi
160, // ydpi
resolver,
diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/UiElementPullParserTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/UiElementPullParserTest.java
index e0292ee..fbd3aa0 100644
--- a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/UiElementPullParserTest.java
+++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/UiElementPullParserTest.java
@@ -171,7 +171,7 @@ public class UiElementPullParserTest extends TestCase {
ui, // model
false, // explodedView
null, // explodeNodes
- Density.MEDIUM.getDpiValue(), // density (default from ConfigurationComposite)
+ Density.MEDIUM, // density (default from ConfigurationComposite)
Density.MEDIUM.getDpiValue(), // xdpi (default from ConfigurationComposite)
null // iProject
);
diff --git a/ide_common/src/com/android/ide/common/rendering/LayoutLibrary.java b/ide_common/src/com/android/ide/common/rendering/LayoutLibrary.java
index aa5608d..43444de 100644
--- a/ide_common/src/com/android/ide/common/rendering/LayoutLibrary.java
+++ b/ide_common/src/com/android/ide/common/rendering/LayoutLibrary.java
@@ -21,12 +21,12 @@ import com.android.ide.common.rendering.api.Bridge;
import com.android.ide.common.rendering.api.Capability;
import com.android.ide.common.rendering.api.ILayoutPullParser;
import com.android.ide.common.rendering.api.LayoutLog;
-import com.android.ide.common.rendering.api.Params;
+import com.android.ide.common.rendering.api.RenderParams;
import com.android.ide.common.rendering.api.RenderSession;
import com.android.ide.common.rendering.api.ResourceValue;
import com.android.ide.common.rendering.api.Result;
import com.android.ide.common.rendering.api.ViewInfo;
-import com.android.ide.common.rendering.api.Params.RenderingMode;
+import com.android.ide.common.rendering.api.RenderParams.RenderingMode;
import com.android.ide.common.rendering.api.Result.Status;
import com.android.ide.common.rendering.legacy.LegacyCallback;
import com.android.ide.common.rendering.legacy.ILegacyPullParser;
@@ -58,7 +58,7 @@ import java.util.Map.Entry;
* Use {@link #load(String, ILogger)} to load the jar file.
* <p/>
* Use the layout library with:
- * {@link #init(String, Map)}, {@link #supports(Capability)}, {@link #createSession(Params)},
+ * {@link #init(String, Map)}, {@link #supports(Capability)}, {@link #createSession(RenderParams)},
* {@link #dispose()}, {@link #clearCaches(Object)}.
*
* <p/>
@@ -274,9 +274,9 @@ public class LayoutLibrary {
* @return a new {@link ILayoutScene} object that contains the result of the scene creation and
* first rendering or null if {@link #getStatus()} doesn't return {@link LoadStatus#LOADED}.
*
- * @see Bridge#createSession(Params)
+ * @see Bridge#createSession(RenderParams)
*/
- public RenderSession createSession(Params params) {
+ public RenderSession createSession(RenderParams params) {
if (mBridge != null) {
return mBridge.createSession(params);
} else if (mLegacyBridge != null) {
@@ -338,7 +338,7 @@ public class LayoutLibrary {
return apiLevel;
}
- private RenderSession createLegacySession(Params params) {
+ private RenderSession createLegacySession(RenderParams params) {
if (params.getLayoutDescription() instanceof IXmlPullParser == false) {
throw new IllegalArgumentException("Parser must be of type ILegacyPullParser");
}
@@ -390,7 +390,7 @@ public class LayoutLibrary {
params.getProjectKey(),
params.getScreenWidth(), params.getScreenHeight(),
params.getRenderingMode() == RenderingMode.FULL_EXPAND ? true : false,
- params.getDensity(), params.getXdpi(), params.getYdpi(),
+ params.getDensity().getDpiValue(), params.getXdpi(), params.getYdpi(),
resources.getThemeName(), resources.isProjectTheme(),
projectMap, frameworkMap,
(IProjectCallback) params.getProjectCallback(),
@@ -400,7 +400,7 @@ public class LayoutLibrary {
result = mLegacyBridge.computeLayout(
(IXmlPullParser) params.getLayoutDescription(), params.getProjectKey(),
params.getScreenWidth(), params.getScreenHeight(),
- params.getDensity(), params.getXdpi(), params.getYdpi(),
+ params.getDensity().getDpiValue(), params.getXdpi(), params.getYdpi(),
resources.getThemeName(), resources.isProjectTheme(),
projectMap, frameworkMap,
(IProjectCallback) params.getProjectCallback(), logWrapper);
diff --git a/layoutlib_api/src/com/android/ide/common/rendering/api/Bridge.java b/layoutlib_api/src/com/android/ide/common/rendering/api/Bridge.java
index d014b6c..755c736 100644
--- a/layoutlib_api/src/com/android/ide/common/rendering/api/Bridge.java
+++ b/layoutlib_api/src/com/android/ide/common/rendering/api/Bridge.java
@@ -78,7 +78,7 @@ public abstract class Bridge {
* @return a new {@link RenderSession} object that contains the result of the scene creation and
* first rendering.
*/
- public RenderSession createSession(Params params) {
+ public RenderSession createSession(RenderParams params) {
return null;
}
@@ -89,7 +89,7 @@ public abstract class Bridge {
* <p/>The cache is not configuration dependent and should only be cleared when a
* resource changes (at this time only bitmaps and 9 patches go into the cache).
* <p/>
- * The project key provided must be similar to the one passed in {@link Params}.
+ * The project key provided must be similar to the one passed in {@link RenderParams}.
*
* @param projectKey the key for the project.
*/
diff --git a/layoutlib_api/src/com/android/ide/common/rendering/api/DensityBasedResourceValue.java b/layoutlib_api/src/com/android/ide/common/rendering/api/DensityBasedResourceValue.java
index 12bd57c..ca60640 100644
--- a/layoutlib_api/src/com/android/ide/common/rendering/api/DensityBasedResourceValue.java
+++ b/layoutlib_api/src/com/android/ide/common/rendering/api/DensityBasedResourceValue.java
@@ -44,4 +44,11 @@ public class DensityBasedResourceValue extends ResourceValue implements IDensity
public Density getDensity() {
return Density.getEnum(mDensity.getDpiValue());
}
+
+ @Override
+ public String toString() {
+ return "DensityBasedResourceValue ["
+ + getResourceType() + "/" + getName() + " = " + getValue()
+ + " (density:" + mDensity +", framework:" + isFramework() + ")]";
+ }
}
diff --git a/layoutlib_api/src/com/android/ide/common/rendering/api/IImageFactory.java b/layoutlib_api/src/com/android/ide/common/rendering/api/IImageFactory.java
index c05c7c6..7681243 100644
--- a/layoutlib_api/src/com/android/ide/common/rendering/api/IImageFactory.java
+++ b/layoutlib_api/src/com/android/ide/common/rendering/api/IImageFactory.java
@@ -26,7 +26,7 @@ import java.awt.image.BufferedImage;
* rendered. The goal is to let the layoutlib caller create an image that's optimized for its use
* case.
*
- * If no factory is passed in {@link Params#setImageFactory(IImageFactory)}, then a default
+ * If no factory is passed in {@link RenderParams#setImageFactory(IImageFactory)}, then a default
* {@link BufferedImage} of type {@link BufferedImage#TYPE_INT_ARGB} is created.
*
*/
diff --git a/layoutlib_api/src/com/android/ide/common/rendering/api/Params.java b/layoutlib_api/src/com/android/ide/common/rendering/api/RenderParams.java
index fb4b423..296982c 100644
--- a/layoutlib_api/src/com/android/ide/common/rendering/api/Params.java
+++ b/layoutlib_api/src/com/android/ide/common/rendering/api/RenderParams.java
@@ -16,10 +16,11 @@
package com.android.ide.common.rendering.api;
+import com.android.resources.Density;
import com.android.resources.ScreenSize;
-public class Params {
+public class RenderParams {
public final static long DEFAULT_TIMEOUT = 250; //ms
@@ -51,7 +52,7 @@ public class Params {
private final int mScreenWidth;
private final int mScreenHeight;
private final RenderingMode mRenderingMode;
- private final int mDensity;
+ private final Density mDensity;
private final float mXdpi;
private final float mYdpi;
private final RenderResources mRenderResources;
@@ -67,6 +68,10 @@ public class Params {
private IImageFactory mImageFactory = null;
private ScreenSize mConfigScreenSize = null;
+ private String mAppIcon = null;
+ private String mAppLabel = null;
+ private String mLocale = null;
+ private boolean mForceNoDecor;
/**
*
@@ -95,10 +100,10 @@ public class Params {
* @param targetSdkVersion the targetSdkVersion of the project
* @param log the object responsible for displaying warning/errors to the user.
*/
- public Params(ILayoutPullParser layoutDescription,
+ public RenderParams(ILayoutPullParser layoutDescription,
Object projectKey,
int screenWidth, int screenHeight, RenderingMode renderingMode,
- int density, float xdpi, float ydpi,
+ Density density, float xdpi, float ydpi,
RenderResources renderResources,
IProjectCallback projectCallback,
int minSdkVersion, int targetSdkVersion,
@@ -123,7 +128,7 @@ public class Params {
/**
* Copy constructor.
*/
- public Params(Params params) {
+ public RenderParams(RenderParams params) {
mLayoutDescription = params.mLayoutDescription;
mProjectKey = params.mProjectKey;
mScreenWidth = params.mScreenWidth;
@@ -142,6 +147,10 @@ public class Params {
mTimeout = params.mTimeout;
mImageFactory = params.mImageFactory;
mConfigScreenSize = params.mConfigScreenSize;
+ mAppIcon = params.mAppIcon;
+ mAppLabel = params.mAppLabel;
+ mLocale = params.mLocale;
+ mForceNoDecor = params.mForceNoDecor;
}
public void setOverrideBgColor(int color) {
@@ -161,6 +170,22 @@ public class Params {
mConfigScreenSize = size;
}
+ public void setAppIcon(String appIcon) {
+ mAppIcon = appIcon;
+ }
+
+ public void setAppLabel(String appLabel) {
+ mAppLabel = appLabel;
+ }
+
+ public void setLocale(String locale) {
+ mLocale = locale;
+ }
+
+ public void setForceNoDecor() {
+ mForceNoDecor = true;
+ }
+
public ILayoutPullParser getLayoutDescription() {
return mLayoutDescription;
}
@@ -189,7 +214,7 @@ public class Params {
return mRenderingMode;
}
- public int getDensity() {
+ public Density getDensity() {
return mDensity;
}
@@ -232,4 +257,20 @@ public class Params {
public ScreenSize getConfigScreenSize() {
return mConfigScreenSize;
}
+
+ public String getAppIcon() {
+ return mAppIcon;
+ }
+
+ public String getAppLabel() {
+ return mAppLabel;
+ }
+
+ public String getLocale() {
+ return mLocale;
+ }
+
+ public boolean isForceNoDecor() {
+ return mForceNoDecor;
+ }
}
diff --git a/layoutlib_api/src/com/android/ide/common/rendering/api/RenderSession.java b/layoutlib_api/src/com/android/ide/common/rendering/api/RenderSession.java
index 9bdd146..a2e087c 100644
--- a/layoutlib_api/src/com/android/ide/common/rendering/api/RenderSession.java
+++ b/layoutlib_api/src/com/android/ide/common/rendering/api/RenderSession.java
@@ -27,7 +27,7 @@ import java.util.Map;
/**
* An object allowing interaction with an Android layout.
*
- * This is returned by {@link Bridge#createScene(Params)}.
+ * This is returned by {@link Bridge#createScene(RenderParams)}.
* and can then be used for subsequent actions on the layout.
*
* @since 5
@@ -102,7 +102,7 @@ public class RenderSession {
* @return a {@link Result} indicating the status of the action.
*/
public Result render() {
- return render(Params.DEFAULT_TIMEOUT);
+ return render(RenderParams.DEFAULT_TIMEOUT);
}
/**
diff --git a/layoutlib_api/src/com/android/ide/common/rendering/api/ResourceValue.java b/layoutlib_api/src/com/android/ide/common/rendering/api/ResourceValue.java
index 76561c8..f15d903 100644
--- a/layoutlib_api/src/com/android/ide/common/rendering/api/ResourceValue.java
+++ b/layoutlib_api/src/com/android/ide/common/rendering/api/ResourceValue.java
@@ -91,4 +91,12 @@ public class ResourceValue implements IResourceValue {
public void replaceWith(ResourceValue value) {
mValue = value.mValue;
}
+
+ @Override
+ public String toString() {
+ return "ResourceValue [" + mType + "/" + mName + " = " + mValue
+ + " (framework:" + mIsFramwork + ")]";
+ }
+
+
}
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/xml/AndroidManifest.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/xml/AndroidManifest.java
index 6ed6e49..2cb6ace 100644
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/xml/AndroidManifest.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/xml/AndroidManifest.java
@@ -58,6 +58,8 @@ public final class AndroidManifest {
public final static String ATTRIBUTE_GLESVERSION = "glEsVersion";
public final static String ATTRIBUTE_PROCESS = "process";
public final static String ATTRIBUTE_DEBUGGABLE = "debuggable";
+ public final static String ATTRIBUTE_LABEL = "label";
+ public final static String ATTRIBUTE_ICON = "icon";
public final static String ATTRIBUTE_MIN_SDK_VERSION = "minSdkVersion";
public final static String ATTRIBUTE_TARGET_SDK_VERSION = "targetSdkVersion";
public final static String ATTRIBUTE_TARGET_PACKAGE = "targetPackage";
@@ -76,6 +78,22 @@ public final class AndroidManifest {
public final static String ATTRIBUTE_REQ_TOUCHSCREEN = "reqTouchScreen";
/**
+ * Returns an {@link IAbstractFile} object representing the manifest for the given project.
+ *
+ * @param project The project containing the manifest file.
+ * @return An IAbstractFile object pointing to the manifest or null if the manifest
+ * is missing.
+ */
+ public static IAbstractFile getManifest(IAbstractFolder projectFolder) {
+ IAbstractFile file = projectFolder.getFile(SdkConstants.FN_ANDROID_MANIFEST_XML);
+ if (file.exists()) {
+ return file;
+ }
+
+ return null;
+ }
+
+ /**
* Returns the package for a given project.
* @param projectFolder the folder of the project.
* @return the package info or null (or empty) if not found.
@@ -84,8 +102,12 @@ public final class AndroidManifest {
*/
public static String getPackage(IAbstractFolder projectFolder)
throws XPathExpressionException, StreamException {
- IAbstractFile file = projectFolder.getFile(SdkConstants.FN_ANDROID_MANIFEST_XML);
- return getPackage(file);
+ IAbstractFile file = getManifest(projectFolder);
+ if (file != null) {
+ return getPackage(file);
+ }
+
+ return null;
}
/**
@@ -123,7 +145,8 @@ public final class AndroidManifest {
String value = xPath.evaluate(
"/" + NODE_MANIFEST +
"/" + NODE_APPLICATION +
- "/@" + ATTRIBUTE_DEBUGGABLE,
+ "/@" + AndroidXPathFactory.DEFAULT_NS_PREFIX +
+ ":" + ATTRIBUTE_DEBUGGABLE,
new InputSource(manifestFile.getContents()));
// default is not debuggable, which is the same behavior as parseBoolean
@@ -240,6 +263,43 @@ public final class AndroidManifest {
}
}
+ /**
+ * Returns the application icon for a given manifest.
+ * @param manifestFile the manifest to parse.
+ * @return the icon or null (or empty) if not found.
+ * @throws XPathExpressionException
+ * @throws StreamException If any error happens when reading the manifest.
+ */
+ public static String getApplicationIcon(IAbstractFile manifestFile)
+ throws XPathExpressionException, StreamException {
+ XPath xPath = AndroidXPathFactory.newXPath();
+
+ return xPath.evaluate(
+ "/" + NODE_MANIFEST +
+ "/" + NODE_APPLICATION +
+ "/@" + AndroidXPathFactory.DEFAULT_NS_PREFIX +
+ ":" + ATTRIBUTE_ICON,
+ new InputSource(manifestFile.getContents()));
+ }
+
+ /**
+ * Returns the application label for a given manifest.
+ * @param manifestFile the manifest to parse.
+ * @return the label or null (or empty) if not found.
+ * @throws XPathExpressionException
+ * @throws StreamException If any error happens when reading the manifest.
+ */
+ public static String getApplicationLabel(IAbstractFile manifestFile)
+ throws XPathExpressionException, StreamException {
+ XPath xPath = AndroidXPathFactory.newXPath();
+
+ return xPath.evaluate(
+ "/" + NODE_MANIFEST +
+ "/" + NODE_APPLICATION +
+ "/@" + AndroidXPathFactory.DEFAULT_NS_PREFIX +
+ ":" + ATTRIBUTE_LABEL,
+ new InputSource(manifestFile.getContents()));
+ }
/**
* Combines a java package, with a class value from the manifest to make a fully qualified
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/xml/AndroidManifestParser.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/xml/AndroidManifestParser.java
index 9a67735..09e81f7 100644
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/xml/AndroidManifestParser.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/xml/AndroidManifestParser.java
@@ -632,7 +632,7 @@ public class AndroidManifestParser {
public static ManifestData parse(IAbstractFolder projectFolder)
throws SAXException, IOException, StreamException, ParserConfigurationException {
- IAbstractFile manifestFile = getManifest(projectFolder);
+ IAbstractFile manifestFile = AndroidManifest.getManifest(projectFolder);
if (manifestFile == null) {
throw new FileNotFoundException();
}
@@ -666,20 +666,4 @@ public class AndroidManifestParser {
return null;
}
-
- /**
- * Returns an {@link IAbstractFile} object representing the manifest for the given project.
- *
- * @param project The project containing the manifest file.
- * @return An IAbstractFile object pointing to the manifest or null if the manifest
- * is missing.
- */
- public static IAbstractFile getManifest(IAbstractFolder projectFolder) {
- IAbstractFile file = projectFolder.getFile(SdkConstants.FN_ANDROID_MANIFEST_XML);
- if (file.exists()) {
- return file;
- }
-
- return null;
- }
}