1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
/*
* 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.
* <p/>This lets the Layout Lib load custom attributes for custom views.
*/
String getNamespace();
/**
* Resolves the id of a resource Id.
* <p/>The resource id is the value of a <code>R.<type>.<name></code>, 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.
*/
Pair<ResourceType, String> resolveResourceId(int id);
/**
* Resolves the id of a resource Id of type int[]
* <p/>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 <code>null</code> if not found.
*/
String resolveResourceId(int[] id);
/**
* Returns the id of a resource.
* <p/>The provided type and name must match an existing constant defined as
* <code>R.<type>.<name></code>.
* @param type the type of the resource
* @param name the name of the resource
* @return an Integer containing the resource Id, or <code>null</code> 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.
*/
ILayoutPullParser getParser(String layoutName);
/**
* 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
* <var>fullPosition</var>.
* @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 <var>fullParentPosition</var>.
* @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);
}
|