diff options
Diffstat (limited to 'graphics/java/android/graphics/drawable/StateListDrawable.java')
-rw-r--r-- | graphics/java/android/graphics/drawable/StateListDrawable.java | 272 |
1 files changed, 0 insertions, 272 deletions
diff --git a/graphics/java/android/graphics/drawable/StateListDrawable.java b/graphics/java/android/graphics/drawable/StateListDrawable.java deleted file mode 100644 index 475825c..0000000 --- a/graphics/java/android/graphics/drawable/StateListDrawable.java +++ /dev/null @@ -1,272 +0,0 @@ -/* - * Copyright (C) 2006 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.graphics.drawable; - -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - -import java.io.IOException; - -import android.content.res.Resources; -import android.content.res.TypedArray; -import android.util.AttributeSet; -import android.util.StateSet; - -/** - * Lets you assign a number of graphic images to a single Drawable and swap out the visible item by a string - * ID value. - * <p/> - * <p>It can be defined in an XML file with the <code><selector></code> element. - * Each state Drawable is defined in a nested <code><item></code> element.</p> - * - * @attr ref android.R.styleable#StateListDrawable_visible - * @attr ref android.R.styleable#StateListDrawable_variablePadding - * @attr ref android.R.styleable#StateListDrawable_constantSize - * @attr ref android.R.styleable#DrawableStates_state_focused - * @attr ref android.R.styleable#DrawableStates_state_window_focused - * @attr ref android.R.styleable#DrawableStates_state_enabled - * @attr ref android.R.styleable#DrawableStates_state_checkable - * @attr ref android.R.styleable#DrawableStates_state_checked - * @attr ref android.R.styleable#DrawableStates_state_selected - * @attr ref android.R.styleable#DrawableStates_state_active - * @attr ref android.R.styleable#DrawableStates_state_single - * @attr ref android.R.styleable#DrawableStates_state_first - * @attr ref android.R.styleable#DrawableStates_state_middle - * @attr ref android.R.styleable#DrawableStates_state_last - * @attr ref android.R.styleable#DrawableStates_state_pressed - */ -public class StateListDrawable extends DrawableContainer { - private final StateListState mStateListState; - private boolean mMutated; - - public StateListDrawable() { - this(null); - } - - /** - * Add a new image/string ID to the set of images. - * - * @param stateSet - An array of resource Ids to associate with the image. - * Switch to this image by calling setState(). - * @param drawable -The image to show. - */ - public void addState(int[] stateSet, Drawable drawable) { - if (drawable != null) { - mStateListState.addStateSet(stateSet, drawable); - // in case the new state matches our current state... - onStateChange(getState()); - } - } - - @Override - public boolean isStateful() { - return true; - } - - @Override - protected boolean onStateChange(int[] stateSet) { - int idx = mStateListState.indexOfStateSet(stateSet); - if (idx < 0) { - idx = mStateListState.indexOfStateSet(StateSet.WILD_CARD); - } - if (selectDrawable(idx)) { - return true; - } - return super.onStateChange(stateSet); - } - - @Override - public void inflate(Resources r, XmlPullParser parser, - AttributeSet attrs) - throws XmlPullParserException, IOException { - - TypedArray a = r.obtainAttributes(attrs, - com.android.internal.R.styleable.StateListDrawable); - - super.inflateWithAttributes(r, parser, a, - com.android.internal.R.styleable.StateListDrawable_visible); - - mStateListState.setVariablePadding(a.getBoolean( - com.android.internal.R.styleable.StateListDrawable_variablePadding, false)); - mStateListState.setConstantSize(a.getBoolean( - com.android.internal.R.styleable.StateListDrawable_constantSize, false)); - - a.recycle(); - - int type; - - final int innerDepth = parser.getDepth() + 1; - int depth; - while ((type = parser.next()) != XmlPullParser.END_DOCUMENT - && ((depth = parser.getDepth()) >= innerDepth - || type != XmlPullParser.END_TAG)) { - if (type != XmlPullParser.START_TAG) { - continue; - } - - if (depth > innerDepth || !parser.getName().equals("item")) { - continue; - } - - int drawableRes = 0; - - int i; - int j = 0; - final int numAttrs = attrs.getAttributeCount(); - int[] states = new int[numAttrs]; - for (i = 0; i < numAttrs; i++) { - final int stateResId = attrs.getAttributeNameResource(i); - if (stateResId == 0) break; - if (stateResId == com.android.internal.R.attr.drawable) { - drawableRes = attrs.getAttributeResourceValue(i, 0); - } else { - states[j++] = attrs.getAttributeBooleanValue(i, false) - ? stateResId - : -stateResId; - } - } - states = StateSet.trimStateSet(states, j); - - Drawable dr; - if (drawableRes != 0) { - dr = r.getDrawable(drawableRes); - } else { - while ((type = parser.next()) == XmlPullParser.TEXT) { - } - if (type != XmlPullParser.START_TAG) { - throw new XmlPullParserException( - parser.getPositionDescription() - + ": <item> tag requires a 'drawable' attribute or " - + "child tag defining a drawable"); - } - dr = Drawable.createFromXmlInner(r, parser, attrs); - } - - mStateListState.addStateSet(states, dr); - } - - onStateChange(getState()); - } - - StateListState getStateListState() { - return mStateListState; - } - - /** - * Gets the number of states contained in this drawable. - * - * @return The number of states contained in this drawable. - * @hide pending API council - * @see #getStateSet(int) - * @see #getStateDrawable(int) - */ - public int getStateCount() { - return mStateListState.getChildCount(); - } - - /** - * Gets the state set at an index. - * - * @param index The index of the state set. - * @return The state set at the index. - * @hide pending API council - * @see #getStateCount() - * @see #getStateDrawable(int) - */ - public int[] getStateSet(int index) { - return mStateListState.mStateSets[index]; - } - - /** - * Gets the drawable at an index. - * - * @param index The index of the drawable. - * @return The drawable at the index. - * @hide pending API council - * @see #getStateCount() - * @see #getStateSet(int) - */ - public Drawable getStateDrawable(int index) { - return mStateListState.getChildren()[index]; - } - - @Override - public Drawable mutate() { - if (!mMutated && super.mutate() == this) { - final int[][] sets = mStateListState.mStateSets; - final int count = sets.length; - mStateListState.mStateSets = new int[count][]; - for (int i = 0; i < count; i++) { - mStateListState.mStateSets[i] = sets[i].clone(); - } - mMutated = true; - } - return this; - } - - static final class StateListState extends DrawableContainerState { - private int[][] mStateSets; - - StateListState(StateListState orig, StateListDrawable owner) { - super(orig, owner); - - if (orig != null) { - mStateSets = orig.mStateSets; - } else { - mStateSets = new int[getChildren().length][]; - } - } - - int addStateSet(int[] stateSet, Drawable drawable) { - final int pos = addChild(drawable); - mStateSets[pos] = stateSet; - return pos; - } - - private int indexOfStateSet(int[] stateSet) { - final int[][] stateSets = mStateSets; - final int N = getChildCount(); - for (int i = 0; i < N; i++) { - if (StateSet.stateSetMatches(stateSets[i], stateSet)) { - return i; - } - } - return -1; - } - - @Override - public Drawable newDrawable() { - return new StateListDrawable(this); - } - - @Override - public void growArray(int oldSize, int newSize) { - super.growArray(oldSize, newSize); - final int[][] newStateSets = new int[newSize][]; - System.arraycopy(mStateSets, 0, newStateSets, 0, oldSize); - mStateSets = newStateSets; - } - } - - private StateListDrawable(StateListState state) { - StateListState as = new StateListState(state, this); - mStateListState = as; - setConstantState(as); - onStateChange(getState()); - } -} - |