CreateInfo.java revision 071dee288ca726c7c15754c2559403b9cbf950bd
1/*
2 * Copyright (C) 2008 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
17package com.android.tools.layoutlib.create;
18
19import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
20
21/**
22 * Describes the work to be done by {@link AsmGenerator}.
23 */
24public final class CreateInfo implements ICreateInfo {
25
26    /**
27     * Returns the list of class from layoutlib_create to inject in layoutlib.
28     * The list can be empty but must not be null.
29     */
30    public Class<?>[] getInjectedClasses() {
31        return INJECTED_CLASSES;
32    }
33
34    /**
35     * Returns the list of methods to rewrite as delegates.
36     * The list can be empty but must not be null.
37     */
38    public String[] getDelegateMethods() {
39        return DELEGATE_METHODS;
40    }
41
42    /**
43     * Returns the list of classes on which to delegate all native methods.
44     * The list can be empty but must not be null.
45     */
46    public String[] getDelegateClassNatives() {
47        return DELEGATE_CLASS_NATIVES;
48    }
49
50    /**
51     * Returns The list of methods to stub out. Each entry must be in the form
52     * "package.package.OuterClass$InnerClass#MethodName".
53     * The list can be empty but must not be null.
54     */
55    public String[] getOverriddenMethods() {
56        return OVERRIDDEN_METHODS;
57    }
58
59    /**
60     * Returns the list of classes to rename, must be an even list: the binary FQCN
61     * of class to replace followed by the new FQCN.
62     * The list can be empty but must not be null.
63     */
64    public String[] getRenamedClasses() {
65        return RENAMED_CLASSES;
66    }
67
68    /**
69     * Returns the list of classes for which the methods returning them should be deleted.
70     * The array contains a list of null terminated section starting with the name of the class
71     * to rename in which the methods are deleted, followed by a list of return types identifying
72     * the methods to delete.
73     * The list can be empty but must not be null.
74     */
75    public String[] getDeleteReturns() {
76        return DELETE_RETURNS;
77    }
78
79    //-----
80
81    /**
82     * The list of class from layoutlib_create to inject in layoutlib.
83     */
84    private final static Class<?>[] INJECTED_CLASSES = new Class<?>[] {
85            OverrideMethod.class,
86            MethodListener.class,
87            MethodAdapter.class,
88            ICreateInfo.class,
89            CreateInfo.class,
90            LayoutlibDelegate.class
91        };
92
93    /**
94     * The list of methods to rewrite as delegates.
95     */
96    private final static String[] DELEGATE_METHODS = new String[] {
97        "android.app.Fragment#instantiate", //(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;)Landroid/app/Fragment;",
98        "android.view.View#isInEditMode",
99        // TODO: comment out once DelegateClass is working
100        // "android.content.res.Resources$Theme#obtainStyledAttributes",
101    };
102
103    /**
104     * The list of classes on which to delegate all native methods.
105     */
106    private final static String[] DELEGATE_CLASS_NATIVES = new String[] {
107        "android.graphics.Bitmap",
108        "android.graphics.Canvas",
109        "android.graphics.DashPathEffect",
110        "android.graphics.LinearGradient",
111        "android.graphics.Matrix",
112        "android.graphics.Paint",
113        "android.graphics.PathEffect",
114        "android.graphics.PorterDuffXfermode",
115        "android.graphics.RadialGradient",
116        "android.graphics.Shader",
117        "android.graphics.SweepGradient",
118        "android.graphics.Typeface",
119        "android.graphics.Xfermode",
120        "android.util.FloatMath",
121    };
122
123    /**
124     * The list of methods to stub out. Each entry must be in the form
125     *  "package.package.OuterClass$InnerClass#MethodName".
126     */
127    private final static String[] OVERRIDDEN_METHODS = new String[] {
128        // TODO: remove once DelegateClass is working
129        "android.content.res.Resources$Theme#obtainStyledAttributes",
130    };
131
132    /**
133     *  The list of classes to rename, must be an even list: the binary FQCN
134     *  of class to replace followed by the new FQCN.
135     */
136    private final static String[] RENAMED_CLASSES =
137        new String[] {
138            "android.graphics.BitmapFactory",       "android.graphics._Original_BitmapFactory",
139            "android.graphics.Path",                "android.graphics._Original_Path",
140            "android.os.ServiceManager",            "android.os._Original_ServiceManager",
141            "android.view.SurfaceView",             "android.view._Original_SurfaceView",
142            "android.view.accessibility.AccessibilityManager", "android.view.accessibility._Original_AccessibilityManager",
143            "android.webkit.WebView",               "android.webkit._Original_WebView",
144        };
145
146    /**
147     * List of classes for which the methods returning them should be deleted.
148     * The array contains a list of null terminated section starting with the name of the class
149     * to rename in which the methods are deleted, followed by a list of return types identifying
150     * the methods to delete.
151     */
152    private final static String[] DELETE_RETURNS =
153        new String[] {
154            null };                         // separator, for next class/methods list.
155}
156
157