ADD week 5
This commit is contained in:
		| @@ -0,0 +1,447 @@ | ||||
| package androidx.constraintlayout.widget; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.content.res.TypedArray; | ||||
| import android.graphics.Color; | ||||
| import android.graphics.drawable.ColorDrawable; | ||||
| import android.graphics.drawable.Drawable; | ||||
| import android.util.Log; | ||||
| import android.util.TypedValue; | ||||
| import android.util.Xml; | ||||
| import android.view.View; | ||||
| import androidx.core.view.ViewCompat; | ||||
| import java.lang.reflect.InvocationTargetException; | ||||
| import java.lang.reflect.Method; | ||||
| import java.util.HashMap; | ||||
| import org.xmlpull.v1.XmlPullParser; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class ConstraintAttribute { | ||||
|     private static final String TAG = "TransitionLayout"; | ||||
|     boolean mBooleanValue; | ||||
|     private int mColorValue; | ||||
|     private float mFloatValue; | ||||
|     private int mIntegerValue; | ||||
|     private boolean mMethod; | ||||
|     String mName; | ||||
|     private String mStringValue; | ||||
|     private AttributeType mType; | ||||
|  | ||||
|     public enum AttributeType { | ||||
|         INT_TYPE, | ||||
|         FLOAT_TYPE, | ||||
|         COLOR_TYPE, | ||||
|         COLOR_DRAWABLE_TYPE, | ||||
|         STRING_TYPE, | ||||
|         BOOLEAN_TYPE, | ||||
|         DIMENSION_TYPE, | ||||
|         REFERENCE_TYPE | ||||
|     } | ||||
|  | ||||
|     private static int clamp(int c) { | ||||
|         int i = (c & (~(c >> 31))) - 255; | ||||
|         return (i & (i >> 31)) + 255; | ||||
|     } | ||||
|  | ||||
|     public int getColorValue() { | ||||
|         return this.mColorValue; | ||||
|     } | ||||
|  | ||||
|     public float getFloatValue() { | ||||
|         return this.mFloatValue; | ||||
|     } | ||||
|  | ||||
|     public int getIntegerValue() { | ||||
|         return this.mIntegerValue; | ||||
|     } | ||||
|  | ||||
|     public String getName() { | ||||
|         return this.mName; | ||||
|     } | ||||
|  | ||||
|     public String getStringValue() { | ||||
|         return this.mStringValue; | ||||
|     } | ||||
|  | ||||
|     public AttributeType getType() { | ||||
|         return this.mType; | ||||
|     } | ||||
|  | ||||
|     public boolean isBooleanValue() { | ||||
|         return this.mBooleanValue; | ||||
|     } | ||||
|  | ||||
|     public boolean isMethod() { | ||||
|         return this.mMethod; | ||||
|     } | ||||
|  | ||||
|     public void setColorValue(int value) { | ||||
|         this.mColorValue = value; | ||||
|     } | ||||
|  | ||||
|     public void setFloatValue(float value) { | ||||
|         this.mFloatValue = value; | ||||
|     } | ||||
|  | ||||
|     public void setIntValue(int value) { | ||||
|         this.mIntegerValue = value; | ||||
|     } | ||||
|  | ||||
|     public void setStringValue(String value) { | ||||
|         this.mStringValue = value; | ||||
|     } | ||||
|  | ||||
|     public boolean isContinuous() { | ||||
|         int i = AnonymousClass1.$SwitchMap$androidx$constraintlayout$widget$ConstraintAttribute$AttributeType[this.mType.ordinal()]; | ||||
|         return (i == 1 || i == 2 || i == 3) ? false : true; | ||||
|     } | ||||
|  | ||||
|     public int numberOfInterpolatedValues() { | ||||
|         int i = AnonymousClass1.$SwitchMap$androidx$constraintlayout$widget$ConstraintAttribute$AttributeType[this.mType.ordinal()]; | ||||
|         return (i == 4 || i == 5) ? 4 : 1; | ||||
|     } | ||||
|  | ||||
|     public float getValueToInterpolate() { | ||||
|         switch (this.mType) { | ||||
|             case BOOLEAN_TYPE: | ||||
|                 return this.mBooleanValue ? 1.0f : 0.0f; | ||||
|             case STRING_TYPE: | ||||
|                 throw new RuntimeException("Cannot interpolate String"); | ||||
|             case COLOR_TYPE: | ||||
|             case COLOR_DRAWABLE_TYPE: | ||||
|                 throw new RuntimeException("Color does not have a single color to interpolate"); | ||||
|             case INT_TYPE: | ||||
|                 return this.mIntegerValue; | ||||
|             case FLOAT_TYPE: | ||||
|                 return this.mFloatValue; | ||||
|             case DIMENSION_TYPE: | ||||
|                 return this.mFloatValue; | ||||
|             default: | ||||
|                 return Float.NaN; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void getValuesToInterpolate(float[] ret) { | ||||
|         switch (this.mType) { | ||||
|             case BOOLEAN_TYPE: | ||||
|                 ret[0] = this.mBooleanValue ? 1.0f : 0.0f; | ||||
|                 return; | ||||
|             case STRING_TYPE: | ||||
|                 throw new RuntimeException("Color does not have a single color to interpolate"); | ||||
|             case COLOR_TYPE: | ||||
|             case COLOR_DRAWABLE_TYPE: | ||||
|                 int i = (this.mColorValue >> 24) & 255; | ||||
|                 float pow = (float) Math.pow(((r0 >> 16) & 255) / 255.0f, 2.2d); | ||||
|                 float pow2 = (float) Math.pow(((r0 >> 8) & 255) / 255.0f, 2.2d); | ||||
|                 float pow3 = (float) Math.pow((r0 & 255) / 255.0f, 2.2d); | ||||
|                 ret[0] = pow; | ||||
|                 ret[1] = pow2; | ||||
|                 ret[2] = pow3; | ||||
|                 ret[3] = i / 255.0f; | ||||
|                 return; | ||||
|             case INT_TYPE: | ||||
|                 ret[0] = this.mIntegerValue; | ||||
|                 return; | ||||
|             case FLOAT_TYPE: | ||||
|                 ret[0] = this.mFloatValue; | ||||
|                 return; | ||||
|             case DIMENSION_TYPE: | ||||
|                 ret[0] = this.mFloatValue; | ||||
|                 return; | ||||
|             default: | ||||
|                 return; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setValue(float[] value) { | ||||
|         switch (AnonymousClass1.$SwitchMap$androidx$constraintlayout$widget$ConstraintAttribute$AttributeType[this.mType.ordinal()]) { | ||||
|             case 1: | ||||
|             case 6: | ||||
|                 this.mIntegerValue = (int) value[0]; | ||||
|                 return; | ||||
|             case 2: | ||||
|                 this.mBooleanValue = ((double) value[0]) > 0.5d; | ||||
|                 return; | ||||
|             case 3: | ||||
|                 throw new RuntimeException("Color does not have a single color to interpolate"); | ||||
|             case 4: | ||||
|             case 5: | ||||
|                 int HSVToColor = Color.HSVToColor(value); | ||||
|                 this.mColorValue = HSVToColor; | ||||
|                 this.mColorValue = (clamp((int) (value[3] * 255.0f)) << 24) | (HSVToColor & ViewCompat.MEASURED_SIZE_MASK); | ||||
|                 return; | ||||
|             case 7: | ||||
|                 this.mFloatValue = value[0]; | ||||
|                 return; | ||||
|             case 8: | ||||
|                 this.mFloatValue = value[0]; | ||||
|                 return; | ||||
|             default: | ||||
|                 return; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public boolean diff(ConstraintAttribute constraintAttribute) { | ||||
|         if (constraintAttribute == null || this.mType != constraintAttribute.mType) { | ||||
|             return false; | ||||
|         } | ||||
|         switch (AnonymousClass1.$SwitchMap$androidx$constraintlayout$widget$ConstraintAttribute$AttributeType[this.mType.ordinal()]) { | ||||
|             case 1: | ||||
|             case 6: | ||||
|                 if (this.mIntegerValue == constraintAttribute.mIntegerValue) { | ||||
|                 } | ||||
|                 break; | ||||
|             case 2: | ||||
|                 if (this.mBooleanValue == constraintAttribute.mBooleanValue) { | ||||
|                 } | ||||
|                 break; | ||||
|             case 3: | ||||
|                 if (this.mIntegerValue == constraintAttribute.mIntegerValue) { | ||||
|                 } | ||||
|                 break; | ||||
|             case 4: | ||||
|             case 5: | ||||
|                 if (this.mColorValue == constraintAttribute.mColorValue) { | ||||
|                 } | ||||
|                 break; | ||||
|             case 7: | ||||
|                 if (this.mFloatValue == constraintAttribute.mFloatValue) { | ||||
|                 } | ||||
|                 break; | ||||
|             case 8: | ||||
|                 if (this.mFloatValue == constraintAttribute.mFloatValue) { | ||||
|                 } | ||||
|                 break; | ||||
|         } | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     public ConstraintAttribute(String name, AttributeType attributeType) { | ||||
|         this.mMethod = false; | ||||
|         this.mName = name; | ||||
|         this.mType = attributeType; | ||||
|     } | ||||
|  | ||||
|     public ConstraintAttribute(String name, AttributeType attributeType, Object value, boolean method) { | ||||
|         this.mName = name; | ||||
|         this.mType = attributeType; | ||||
|         this.mMethod = method; | ||||
|         setValue(value); | ||||
|     } | ||||
|  | ||||
|     public ConstraintAttribute(ConstraintAttribute source, Object value) { | ||||
|         this.mMethod = false; | ||||
|         this.mName = source.mName; | ||||
|         this.mType = source.mType; | ||||
|         setValue(value); | ||||
|     } | ||||
|  | ||||
|     public void setValue(Object value) { | ||||
|         switch (AnonymousClass1.$SwitchMap$androidx$constraintlayout$widget$ConstraintAttribute$AttributeType[this.mType.ordinal()]) { | ||||
|             case 1: | ||||
|             case 6: | ||||
|                 this.mIntegerValue = ((Integer) value).intValue(); | ||||
|                 break; | ||||
|             case 2: | ||||
|                 this.mBooleanValue = ((Boolean) value).booleanValue(); | ||||
|                 break; | ||||
|             case 3: | ||||
|                 this.mStringValue = (String) value; | ||||
|                 break; | ||||
|             case 4: | ||||
|             case 5: | ||||
|                 this.mColorValue = ((Integer) value).intValue(); | ||||
|                 break; | ||||
|             case 7: | ||||
|                 this.mFloatValue = ((Float) value).floatValue(); | ||||
|                 break; | ||||
|             case 8: | ||||
|                 this.mFloatValue = ((Float) value).floatValue(); | ||||
|                 break; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static HashMap<String, ConstraintAttribute> extractAttributes(HashMap<String, ConstraintAttribute> base, View view) { | ||||
|         HashMap<String, ConstraintAttribute> hashMap = new HashMap<>(); | ||||
|         Class<?> cls = view.getClass(); | ||||
|         for (String str : base.keySet()) { | ||||
|             ConstraintAttribute constraintAttribute = base.get(str); | ||||
|             try { | ||||
|                 if (str.equals("BackgroundColor")) { | ||||
|                     hashMap.put(str, new ConstraintAttribute(constraintAttribute, Integer.valueOf(((ColorDrawable) view.getBackground()).getColor()))); | ||||
|                 } else { | ||||
|                     hashMap.put(str, new ConstraintAttribute(constraintAttribute, cls.getMethod("getMap" + str, new Class[0]).invoke(view, new Object[0]))); | ||||
|                 } | ||||
|             } catch (IllegalAccessException e) { | ||||
|                 e.printStackTrace(); | ||||
|             } catch (NoSuchMethodException e2) { | ||||
|                 e2.printStackTrace(); | ||||
|             } catch (InvocationTargetException e3) { | ||||
|                 e3.printStackTrace(); | ||||
|             } | ||||
|         } | ||||
|         return hashMap; | ||||
|     } | ||||
|  | ||||
|     public static void setAttributes(View view, HashMap<String, ConstraintAttribute> map) { | ||||
|         Class<?> cls = view.getClass(); | ||||
|         for (String str : map.keySet()) { | ||||
|             ConstraintAttribute constraintAttribute = map.get(str); | ||||
|             String str2 = constraintAttribute.mMethod ? str : "set" + str; | ||||
|             try { | ||||
|                 switch (AnonymousClass1.$SwitchMap$androidx$constraintlayout$widget$ConstraintAttribute$AttributeType[constraintAttribute.mType.ordinal()]) { | ||||
|                     case 1: | ||||
|                         cls.getMethod(str2, Integer.TYPE).invoke(view, Integer.valueOf(constraintAttribute.mIntegerValue)); | ||||
|                         break; | ||||
|                     case 2: | ||||
|                         cls.getMethod(str2, Boolean.TYPE).invoke(view, Boolean.valueOf(constraintAttribute.mBooleanValue)); | ||||
|                         break; | ||||
|                     case 3: | ||||
|                         cls.getMethod(str2, CharSequence.class).invoke(view, constraintAttribute.mStringValue); | ||||
|                         break; | ||||
|                     case 4: | ||||
|                         cls.getMethod(str2, Integer.TYPE).invoke(view, Integer.valueOf(constraintAttribute.mColorValue)); | ||||
|                         break; | ||||
|                     case 5: | ||||
|                         Method method = cls.getMethod(str2, Drawable.class); | ||||
|                         ColorDrawable colorDrawable = new ColorDrawable(); | ||||
|                         colorDrawable.setColor(constraintAttribute.mColorValue); | ||||
|                         method.invoke(view, colorDrawable); | ||||
|                         break; | ||||
|                     case 6: | ||||
|                         cls.getMethod(str2, Integer.TYPE).invoke(view, Integer.valueOf(constraintAttribute.mIntegerValue)); | ||||
|                         break; | ||||
|                     case 7: | ||||
|                         cls.getMethod(str2, Float.TYPE).invoke(view, Float.valueOf(constraintAttribute.mFloatValue)); | ||||
|                         break; | ||||
|                     case 8: | ||||
|                         cls.getMethod(str2, Float.TYPE).invoke(view, Float.valueOf(constraintAttribute.mFloatValue)); | ||||
|                         break; | ||||
|                 } | ||||
|             } catch (IllegalAccessException e) { | ||||
|                 Log.e(TAG, " Custom Attribute \"" + str + "\" not found on " + cls.getName()); | ||||
|                 e.printStackTrace(); | ||||
|             } catch (NoSuchMethodException e2) { | ||||
|                 Log.e(TAG, e2.getMessage()); | ||||
|                 Log.e(TAG, " Custom Attribute \"" + str + "\" not found on " + cls.getName()); | ||||
|                 Log.e(TAG, cls.getName() + " must have a method " + str2); | ||||
|             } catch (InvocationTargetException e3) { | ||||
|                 Log.e(TAG, " Custom Attribute \"" + str + "\" not found on " + cls.getName()); | ||||
|                 e3.printStackTrace(); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void applyCustom(View view) { | ||||
|         String str; | ||||
|         Class<?> cls = view.getClass(); | ||||
|         String str2 = this.mName; | ||||
|         if (this.mMethod) { | ||||
|             str = str2; | ||||
|         } else { | ||||
|             str = "set" + str2; | ||||
|         } | ||||
|         try { | ||||
|             switch (AnonymousClass1.$SwitchMap$androidx$constraintlayout$widget$ConstraintAttribute$AttributeType[this.mType.ordinal()]) { | ||||
|                 case 1: | ||||
|                 case 6: | ||||
|                     cls.getMethod(str, Integer.TYPE).invoke(view, Integer.valueOf(this.mIntegerValue)); | ||||
|                     break; | ||||
|                 case 2: | ||||
|                     cls.getMethod(str, Boolean.TYPE).invoke(view, Boolean.valueOf(this.mBooleanValue)); | ||||
|                     break; | ||||
|                 case 3: | ||||
|                     cls.getMethod(str, CharSequence.class).invoke(view, this.mStringValue); | ||||
|                     break; | ||||
|                 case 4: | ||||
|                     cls.getMethod(str, Integer.TYPE).invoke(view, Integer.valueOf(this.mColorValue)); | ||||
|                     break; | ||||
|                 case 5: | ||||
|                     Method method = cls.getMethod(str, Drawable.class); | ||||
|                     ColorDrawable colorDrawable = new ColorDrawable(); | ||||
|                     colorDrawable.setColor(this.mColorValue); | ||||
|                     method.invoke(view, colorDrawable); | ||||
|                     break; | ||||
|                 case 7: | ||||
|                     cls.getMethod(str, Float.TYPE).invoke(view, Float.valueOf(this.mFloatValue)); | ||||
|                     break; | ||||
|                 case 8: | ||||
|                     cls.getMethod(str, Float.TYPE).invoke(view, Float.valueOf(this.mFloatValue)); | ||||
|                     break; | ||||
|             } | ||||
|         } catch (IllegalAccessException e) { | ||||
|             Log.e(TAG, " Custom Attribute \"" + str2 + "\" not found on " + cls.getName()); | ||||
|             e.printStackTrace(); | ||||
|         } catch (NoSuchMethodException e2) { | ||||
|             Log.e(TAG, e2.getMessage()); | ||||
|             Log.e(TAG, " Custom Attribute \"" + str2 + "\" not found on " + cls.getName()); | ||||
|             Log.e(TAG, cls.getName() + " must have a method " + str); | ||||
|         } catch (InvocationTargetException e3) { | ||||
|             Log.e(TAG, " Custom Attribute \"" + str2 + "\" not found on " + cls.getName()); | ||||
|             e3.printStackTrace(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void parse(Context context, XmlPullParser parser, HashMap<String, ConstraintAttribute> custom) { | ||||
|         AttributeType attributeType; | ||||
|         Object valueOf; | ||||
|         TypedArray obtainStyledAttributes = context.obtainStyledAttributes(Xml.asAttributeSet(parser), R.styleable.CustomAttribute); | ||||
|         int indexCount = obtainStyledAttributes.getIndexCount(); | ||||
|         String str = null; | ||||
|         Object obj = null; | ||||
|         AttributeType attributeType2 = null; | ||||
|         boolean z = false; | ||||
|         for (int i = 0; i < indexCount; i++) { | ||||
|             int index = obtainStyledAttributes.getIndex(i); | ||||
|             if (index == R.styleable.CustomAttribute_attributeName) { | ||||
|                 str = obtainStyledAttributes.getString(index); | ||||
|                 if (str != null && str.length() > 0) { | ||||
|                     str = Character.toUpperCase(str.charAt(0)) + str.substring(1); | ||||
|                 } | ||||
|             } else if (index == R.styleable.CustomAttribute_methodName) { | ||||
|                 str = obtainStyledAttributes.getString(index); | ||||
|                 z = true; | ||||
|             } else if (index == R.styleable.CustomAttribute_customBoolean) { | ||||
|                 obj = Boolean.valueOf(obtainStyledAttributes.getBoolean(index, false)); | ||||
|                 attributeType2 = AttributeType.BOOLEAN_TYPE; | ||||
|             } else { | ||||
|                 if (index == R.styleable.CustomAttribute_customColorValue) { | ||||
|                     attributeType = AttributeType.COLOR_TYPE; | ||||
|                     valueOf = Integer.valueOf(obtainStyledAttributes.getColor(index, 0)); | ||||
|                 } else if (index == R.styleable.CustomAttribute_customColorDrawableValue) { | ||||
|                     attributeType = AttributeType.COLOR_DRAWABLE_TYPE; | ||||
|                     valueOf = Integer.valueOf(obtainStyledAttributes.getColor(index, 0)); | ||||
|                 } else if (index == R.styleable.CustomAttribute_customPixelDimension) { | ||||
|                     attributeType = AttributeType.DIMENSION_TYPE; | ||||
|                     valueOf = Float.valueOf(TypedValue.applyDimension(1, obtainStyledAttributes.getDimension(index, 0.0f), context.getResources().getDisplayMetrics())); | ||||
|                 } else if (index == R.styleable.CustomAttribute_customDimension) { | ||||
|                     attributeType = AttributeType.DIMENSION_TYPE; | ||||
|                     valueOf = Float.valueOf(obtainStyledAttributes.getDimension(index, 0.0f)); | ||||
|                 } else if (index == R.styleable.CustomAttribute_customFloatValue) { | ||||
|                     attributeType = AttributeType.FLOAT_TYPE; | ||||
|                     valueOf = Float.valueOf(obtainStyledAttributes.getFloat(index, Float.NaN)); | ||||
|                 } else if (index == R.styleable.CustomAttribute_customIntegerValue) { | ||||
|                     attributeType = AttributeType.INT_TYPE; | ||||
|                     valueOf = Integer.valueOf(obtainStyledAttributes.getInteger(index, -1)); | ||||
|                 } else if (index == R.styleable.CustomAttribute_customStringValue) { | ||||
|                     attributeType = AttributeType.STRING_TYPE; | ||||
|                     valueOf = obtainStyledAttributes.getString(index); | ||||
|                 } else if (index == R.styleable.CustomAttribute_customReference) { | ||||
|                     attributeType = AttributeType.REFERENCE_TYPE; | ||||
|                     int resourceId = obtainStyledAttributes.getResourceId(index, -1); | ||||
|                     if (resourceId == -1) { | ||||
|                         resourceId = obtainStyledAttributes.getInt(index, -1); | ||||
|                     } | ||||
|                     valueOf = Integer.valueOf(resourceId); | ||||
|                 } | ||||
|                 Object obj2 = valueOf; | ||||
|                 attributeType2 = attributeType; | ||||
|                 obj = obj2; | ||||
|             } | ||||
|         } | ||||
|         if (str != null && obj != null) { | ||||
|             custom.put(str, new ConstraintAttribute(str, attributeType2, obj, z)); | ||||
|         } | ||||
|         obtainStyledAttributes.recycle(); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user