168fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet/*
268fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet * Copyright (C) 2010 The Android Open Source Project
368fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet *
468fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet * Licensed under the Apache License, Version 2.0 (the "License");
568fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet * you may not use this file except in compliance with the License.
668fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet * You may obtain a copy of the License at
768fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet *
868fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet *      http://www.apache.org/licenses/LICENSE-2.0
968fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet *
1068fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet * Unless required by applicable law or agreed to in writing, software
1168fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet * distributed under the License is distributed on an "AS IS" BASIS,
1268fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1368fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet * See the License for the specific language governing permissions and
1468fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet * limitations under the License.
1568fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet */
1668fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet
1795b17a5e62eeeb7b38ef668508df43a1ee9e0880Xavier Ducrohetpackage com.android.ide.common.rendering.api;
1868fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet
1995b17a5e62eeeb7b38ef668508df43a1ee9e0880Xavier Ducrohet
2079c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohetimport static com.android.ide.common.rendering.api.Result.Status.NOT_IMPLEMENTED;
2179c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet
22e25af9f721bcc89d73c8e56adc9d02a6bcfac1c6Xavier Ducrohetimport com.android.ide.common.rendering.api.Result.Status;
23e25af9f721bcc89d73c8e56adc9d02a6bcfac1c6Xavier Ducrohet
24e25af9f721bcc89d73c8e56adc9d02a6bcfac1c6Xavier Ducrohetimport java.awt.image.BufferedImage;
2595b17a5e62eeeb7b38ef668508df43a1ee9e0880Xavier Ducrohetimport java.io.File;
267c3914ca52567a04de780cd490591646d3ff7fffXavier Ducrohetimport java.util.EnumSet;
2768fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohetimport java.util.Map;
2868fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet
2968fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet/**
3095b17a5e62eeeb7b38ef668508df43a1ee9e0880Xavier Ducrohet * Entry point of the Layout Library. Extensions of this class provide a method to compute
3168fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet * and render a layout.
3268fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet */
3395b17a5e62eeeb7b38ef668508df43a1ee9e0880Xavier Ducrohetpublic abstract class Bridge {
3468fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet
358818ca4db2f1ae396964912bf8035ee88988f4ddXavier Ducrohet    public final static int API_CURRENT = 8;
3668fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet
3768fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet    /**
3868fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     * Returns the API level of the layout library.
3968fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     * <p/>
4068fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     * While no methods will ever be removed, some may become deprecated, and some new ones
4168fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     * will appear.
4295b17a5e62eeeb7b38ef668508df43a1ee9e0880Xavier Ducrohet     * <p/>All Layout libraries based on {@link Bridge} return at minimum an API level of 5.
4368fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     */
4468fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet    public abstract int getApiLevel();
4568fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet
4668fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet    /**
47677a248915d2bb6609e7b7ae6976341b86e92ac0Xavier Ducrohet     * Returns the revision of the library inside a given (layoutlib) API level.
48677a248915d2bb6609e7b7ae6976341b86e92ac0Xavier Ducrohet     * The true revision number of the library is {@link #getApiLevel()}.{@link #getRevision()}
49677a248915d2bb6609e7b7ae6976341b86e92ac0Xavier Ducrohet     */
50677a248915d2bb6609e7b7ae6976341b86e92ac0Xavier Ducrohet    public int getRevision() {
51677a248915d2bb6609e7b7ae6976341b86e92ac0Xavier Ducrohet        return 0;
52677a248915d2bb6609e7b7ae6976341b86e92ac0Xavier Ducrohet    }
53677a248915d2bb6609e7b7ae6976341b86e92ac0Xavier Ducrohet
54677a248915d2bb6609e7b7ae6976341b86e92ac0Xavier Ducrohet    /**
5579ebb8f4ec3236d361c4b6a6d97440a29c50aa4aXavier Ducrohet     * Returns an {@link EnumSet} of the supported {@link Capability}.
567c3914ca52567a04de780cd490591646d3ff7fffXavier Ducrohet     * @return an {@link EnumSet} with the supported capabilities.
577c3914ca52567a04de780cd490591646d3ff7fffXavier Ducrohet     *
587c3914ca52567a04de780cd490591646d3ff7fffXavier Ducrohet     */
5979ebb8f4ec3236d361c4b6a6d97440a29c50aa4aXavier Ducrohet    public EnumSet<Capability> getCapabilities() {
6079ebb8f4ec3236d361c4b6a6d97440a29c50aa4aXavier Ducrohet        return EnumSet.noneOf(Capability.class);
617c3914ca52567a04de780cd490591646d3ff7fffXavier Ducrohet    }
627c3914ca52567a04de780cd490591646d3ff7fffXavier Ducrohet
637c3914ca52567a04de780cd490591646d3ff7fffXavier Ducrohet    /**
6468fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     * Initializes the Bridge object.
6568fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     *
66d7b0f0de4f0b55c137443aab782a8051a34fe70fXavier Ducrohet     * @param platformProperties The build properties for the platform.
6795b17a5e62eeeb7b38ef668508df43a1ee9e0880Xavier Ducrohet     * @param fontLocation the location of the fonts.
686d93979134c2e89bae1596141a270ea56c8dde91Xavier Ducrohet     * @param enumValueMap map attrName => { map enumFlagName => Integer value }. This is typically
696d93979134c2e89bae1596141a270ea56c8dde91Xavier Ducrohet     *          read from attrs.xml in the SDK target.
706d93979134c2e89bae1596141a270ea56c8dde91Xavier Ducrohet     * @param log a {@link LayoutLog} object. Can be null.
7168fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     * @return true if success.
7268fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     */
73d7b0f0de4f0b55c137443aab782a8051a34fe70fXavier Ducrohet    public boolean init(Map<String, String> platformProperties,
74d7b0f0de4f0b55c137443aab782a8051a34fe70fXavier Ducrohet            File fontLocation,
75d7b0f0de4f0b55c137443aab782a8051a34fe70fXavier Ducrohet            Map<String, Map<String, Integer>> enumValueMap,
766d93979134c2e89bae1596141a270ea56c8dde91Xavier Ducrohet            LayoutLog log) {
7768fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet        return false;
7868fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet    }
7968fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet
8068fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet    /**
8168fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     * Prepares the layoutlib to unloaded.
8268fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     */
8368fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet    public boolean dispose() {
8468fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet        return false;
8568fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet    }
8668fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet
8768fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet    /**
8868fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     * Starts a layout session by inflating and rendering it. The method returns a
8995b17a5e62eeeb7b38ef668508df43a1ee9e0880Xavier Ducrohet     * {@link RenderSession} on which further actions can be taken.
9068fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     *
9195b17a5e62eeeb7b38ef668508df43a1ee9e0880Xavier Ducrohet     * @return a new {@link RenderSession} object that contains the result of the scene creation and
9268fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     * first rendering.
9368fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     */
94e25af9f721bcc89d73c8e56adc9d02a6bcfac1c6Xavier Ducrohet    public RenderSession createSession(SessionParams params) {
9568fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet        return null;
9668fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet    }
9768fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet
9868fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet    /**
99e25af9f721bcc89d73c8e56adc9d02a6bcfac1c6Xavier Ducrohet     * Renders a Drawable. If the rendering is successful, the result image is accessible through
100e25af9f721bcc89d73c8e56adc9d02a6bcfac1c6Xavier Ducrohet     * {@link Result#getData()}. It is of type {@link BufferedImage}
101e25af9f721bcc89d73c8e56adc9d02a6bcfac1c6Xavier Ducrohet     * @param params the rendering parameters.
102e25af9f721bcc89d73c8e56adc9d02a6bcfac1c6Xavier Ducrohet     * @return the result of the action.
103e25af9f721bcc89d73c8e56adc9d02a6bcfac1c6Xavier Ducrohet     */
104e25af9f721bcc89d73c8e56adc9d02a6bcfac1c6Xavier Ducrohet    public Result renderDrawable(DrawableParams params) {
105e25af9f721bcc89d73c8e56adc9d02a6bcfac1c6Xavier Ducrohet        return Status.NOT_IMPLEMENTED.createResult();
106e25af9f721bcc89d73c8e56adc9d02a6bcfac1c6Xavier Ducrohet    }
107e25af9f721bcc89d73c8e56adc9d02a6bcfac1c6Xavier Ducrohet
108e25af9f721bcc89d73c8e56adc9d02a6bcfac1c6Xavier Ducrohet    /**
10968fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     * Clears the resource cache for a specific project.
11068fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     * <p/>This cache contains bitmaps and nine patches that are loaded from the disk and reused
11168fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     * until this method is called.
11268fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     * <p/>The cache is not configuration dependent and should only be cleared when a
11368fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     * resource changes (at this time only bitmaps and 9 patches go into the cache).
11495b17a5e62eeeb7b38ef668508df43a1ee9e0880Xavier Ducrohet     * <p/>
115f538a020eec631ca19ce493877de2ebca3b8d6f3Xavier Ducrohet     * The project key provided must be similar to the one passed in {@link RenderParams}.
11668fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     *
11768fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     * @param projectKey the key for the project.
11868fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet     */
11968fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet    public void clearCaches(Object projectKey) {
12068fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet
12168fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet    }
12279c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet
12379c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet    /**
12479c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet     * Utility method returning the parent of a given view object.
12579c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet     *
12679c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet     * @param viewObject the object for which to return the parent.
12779c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet     *
12879c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet     * @return a {@link Result} indicating the status of the action, and if success, the parent
12979c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet     *      object in {@link Result#getData()}
13079c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet     */
13179c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet    public Result getViewParent(Object viewObject) {
13279c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet        return NOT_IMPLEMENTED.createResult();
13379c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet    }
13479c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet
13579c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet    /**
13679c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet     * Utility method returning the index of a given view in its parent.
13779c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet     * @param viewObject the object for which to return the index.
13879c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet     *
13979c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet     * @return a {@link Result} indicating the status of the action, and if success, the index in
14079c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet     *      the parent in {@link Result#getData()}
14179c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet     */
14279c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet    public Result getViewIndex(Object viewObject) {
14379c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet        return NOT_IMPLEMENTED.createResult();
14479c8c93587295a899fa89da8b31fbfb008b59ee6Xavier Ducrohet    }
145135b9596ecda041e9f74ebede8db612d28d82e0cXavier Ducrohet
146135b9596ecda041e9f74ebede8db612d28d82e0cXavier Ducrohet    /**
147135b9596ecda041e9f74ebede8db612d28d82e0cXavier Ducrohet     * Utility method returning the baseline value for a given view object. This basically returns
148135b9596ecda041e9f74ebede8db612d28d82e0cXavier Ducrohet     * View.getBaseline().
149135b9596ecda041e9f74ebede8db612d28d82e0cXavier Ducrohet     *
150135b9596ecda041e9f74ebede8db612d28d82e0cXavier Ducrohet     * @param viewObject the object for which to return the index.
151135b9596ecda041e9f74ebede8db612d28d82e0cXavier Ducrohet     *
152135b9596ecda041e9f74ebede8db612d28d82e0cXavier Ducrohet     * @return the baseline value or -1 if not applicable to the view object or if this layout
153135b9596ecda041e9f74ebede8db612d28d82e0cXavier Ducrohet     *     library does not implement this method.
154580ecb7a5212f5e14862aa91b8bc5a0964ca56d9Xavier Ducrohet     *
155580ecb7a5212f5e14862aa91b8bc5a0964ca56d9Xavier Ducrohet     * @deprecated use the extended ViewInfo.
156135b9596ecda041e9f74ebede8db612d28d82e0cXavier Ducrohet     */
157580ecb7a5212f5e14862aa91b8bc5a0964ca56d9Xavier Ducrohet    @Deprecated
158580ecb7a5212f5e14862aa91b8bc5a0964ca56d9Xavier Ducrohet    public Result getViewBaseline(Object viewObject) {
159580ecb7a5212f5e14862aa91b8bc5a0964ca56d9Xavier Ducrohet        return NOT_IMPLEMENTED.createResult();
160135b9596ecda041e9f74ebede8db612d28d82e0cXavier Ducrohet    }
16168fa17272bfbb398af684387fdaba93e62d1b283Xavier Ducrohet}
162