All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.android.ide.common.rendering.api.IProjectCallback Maven / Gradle / Ivy

/*
 * Copyright (C) 2008 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;
import com.android.util.Pair;

import java.net.URL;

/**
 * Callback for project information needed by the Layout Library.
 * Classes implementing this interface provide methods giving access to some project data, like
 * resource resolution, namespace information, and instantiation of custom view.
 */
public interface IProjectCallback {

    public enum ViewAttribute {
        TEXT(String.class),
        IS_CHECKED(Boolean.class),
        SRC(URL.class),
        COLOR(Integer.class);

        private final Class mClass;

        private ViewAttribute(Class theClass) {
            mClass = theClass;
        }

        public Class getAttributeClass() {
            return mClass;
        }
    }

    /**
     * Loads a custom view with the given constructor signature and arguments.
     * @param name The fully qualified name of the class.
     * @param constructorSignature The signature of the class to use
     * @param constructorArgs The arguments to use on the constructor
     * @return A newly instantiated android.view.View object.
     * @throws ClassNotFoundException
     * @throws Exception
     */
    @SuppressWarnings("unchecked")
    Object loadView(String name, Class[] constructorSignature, Object[] constructorArgs)
        throws ClassNotFoundException, Exception;

    /**
     * Returns the namespace of the application.
     * 

This lets the Layout Lib load custom attributes for custom views. */ String getNamespace(); /** * Resolves the id of a resource Id. *

The resource id is the value of a R.<type>.<name>, and * this method will return both the type and name of the resource. * @param id the Id to resolve. * @return a Pair of {@link ResourceType} and resource name, or null if the id * does not match any resource. */ @SuppressWarnings("deprecation") Pair resolveResourceId(int id); /** * Resolves the id of a resource Id of type int[] *

The resource id is the value of a R.styleable.<name>, and this method will * return the name of the resource. * @param id the Id to resolve. * @return the name of the resource or null if not found. */ String resolveResourceId(int[] id); /** * Returns the id of a resource. *

The provided type and name must match an existing constant defined as * R.<type>.<name>. * @param type the type of the resource * @param name the name of the resource * @return an Integer containing the resource Id, or null if not found. */ Integer getResourceId(ResourceType type, String name); /** * Returns a custom parser for the layout of the given name. * @param layoutName the name of the layout. * @return returns a custom parser or null if no custom parsers are needed. * @deprecated This is replaced by {@link #getParser(ResourceValue)} but older version * of the layoutlib (before API7) will still call this method. */ @Deprecated ILayoutPullParser getParser(String layoutName); /** * Returns a custom parser for a given layout. * @param layoutResource The layout. * @return returns a custom parser or null if no custom parsers are needed. */ ILayoutPullParser getParser(ResourceValue layoutResource); /** * Returns the value of an item used by an adapter. * @param adapterView The {@link ResourceReference} for the adapter view info. * @param adapterCookie the view cookie for this particular view. * @param itemRef the {@link ResourceReference} for the layout used by the adapter item. * @param fullPosition the position of the item in the full list. * @param positionPerType the position of the item if only items of the same type are * considered. If there is only one type of items, this is the same as * fullPosition. * @param fullParentPosition the full position of the item's parent. This is only * valid if the adapter view is an ExpandableListView. * @param parentPositionPerType the position of the parent's item, only considering items * of the same type. This is only valid if the adapter view is an ExpandableListView. * If there is only one type of items, this is the same as fullParentPosition. * @param viewRef The {@link ResourceReference} for the view we're trying to fill. * @param viewAttribute the attribute being queried. * @param defaultValue the default value for this attribute. The object class matches the * class associated with the {@link ViewAttribute}. * @return the item value or null if there's no value. * * @see ViewAttribute#getAttributeClass() */ Object getAdapterItemValue(ResourceReference adapterView, Object adapterCookie, ResourceReference itemRef, int fullPosition, int positionPerType, int fullParentPosition, int parentPositionPerType, ResourceReference viewRef, ViewAttribute viewAttribute, Object defaultValue); /** * Returns an adapter binding for a given adapter view. * This is only called if {@link SessionParams} does not have an {@link AdapterBinding} for * the given {@link ResourceReference} already. * * @param adapterViewRef the reference of adapter view to return the adapter binding for. * @param adapterCookie the view cookie for this particular view. * @param viewObject the view object for the adapter. * @return an adapter binding for the given view or null if there's no data. */ AdapterBinding getAdapterBinding(ResourceReference adapterViewRef, Object adapterCookie, Object viewObject); /** * Returns a callback for Action Bar information needed by the Layout Library. The callback * provides information like the menus to add to the Action Bar. * * @since API 11 */ ActionBarCallback getActionBarCallback(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy