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.settings.drawable; 18 19import android.graphics.Canvas; 20import android.graphics.ColorFilter; 21import android.graphics.Rect; 22import android.graphics.Region; 23import android.graphics.drawable.Drawable; 24import android.view.View; 25 26import com.android.internal.util.Preconditions; 27 28/** 29 * Base wrapper that delegates all calls to another {@link Drawable}. The 30 * wrapped {@link Drawable} <em>must</em> be fully released from any 31 * {@link View} before wrapping, otherwise internal {@link Drawable.Callback} 32 * may be dropped. 33 */ 34public class DrawableWrapper extends Drawable implements Drawable.Callback { 35 private final Drawable mDrawable; 36 37 public DrawableWrapper(Drawable drawable) { 38 mDrawable = Preconditions.checkNotNull(drawable); 39 mDrawable.setCallback(this); 40 } 41 42 @Override 43 public void draw(Canvas canvas) { 44 mDrawable.draw(canvas); 45 } 46 47 @Override 48 public void setBounds(int left, int top, int right, int bottom) { 49 super.setBounds(left, top, right, bottom); 50 mDrawable.setBounds(left, top, right, bottom); 51 } 52 53 @Override 54 public void setChangingConfigurations(int configs) { 55 mDrawable.setChangingConfigurations(configs); 56 } 57 58 @Override 59 public int getChangingConfigurations() { 60 return mDrawable.getChangingConfigurations(); 61 } 62 63 @Override 64 public void setDither(boolean dither) { 65 mDrawable.setDither(dither); 66 } 67 68 @Override 69 public void setFilterBitmap(boolean filter) { 70 mDrawable.setFilterBitmap(filter); 71 } 72 73 @Override 74 public void setAlpha(int alpha) { 75 mDrawable.setAlpha(alpha); 76 } 77 78 @Override 79 public void setColorFilter(ColorFilter cf) { 80 mDrawable.setColorFilter(cf); 81 } 82 83 @Override 84 public boolean isStateful() { 85 return mDrawable.isStateful(); 86 } 87 88 @Override 89 public boolean setState(final int[] stateSet) { 90 return mDrawable.setState(stateSet); 91 } 92 93 @Override 94 public int[] getState() { 95 return mDrawable.getState(); 96 } 97 98 @Override 99 public void jumpToCurrentState() { 100 mDrawable.jumpToCurrentState(); 101 } 102 103 @Override 104 public Drawable getCurrent() { 105 return mDrawable.getCurrent(); 106 } 107 108 @Override 109 public boolean setVisible(boolean visible, boolean restart) { 110 return super.setVisible(visible, restart) || mDrawable.setVisible(visible, restart); 111 } 112 113 @Override 114 public int getOpacity() { 115 return mDrawable.getOpacity(); 116 } 117 118 @Override 119 public Region getTransparentRegion() { 120 return mDrawable.getTransparentRegion(); 121 } 122 123 @Override 124 public int getIntrinsicWidth() { 125 return mDrawable.getIntrinsicWidth(); 126 } 127 128 @Override 129 public int getIntrinsicHeight() { 130 return mDrawable.getIntrinsicHeight(); 131 } 132 133 @Override 134 public int getMinimumWidth() { 135 return mDrawable.getMinimumWidth(); 136 } 137 138 @Override 139 public int getMinimumHeight() { 140 return mDrawable.getMinimumHeight(); 141 } 142 143 @Override 144 public boolean getPadding(Rect padding) { 145 return mDrawable.getPadding(padding); 146 } 147 148 /** {@inheritDoc} */ 149 public void invalidateDrawable(Drawable who) { 150 invalidateSelf(); 151 } 152 153 /** {@inheritDoc} */ 154 public void scheduleDrawable(Drawable who, Runnable what, long when) { 155 scheduleSelf(what, when); 156 } 157 158 /** {@inheritDoc} */ 159 public void unscheduleDrawable(Drawable who, Runnable what) { 160 unscheduleSelf(what); 161 } 162} 163