140 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package com.google.android.material.animation;
 | |
| 
 | |
| import android.animation.Animator;
 | |
| import android.animation.AnimatorInflater;
 | |
| import android.animation.AnimatorSet;
 | |
| import android.animation.ObjectAnimator;
 | |
| import android.animation.PropertyValuesHolder;
 | |
| import android.content.Context;
 | |
| import android.content.res.TypedArray;
 | |
| import android.util.Log;
 | |
| import android.util.Property;
 | |
| import androidx.collection.SimpleArrayMap;
 | |
| import java.util.ArrayList;
 | |
| import java.util.List;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| public class MotionSpec {
 | |
|     private static final String TAG = "MotionSpec";
 | |
|     private final SimpleArrayMap<String, MotionTiming> timings = new SimpleArrayMap<>();
 | |
|     private final SimpleArrayMap<String, PropertyValuesHolder[]> propertyValues = new SimpleArrayMap<>();
 | |
| 
 | |
|     public boolean hasTiming(String str) {
 | |
|         return this.timings.get(str) != null;
 | |
|     }
 | |
| 
 | |
|     public MotionTiming getTiming(String str) {
 | |
|         if (!hasTiming(str)) {
 | |
|             throw new IllegalArgumentException();
 | |
|         }
 | |
|         return this.timings.get(str);
 | |
|     }
 | |
| 
 | |
|     public void setTiming(String str, MotionTiming motionTiming) {
 | |
|         this.timings.put(str, motionTiming);
 | |
|     }
 | |
| 
 | |
|     public boolean hasPropertyValues(String str) {
 | |
|         return this.propertyValues.get(str) != null;
 | |
|     }
 | |
| 
 | |
|     public PropertyValuesHolder[] getPropertyValues(String str) {
 | |
|         if (!hasPropertyValues(str)) {
 | |
|             throw new IllegalArgumentException();
 | |
|         }
 | |
|         return clonePropertyValuesHolder(this.propertyValues.get(str));
 | |
|     }
 | |
| 
 | |
|     public void setPropertyValues(String str, PropertyValuesHolder[] propertyValuesHolderArr) {
 | |
|         this.propertyValues.put(str, propertyValuesHolderArr);
 | |
|     }
 | |
| 
 | |
|     private PropertyValuesHolder[] clonePropertyValuesHolder(PropertyValuesHolder[] propertyValuesHolderArr) {
 | |
|         PropertyValuesHolder[] propertyValuesHolderArr2 = new PropertyValuesHolder[propertyValuesHolderArr.length];
 | |
|         for (int i = 0; i < propertyValuesHolderArr.length; i++) {
 | |
|             propertyValuesHolderArr2[i] = propertyValuesHolderArr[i].clone();
 | |
|         }
 | |
|         return propertyValuesHolderArr2;
 | |
|     }
 | |
| 
 | |
|     public <T> ObjectAnimator getAnimator(String str, T t, Property<T, ?> property) {
 | |
|         ObjectAnimator ofPropertyValuesHolder = ObjectAnimator.ofPropertyValuesHolder(t, getPropertyValues(str));
 | |
|         ofPropertyValuesHolder.setProperty(property);
 | |
|         getTiming(str).apply(ofPropertyValuesHolder);
 | |
|         return ofPropertyValuesHolder;
 | |
|     }
 | |
| 
 | |
|     public long getTotalDuration() {
 | |
|         int size = this.timings.size();
 | |
|         long j = 0;
 | |
|         for (int i = 0; i < size; i++) {
 | |
|             MotionTiming valueAt = this.timings.valueAt(i);
 | |
|             j = Math.max(j, valueAt.getDelay() + valueAt.getDuration());
 | |
|         }
 | |
|         return j;
 | |
|     }
 | |
| 
 | |
|     public static MotionSpec createFromAttribute(Context context, TypedArray typedArray, int i) {
 | |
|         int resourceId;
 | |
|         if (!typedArray.hasValue(i) || (resourceId = typedArray.getResourceId(i, 0)) == 0) {
 | |
|             return null;
 | |
|         }
 | |
|         return createFromResource(context, resourceId);
 | |
|     }
 | |
| 
 | |
|     public static MotionSpec createFromResource(Context context, int i) {
 | |
|         try {
 | |
|             Animator loadAnimator = AnimatorInflater.loadAnimator(context, i);
 | |
|             if (loadAnimator instanceof AnimatorSet) {
 | |
|                 return createSpecFromAnimators(((AnimatorSet) loadAnimator).getChildAnimations());
 | |
|             }
 | |
|             if (loadAnimator == null) {
 | |
|                 return null;
 | |
|             }
 | |
|             ArrayList arrayList = new ArrayList();
 | |
|             arrayList.add(loadAnimator);
 | |
|             return createSpecFromAnimators(arrayList);
 | |
|         } catch (Exception e) {
 | |
|             Log.w(TAG, "Can't load animation resource ID #0x" + Integer.toHexString(i), e);
 | |
|             return null;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private static MotionSpec createSpecFromAnimators(List<Animator> list) {
 | |
|         MotionSpec motionSpec = new MotionSpec();
 | |
|         int size = list.size();
 | |
|         for (int i = 0; i < size; i++) {
 | |
|             addInfoFromAnimator(motionSpec, list.get(i));
 | |
|         }
 | |
|         return motionSpec;
 | |
|     }
 | |
| 
 | |
|     private static void addInfoFromAnimator(MotionSpec motionSpec, Animator animator) {
 | |
|         if (animator instanceof ObjectAnimator) {
 | |
|             ObjectAnimator objectAnimator = (ObjectAnimator) animator;
 | |
|             motionSpec.setPropertyValues(objectAnimator.getPropertyName(), objectAnimator.getValues());
 | |
|             motionSpec.setTiming(objectAnimator.getPropertyName(), MotionTiming.createFromAnimator(objectAnimator));
 | |
|         } else {
 | |
|             throw new IllegalArgumentException("Animator must be an ObjectAnimator: " + animator);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public boolean equals(Object obj) {
 | |
|         if (this == obj) {
 | |
|             return true;
 | |
|         }
 | |
|         if (obj instanceof MotionSpec) {
 | |
|             return this.timings.equals(((MotionSpec) obj).timings);
 | |
|         }
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     public int hashCode() {
 | |
|         return this.timings.hashCode();
 | |
|     }
 | |
| 
 | |
|     public String toString() {
 | |
|         return "\n" + getClass().getName() + '{' + Integer.toHexString(System.identityHashCode(this)) + " timings: " + this.timings + "}\n";
 | |
|     }
 | |
| }
 |