Home | History | Annotate | Download | only in api
      1 /*
      2  * Copyright (C) 2011 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.ide.common.rendering.api;
     18 
     19 import com.android.resources.ResourceType;
     20 
     21 /**
     22  * A class containing all the resources needed to do a rendering.
     23  * <p/>
     24  * This contains both the project specific resources and the framework resources, and provide
     25  * convenience methods to resolve resource and theme references.
     26  */
     27 public class RenderResources {
     28 
     29     public final static String REFERENCE_NULL = "@null";
     30 
     31     public static class FrameworkResourceIdProvider {
     32         public Integer getId(ResourceType resType, String resName) {
     33             return null;
     34         }
     35     }
     36 
     37     public void setFrameworkResourceIdProvider(FrameworkResourceIdProvider provider) {
     38     }
     39 
     40     public void setLogger(LayoutLog logger) {
     41     }
     42 
     43     /**
     44      * Returns the {@link StyleResourceValue} representing the current theme.
     45      * @return the theme or null if there is no current theme.
     46      */
     47     public StyleResourceValue getCurrentTheme() {
     48         return null;
     49     }
     50 
     51     /**
     52      * Returns a theme by its name.
     53      *
     54      * @param name the name of the theme
     55      * @param frameworkTheme whether the theme is a framework theme.
     56      * @return the theme or null if there's no match
     57      */
     58     public StyleResourceValue getTheme(String name, boolean frameworkTheme) {
     59         return null;
     60     }
     61 
     62     /**
     63      * Returns whether a theme is a parent of a given theme.
     64      * @param parentTheme the parent theme
     65      * @param childTheme the child theme.
     66      * @return true if the parent theme is indeed a parent theme of the child theme.
     67      */
     68     public boolean themeIsParentOf(StyleResourceValue parentTheme, StyleResourceValue childTheme) {
     69         return false;
     70     }
     71 
     72     /**
     73      * Returns a framework resource by type and name. The returned resource is resolved.
     74      * @param resourceType the type of the resource
     75      * @param resourceName the name of the resource
     76      */
     77     public ResourceValue getFrameworkResource(ResourceType resourceType, String resourceName) {
     78         return null;
     79     }
     80 
     81     /**
     82      * Returns a project resource by type and name. The returned resource is resolved.
     83      * @param resourceType the type of the resource
     84      * @param resourceName the name of the resource
     85      */
     86     public ResourceValue getProjectResource(ResourceType resourceType, String resourceName) {
     87         return null;
     88     }
     89 
     90     /**
     91      * Returns the {@link ResourceValue} matching a given name in the current theme. If the
     92      * item is not directly available in the theme, the method looks in its parent theme.
     93      *
     94      * @param itemName the name of the item to search for.
     95      * @return the {@link ResourceValue} object or <code>null</code>
     96      *
     97      * @deprecated Use {@link #findItemInTheme(String, boolean)}
     98      */
     99     @Deprecated
    100     public ResourceValue findItemInTheme(String itemName) {
    101         StyleResourceValue currentTheme = getCurrentTheme();
    102         if (currentTheme != null) {
    103             return findItemInStyle(currentTheme, itemName);
    104         }
    105 
    106         return null;
    107     }
    108 
    109     /**
    110      * Returns the {@link ResourceValue} matching a given attribute in the current theme. If the
    111      * item is not directly available in the theme, the method looks in its parent theme.
    112      *
    113      * @param attrName the name of the attribute to search for.
    114      * @param isFrameworkAttr whether the attribute is a framework attribute
    115      * @return the {@link ResourceValue} object or <code>null</code>
    116      */
    117     public ResourceValue findItemInTheme(String attrName, boolean isFrameworkAttr) {
    118         StyleResourceValue currentTheme = getCurrentTheme();
    119         if (currentTheme != null) {
    120             return findItemInStyle(currentTheme, attrName, isFrameworkAttr);
    121         }
    122 
    123         return null;
    124     }
    125 
    126     /**
    127      * Returns the {@link ResourceValue} matching a given name in a given style. If the
    128      * item is not directly available in the style, the method looks in its parent style.
    129      *
    130      * This version of doesn't support providing the namespace of the attribute so it'll search
    131      * in both the project's namespace and then in the android namespace.
    132      *
    133      * @param style the style to search in
    134      * @param attrName the name of the attribute to search for.
    135      * @return the {@link ResourceValue} object or <code>null</code>
    136      *
    137      * @Deprecated Use {@link #findItemInStyle(StyleResourceValue, String, boolean)} since this
    138      * method doesn't know the item namespace.
    139      */
    140     @Deprecated
    141     public ResourceValue findItemInStyle(StyleResourceValue style, String attrName) {
    142         return null;
    143     }
    144 
    145     /**
    146      * Returns the {@link ResourceValue} matching a given attribute in a given style. If the
    147      * item is not directly available in the style, the method looks in its parent style.
    148      *
    149      * @param style the style to search in
    150      * @param attrName the name of the attribute to search for.
    151      * @param isFrameworkAttr whether the attribute is a framework attribute
    152      * @return the {@link ResourceValue} object or <code>null</code>
    153      */
    154     public ResourceValue findItemInStyle(StyleResourceValue style, String attrName,
    155             boolean isFrameworkAttr) {
    156         return null;
    157     }
    158 
    159     /**
    160      * Searches for, and returns a {@link ResourceValue} by its reference.
    161      * <p/>
    162      * The reference format can be:
    163      * <pre>@resType/resName</pre>
    164      * <pre>@android:resType/resName</pre>
    165      * <pre>@resType/android:resName</pre>
    166      * <pre>?resType/resName</pre>
    167      * <pre>?android:resType/resName</pre>
    168      * <pre>?resType/android:resName</pre>
    169      * Any other string format will return <code>null</code>.
    170      * <p/>
    171      * The actual format of a reference is <pre>@[namespace:]resType/resName</pre> but this method
    172      * only support the android namespace.
    173      *
    174      * @param reference the resource reference to search for.
    175      * @param forceFrameworkOnly if true all references are considered to be toward framework
    176      *      resource even if the reference does not include the android: prefix.
    177      * @return a {@link ResourceValue} or <code>null</code>.
    178      */
    179     public ResourceValue findResValue(String reference, boolean forceFrameworkOnly) {
    180         return null;
    181     }
    182 
    183     /**
    184      * Resolves the value of a resource, if the value references a theme or resource value.
    185      * <p/>
    186      * This method ensures that it returns a {@link ResourceValue} object that does not
    187      * reference another resource.
    188      * If the resource cannot be resolved, it returns <code>null</code>.
    189      * <p/>
    190      * If a value that does not need to be resolved is given, the method will return a new
    191      * instance of {@link ResourceValue} that contains the input value.
    192      *
    193      * @param type the type of the resource
    194      * @param name the name of the attribute containing this value.
    195      * @param value the resource value, or reference to resolve
    196      * @param isFrameworkValue whether the value is a framework value.
    197      *
    198      * @return the resolved resource value or <code>null</code> if it failed to resolve it.
    199      */
    200     public ResourceValue resolveValue(ResourceType type, String name, String value,
    201             boolean isFrameworkValue) {
    202         return null;
    203     }
    204 
    205     /**
    206      * Returns the {@link ResourceValue} referenced by the value of <var>value</var>.
    207      * <p/>
    208      * This method ensures that it returns a {@link ResourceValue} object that does not
    209      * reference another resource.
    210      * If the resource cannot be resolved, it returns <code>null</code>.
    211      * <p/>
    212      * If a value that does not need to be resolved is given, the method will return the input
    213      * value.
    214      *
    215      * @param value the value containing the reference to resolve.
    216      * @return a {@link ResourceValue} object or <code>null</code>
    217      */
    218     public ResourceValue resolveResValue(ResourceValue value) {
    219         return null;
    220     }
    221 }
    222