ViewGroupHelper.java revision 718c1d122f66ee0b95b8d7cc7f2988730d73461e
1/*
2 * Copyright 2018 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 android.media.update;
18
19import android.content.Context;
20import android.graphics.Canvas;
21import android.util.AttributeSet;
22import android.view.MotionEvent;
23import android.view.View;
24import android.view.ViewGroup;
25
26/**
27 * Helper class for connecting the public API to an updatable implementation.
28 *
29 * @see ViewGroupProvider
30 *
31 * @hide
32 */
33public abstract class ViewGroupHelper<T extends ViewGroupProvider> extends ViewGroup {
34    /** @hide */
35    final public T mProvider;
36
37    /** @hide */
38    public ViewGroupHelper(ProviderCreator<T> creator,
39            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
40        super(context, attrs, defStyleAttr, defStyleRes);
41
42        mProvider = creator.createProvider(this, new SuperProvider(),
43                new PrivateProvider());
44    }
45
46    /** @hide */
47    // TODO @SystemApi
48    public T getProvider() {
49        return mProvider;
50    }
51
52    @Override
53    protected void onAttachedToWindow() {
54        mProvider.onAttachedToWindow_impl();
55    }
56
57    @Override
58    protected void onDetachedFromWindow() {
59        mProvider.onDetachedFromWindow_impl();
60    }
61
62    @Override
63    public CharSequence getAccessibilityClassName() {
64        return mProvider.getAccessibilityClassName_impl();
65    }
66
67    @Override
68    public boolean onTouchEvent(MotionEvent ev) {
69        return mProvider.onTouchEvent_impl(ev);
70    }
71
72    @Override
73    public boolean onTrackballEvent(MotionEvent ev) {
74        return mProvider.onTrackballEvent_impl(ev);
75    }
76
77    @Override
78    public void onFinishInflate() {
79        mProvider.onFinishInflate_impl();
80    }
81
82    @Override
83    public void setEnabled(boolean enabled) {
84        mProvider.setEnabled_impl(enabled);
85    }
86
87    @Override
88    public void onVisibilityAggregated(boolean isVisible) {
89        mProvider.onVisibilityAggregated_impl(isVisible);
90    }
91
92    @Override
93    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
94        mProvider.onLayout_impl(changed, left, top, right, bottom);
95    }
96
97    @Override
98    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
99        mProvider.onMeasure_impl(widthMeasureSpec, heightMeasureSpec);
100    }
101
102    @Override
103    protected int getSuggestedMinimumWidth() {
104        return mProvider.getSuggestedMinimumWidth_impl();
105    }
106
107    @Override
108    protected int getSuggestedMinimumHeight() {
109        return mProvider.getSuggestedMinimumHeight_impl();
110    }
111
112    // setMeasuredDimension is final
113
114    @Override
115    public boolean dispatchTouchEvent(MotionEvent ev) {
116        return mProvider.dispatchTouchEvent_impl(ev);
117    }
118
119    @Override
120    protected boolean checkLayoutParams(LayoutParams p) {
121        return mProvider.checkLayoutParams_impl(p);
122    }
123
124    @Override
125    protected LayoutParams generateDefaultLayoutParams() {
126        return mProvider.generateDefaultLayoutParams_impl();
127    }
128
129    @Override
130    public LayoutParams generateLayoutParams(AttributeSet attrs) {
131        return mProvider.generateLayoutParams_impl(attrs);
132    }
133
134    @Override
135    protected LayoutParams generateLayoutParams(LayoutParams lp) {
136        return mProvider.generateLayoutParams_impl(lp);
137    }
138
139    @Override
140    public boolean shouldDelayChildPressedState() {
141        return mProvider.shouldDelayChildPressedState_impl();
142    }
143
144    @Override
145    protected void measureChildWithMargins(View child, int parentWidthMeasureSpec, int widthUsed,
146            int parentHeightMeasureSpec, int heightUsed) {
147        mProvider.measureChildWithMargins_impl(child,
148                parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed);
149    }
150
151    /** @hide */
152    public class SuperProvider implements ViewGroupProvider {
153        @Override
154        public CharSequence getAccessibilityClassName_impl() {
155            return ViewGroupHelper.super.getAccessibilityClassName();
156        }
157
158        @Override
159        public boolean onTouchEvent_impl(MotionEvent ev) {
160            return ViewGroupHelper.super.onTouchEvent(ev);
161        }
162
163        @Override
164        public boolean onTrackballEvent_impl(MotionEvent ev) {
165            return ViewGroupHelper.super.onTrackballEvent(ev);
166        }
167
168        @Override
169        public void onFinishInflate_impl() {
170            ViewGroupHelper.super.onFinishInflate();
171        }
172
173        @Override
174        public void setEnabled_impl(boolean enabled) {
175            ViewGroupHelper.super.setEnabled(enabled);
176        }
177
178        @Override
179        public void onAttachedToWindow_impl() {
180            ViewGroupHelper.super.onAttachedToWindow();
181        }
182
183        @Override
184        public void onDetachedFromWindow_impl() {
185            ViewGroupHelper.super.onDetachedFromWindow();
186        }
187
188        @Override
189        public void onVisibilityAggregated_impl(boolean isVisible) {
190            ViewGroupHelper.super.onVisibilityAggregated(isVisible);
191        }
192
193        @Override
194        public void onLayout_impl(boolean changed, int left, int top, int right, int bottom) {
195            // abstract method; no super
196        }
197
198        @Override
199        public void onMeasure_impl(int widthMeasureSpec, int heightMeasureSpec) {
200            ViewGroupHelper.super.onMeasure(widthMeasureSpec, heightMeasureSpec);
201        }
202
203        @Override
204        public int getSuggestedMinimumWidth_impl() {
205            return ViewGroupHelper.super.getSuggestedMinimumWidth();
206        }
207
208        @Override
209        public int getSuggestedMinimumHeight_impl() {
210            return ViewGroupHelper.super.getSuggestedMinimumHeight();
211        }
212
213        @Override
214        public void setMeasuredDimension_impl(int measuredWidth, int measuredHeight) {
215            ViewGroupHelper.super.setMeasuredDimension(measuredWidth, measuredHeight);
216        }
217
218        @Override
219        public boolean dispatchTouchEvent_impl(MotionEvent ev) {
220            return ViewGroupHelper.super.dispatchTouchEvent(ev);
221        }
222
223        @Override
224        public boolean checkLayoutParams_impl(LayoutParams p) {
225            return ViewGroupHelper.super.checkLayoutParams(p);
226        }
227
228        @Override
229        public LayoutParams generateDefaultLayoutParams_impl() {
230            return ViewGroupHelper.super.generateDefaultLayoutParams();
231        }
232
233        @Override
234        public LayoutParams generateLayoutParams_impl(AttributeSet attrs) {
235            return ViewGroupHelper.super.generateLayoutParams(attrs);
236        }
237
238        @Override
239        public LayoutParams generateLayoutParams_impl(LayoutParams lp) {
240            return ViewGroupHelper.super.generateLayoutParams(lp);
241        }
242
243        @Override
244        public boolean shouldDelayChildPressedState_impl() {
245            return ViewGroupHelper.super.shouldDelayChildPressedState();
246        }
247
248        @Override
249        public void measureChildWithMargins_impl(View child,
250                int parentWidthMeasureSpec, int widthUsed,
251                int parentHeightMeasureSpec, int heightUsed) {
252            ViewGroupHelper.super.measureChildWithMargins(child,
253                    parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed);
254        }
255    }
256
257    /** @hide */
258    public class PrivateProvider implements ViewGroupProvider {
259        @Override
260        public CharSequence getAccessibilityClassName_impl() {
261            return ViewGroupHelper.this.getAccessibilityClassName();
262        }
263
264        @Override
265        public boolean onTouchEvent_impl(MotionEvent ev) {
266            return ViewGroupHelper.this.onTouchEvent(ev);
267        }
268
269        @Override
270        public boolean onTrackballEvent_impl(MotionEvent ev) {
271            return ViewGroupHelper.this.onTrackballEvent(ev);
272        }
273
274        @Override
275        public void onFinishInflate_impl() {
276            ViewGroupHelper.this.onFinishInflate();
277        }
278
279        @Override
280        public void setEnabled_impl(boolean enabled) {
281            ViewGroupHelper.this.setEnabled(enabled);
282        }
283
284        @Override
285        public void onAttachedToWindow_impl() {
286            ViewGroupHelper.this.onAttachedToWindow();
287        }
288
289        @Override
290        public void onDetachedFromWindow_impl() {
291            ViewGroupHelper.this.onDetachedFromWindow();
292        }
293
294        @Override
295        public void onVisibilityAggregated_impl(boolean isVisible) {
296            ViewGroupHelper.this.onVisibilityAggregated(isVisible);
297        }
298
299        @Override
300        public void onLayout_impl(boolean changed, int left, int top, int right, int bottom) {
301            ViewGroupHelper.this.onLayout(changed, left, top, right, bottom);
302        }
303
304        @Override
305        public void onMeasure_impl(int widthMeasureSpec, int heightMeasureSpec) {
306            ViewGroupHelper.this.onMeasure(widthMeasureSpec, heightMeasureSpec);
307        }
308
309        @Override
310        public int getSuggestedMinimumWidth_impl() {
311            return ViewGroupHelper.this.getSuggestedMinimumWidth();
312        }
313
314        @Override
315        public int getSuggestedMinimumHeight_impl() {
316            return ViewGroupHelper.this.getSuggestedMinimumHeight();
317        }
318
319        @Override
320        public void setMeasuredDimension_impl(int measuredWidth, int measuredHeight) {
321            ViewGroupHelper.this.setMeasuredDimension(measuredWidth, measuredHeight);
322        }
323
324        @Override
325        public boolean dispatchTouchEvent_impl(MotionEvent ev) {
326            return ViewGroupHelper.this.dispatchTouchEvent(ev);
327        }
328
329        @Override
330        public boolean checkLayoutParams_impl(LayoutParams p) {
331            return ViewGroupHelper.this.checkLayoutParams(p);
332        }
333
334        @Override
335        public LayoutParams generateDefaultLayoutParams_impl() {
336            return ViewGroupHelper.this.generateDefaultLayoutParams();
337        }
338
339        @Override
340        public LayoutParams generateLayoutParams_impl(AttributeSet attrs) {
341            return ViewGroupHelper.this.generateLayoutParams(attrs);
342        }
343
344        @Override
345        public LayoutParams generateLayoutParams_impl(LayoutParams lp) {
346            return ViewGroupHelper.this.generateLayoutParams(lp);
347        }
348
349        @Override
350        public boolean shouldDelayChildPressedState_impl() {
351            return ViewGroupHelper.this.shouldDelayChildPressedState();
352        }
353
354        @Override
355        public void measureChildWithMargins_impl(View child,
356                int parentWidthMeasureSpec, int widthUsed,
357                int parentHeightMeasureSpec, int heightUsed) {
358            ViewGroupHelper.this.measureChildWithMargins(child,
359                    parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed);
360        }
361    }
362
363        /** @hide */
364    @FunctionalInterface
365    public interface ProviderCreator<T extends ViewGroupProvider> {
366        T createProvider(ViewGroupHelper<T> instance, ViewGroupProvider superProvider,
367                ViewGroupProvider privateProvider);
368    }
369}
370