Layoulib updates for new prebuilts
Test: N/A
Change-Id: I9f8731e087aa931a7d0bec28125c8f66c7530118
diff --git a/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java b/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
index c191f79..d334ba9 100644
--- a/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
+++ b/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
@@ -22,6 +22,8 @@
import com.android.ide.common.rendering.api.LayoutLog;
import com.android.ide.common.rendering.api.LayoutlibCallback;
import com.android.ide.common.rendering.api.RenderResources;
+import com.android.ide.common.rendering.api.ResourceNamespace;
+import com.android.ide.common.rendering.api.ResourceNamespace.Resolver;
import com.android.ide.common.rendering.api.ResourceReference;
import com.android.ide.common.rendering.api.ResourceValue;
import com.android.ide.common.rendering.api.StyleResourceValue;
@@ -99,6 +101,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.List;
@@ -117,6 +120,9 @@
private static final Map<String, ResourceValue> FRAMEWORK_PATCHED_VALUES = new HashMap<>(2);
private static final Map<String, ResourceValue> FRAMEWORK_REPLACE_VALUES = new HashMap<>(3);
+ private static final Resolver LEGACY_NAMESPACE_RESOLVER =
+ Collections.singletonMap(SdkConstants.TOOLS_PREFIX, SdkConstants.TOOLS_URI)::get;
+
static {
FRAMEWORK_PATCHED_VALUES.put("animateFirstView", new ResourceValue(
ResourceType.BOOL, "animateFirstView", "false", false));
@@ -714,6 +720,13 @@
PropertiesMap defaultPropMap = null;
boolean isPlatformFile = true;
+ // TODO(namespaces): We need to figure out how to keep track of the namespace of the current
+ // layout file.
+ ResourceNamespace currentFileNamespace = ResourceNamespace.TODO;
+
+ // TODO(namespaces): get this through the callback, only in non-namespaced projects.
+ ResourceNamespace.Resolver resolver = LEGACY_NAMESPACE_RESOLVER;
+
// Hint: for XmlPullParser, attach source //DEVICE_SRC/dalvik/libcore/xml/src/java
if (set instanceof BridgeXmlBlockParser) {
BridgeXmlBlockParser parser;
@@ -726,6 +739,8 @@
defaultPropMap = mDefaultPropMaps.computeIfAbsent(key, k -> new PropertiesMap());
}
+ resolver = parser::getNamespace;
+ currentFileNamespace = ResourceNamespace.fromBoolean(parser.isPlatformFile());
} else if (set instanceof BridgeLayoutParamsMapAttributes) {
// this is only for temp layout params generated dynamically, so this is never
// platform content.
@@ -957,10 +972,19 @@
ta.bridgeSetValue(index, attrName, frameworkAttr, attributeHolder.resourceId,
defaultValue);
} else {
- // there is a value in the XML, but we need to resolve it in case it's
+ // There is a value in the XML, but we need to resolve it in case it's
// referencing another resource or a theme value.
- ta.bridgeSetValue(index, attrName, frameworkAttr, attributeHolder.resourceId,
- mRenderResources.resolveValue(null, attrName, value, isPlatformFile));
+ ResourceValue dummy =
+ new ResourceValue(
+ currentFileNamespace,
+ null,
+ attrName,
+ value);
+ dummy.setNamespaceLookup(resolver);
+
+ ta.bridgeSetValue(
+ index, attrName, frameworkAttr, attributeHolder.resourceId,
+ mRenderResources.resolveResValue(dummy));
}
}
}
diff --git a/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java b/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java
index f18cd48..d50117e 100644
--- a/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java
+++ b/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java
@@ -159,7 +159,7 @@
@Override
public String getNamespace(String prefix) {
- throw new RuntimeException("getNamespace() not supported");
+ return mParser.getNamespace(prefix);
}
@Override
diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTestBase.java b/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTestBase.java
index eb34f3c..399997b 100644
--- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTestBase.java
+++ b/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTestBase.java
@@ -18,6 +18,7 @@
import com.android.ide.common.rendering.api.LayoutLog;
import com.android.ide.common.rendering.api.RenderSession;
+import com.android.ide.common.rendering.api.ResourceNamespace;
import com.android.ide.common.rendering.api.Result;
import com.android.ide.common.rendering.api.SessionParams;
import com.android.ide.common.rendering.api.SessionParams.RenderingMode;
@@ -59,6 +60,7 @@
import java.util.concurrent.TimeUnit;
import com.google.android.collect.Lists;
+import com.google.common.collect.ImmutableMap;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
@@ -418,9 +420,8 @@
}
@Override
- public void fidelityWarning(@Nullable String tag, String message,
- Throwable throwable, Object data) {
-
+ public void fidelityWarning(String tag, String message, Throwable throwable,
+ Object viewCookie, Object data) {
System.out.println("FidelityWarning " + tag + ": " + message);
if (throwable != null) {
throwable.printStackTrace();
diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTests.java b/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTests.java
index 9ecf1ce..3b4851f 100644
--- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTests.java
+++ b/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTests.java
@@ -17,6 +17,7 @@
package com.android.layoutlib.bridge.intensive;
import com.android.ide.common.rendering.api.RenderSession;
+import com.android.ide.common.rendering.api.ResourceNamespace;
import com.android.ide.common.rendering.api.ResourceValue;
import com.android.ide.common.rendering.api.SessionParams;
import com.android.ide.common.rendering.api.SessionParams.RenderingMode;
@@ -800,8 +801,13 @@
try {
ColorStateList stateList = ResourceHelper.getColorStateList(
- new ResourceValue(ResourceUrl.create(null, ResourceType.COLOR, "test_list"),
- tmpColorList.getAbsolutePath()), mContext, null);
+ new ResourceValue(
+ ResourceNamespace.RES_AUTO,
+ ResourceType.COLOR,
+ "test_list",
+ tmpColorList.getAbsolutePath()),
+ mContext,
+ null);
assertNotNull(stateList);
assertEquals(Color.parseColor("#ffffffff"), stateList.getColorForState(
StateSet.get(StateSet.VIEW_STATE_PRESSED),
@@ -817,8 +823,13 @@
Resources.Theme theme = mContext.getResources().newTheme();
theme.applyStyle(R.style.ThemeOverlay_Material_Light, true);
stateList = ResourceHelper.getColorStateList(
- new ResourceValue(ResourceUrl.create(null, ResourceType.COLOR, "test_list"),
- tmpColorList.getAbsolutePath()), mContext, theme);
+ new ResourceValue(
+ ResourceNamespace.RES_AUTO,
+ ResourceType.COLOR,
+ "test_list",
+ tmpColorList.getAbsolutePath()),
+ mContext,
+ theme);
assertNotNull(stateList);
assertEquals(Color.parseColor("#ff000000"), stateList.getColorForState(
StateSet.get(StateSet.VIEW_STATE_PRESSED),
diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/ConfigGenerator.java b/bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/ConfigGenerator.java
index 34fc726..684cf12 100644
--- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/ConfigGenerator.java
+++ b/bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/ConfigGenerator.java
@@ -163,8 +163,7 @@
private Navigation mNavigation = Navigation.NONAV;
public FolderConfiguration getFolderConfig() {
- FolderConfiguration config = new FolderConfiguration();
- config.createDefault();
+ FolderConfiguration config = FolderConfiguration.createDefault();
config.setDensityQualifier(new DensityQualifier(mDensity));
config.setNavigationMethodQualifier(new NavigationMethodQualifier(mNavigation));
if (mScreenWidth > mScreenHeight) {
diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/SessionParamsBuilder.java b/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/SessionParamsBuilder.java
index 4bd3640..058b965 100644
--- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/SessionParamsBuilder.java
+++ b/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/SessionParamsBuilder.java
@@ -20,6 +20,7 @@
import com.android.ide.common.rendering.api.AssetRepository;
import com.android.ide.common.rendering.api.LayoutLog;
import com.android.ide.common.rendering.api.LayoutlibCallback;
+import com.android.ide.common.rendering.api.ResourceNamespace;
import com.android.ide.common.rendering.api.SessionParams;
import com.android.ide.common.rendering.api.SessionParams.RenderingMode;
import com.android.ide.common.resources.ResourceRepository;
@@ -33,6 +34,8 @@
import java.util.HashMap;
import java.util.Map;
+import com.google.common.collect.ImmutableMap;
+
/**
* Builder to help setting up {@link SessionParams} objects.
*/
@@ -149,10 +152,12 @@
assert mLayoutlibCallback != null;
FolderConfiguration config = mConfigGenerator.getFolderConfig();
- ResourceResolver resourceResolver =
- ResourceResolver.create(mProjectResources.getConfiguredResources(config),
- mFrameworkResources.getConfiguredResources(config), mThemeName,
- isProjectTheme);
+ ResourceResolver resourceResolver = ResourceResolver.create(
+ ImmutableMap.of(
+ ResourceNamespace.ANDROID, mFrameworkResources.getConfiguredResources(config),
+ ResourceNamespace.TODO, mProjectResources.getConfiguredResources(config)),
+ mThemeName,
+ isProjectTheme);
SessionParams params = new SessionParams(mLayoutParser, mRenderingMode, mProjectKey /* for
caching */, mConfigGenerator.getHardwareConfig(), resourceResolver, mLayoutlibCallback,
diff --git a/remote/client/src/com/android/layoutlib/bridge/remote/client/adapters/RemoteLayoutLogAdapter.java b/remote/client/src/com/android/layoutlib/bridge/remote/client/adapters/RemoteLayoutLogAdapter.java
index e87a0e0..c5dbfab 100644
--- a/remote/client/src/com/android/layoutlib/bridge/remote/client/adapters/RemoteLayoutLogAdapter.java
+++ b/remote/client/src/com/android/layoutlib/bridge/remote/client/adapters/RemoteLayoutLogAdapter.java
@@ -42,9 +42,9 @@
}
@Override
- public void fidelityWarning(String tag, String message, Throwable throwable,
- Serializable data) {
- mLog.fidelityWarning(tag, message, throwable, null);
+ public void fidelityWarning(String tag, String message, Throwable throwable, Object viewCookie,
+ Object data) {
+ mLog.fidelityWarning(tag, message, throwable, viewCookie, data);
}
@Override
diff --git a/remote/client/src/com/android/layoutlib/bridge/remote/client/adapters/RemoteRenderResourcesAdapter.java b/remote/client/src/com/android/layoutlib/bridge/remote/client/adapters/RemoteRenderResourcesAdapter.java
index 4303b77..6434df1 100644
--- a/remote/client/src/com/android/layoutlib/bridge/remote/client/adapters/RemoteRenderResourcesAdapter.java
+++ b/remote/client/src/com/android/layoutlib/bridge/remote/client/adapters/RemoteRenderResourcesAdapter.java
@@ -17,6 +17,7 @@
package com.android.layoutlib.bridge.remote.client.adapters;
import com.android.ide.common.rendering.api.RenderResources;
+import com.android.ide.common.rendering.api.ResourceReference;
import com.android.ide.common.rendering.api.ResourceValue;
import com.android.ide.common.rendering.api.StyleResourceValue;
import com.android.layout.remote.api.RemoteRenderResources;
@@ -92,11 +93,6 @@
}
@Override
- public ResourceValue findResValue(String reference, boolean forceFrameworkOnly) {
- return mDelegate.findResValue(reference, forceFrameworkOnly);
- }
-
- @Override
public ResourceValue resolveValue(ResourceValue value) {
return mDelegate.resolveResValue(value);
}
@@ -116,4 +112,14 @@
public StyleResourceValue getStyle(String styleName, boolean isFramework) {
return mDelegate.getStyle(styleName, isFramework);
}
+
+ @Override
+ public ResourceValue dereference(ResourceValue resourceValue) throws RemoteException {
+ return mDelegate.dereference(resourceValue);
+ }
+
+ @Override
+ public ResourceValue getUnresolvedResource(ResourceReference reference) {
+ return mDelegate.getUnresolvedResource(reference);
+ }
}
diff --git a/remote/common/src/com/android/layout/remote/api/RemoteLayoutLog.java b/remote/common/src/com/android/layout/remote/api/RemoteLayoutLog.java
index 6240036..c3b5c61 100644
--- a/remote/common/src/com/android/layout/remote/api/RemoteLayoutLog.java
+++ b/remote/common/src/com/android/layout/remote/api/RemoteLayoutLog.java
@@ -44,10 +44,11 @@
* @param tag a tag describing the type of the warning
* @param message the message of the warning
* @param throwable an optional Throwable that triggered the warning
+ * @param viewCookie optional cookie of the view associated to this error
* @param data an optional data bundle that the client can use to improve the warning display.
*/
- void fidelityWarning(String tag, String message, Throwable throwable, Serializable data)
- throws RemoteException;
+ void fidelityWarning(String tag, String message, Throwable throwable, Object viewCookie,
+ Object data) throws RemoteException;
/**
* Logs an error.
diff --git a/remote/common/src/com/android/layout/remote/api/RemoteRenderResources.java b/remote/common/src/com/android/layout/remote/api/RemoteRenderResources.java
index f7341dc..0ec5652 100644
--- a/remote/common/src/com/android/layout/remote/api/RemoteRenderResources.java
+++ b/remote/common/src/com/android/layout/remote/api/RemoteRenderResources.java
@@ -17,6 +17,7 @@
package com.android.layout.remote.api;
import com.android.ide.common.rendering.api.RenderResources;
+import com.android.ide.common.rendering.api.ResourceReference;
import com.android.ide.common.rendering.api.ResourceValue;
import com.android.ide.common.rendering.api.StyleResourceValue;
import com.android.resources.ResourceType;
@@ -57,9 +58,6 @@
ResourceValue findItemInStyle(StyleResourceValue style, String attrName,
boolean isFrameworkAttr) throws RemoteException;
-
- ResourceValue findResValue(String reference, boolean forceFrameworkOnly) throws RemoteException;
-
ResourceValue resolveValue(ResourceValue value) throws RemoteException;
ResourceValue resolveValue(ResourceType type, String name, String value,
@@ -68,4 +66,8 @@
StyleResourceValue getParent(StyleResourceValue style) throws RemoteException;
StyleResourceValue getStyle(String styleName, boolean isFramework) throws RemoteException;
+
+ ResourceValue dereference(ResourceValue resourceValue) throws RemoteException;
+
+ ResourceValue getUnresolvedResource(ResourceReference reference) throws RemoteException;
}
diff --git a/remote/server/src/com/android/layoutlib/bridge/remote/server/adapters/RemoteLayoutLogAdapter.java b/remote/server/src/com/android/layoutlib/bridge/remote/server/adapters/RemoteLayoutLogAdapter.java
index 7a3fcfa..6878d46 100644
--- a/remote/server/src/com/android/layoutlib/bridge/remote/server/adapters/RemoteLayoutLogAdapter.java
+++ b/remote/server/src/com/android/layoutlib/bridge/remote/server/adapters/RemoteLayoutLogAdapter.java
@@ -39,9 +39,10 @@
}
@Override
- public void fidelityWarning(String tag, String message, Throwable throwable, Object data) {
+ public void fidelityWarning(String tag, String message, Throwable throwable, Object viewCookie,
+ Object data) {
try {
- mLog.fidelityWarning(tag, message, throwable, null);
+ mLog.fidelityWarning(tag, message, throwable, viewCookie, data);
} catch (RemoteException e) {
throw new RuntimeException(e);
}
diff --git a/remote/server/src/com/android/layoutlib/bridge/remote/server/adapters/RemoteRenderResourcesAdapter.java b/remote/server/src/com/android/layoutlib/bridge/remote/server/adapters/RemoteRenderResourcesAdapter.java
index 61ab170..2fa5b04 100644
--- a/remote/server/src/com/android/layoutlib/bridge/remote/server/adapters/RemoteRenderResourcesAdapter.java
+++ b/remote/server/src/com/android/layoutlib/bridge/remote/server/adapters/RemoteRenderResourcesAdapter.java
@@ -18,6 +18,7 @@
import com.android.ide.common.rendering.api.LayoutLog;
import com.android.ide.common.rendering.api.RenderResources;
+import com.android.ide.common.rendering.api.ResourceReference;
import com.android.ide.common.rendering.api.ResourceValue;
import com.android.ide.common.rendering.api.StyleResourceValue;
import com.android.layout.remote.api.RemoteRenderResources;
@@ -154,9 +155,19 @@
}
@Override
- public ResourceValue findResValue(String reference, boolean forceFrameworkOnly) {
+ public ResourceValue dereference(ResourceValue resourceValue) {
try {
- return mDelegate.findResValue(reference, forceFrameworkOnly);
+ return mDelegate.dereference(resourceValue);
+ } catch (RemoteException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /** Returns a resource by namespace, type and name. The returned resource is unresolved. */
+ @Override
+ public ResourceValue getUnresolvedResource(ResourceReference reference) {
+ try {
+ return mDelegate.getUnresolvedResource(reference);
} catch (RemoteException e) {
throw new RuntimeException(e);
}