blob: f9e02d63028c9b89e4ec4a3a4e9f67b548d8840b [file] [log] [blame]
/*
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.ide.common.rendering.api;
import com.android.resources.ResourceType;
/**
* A class containing all the resources needed to do a rendering.
* <p/>
* This contains both the project specific resources and the framework resources, and provide
* convenience methods to resolve resource and theme references.
*/
public class RenderResources {
public final static String REFERENCE_NULL = "@null";
public static class FrameworkResourceIdProvider {
public Integer getId(ResourceType resType, String resName) {
return null;
}
}
public void setFrameworkResourceIdProvider(FrameworkResourceIdProvider provider) {
}
public void setLogger(LayoutLog logger) {
}
/**
* Returns the {@link StyleResourceValue} representing the current theme.
* @return the theme or null if there is no current theme.
*/
public StyleResourceValue getCurrentTheme() {
return null;
}
/**
* Returns a theme by its name.
*
* @param name the name of the theme
* @param frameworkTheme whether the theme is a framework theme.
* @return the theme or null if there's no match
*/
public StyleResourceValue getTheme(String name, boolean frameworkTheme) {
return null;
}
/**
* Returns whether a theme is a parent of a given theme.
* @param parentTheme the parent theme
* @param childTheme the child theme.
* @return true if the parent theme is indeed a parent theme of the child theme.
*/
public boolean themeIsParentOf(StyleResourceValue parentTheme, StyleResourceValue childTheme) {
return false;
}
/**
* Returns a framework resource by type and name. The returned resource is resolved.
* @param resourceType the type of the resource
* @param resourceName the name of the resource
*/
public ResourceValue getFrameworkResource(ResourceType resourceType, String resourceName) {
return null;
}
/**
* Returns a project resource by type and name. The returned resource is resolved.
* @param resourceType the type of the resource
* @param resourceName the name of the resource
*/
public ResourceValue getProjectResource(ResourceType resourceType, String resourceName) {
return null;
}
/**
* Returns the {@link ResourceValue} matching a given name in the current theme. If the
* item is not directly available in the theme, the method looks in its parent theme.
*
* @param itemName the name of the item to search for.
* @return the {@link ResourceValue} object or <code>null</code>
*
* @deprecated Use {@link #findItemInTheme(String, boolean)}
*/
@Deprecated
public ResourceValue findItemInTheme(String itemName) {
StyleResourceValue currentTheme = getCurrentTheme();
if (currentTheme != null) {
return findItemInStyle(currentTheme, itemName);
}
return null;
}
/**
* Returns the {@link ResourceValue} matching a given attribute in the current theme. If the
* item is not directly available in the theme, the method looks in its parent theme.
*
* @param attrName the name of the attribute to search for.
* @param isFrameworkAttr whether the attribute is a framework attribute
* @return the {@link ResourceValue} object or <code>null</code>
*/
public ResourceValue findItemInTheme(String attrName, boolean isFrameworkAttr) {
StyleResourceValue currentTheme = getCurrentTheme();
if (currentTheme != null) {
return findItemInStyle(currentTheme, attrName, isFrameworkAttr);
}
return null;
}
/**
* Returns the {@link ResourceValue} matching a given name in a given style. If the
* item is not directly available in the style, the method looks in its parent style.
*
* This version of doesn't support providing the namespace of the attribute so it'll search
* in both the project's namespace and then in the android namespace.
*
* @param style the style to search in
* @param attrName the name of the attribute to search for.
* @return the {@link ResourceValue} object or <code>null</code>
*
* @Deprecated Use {@link #findItemInStyle(StyleResourceValue, String, boolean)} since this
* method doesn't know the item namespace.
*/
@Deprecated
public ResourceValue findItemInStyle(StyleResourceValue style, String attrName) {
return null;
}
/**
* Returns the {@link ResourceValue} matching a given attribute in a given style. If the
* item is not directly available in the style, the method looks in its parent style.
*
* @param style the style to search in
* @param attrName the name of the attribute to search for.
* @param isFrameworkAttr whether the attribute is a framework attribute
* @return the {@link ResourceValue} object or <code>null</code>
*/
public ResourceValue findItemInStyle(StyleResourceValue style, String attrName,
boolean isFrameworkAttr) {
return null;
}
/**
* Searches for, and returns a {@link ResourceValue} by its reference.
* <p/>
* The reference format can be:
* <pre>@resType/resName</pre>
* <pre>@android:resType/resName</pre>
* <pre>@resType/android:resName</pre>
* <pre>?resType/resName</pre>
* <pre>?android:resType/resName</pre>
* <pre>?resType/android:resName</pre>
* Any other string format will return <code>null</code>.
* <p/>
* The actual format of a reference is <pre>@[namespace:]resType/resName</pre> but this method
* only support the android namespace.
*
* @param reference the resource reference to search for.
* @param forceFrameworkOnly if true all references are considered to be toward framework
* resource even if the reference does not include the android: prefix.
* @return a {@link ResourceValue} or <code>null</code>.
*/
public ResourceValue findResValue(String reference, boolean forceFrameworkOnly) {
return null;
}
/**
* Resolves the value of a resource, if the value references a theme or resource value.
* <p/>
* This method ensures that it returns a {@link ResourceValue} object that does not
* reference another resource.
* If the resource cannot be resolved, it returns <code>null</code>.
* <p/>
* If a value that does not need to be resolved is given, the method will return a new
* instance of {@link ResourceValue} that contains the input value.
*
* @param type the type of the resource
* @param name the name of the attribute containing this value.
* @param value the resource value, or reference to resolve
* @param isFrameworkValue whether the value is a framework value.
*
* @return the resolved resource value or <code>null</code> if it failed to resolve it.
*/
public ResourceValue resolveValue(ResourceType type, String name, String value,
boolean isFrameworkValue) {
return null;
}
/**
* Returns the {@link ResourceValue} referenced by the value of <var>value</var>.
* <p/>
* This method ensures that it returns a {@link ResourceValue} object that does not
* reference another resource.
* If the resource cannot be resolved, it returns <code>null</code>.
* <p/>
* If a value that does not need to be resolved is given, the method will return the input
* value.
*
* @param value the value containing the reference to resolve.
* @return a {@link ResourceValue} object or <code>null</code>
*/
public ResourceValue resolveResValue(ResourceValue value) {
return null;
}
}