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