1/*
2 * Copyright (C) 2017 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 */
16package android.support.design.testutils;
17
18import android.graphics.Matrix;
19import android.graphics.Rect;
20import android.os.Bundle;
21import android.os.LocaleList;
22import android.view.ViewStructure;
23import android.view.ViewStructure.HtmlInfo.Builder;
24import android.view.autofill.AutofillId;
25import android.view.autofill.AutofillValue;
26
27/**
28 * Simple implementation of {@link ViewStructure} that's easier to use than a Mockito mock.
29 *
30 * <p>Currently supports only {@code hint}, {@code className}, and child-related methods.
31 */
32public class ViewStructureImpl extends ViewStructure {
33
34    private CharSequence mHint;
35    private String mClassName;
36    private ViewStructureImpl[] mChildren;
37
38    @Override
39    public void setHint(CharSequence hint) {
40        mHint = hint;
41    }
42
43    // Supported methods
44    @Override
45    public CharSequence getHint() {
46        return mHint;
47    }
48
49    @Override
50    public void setChildCount(int num) {
51        mChildren = new ViewStructureImpl[num];
52    }
53
54    @Override
55    public void setClassName(String className) {
56        mClassName = className;
57    }
58
59    public String getClassName() {
60        return mClassName;
61    }
62
63    @Override
64    public int addChildCount(int num) {
65        if (mChildren == null) {
66            setChildCount(num);
67            return 0;
68        }
69        final int start = mChildren.length;
70        ViewStructureImpl[] newArray = new ViewStructureImpl[start + num];
71        System.arraycopy(mChildren, 0, newArray, 0, start);
72        mChildren = newArray;
73        return start;
74    }
75
76    @Override
77    public int getChildCount() {
78        if (mChildren == null) {
79            return 0;
80        }
81        return mChildren.length;
82    }
83
84    public ViewStructureImpl getChildAt(int index) {
85        return mChildren[index];
86    }
87
88    @Override
89    public ViewStructure newChild(int index) {
90        final ViewStructureImpl child = new ViewStructureImpl();
91        mChildren[index] = child;
92        return child;
93    }
94
95    @Override
96    public ViewStructure asyncNewChild(int index) {
97        return newChild(index);
98    }
99
100
101    // Unsupported methods
102    @Override
103    public void setId(int id, String packageName, String typeName, String entryName) {
104    }
105
106    @Override
107    public void setDimens(int left, int top, int scrollX, int scrollY, int width, int height) {
108    }
109
110    @Override
111    public void setTransformation(Matrix matrix) {
112    }
113
114    @Override
115    public void setElevation(float elevation) {
116    }
117
118    @Override
119    public void setAlpha(float alpha) {
120    }
121
122    @Override
123    public void setVisibility(int visibility) {
124    }
125
126    public void setAssistBlocked(boolean state) {
127    }
128
129    @Override
130    public void setEnabled(boolean state) {
131    }
132
133    @Override
134    public void setClickable(boolean state) {
135    }
136
137    @Override
138    public void setLongClickable(boolean state) {
139    }
140
141    @Override
142    public void setContextClickable(boolean state) {
143    }
144
145    @Override
146    public void setFocusable(boolean state) {
147    }
148
149    @Override
150    public void setFocused(boolean state) {
151    }
152
153    @Override
154    public void setAccessibilityFocused(boolean state) {
155    }
156
157    @Override
158    public void setCheckable(boolean state) {
159    }
160
161    @Override
162    public void setChecked(boolean state) {
163    }
164
165    @Override
166    public void setSelected(boolean state) {
167    }
168
169    @Override
170    public void setActivated(boolean state) {
171    }
172
173    @Override
174    public void setOpaque(boolean opaque) {
175    }
176
177    @Override
178    public void setContentDescription(CharSequence contentDescription) {
179    }
180
181    @Override
182    public void setText(CharSequence text) {
183    }
184
185    @Override
186    public void setText(CharSequence text, int selectionStart, int selectionEnd) {
187    }
188
189    @Override
190    public void setTextStyle(float size, int fgColor, int bgColor, int style) {
191    }
192
193    @Override
194    public void setTextLines(int[] charOffsets, int[] baselines) {
195    }
196
197    @Override
198    public CharSequence getText() {
199        return null;
200    }
201
202    @Override
203    public int getTextSelectionStart() {
204        return 0;
205    }
206
207    @Override
208    public int getTextSelectionEnd() {
209        return 0;
210    }
211
212    @Override
213    public Bundle getExtras() {
214        return null;
215    }
216
217    @Override
218    public boolean hasExtras() {
219        return false;
220    }
221
222    @Override
223    public AutofillId getAutofillId() {
224        return null;
225    }
226
227    @Override
228    public void setAutofillId(AutofillId id) {
229    }
230
231    public void setAutofillId(ViewStructure parent, int virtualId) {
232    }
233
234    @Override
235    public void setAutofillId(AutofillId parentId, int virtualId) {
236    }
237
238    @Override
239    public void setAutofillType(int type) {
240    }
241
242    @Override
243    public void setAutofillHints(String[] hint) {
244    }
245
246    @Override
247    public void setAutofillValue(AutofillValue value) {
248    }
249
250    @Override
251    public void setAutofillOptions(CharSequence[] options) {
252    }
253
254    @Override
255    public void setInputType(int inputType) {
256    }
257
258    @Override
259    public void setDataIsSensitive(boolean sensitive) {
260    }
261
262    @Override
263    public void asyncCommit() {
264    }
265
266    public Rect getTempRect() {
267        return null;
268    }
269
270    @Override
271    public void setWebDomain(String domain) {
272    }
273
274    @Override
275    public void setLocaleList(LocaleList localeList) {
276    }
277
278    @Override
279    public Builder newHtmlInfoBuilder(String tagName) {
280        return null;
281    }
282
283    @Override
284    public void setHtmlInfo(HtmlInfo htmlInfo) {
285    }
286}
287