1968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu/* 2968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu * Copyright (C) 2015 The Android Open Source Project 3968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu * 4968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu * in compliance with the License. You may obtain a copy of the License at 6968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu * 7968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu * http://www.apache.org/licenses/LICENSE-2.0 8968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu * 9968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu * Unless required by applicable law or agreed to in writing, software distributed under the License 10968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu * or implied. See the License for the specific language governing permissions and limitations under 12968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu * the License. 13968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu */ 14968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 15968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhupackage android.support.graphics.drawable; 16968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 17968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhuimport android.annotation.TargetApi; 18968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhuimport android.content.res.Resources; 19968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhuimport android.content.res.TypedArray; 20968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhuimport android.graphics.ColorFilter; 21968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhuimport android.graphics.PorterDuff; 22968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhuimport android.graphics.Rect; 23968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhuimport android.graphics.Region; 24968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhuimport android.graphics.drawable.Drawable; 25968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhuimport android.os.Build; 26ebbed34a78fa6519de6c2848e68b97f9d3b98e08Tenghui Zhuimport android.support.v4.graphics.drawable.DrawableCompat; 27be678137d44778590a6220ae0ef13649e83363a9Chris Banesimport android.support.v4.graphics.drawable.TintAwareDrawable; 28968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhuimport android.util.AttributeSet; 29968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 30968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu/** 31968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu * Internal common delegation shared by VectorDrawableCompat and AnimatedVectorDrawableCompat 32968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu */ 33968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu@TargetApi(Build.VERSION_CODES.LOLLIPOP) 34be678137d44778590a6220ae0ef13649e83363a9Chris Banesabstract class VectorDrawableCommon extends Drawable implements TintAwareDrawable { 35968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu /** 36968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu * Obtains styled attributes from the theme, if available, or unstyled 37968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu * resources if the theme is null. 38968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu */ 39968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu static TypedArray obtainAttributes( 40968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu Resources res, Resources.Theme theme, AttributeSet set, int[] attrs) { 41968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu if (theme == null) { 42968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return res.obtainAttributes(set, attrs); 43968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 44968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return theme.obtainStyledAttributes(set, attrs, 0, 0); 45968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 46968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 47968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu // Drawable delegation for Lollipop and above. 48968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu Drawable mDelegateDrawable; 49968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 50968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu @Override 51968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu public void setColorFilter(int color, PorterDuff.Mode mode) { 52968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu if (mDelegateDrawable != null) { 53968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu mDelegateDrawable.setColorFilter(color, mode); 54968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return; 55968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 56968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu super.setColorFilter(color, mode); 57968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 58968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 59968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu @Override 60968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu public ColorFilter getColorFilter() { 61968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu if (mDelegateDrawable != null) { 62ebbed34a78fa6519de6c2848e68b97f9d3b98e08Tenghui Zhu return DrawableCompat.getColorFilter(mDelegateDrawable); 63968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 64ebbed34a78fa6519de6c2848e68b97f9d3b98e08Tenghui Zhu return null; 65968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 66968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 67968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu @Override 68968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu protected boolean onLevelChange(int level) { 69968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu if (mDelegateDrawable != null) { 70968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return mDelegateDrawable.setLevel(level); 71968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 72968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return super.onLevelChange(level); 73968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 74968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 75968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu @Override 76968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu protected void onBoundsChange(Rect bounds) { 77968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu if (mDelegateDrawable != null) { 78968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu mDelegateDrawable.setBounds(bounds); 79968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return; 80968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 81968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu super.onBoundsChange(bounds); 82968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 83968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 84968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu @Override 85968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu public void setHotspot(float x, float y) { 86968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu // API >= 21 only. 87968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu if (mDelegateDrawable != null) { 88ebbed34a78fa6519de6c2848e68b97f9d3b98e08Tenghui Zhu DrawableCompat.setHotspot(mDelegateDrawable, x, y); 89968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 90968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return; 91968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 92968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 93968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu @Override 94968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu public void setHotspotBounds(int left, int top, int right, int bottom) { 95968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu if (mDelegateDrawable != null) { 96ebbed34a78fa6519de6c2848e68b97f9d3b98e08Tenghui Zhu DrawableCompat.setHotspotBounds(mDelegateDrawable, left, top, right, bottom); 97968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return; 98968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 99968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 100968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 101968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu @Override 102968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu public void setFilterBitmap(boolean filter) { 103968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu if (mDelegateDrawable != null) { 104968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu mDelegateDrawable.setFilterBitmap(filter); 105968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return; 106968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 107968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 108968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 109968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu @Override 110968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu public void jumpToCurrentState() { 111968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu if (mDelegateDrawable != null) { 112ebbed34a78fa6519de6c2848e68b97f9d3b98e08Tenghui Zhu DrawableCompat.jumpToCurrentState(mDelegateDrawable); 113968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return; 114968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 115968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 116968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 117968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu @Override 118968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu public void applyTheme(Resources.Theme t) { 119968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu // API >= 21 only. 120968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu if (mDelegateDrawable != null) { 121ebbed34a78fa6519de6c2848e68b97f9d3b98e08Tenghui Zhu DrawableCompat.applyTheme(mDelegateDrawable, t); 122968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return; 123968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 124968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 125968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 126968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu @Override 127968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu public void clearColorFilter() { 128968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu if (mDelegateDrawable != null) { 129968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu mDelegateDrawable.clearColorFilter(); 130968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return; 131968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 132968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu super.clearColorFilter(); 133968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 134968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 135968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu @Override 136968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu public Drawable getCurrent() { 137968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu if (mDelegateDrawable != null) { 138968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return mDelegateDrawable.getCurrent(); 139968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 140968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return super.getCurrent(); 141968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 142968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 143968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu @Override 144968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu public int getMinimumWidth() { 145968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu if (mDelegateDrawable != null) { 146968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return mDelegateDrawable.getMinimumWidth(); 147968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 148968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return super.getMinimumWidth(); 149968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 150968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 151968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu @Override 152968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu public int getMinimumHeight() { 153968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu if (mDelegateDrawable != null) { 154968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return mDelegateDrawable.getMinimumHeight(); 155968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 156968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return super.getMinimumHeight(); 157968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 158968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 159968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu @Override 160968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu public boolean getPadding(Rect padding) { 161968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu if (mDelegateDrawable != null) { 162968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return mDelegateDrawable.getPadding(padding); 163968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 164968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return super.getPadding(padding); 165968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 166968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 167968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu @Override 168968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu public int[] getState() { 169968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu if (mDelegateDrawable != null) { 170968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return mDelegateDrawable.getState(); 171968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 172968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return super.getState(); 173968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 174968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 175968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 176968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu @Override 177968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu public Region getTransparentRegion() { 178968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu if (mDelegateDrawable != null) { 179968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return mDelegateDrawable.getTransparentRegion(); 180968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 181968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return super.getTransparentRegion(); 182968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 183968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 184968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu @Override 185968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu public void setChangingConfigurations(int configs) { 186968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu if (mDelegateDrawable != null) { 187968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu mDelegateDrawable.setChangingConfigurations(configs); 188968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return; 189968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 190968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu super.setChangingConfigurations(configs); 191968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 192968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu 193968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu @Override 194968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu public boolean setState(int[] stateSet) { 195968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu if (mDelegateDrawable != null) { 196968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return mDelegateDrawable.setState(stateSet); 197968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 198968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu return super.setState(stateSet); 199968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu } 200968dcfaff0c0a9e85ff4db2a985188f6996f5dadTeng-Hui Zhu} 201