ADD week 5
This commit is contained in:
		| @@ -0,0 +1,276 @@ | ||||
| package androidx.constraintlayout.widget; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.content.res.TypedArray; | ||||
| import android.util.Log; | ||||
| import android.util.SparseArray; | ||||
| import android.util.Xml; | ||||
| import java.io.IOException; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Iterator; | ||||
| import org.xmlpull.v1.XmlPullParser; | ||||
| import org.xmlpull.v1.XmlPullParserException; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class StateSet { | ||||
|     private static final boolean DEBUG = false; | ||||
|     public static final String TAG = "ConstraintLayoutStates"; | ||||
|     ConstraintSet mDefaultConstraintSet; | ||||
|     int mDefaultState = -1; | ||||
|     int mCurrentStateId = -1; | ||||
|     int mCurrentConstraintNumber = -1; | ||||
|     private SparseArray<State> mStateList = new SparseArray<>(); | ||||
|     private SparseArray<ConstraintSet> mConstraintSetMap = new SparseArray<>(); | ||||
|     private ConstraintsChangedListener mConstraintsChangedListener = null; | ||||
|  | ||||
|     public void setOnConstraintsChanged(ConstraintsChangedListener constraintsChangedListener) { | ||||
|         this.mConstraintsChangedListener = constraintsChangedListener; | ||||
|     } | ||||
|  | ||||
|     public StateSet(Context context, XmlPullParser parser) { | ||||
|         load(context, parser); | ||||
|     } | ||||
|  | ||||
|     private void load(Context context, XmlPullParser parser) { | ||||
|         TypedArray obtainStyledAttributes = context.obtainStyledAttributes(Xml.asAttributeSet(parser), R.styleable.StateSet); | ||||
|         int indexCount = obtainStyledAttributes.getIndexCount(); | ||||
|         for (int i = 0; i < indexCount; i++) { | ||||
|             int index = obtainStyledAttributes.getIndex(i); | ||||
|             if (index == R.styleable.StateSet_defaultState) { | ||||
|                 this.mDefaultState = obtainStyledAttributes.getResourceId(index, this.mDefaultState); | ||||
|             } | ||||
|         } | ||||
|         obtainStyledAttributes.recycle(); | ||||
|         try { | ||||
|             int eventType = parser.getEventType(); | ||||
|             State state = null; | ||||
|             while (true) { | ||||
|                 char c = 1; | ||||
|                 if (eventType == 1) { | ||||
|                     return; | ||||
|                 } | ||||
|                 if (eventType == 0) { | ||||
|                     parser.getName(); | ||||
|                 } else if (eventType == 2) { | ||||
|                     String name = parser.getName(); | ||||
|                     switch (name.hashCode()) { | ||||
|                         case 80204913: | ||||
|                             if (name.equals("State")) { | ||||
|                                 c = 2; | ||||
|                                 break; | ||||
|                             } | ||||
|                             c = 65535; | ||||
|                             break; | ||||
|                         case 1301459538: | ||||
|                             if (name.equals("LayoutDescription")) { | ||||
|                                 c = 0; | ||||
|                                 break; | ||||
|                             } | ||||
|                             c = 65535; | ||||
|                             break; | ||||
|                         case 1382829617: | ||||
|                             if (name.equals("StateSet")) { | ||||
|                                 break; | ||||
|                             } | ||||
|                             c = 65535; | ||||
|                             break; | ||||
|                         case 1901439077: | ||||
|                             if (name.equals("Variant")) { | ||||
|                                 c = 3; | ||||
|                                 break; | ||||
|                             } | ||||
|                             c = 65535; | ||||
|                             break; | ||||
|                         default: | ||||
|                             c = 65535; | ||||
|                             break; | ||||
|                     } | ||||
|                     if (c == 2) { | ||||
|                         state = new State(context, parser); | ||||
|                         this.mStateList.put(state.mId, state); | ||||
|                     } else if (c == 3) { | ||||
|                         Variant variant = new Variant(context, parser); | ||||
|                         if (state != null) { | ||||
|                             state.add(variant); | ||||
|                         } | ||||
|                     } | ||||
|                 } else if (eventType != 3) { | ||||
|                     continue; | ||||
|                 } else if ("StateSet".equals(parser.getName())) { | ||||
|                     return; | ||||
|                 } | ||||
|                 eventType = parser.next(); | ||||
|             } | ||||
|         } catch (IOException e) { | ||||
|             e.printStackTrace(); | ||||
|         } catch (XmlPullParserException e2) { | ||||
|             e2.printStackTrace(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public boolean needsToChange(int id, float width, float height) { | ||||
|         int i = this.mCurrentStateId; | ||||
|         if (i != id) { | ||||
|             return true; | ||||
|         } | ||||
|         State valueAt = id == -1 ? this.mStateList.valueAt(0) : this.mStateList.get(i); | ||||
|         return (this.mCurrentConstraintNumber == -1 || !valueAt.mVariants.get(this.mCurrentConstraintNumber).match(width, height)) && this.mCurrentConstraintNumber != valueAt.findMatch(width, height); | ||||
|     } | ||||
|  | ||||
|     public int stateGetConstraintID(int id, int width, int height) { | ||||
|         return updateConstraints(-1, id, width, height); | ||||
|     } | ||||
|  | ||||
|     public int convertToConstraintSet(int currentConstrainSettId, int stateId, float width, float height) { | ||||
|         State state = this.mStateList.get(stateId); | ||||
|         if (state == null) { | ||||
|             return stateId; | ||||
|         } | ||||
|         if (width == -1.0f || height == -1.0f) { | ||||
|             if (state.mConstraintID == currentConstrainSettId) { | ||||
|                 return currentConstrainSettId; | ||||
|             } | ||||
|             Iterator<Variant> it = state.mVariants.iterator(); | ||||
|             while (it.hasNext()) { | ||||
|                 if (currentConstrainSettId == it.next().mConstraintID) { | ||||
|                     return currentConstrainSettId; | ||||
|                 } | ||||
|             } | ||||
|             return state.mConstraintID; | ||||
|         } | ||||
|         Iterator<Variant> it2 = state.mVariants.iterator(); | ||||
|         Variant variant = null; | ||||
|         while (it2.hasNext()) { | ||||
|             Variant next = it2.next(); | ||||
|             if (next.match(width, height)) { | ||||
|                 if (currentConstrainSettId == next.mConstraintID) { | ||||
|                     return currentConstrainSettId; | ||||
|                 } | ||||
|                 variant = next; | ||||
|             } | ||||
|         } | ||||
|         if (variant != null) { | ||||
|             return variant.mConstraintID; | ||||
|         } | ||||
|         return state.mConstraintID; | ||||
|     } | ||||
|  | ||||
|     public int updateConstraints(int currentId, int id, float width, float height) { | ||||
|         State state; | ||||
|         int findMatch; | ||||
|         if (currentId != id) { | ||||
|             State state2 = this.mStateList.get(id); | ||||
|             if (state2 == null) { | ||||
|                 return -1; | ||||
|             } | ||||
|             int findMatch2 = state2.findMatch(width, height); | ||||
|             return findMatch2 == -1 ? state2.mConstraintID : state2.mVariants.get(findMatch2).mConstraintID; | ||||
|         } | ||||
|         if (id == -1) { | ||||
|             state = this.mStateList.valueAt(0); | ||||
|         } else { | ||||
|             state = this.mStateList.get(this.mCurrentStateId); | ||||
|         } | ||||
|         if (state == null) { | ||||
|             return -1; | ||||
|         } | ||||
|         return ((this.mCurrentConstraintNumber == -1 || !state.mVariants.get(currentId).match(width, height)) && currentId != (findMatch = state.findMatch(width, height))) ? findMatch == -1 ? state.mConstraintID : state.mVariants.get(findMatch).mConstraintID : currentId; | ||||
|     } | ||||
|  | ||||
|     static class State { | ||||
|         int mConstraintID; | ||||
|         int mId; | ||||
|         boolean mIsLayout; | ||||
|         ArrayList<Variant> mVariants = new ArrayList<>(); | ||||
|  | ||||
|         public State(Context context, XmlPullParser parser) { | ||||
|             this.mConstraintID = -1; | ||||
|             this.mIsLayout = false; | ||||
|             TypedArray obtainStyledAttributes = context.obtainStyledAttributes(Xml.asAttributeSet(parser), R.styleable.State); | ||||
|             int indexCount = obtainStyledAttributes.getIndexCount(); | ||||
|             for (int i = 0; i < indexCount; i++) { | ||||
|                 int index = obtainStyledAttributes.getIndex(i); | ||||
|                 if (index == R.styleable.State_android_id) { | ||||
|                     this.mId = obtainStyledAttributes.getResourceId(index, this.mId); | ||||
|                 } else if (index == R.styleable.State_constraints) { | ||||
|                     this.mConstraintID = obtainStyledAttributes.getResourceId(index, this.mConstraintID); | ||||
|                     String resourceTypeName = context.getResources().getResourceTypeName(this.mConstraintID); | ||||
|                     context.getResources().getResourceName(this.mConstraintID); | ||||
|                     if ("layout".equals(resourceTypeName)) { | ||||
|                         this.mIsLayout = true; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|             obtainStyledAttributes.recycle(); | ||||
|         } | ||||
|  | ||||
|         void add(Variant size) { | ||||
|             this.mVariants.add(size); | ||||
|         } | ||||
|  | ||||
|         public int findMatch(float width, float height) { | ||||
|             for (int i = 0; i < this.mVariants.size(); i++) { | ||||
|                 if (this.mVariants.get(i).match(width, height)) { | ||||
|                     return i; | ||||
|                 } | ||||
|             } | ||||
|             return -1; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     static class Variant { | ||||
|         int mConstraintID; | ||||
|         int mId; | ||||
|         boolean mIsLayout; | ||||
|         float mMaxHeight; | ||||
|         float mMaxWidth; | ||||
|         float mMinHeight; | ||||
|         float mMinWidth; | ||||
|  | ||||
|         public Variant(Context context, XmlPullParser parser) { | ||||
|             this.mMinWidth = Float.NaN; | ||||
|             this.mMinHeight = Float.NaN; | ||||
|             this.mMaxWidth = Float.NaN; | ||||
|             this.mMaxHeight = Float.NaN; | ||||
|             this.mConstraintID = -1; | ||||
|             this.mIsLayout = false; | ||||
|             TypedArray obtainStyledAttributes = context.obtainStyledAttributes(Xml.asAttributeSet(parser), R.styleable.Variant); | ||||
|             int indexCount = obtainStyledAttributes.getIndexCount(); | ||||
|             for (int i = 0; i < indexCount; i++) { | ||||
|                 int index = obtainStyledAttributes.getIndex(i); | ||||
|                 if (index == R.styleable.Variant_constraints) { | ||||
|                     this.mConstraintID = obtainStyledAttributes.getResourceId(index, this.mConstraintID); | ||||
|                     String resourceTypeName = context.getResources().getResourceTypeName(this.mConstraintID); | ||||
|                     context.getResources().getResourceName(this.mConstraintID); | ||||
|                     if ("layout".equals(resourceTypeName)) { | ||||
|                         this.mIsLayout = true; | ||||
|                     } | ||||
|                 } else if (index == R.styleable.Variant_region_heightLessThan) { | ||||
|                     this.mMaxHeight = obtainStyledAttributes.getDimension(index, this.mMaxHeight); | ||||
|                 } else if (index == R.styleable.Variant_region_heightMoreThan) { | ||||
|                     this.mMinHeight = obtainStyledAttributes.getDimension(index, this.mMinHeight); | ||||
|                 } else if (index == R.styleable.Variant_region_widthLessThan) { | ||||
|                     this.mMaxWidth = obtainStyledAttributes.getDimension(index, this.mMaxWidth); | ||||
|                 } else if (index == R.styleable.Variant_region_widthMoreThan) { | ||||
|                     this.mMinWidth = obtainStyledAttributes.getDimension(index, this.mMinWidth); | ||||
|                 } else { | ||||
|                     Log.v("ConstraintLayoutStates", "Unknown tag"); | ||||
|                 } | ||||
|             } | ||||
|             obtainStyledAttributes.recycle(); | ||||
|         } | ||||
|  | ||||
|         boolean match(float widthDp, float heightDp) { | ||||
|             if (!Float.isNaN(this.mMinWidth) && widthDp < this.mMinWidth) { | ||||
|                 return false; | ||||
|             } | ||||
|             if (!Float.isNaN(this.mMinHeight) && heightDp < this.mMinHeight) { | ||||
|                 return false; | ||||
|             } | ||||
|             if (Float.isNaN(this.mMaxWidth) || widthDp <= this.mMaxWidth) { | ||||
|                 return Float.isNaN(this.mMaxHeight) || heightDp <= this.mMaxHeight; | ||||
|             } | ||||
|             return false; | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user