Java tutorial
/* * Twittnuker - Twitter client for Android * * Copyright (C) 2013-2015 vanita5 <mail@vanita5.de> * * This program incorporates a modified version of Twidere. * Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package de.vanita5.twittnuker.graphic; import android.content.res.ColorStateList; import android.graphics.Canvas; import android.graphics.ColorFilter; import android.graphics.PorterDuff; import android.graphics.Rect; import android.graphics.Region; import android.graphics.drawable.Drawable; import android.graphics.drawable.DrawableContainer; import android.os.Build; import android.support.v4.graphics.drawable.DrawableCompat; import android.view.View; /** * Base wrapper that delegates all calls to another {@link Drawable}. The wrapped {@link Drawable} * <em>must</em> be fully released from any {@link View} before wrapping, otherwise internal {@link * Drawable.Callback} may be dropped. */ class DrawableWrapper extends Drawable implements Drawable.Callback { private final Drawable mDrawable; public DrawableWrapper(Drawable drawable) { mDrawable = drawable; mDrawable.setCallback(this); } @Override public void draw(Canvas canvas) { mDrawable.draw(canvas); } @Override public void setBounds(int left, int top, int right, int bottom) { super.setBounds(left, top, right, bottom); mDrawable.setBounds(left, top, right, bottom); } @Override public void setChangingConfigurations(int configs) { mDrawable.setChangingConfigurations(configs); } @Override public int getChangingConfigurations() { return mDrawable.getChangingConfigurations(); } @Override public void setDither(boolean dither) { mDrawable.setDither(dither); } @Override public void setFilterBitmap(boolean filter) { mDrawable.setFilterBitmap(filter); } @Override public void setAlpha(int alpha) { mDrawable.setAlpha(alpha); } @Override public void setColorFilter(ColorFilter cf) { mDrawable.setColorFilter(cf); } @Override public boolean isStateful() { return mDrawable.isStateful(); } @Override public boolean setState(final int[] stateSet) { return mDrawable.setState(stateSet); } @Override public int[] getState() { return mDrawable.getState(); } public void jumpToCurrentState() { DrawableCompat.jumpToCurrentState(mDrawable); } @Override public Drawable getCurrent() { return mDrawable.getCurrent(); } @Override public boolean setVisible(boolean visible, boolean restart) { return super.setVisible(visible, restart) || mDrawable.setVisible(visible, restart); } @Override public int getOpacity() { return mDrawable.getOpacity(); } @Override public Region getTransparentRegion() { return mDrawable.getTransparentRegion(); } @Override public int getIntrinsicWidth() { return mDrawable.getIntrinsicWidth(); } @Override public int getIntrinsicHeight() { return mDrawable.getIntrinsicHeight(); } @Override public int getMinimumWidth() { return mDrawable.getMinimumWidth(); } @Override public int getMinimumHeight() { return mDrawable.getMinimumHeight(); } @Override public boolean getPadding(Rect padding) { return mDrawable.getPadding(padding); } /** * {@inheritDoc} */ public void invalidateDrawable(Drawable who) { invalidateSelf(); } /** * {@inheritDoc} */ public void scheduleDrawable(Drawable who, Runnable what, long when) { scheduleSelf(what, when); } /** * {@inheritDoc} */ public void unscheduleDrawable(Drawable who, Runnable what) { unscheduleSelf(what); } @Override protected boolean onLevelChange(int level) { return mDrawable.setLevel(level); } @Override public void setAutoMirrored(boolean mirrored) { DrawableCompat.setAutoMirrored(mDrawable, mirrored); } @Override public boolean isAutoMirrored() { return DrawableCompat.isAutoMirrored(mDrawable); } @Override public void setTint(int tint) { DrawableCompat.setTint(mDrawable, tint); } @Override public void setTintList(ColorStateList tint) { DrawableCompat.setTintList(mDrawable, tint); } @Override public void setTintMode(PorterDuff.Mode tintMode) { DrawableCompat.setTintMode(mDrawable, tintMode); } @Override public void setHotspot(float x, float y) { DrawableCompat.setHotspot(mDrawable, x, y); } @Override public void setHotspotBounds(int left, int top, int right, int bottom) { DrawableCompat.setHotspotBounds(mDrawable, left, top, right, bottom); } }