This commit is contained in:
Eugene Kudelevsky
2012-01-20 16:44:16 +04:00
parent be5813d28f
commit 332b7ecce7
4 changed files with 112 additions and 11 deletions
@@ -17,12 +17,8 @@
package org.jetbrains.android.uipreview;
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.RenderSession;
import com.android.ide.common.rendering.api.SessionParams;
import com.android.ide.common.rendering.api.*;
import com.android.ide.common.rendering.api.SessionParams.RenderingMode;
import com.android.ide.common.resources.ResourceResolver;
import com.android.ide.common.resources.configuration.*;
import com.android.resources.Density;
import com.android.resources.ScreenOrientation;
@@ -45,7 +41,7 @@ class RenderService {
private static final Logger LOG = Logger.getInstance("#org.jetbrains.android.uipreview.RenderService");
private final IProjectCallback myProjectCallback;
private final ResourceResolver myResourceResolver;
private final RenderResources myResourceResolver;
private final LayoutLibrary myLayoutLib;
private final FolderConfiguration myConfig;
private final int myMinSdkVersion;
@@ -53,7 +49,7 @@ class RenderService {
private final float myYdpi;
RenderService(LayoutLibrary layoutLibrary,
@NotNull ResourceResolver resourceResolver,
@NotNull RenderResources resourceResolver,
FolderConfiguration config,
float xdpi,
float ydpi,
@@ -19,6 +19,7 @@ package org.jetbrains.android.uipreview;
import com.android.ide.common.log.ILogger;
import com.android.ide.common.rendering.LayoutLibrary;
import com.android.ide.common.rendering.api.IProjectCallback;
import com.android.ide.common.rendering.api.RenderResources;
import com.android.ide.common.rendering.api.ResourceValue;
import com.android.ide.common.resources.FrameworkResources;
import com.android.ide.common.resources.ResourceResolver;
@@ -73,7 +74,7 @@ public class RenderServiceFactory {
return null;
}
public ResourceResolver createResourceResolver(final AndroidFacet facet,
public RenderResources createResourceResolver(final AndroidFacet facet,
FolderConfiguration config,
ProjectResources projectResources,
String themeName,
@@ -94,10 +95,11 @@ public class RenderServiceFactory {
}
final Map<ResourceType, Map<String, ResourceValue>> configedFrameworkRes = myResources.getConfiguredResources(config);
return ResourceResolver.create(configedProjectRes, configedFrameworkRes, themeName, isProjectTheme);
final ResourceResolver resolver = ResourceResolver.create(configedProjectRes, configedFrameworkRes, themeName, isProjectTheme);
return new ResourceResolverDecorator(resolver);
}
public RenderService createService(ResourceResolver resources,
public RenderService createService(RenderResources resources,
FolderConfiguration config,
float xdpi,
float ydpi,
@@ -1,5 +1,6 @@
package org.jetbrains.android.uipreview;
import com.android.ide.common.rendering.api.RenderResources;
import com.android.ide.common.rendering.api.RenderSession;
import com.android.ide.common.rendering.api.Result;
import com.android.ide.common.resources.*;
@@ -98,7 +99,7 @@ class RenderUtil {
missingRClass = true;
}
final ResourceResolver resolver =
final RenderResources resolver =
factory.createResourceResolver(facet, config, projectResources, theme.getName(), theme.isProjectTheme());
final RenderService renderService = factory.createService(resolver, config, xdpi, ydpi, callback, minSdkVersion);
@@ -0,0 +1,102 @@
package org.jetbrains.android.uipreview;
import com.android.ide.common.rendering.api.LayoutLog;
import com.android.ide.common.rendering.api.RenderResources;
import com.android.ide.common.rendering.api.ResourceValue;
import com.android.ide.common.rendering.api.StyleResourceValue;
import com.android.ide.common.resources.ResourceResolver;
import com.android.resources.ResourceType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author Eugene.Kudelevsky
*/
public class ResourceResolverDecorator extends RenderResources {
private final ResourceResolver myWrappee;
public ResourceResolverDecorator(@NotNull ResourceResolver wrappee) {
myWrappee = wrappee;
}
@Override
public void setFrameworkResourceIdProvider(FrameworkResourceIdProvider provider) {
myWrappee.setFrameworkResourceIdProvider(provider);
}
@Override
public void setLogger(LayoutLog logger) {
myWrappee.setLogger(logger);
}
@Override
public StyleResourceValue getCurrentTheme() {
return myWrappee.getCurrentTheme();
}
@Override
public StyleResourceValue getTheme(String name, boolean frameworkTheme) {
return myWrappee.getTheme(name, frameworkTheme);
}
@Override
public boolean themeIsParentOf(StyleResourceValue parentTheme, StyleResourceValue childTheme) {
return myWrappee.themeIsParentOf(parentTheme, childTheme);
}
@Override
public ResourceValue getFrameworkResource(ResourceType resourceType, String resourceName) {
return myWrappee.getFrameworkResource(resourceType, resourceName);
}
@Override
public ResourceValue getProjectResource(ResourceType resourceType, String resourceName) {
return myWrappee.getProjectResource(resourceType, resourceName);
}
@Override
public ResourceValue findItemInTheme(String itemName) {
return myWrappee.findItemInTheme(itemName);
}
@Override
public ResourceValue findItemInStyle(StyleResourceValue style, String itemName) {
return myWrappee.findItemInStyle(style, itemName);
}
@Override
public ResourceValue findResValue(String reference, boolean forceFrameworkOnly) {
return myWrappee.findResValue(reference, forceFrameworkOnly);
}
@Nullable
@Override
public ResourceValue resolveValue(ResourceType type, String name, String value, boolean isFrameworkValue) {
return myWrappee.resolveValue(type, name, value, isFrameworkValue);
}
@Nullable
@Override
public ResourceValue resolveResValue(ResourceValue value) {
if (value == null) {
return null;
}
final String stringValue = value.getValue();
if (stringValue == null) {
return value;
}
final ResourceValue resolvedResValue = myWrappee.findResValue(stringValue, value.isFramework());
if (resolvedResValue == null) {
return value;
}
// avoid infinite recursion (see http://code.google.com/p/android/issues/detail?id=24317)
if (resolvedResValue.equals(value)) {
// use default value
return null;
}
return resolveResValue(resolvedResValue);
}
}