1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  *
4  * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php
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.resources.platform;
18 
19 
20 /**
21  * Information needed to represent a View or ViewGroup (aka Layout) item
22  * in the layout hierarchy, as extracted from the main android.jar and the
23  * associated attrs.xml.
24  */
25 public class ViewClassInfo {
26     /** Is this a layout class (i.e. ViewGroup) or just a view? */
27     private boolean mIsLayout;
28     /** FQCN e.g. android.view.View, never null. */
29     private String mFullClassName;
30     /** Short class name, e.g. View, never null. */
31     private String mShortClassName;
32     /** Super class. Can be null. */
33     private ViewClassInfo mSuperClass;
34     /** Short javadoc. Can be null. */
35     private String mJavaDoc;
36     /** Attributes for this view or view group. Can be empty but never null. */
37     private AttributeInfo[] mAttributes;
38 
39     public static class LayoutParamsInfo {
40         /** Short class name, e.g. LayoutData, never null. */
41         private String mShortClassName;
42         /** ViewLayout class info owning this layout data */
43         private ViewClassInfo mViewLayoutClass;
44         /** Super class. Can be null. */
45         private LayoutParamsInfo mSuperClass;
46         /** Layout Data Attributes for layout classes. Can be empty but not null. */
47         private AttributeInfo[] mAttributes;
48 
LayoutParamsInfo(ViewClassInfo enclosingViewClassInfo, String shortClassName, LayoutParamsInfo superClassInfo)49         public LayoutParamsInfo(ViewClassInfo enclosingViewClassInfo,
50                 String shortClassName, LayoutParamsInfo superClassInfo) {
51             mShortClassName = shortClassName;
52             mViewLayoutClass = enclosingViewClassInfo;
53             mSuperClass = superClassInfo;
54             mAttributes = new AttributeInfo[0];
55         }
56 
57         /** Returns short class name, e.g. "LayoutData" */
getShortClassName()58         public String getShortClassName() {
59             return mShortClassName;
60         }
61         /** Returns the ViewLayout class info enclosing this layout data. Cannot null. */
getViewLayoutClass()62         public ViewClassInfo getViewLayoutClass() {
63             return mViewLayoutClass;
64         }
65         /** Returns the super class info. Can be null. */
getSuperClass()66         public LayoutParamsInfo getSuperClass() {
67             return mSuperClass;
68         }
69         /** Returns the LayoutData attributes. Can be empty but not null. */
getAttributes()70         public AttributeInfo[] getAttributes() {
71             return mAttributes;
72         }
73         /** Sets the LayoutData attributes. Can be empty but not null. */
setAttributes(AttributeInfo[] attributes)74         public void setAttributes(AttributeInfo[] attributes) {
75             mAttributes = attributes;
76         }
77     }
78 
79     /** Layout data info for a layout class. Null for all non-layout classes and always
80      *  non-null for a layout class. */
81     public LayoutParamsInfo mLayoutData;
82 
83     // --------
84 
ViewClassInfo(boolean isLayout, String fullClassName, String shortClassName)85     public ViewClassInfo(boolean isLayout, String fullClassName, String shortClassName) {
86         mIsLayout = isLayout;
87         mFullClassName = fullClassName;
88         mShortClassName = shortClassName;
89         mAttributes = new AttributeInfo[0];
90     }
91 
92     /** Returns whether this is a layout class (i.e. ViewGroup) or just a View */
isLayout()93     public boolean isLayout() {
94         return mIsLayout;
95     }
96 
97     /** Returns FQCN e.g. "android.view.View" */
getFullClassName()98     public String getFullClassName() {
99         return mFullClassName;
100     }
101 
102     /** Returns short class name, e.g. "View" */
getShortClassName()103     public String getShortClassName() {
104         return mShortClassName;
105     }
106 
107     /** Returns the super class. Can be null. */
getSuperClass()108     public ViewClassInfo getSuperClass() {
109         return mSuperClass;
110     }
111 
112     /** Returns a short javadoc */
getJavaDoc()113     public String getJavaDoc() {
114         return mJavaDoc;
115     }
116 
117     /** Returns the attributes for this view or view group. Maybe empty but not null. */
getAttributes()118     public AttributeInfo[] getAttributes() {
119         return mAttributes;
120     }
121 
122     /** Returns the LayoutData info for layout classes. Null for non-layout view classes. */
getLayoutData()123     public LayoutParamsInfo getLayoutData() {
124         return mLayoutData;
125     }
126 
127     /**
128      * Sets a link on the info of the super class of this View or ViewGroup.
129      * <p/>
130      * The super class info must be of the same kind (i.e. group to group or view to view)
131      * except for the top ViewGroup which links to the View info.
132      * <p/>
133      * The super class cannot be null except for the top View info.
134      */
setSuperClass(ViewClassInfo superClass)135     public void setSuperClass(ViewClassInfo superClass) {
136         mSuperClass = superClass;
137     }
138 
139     /** Sets the javadoc for this View or ViewGroup. */
setJavaDoc(String javaDoc)140     public void setJavaDoc(String javaDoc) {
141         mJavaDoc = javaDoc;
142     }
143 
144     /** Sets the list of attributes for this View or ViewGroup. */
setAttributes(AttributeInfo[] attributes)145     public void setAttributes(AttributeInfo[] attributes) {
146         mAttributes = attributes;
147     }
148 
149     /**
150      * Sets the {@link LayoutParamsInfo} for layout classes.
151      * Does nothing for non-layout view classes.
152      */
setLayoutParams(LayoutParamsInfo layoutData)153     public void setLayoutParams(LayoutParamsInfo layoutData) {
154         if (mIsLayout) {
155             mLayoutData = layoutData;
156         }
157     }
158 }
159