15d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey/* 25d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey * Copyright (C) 2011 The Android Open Source Project 35d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey * 45d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 55d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey * you may not use this file except in compliance with the License. 65d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey * You may obtain a copy of the License at 75d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey * 85d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 95d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey * 105d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey * Unless required by applicable law or agreed to in writing, software 115d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 125d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey * See the License for the specific language governing permissions and 145d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey * limitations under the License. 155d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey */ 165d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 175d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkeypackage com.android.settings.drawable; 185d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 195d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkeyimport android.graphics.Canvas; 205d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkeyimport android.graphics.ColorFilter; 215d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkeyimport android.graphics.Rect; 225d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkeyimport android.graphics.Region; 235d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkeyimport android.graphics.drawable.Drawable; 245d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkeyimport android.view.View; 255d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 265d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkeyimport com.android.internal.util.Preconditions; 275d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 285d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey/** 295d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey * Base wrapper that delegates all calls to another {@link Drawable}. The 305d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey * wrapped {@link Drawable} <em>must</em> be fully released from any 315d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey * {@link View} before wrapping, otherwise internal {@link Drawable.Callback} 325d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey * may be dropped. 335d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey */ 345d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkeypublic class DrawableWrapper extends Drawable implements Drawable.Callback { 355d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey private final Drawable mDrawable; 365d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 375d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public DrawableWrapper(Drawable drawable) { 385d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey mDrawable = Preconditions.checkNotNull(drawable); 395d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey mDrawable.setCallback(this); 405d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 415d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 425d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey @Override 435d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public void draw(Canvas canvas) { 445d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey mDrawable.draw(canvas); 455d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 465d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 475d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey @Override 485d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public void setBounds(int left, int top, int right, int bottom) { 495d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey super.setBounds(left, top, right, bottom); 505d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey mDrawable.setBounds(left, top, right, bottom); 515d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 525d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 535d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey @Override 545d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public void setChangingConfigurations(int configs) { 555d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey mDrawable.setChangingConfigurations(configs); 565d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 575d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 585d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey @Override 595d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public int getChangingConfigurations() { 605d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey return mDrawable.getChangingConfigurations(); 615d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 625d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 635d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey @Override 645d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public void setDither(boolean dither) { 655d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey mDrawable.setDither(dither); 665d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 675d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 685d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey @Override 695d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public void setFilterBitmap(boolean filter) { 705d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey mDrawable.setFilterBitmap(filter); 715d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 725d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 735d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey @Override 745d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public void setAlpha(int alpha) { 755d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey mDrawable.setAlpha(alpha); 765d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 775d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 785d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey @Override 795d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public void setColorFilter(ColorFilter cf) { 805d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey mDrawable.setColorFilter(cf); 815d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 825d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 835d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey @Override 845d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public boolean isStateful() { 855d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey return mDrawable.isStateful(); 865d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 875d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 885d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey @Override 895d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public boolean setState(final int[] stateSet) { 905d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey return mDrawable.setState(stateSet); 915d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 925d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 935d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey @Override 945d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public int[] getState() { 955d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey return mDrawable.getState(); 965d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 975d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 985d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey @Override 995d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public void jumpToCurrentState() { 1005d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey mDrawable.jumpToCurrentState(); 1015d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 1025d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 1035d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey @Override 1045d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public Drawable getCurrent() { 1055d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey return mDrawable.getCurrent(); 1065d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 1075d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 1085d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey @Override 1095d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public boolean setVisible(boolean visible, boolean restart) { 1105d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey return super.setVisible(visible, restart) || mDrawable.setVisible(visible, restart); 1115d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 1125d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 1135d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey @Override 1145d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public int getOpacity() { 1155d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey return mDrawable.getOpacity(); 1165d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 1175d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 1185d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey @Override 1195d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public Region getTransparentRegion() { 1205d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey return mDrawable.getTransparentRegion(); 1215d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 1225d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 1235d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey @Override 1245d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public int getIntrinsicWidth() { 1255d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey return mDrawable.getIntrinsicWidth(); 1265d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 1275d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 1285d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey @Override 1295d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public int getIntrinsicHeight() { 1305d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey return mDrawable.getIntrinsicHeight(); 1315d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 1325d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 1335d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey @Override 1345d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public int getMinimumWidth() { 1355d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey return mDrawable.getMinimumWidth(); 1365d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 1375d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 1385d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey @Override 1395d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public int getMinimumHeight() { 1405d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey return mDrawable.getMinimumHeight(); 1415d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 1425d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 1435d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey @Override 1445d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public boolean getPadding(Rect padding) { 1455d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey return mDrawable.getPadding(padding); 1465d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 1475d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 1485d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey /** {@inheritDoc} */ 1495d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public void invalidateDrawable(Drawable who) { 1505d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey invalidateSelf(); 1515d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 1525d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 1535d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey /** {@inheritDoc} */ 1545d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public void scheduleDrawable(Drawable who, Runnable what, long when) { 1555d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey scheduleSelf(what, when); 1565d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 1575d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey 1585d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey /** {@inheritDoc} */ 1595d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey public void unscheduleDrawable(Drawable who, Runnable what) { 1605d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey unscheduleSelf(what); 1615d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey } 1625d70679c02a57416eac46581d7242e2382e4b973Jeff Sharkey} 163