ViewGroupHelper.java revision f38d8fb9344954ed28ccaaee8e29dcd4d65f1fe0
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 protected boolean checkLayoutParams(LayoutParams p) { 116 return mProvider.checkLayoutParams_impl(p); 117 } 118 119 @Override 120 protected LayoutParams generateDefaultLayoutParams() { 121 return mProvider.generateDefaultLayoutParams_impl(); 122 } 123 124 @Override 125 public LayoutParams generateLayoutParams(AttributeSet attrs) { 126 return mProvider.generateLayoutParams_impl(attrs); 127 } 128 129 @Override 130 protected LayoutParams generateLayoutParams(LayoutParams lp) { 131 return mProvider.generateLayoutParams_impl(lp); 132 } 133 134 @Override 135 public boolean shouldDelayChildPressedState() { 136 return mProvider.shouldDelayChildPressedState_impl(); 137 } 138 139 @Override 140 protected void measureChildWithMargins(View child, int parentWidthMeasureSpec, int widthUsed, 141 int parentHeightMeasureSpec, int heightUsed) { 142 mProvider.measureChildWithMargins_impl(child, 143 parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed); 144 } 145 146 /** @hide */ 147 public class SuperProvider implements ViewGroupProvider { 148 @Override 149 public CharSequence getAccessibilityClassName_impl() { 150 return ViewGroupHelper.super.getAccessibilityClassName(); 151 } 152 153 @Override 154 public boolean onTouchEvent_impl(MotionEvent ev) { 155 return ViewGroupHelper.super.onTouchEvent(ev); 156 } 157 158 @Override 159 public boolean onTrackballEvent_impl(MotionEvent ev) { 160 return ViewGroupHelper.super.onTrackballEvent(ev); 161 } 162 163 @Override 164 public void onFinishInflate_impl() { 165 ViewGroupHelper.super.onFinishInflate(); 166 } 167 168 @Override 169 public void setEnabled_impl(boolean enabled) { 170 ViewGroupHelper.super.setEnabled(enabled); 171 } 172 173 @Override 174 public void onAttachedToWindow_impl() { 175 ViewGroupHelper.super.onAttachedToWindow(); 176 } 177 178 @Override 179 public void onDetachedFromWindow_impl() { 180 ViewGroupHelper.super.onDetachedFromWindow(); 181 } 182 183 @Override 184 public void onVisibilityAggregated_impl(boolean isVisible) { 185 ViewGroupHelper.super.onVisibilityAggregated(isVisible); 186 } 187 188 @Override 189 public void onLayout_impl(boolean changed, int left, int top, int right, int bottom) { 190 // abstract method; no super 191 } 192 193 @Override 194 public void onMeasure_impl(int widthMeasureSpec, int heightMeasureSpec) { 195 ViewGroupHelper.super.onMeasure(widthMeasureSpec, heightMeasureSpec); 196 } 197 198 @Override 199 public int getSuggestedMinimumWidth_impl() { 200 return ViewGroupHelper.super.getSuggestedMinimumWidth(); 201 } 202 203 @Override 204 public int getSuggestedMinimumHeight_impl() { 205 return ViewGroupHelper.super.getSuggestedMinimumHeight(); 206 } 207 208 @Override 209 public void setMeasuredDimension_impl(int measuredWidth, int measuredHeight) { 210 ViewGroupHelper.super.setMeasuredDimension(measuredWidth, measuredHeight); 211 } 212 213 @Override 214 public boolean checkLayoutParams_impl(LayoutParams p) { 215 return ViewGroupHelper.super.checkLayoutParams(p); 216 } 217 218 @Override 219 public LayoutParams generateDefaultLayoutParams_impl() { 220 return ViewGroupHelper.super.generateDefaultLayoutParams(); 221 } 222 223 @Override 224 public LayoutParams generateLayoutParams_impl(AttributeSet attrs) { 225 return ViewGroupHelper.super.generateLayoutParams(attrs); 226 } 227 228 @Override 229 public LayoutParams generateLayoutParams_impl(LayoutParams lp) { 230 return ViewGroupHelper.super.generateLayoutParams(lp); 231 } 232 233 @Override 234 public boolean shouldDelayChildPressedState_impl() { 235 return ViewGroupHelper.super.shouldDelayChildPressedState(); 236 } 237 238 @Override 239 public void measureChildWithMargins_impl(View child, 240 int parentWidthMeasureSpec, int widthUsed, 241 int parentHeightMeasureSpec, int heightUsed) { 242 ViewGroupHelper.super.measureChildWithMargins(child, 243 parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed); 244 } 245 } 246 247 /** @hide */ 248 public class PrivateProvider implements ViewGroupProvider { 249 @Override 250 public CharSequence getAccessibilityClassName_impl() { 251 return ViewGroupHelper.this.getAccessibilityClassName(); 252 } 253 254 @Override 255 public boolean onTouchEvent_impl(MotionEvent ev) { 256 return ViewGroupHelper.this.onTouchEvent(ev); 257 } 258 259 @Override 260 public boolean onTrackballEvent_impl(MotionEvent ev) { 261 return ViewGroupHelper.this.onTrackballEvent(ev); 262 } 263 264 @Override 265 public void onFinishInflate_impl() { 266 ViewGroupHelper.this.onFinishInflate(); 267 } 268 269 @Override 270 public void setEnabled_impl(boolean enabled) { 271 ViewGroupHelper.this.setEnabled(enabled); 272 } 273 274 @Override 275 public void onAttachedToWindow_impl() { 276 ViewGroupHelper.this.onAttachedToWindow(); 277 } 278 279 @Override 280 public void onDetachedFromWindow_impl() { 281 ViewGroupHelper.this.onDetachedFromWindow(); 282 } 283 284 @Override 285 public void onVisibilityAggregated_impl(boolean isVisible) { 286 ViewGroupHelper.this.onVisibilityAggregated(isVisible); 287 } 288 289 @Override 290 public void onLayout_impl(boolean changed, int left, int top, int right, int bottom) { 291 ViewGroupHelper.this.onLayout(changed, left, top, right, bottom); 292 } 293 294 @Override 295 public void onMeasure_impl(int widthMeasureSpec, int heightMeasureSpec) { 296 ViewGroupHelper.this.onMeasure(widthMeasureSpec, heightMeasureSpec); 297 } 298 299 @Override 300 public int getSuggestedMinimumWidth_impl() { 301 return ViewGroupHelper.this.getSuggestedMinimumWidth(); 302 } 303 304 @Override 305 public int getSuggestedMinimumHeight_impl() { 306 return ViewGroupHelper.this.getSuggestedMinimumHeight(); 307 } 308 309 @Override 310 public void setMeasuredDimension_impl(int measuredWidth, int measuredHeight) { 311 ViewGroupHelper.this.setMeasuredDimension(measuredWidth, measuredHeight); 312 } 313 314 @Override 315 public boolean checkLayoutParams_impl(LayoutParams p) { 316 return ViewGroupHelper.this.checkLayoutParams(p); 317 } 318 319 @Override 320 public LayoutParams generateDefaultLayoutParams_impl() { 321 return ViewGroupHelper.this.generateDefaultLayoutParams(); 322 } 323 324 @Override 325 public LayoutParams generateLayoutParams_impl(AttributeSet attrs) { 326 return ViewGroupHelper.this.generateLayoutParams(attrs); 327 } 328 329 @Override 330 public LayoutParams generateLayoutParams_impl(LayoutParams lp) { 331 return ViewGroupHelper.this.generateLayoutParams(lp); 332 } 333 334 @Override 335 public boolean shouldDelayChildPressedState_impl() { 336 return ViewGroupHelper.this.shouldDelayChildPressedState(); 337 } 338 339 @Override 340 public void measureChildWithMargins_impl(View child, 341 int parentWidthMeasureSpec, int widthUsed, 342 int parentHeightMeasureSpec, int heightUsed) { 343 ViewGroupHelper.this.measureChildWithMargins(child, 344 parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed); 345 } 346 } 347 348 /** @hide */ 349 @FunctionalInterface 350 public interface ProviderCreator<T extends ViewGroupProvider> { 351 T createProvider(ViewGroupHelper<T> instance, ViewGroupProvider superProvider, 352 ViewGroupProvider privateProvider); 353 } 354} 355