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