1/*
2 * Copyright (C) 2011 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.ide.common.rendering.api;
18
19import com.android.resources.Density;
20
21import java.util.Collections;
22import java.util.HashMap;
23import java.util.Map;
24
25/**
26 * Rendering parameters for a {@link RenderSession}.
27 */
28public class SessionParams extends RenderParams {
29
30    public static enum RenderingMode {
31        NORMAL(false, false),
32        V_SCROLL(false, true),
33        H_SCROLL(true, false),
34        FULL_EXPAND(true, true);
35
36        private final boolean mHorizExpand;
37        private final boolean mVertExpand;
38
39        private RenderingMode(boolean horizExpand, boolean vertExpand) {
40            mHorizExpand = horizExpand;
41            mVertExpand = vertExpand;
42        }
43
44        public boolean isHorizExpand() {
45            return mHorizExpand;
46        }
47
48        public boolean isVertExpand() {
49            return mVertExpand;
50        }
51    }
52
53    private final ILayoutPullParser mLayoutDescription;
54    private final RenderingMode mRenderingMode;
55    private boolean mLayoutOnly = false;
56    private Map<ResourceReference, AdapterBinding> mAdapterBindingMap;
57    private boolean mExtendedViewInfoMode = false;
58
59    /**
60     *
61     * @param layoutDescription the {@link ILayoutPullParser} letting the LayoutLib Bridge visit the
62     * layout file.
63     * @param renderingMode The rendering mode.
64     * @param projectKey An Object identifying the project. This is used for the cache mechanism.
65     * @param screenWidth the screen width
66     * @param screenHeight the screen height
67     * @param density the density factor for the screen.
68     * @param xdpi the screen actual dpi in X
69     * @param ydpi the screen actual dpi in Y
70     * @param themeName The name of the theme to use.
71     * @param isProjectTheme true if the theme is a project theme, false if it is a framework theme.
72     * @param projectResources the resources of the project. The map contains (String, map) pairs
73     * where the string is the type of the resource reference used in the layout file, and the
74     * map contains (String, {@link ResourceValue}) pairs where the key is the resource name,
75     * and the value is the resource value.
76     * @param frameworkResources the framework resources. The map contains (String, map) pairs
77     * where the string is the type of the resource reference used in the layout file, and the map
78     * contains (String, {@link ResourceValue}) pairs where the key is the resource name, and the
79     * value is the resource value.
80     * @param projectCallback The {@link IProjectCallback} object to get information from
81     * the project.
82     * @param minSdkVersion the minSdkVersion of the project
83     * @param targetSdkVersion the targetSdkVersion of the project
84     * @param log the object responsible for displaying warning/errors to the user.
85     */
86    public SessionParams(
87            ILayoutPullParser layoutDescription,
88            RenderingMode renderingMode,
89            Object projectKey,
90            int screenWidth, int screenHeight,
91            Density density, float xdpi, float ydpi,
92            RenderResources renderResources,
93            IProjectCallback projectCallback,
94            int minSdkVersion, int targetSdkVersion,
95            LayoutLog log) {
96        super(projectKey, screenWidth, screenHeight, density, xdpi, ydpi,
97                renderResources, projectCallback, minSdkVersion, targetSdkVersion, log);
98
99        mLayoutDescription = layoutDescription;
100        mRenderingMode = renderingMode;
101    }
102
103    public SessionParams(SessionParams params) {
104        super(params);
105        mLayoutDescription = params.mLayoutDescription;
106        mRenderingMode = params.mRenderingMode;
107        if (params.mAdapterBindingMap != null) {
108            mAdapterBindingMap = new HashMap<ResourceReference, AdapterBinding>(
109                    params.mAdapterBindingMap);
110        }
111        mExtendedViewInfoMode = params.mExtendedViewInfoMode;
112    }
113
114    public ILayoutPullParser getLayoutDescription() {
115        return mLayoutDescription;
116    }
117
118    public RenderingMode getRenderingMode() {
119        return mRenderingMode;
120    }
121
122    public void setLayoutOnly() {
123        mLayoutOnly = true;
124    }
125
126    public boolean isLayoutOnly() {
127        return mLayoutOnly;
128    }
129
130    public void addAdapterBinding(ResourceReference reference, AdapterBinding data) {
131        if (mAdapterBindingMap == null) {
132            mAdapterBindingMap = new HashMap<ResourceReference, AdapterBinding>();
133        }
134
135        mAdapterBindingMap.put(reference, data);
136    }
137
138    public Map<ResourceReference, AdapterBinding> getAdapterBindings() {
139        if (mAdapterBindingMap == null) {
140            return Collections.emptyMap();
141        }
142
143        return Collections.unmodifiableMap(mAdapterBindingMap);
144    }
145
146    public void setExtendedViewInfoMode(boolean mode) {
147        mExtendedViewInfoMode = mode;
148    }
149
150    public boolean getExtendedViewInfoMode() {
151        return mExtendedViewInfoMode;
152    }
153}
154