Java tutorial
package android.support.v4.graphics.drawable; import android.content.res.ColorStateList; import android.graphics.PorterDuff.Mode; import android.graphics.drawable.Drawable; import android.os.Build.VERSION; public class DrawableCompat { static final DrawableImpl IMPL; interface DrawableImpl { boolean isAutoMirrored(Drawable drawable); void jumpToCurrentState(Drawable drawable); void setAutoMirrored(Drawable drawable, boolean z); void setHotspot(Drawable drawable, float f, float f2); void setHotspotBounds(Drawable drawable, int i, int i2, int i3, int i4); void setTint(Drawable drawable, int i); void setTintList(Drawable drawable, ColorStateList colorStateList); void setTintMode(Drawable drawable, Mode mode); } static class BaseDrawableImpl implements DrawableImpl { BaseDrawableImpl() { } public void jumpToCurrentState(Drawable drawable) { } public void setAutoMirrored(Drawable drawable, boolean z) { } public boolean isAutoMirrored(Drawable drawable) { return false; } public void setHotspot(Drawable drawable, float f, float f2) { } public void setHotspotBounds(Drawable drawable, int i, int i2, int i3, int i4) { } public void setTint(Drawable drawable, int i) { } public void setTintList(Drawable drawable, ColorStateList colorStateList) { } public void setTintMode(Drawable drawable, Mode mode) { } } static class HoneycombDrawableImpl extends BaseDrawableImpl { HoneycombDrawableImpl() { } public void jumpToCurrentState(Drawable drawable) { DrawableCompatHoneycomb.jumpToCurrentState(drawable); } } static class KitKatDrawableImpl extends HoneycombDrawableImpl { KitKatDrawableImpl() { } public void setAutoMirrored(Drawable drawable, boolean z) { DrawableCompatKitKat.setAutoMirrored(drawable, z); } public boolean isAutoMirrored(Drawable drawable) { return DrawableCompatKitKat.isAutoMirrored(drawable); } } static class LDrawableImpl extends KitKatDrawableImpl { LDrawableImpl() { } public void setHotspot(Drawable drawable, float f, float f2) { DrawableCompatL.setHotspot(drawable, f, f2); } public void setHotspotBounds(Drawable drawable, int i, int i2, int i3, int i4) { DrawableCompatL.setHotspotBounds(drawable, i, i2, i3, i4); } public void setTint(Drawable drawable, int i) { DrawableCompatL.setTint(drawable, i); } public void setTintList(Drawable drawable, ColorStateList colorStateList) { DrawableCompatL.setTintList(drawable, colorStateList); } public void setTintMode(Drawable drawable, Mode mode) { DrawableCompatL.setTintMode(drawable, mode); } } static { int i = VERSION.SDK_INT; if (i >= 21) { IMPL = new LDrawableImpl(); } else if (i >= 19) { IMPL = new KitKatDrawableImpl(); } else if (i >= 11) { IMPL = new HoneycombDrawableImpl(); } else { IMPL = new BaseDrawableImpl(); } } public static void jumpToCurrentState(Drawable drawable) { IMPL.jumpToCurrentState(drawable); } public static void setAutoMirrored(Drawable drawable, boolean z) { IMPL.setAutoMirrored(drawable, z); } public static boolean isAutoMirrored(Drawable drawable) { return IMPL.isAutoMirrored(drawable); } public static void setHotspot(Drawable drawable, float f, float f2) { IMPL.setHotspot(drawable, f, f2); } public static void setHotspotBounds(Drawable drawable, int i, int i2, int i3, int i4) { IMPL.setHotspotBounds(drawable, i, i2, i3, i4); } public static void setTint(Drawable drawable, int i) { IMPL.setTint(drawable, i); } public static void setTintList(Drawable drawable, ColorStateList colorStateList) { IMPL.setTintList(drawable, colorStateList); } public static void setTintMode(Drawable drawable, Mode mode) { IMPL.setTintMode(drawable, mode); } }