// Path: core/src/main/java/com/kaichunlin/transition/TransitionOperation.java
// public interface TransitionOperation {
//     /**
//      * Starts the transition
//      *
//      * @return
//      */
//     @UiThread
//     boolean startTransition();
// 
//     /**
//      * Starts the transition, {@link TransitionAdapter#getAdapterState()}.isTransitioning() will always returns true after this method is executed.
//      *
//      * @param progress the starting transition progress, the valid value range depends on the specific Adapter implementation
//      * @return true if the call caused the transition to be started, false if the transition is already in the started state
//      */
//     @UiThread
//     boolean startTransition(float progress);
// 
//     /**
//      * Updates the transition progress
//      *
//      * @param progress
//      */
//     void updateProgress(float progress);
// 
//     /**
//      * Stops the transition
//      */
//     @UiThread
//     void stopTransition();
// }


import android.os.Handler;
import android.support.annotation.IntDef;
import android.support.annotation.IntRange;
import android.support.annotation.NonNull;
import android.support.annotation.UiThread;
import com.kaichunlin.transition.TransitionOperation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.HashSet;
import java.util.Set;
package com.kaichunlin.transition.animation;




/**
 */
@UiThread
public abstract class AbstractAnimation implements Animation {
    @IntDef({CONTROLLER_ANIMATION, CONTROLLER_ANIMATOR})
    @Retention(RetentionPolicy.SOURCE)
    public @interface StateControllerType {
    }

    public static final int CONTROLLER_ANIMATION = 0;
    public static final int CONTROLLER_ANIMATOR = 1;

    protected final Runnable mStartAnimation = new Runnable() {
        @Override
        public void run() {
            startAnimation();
        }
    };

    protected Handler mHandler;
    private final Set<AnimationListener> mAnimationListenerSet = new HashSet<>();
    private int mDuration = -1;
    private boolean mReverse;
    private boolean mAnimating;
// Path: core/src/main/java/com/kaichunlin/transition/TransitionOperation.java
// public interface TransitionOperation {
//     /**
//      * Starts the transition
//      *
//      * @return
//      */
//     @UiThread
//     boolean startTransition();
// 
//     /**
//      * Starts the transition, {@link TransitionAdapter#getAdapterState()}.isTransitioning() will always returns true after this method is executed.
//      *
//      * @param progress the starting transition progress, the valid value range depends on the specific Adapter implementation
//      * @return true if the call caused the transition to be started, false if the transition is already in the started state
//      */
//     @UiThread
//     boolean startTransition(float progress);
// 
//     /**
//      * Updates the transition progress
//      *
//      * @param progress
//      */
//     void updateProgress(float progress);
// 
//     /**
//      * Stops the transition
//      */
//     @UiThread
//     void stopTransition();
// }


// Path: core/src/main/java/com/kaichunlin/transition/animation/AbstractAnimation.java
import android.os.Handler;
import android.support.annotation.IntDef;
import android.support.annotation.IntRange;
import android.support.annotation.NonNull;
import android.support.annotation.UiThread;
import com.kaichunlin.transition.TransitionOperation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.HashSet;
import java.util.Set;

package com.kaichunlin.transition.animation;




/**
 */
@UiThread
public abstract class AbstractAnimation implements Animation {
    @IntDef({CONTROLLER_ANIMATION, CONTROLLER_ANIMATOR})
    @Retention(RetentionPolicy.SOURCE)
    public @interface StateControllerType {
    }

    public static final int CONTROLLER_ANIMATION = 0;
    public static final int CONTROLLER_ANIMATOR = 1;

    protected final Runnable mStartAnimation = new Runnable() {
        @Override
        public void run() {
            startAnimation();
        }
    };

    protected Handler mHandler;
    private final Set<AnimationListener> mAnimationListenerSet = new HashSet<>();
    private int mDuration = -1;
    private boolean mReverse;
    private boolean mAnimating;
    private final TransitionOperation mTransition;