// Path: AndroidClient/app/src/main/java/com/hufeiya/SignIn/helper/ViewUtils.java
// public class ViewUtils {
// 
//     /**
//      * Allows changes to the text size in transitions and animations.
//      * Using this with something else than {@link ChangeBounds}
//      * can result in a severe performance penalty due to layout passes.
//      */
//     public static final Property<TextView, Float> PROPERTY_TEXT_SIZE =
//             new FloatProperty<TextView>("textSize") {
//                 @Override
//                 public Float get(TextView view) {
//                     return view.getTextSize();
//                 }
// 
//                 @Override
//                 public void setValue(TextView view, float textSize) {
//                     view.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
//                 }
//             };
//     /**
//      * Allows making changes to the start padding of a view.
//      * Using this with something else than {@link ChangeBounds}
//      * can result in a severe performance penalty due to layout passes.
//      */
//     public static final Property<TextView, Integer> PROPERTY_TEXT_PADDING_START =
//             new IntProperty<TextView>("paddingStart") {
//                 @Override
//                 public Integer get(TextView view) {
//                     return ViewCompat.getPaddingStart(view);
//                 }
// 
//                 @Override
//                 public void setValue(TextView view, int paddingStart) {
//                     ViewCompat.setPaddingRelative(view, paddingStart, view.getPaddingTop(),
//                             ViewCompat.getPaddingEnd(view), view.getPaddingBottom());
//                 }
//             };
// 
//     private ViewUtils() {
//         //no instance
//     }
// 
//     public static void setPaddingStart(TextView target, int paddingStart) {
//         ViewCompat.setPaddingRelative(target, paddingStart, target.getPaddingTop(),
//                 ViewCompat.getPaddingEnd(target), target.getPaddingBottom());
//     }
// 
//     public static abstract class IntProperty<T> extends Property<T, Integer> {
// 
//         public IntProperty(String name) {
//             super(Integer.class, name);
//         }
// 
//         /**
//          * A type-specific override of the {@link #set(Object, Integer)} that is faster when
//          * dealing
//          * with fields of type <code>int</code>.
//          */
//         public abstract void setValue(T object, int value);
// 
//         @Override
//         final public void set(T object, Integer value) {
//             //noinspection UnnecessaryUnboxing
//             setValue(object, value.intValue());
//         }
//     }
// 
//     public static abstract class FloatProperty<T> extends Property<T, Float> {
// 
//         public FloatProperty(String name) {
//             super(Float.class, name);
//         }
// 
//         /**
//          * A type-specific override of the {@link #set(Object, Float)} that is faster when dealing
//          * with fields of type <code>int</code>.
//          */
//         public abstract void setValue(T object, float value);
// 
//         @Override
//         final public void set(T object, Float value) {
//             //noinspection UnnecessaryUnboxing
//             setValue(object, value.floatValue());
//         }
//     }
// 
// }


import com.hufeiya.SignIn.helper.ViewUtils;
import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.support.v4.view.ViewCompat;
import android.transition.Transition;
import android.transition.TransitionValues;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.ViewGroup;
import android.widget.TextView;
        }
        TextView view = (TextView) transitionValues.view;
        transitionValues.values.put(PROPERTY_NAME_TEXT_RESIZE, view.getTextSize());
        transitionValues.values.put(PROPERTY_NAME_PADDING_RESIZE,
                ViewCompat.getPaddingStart(view));
    }

    @Override
    public String[] getTransitionProperties() {
        return TRANSITION_PROPERTIES;
    }

    @Override
    public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues,
                                   TransitionValues endValues) {
        if (startValues == null || endValues == null) {
            return null;
        }

        float initialTextSize = (float) startValues.values.get(PROPERTY_NAME_TEXT_RESIZE);
        float targetTextSize = (float) endValues.values.get(PROPERTY_NAME_TEXT_RESIZE);
        TextView targetView = (TextView) endValues.view;
        targetView.setTextSize(TypedValue.COMPLEX_UNIT_PX, initialTextSize);

        int initialPaddingStart = (int) startValues.values.get(PROPERTY_NAME_PADDING_RESIZE);
        int targetPaddingStart = (int) endValues.values.get(PROPERTY_NAME_PADDING_RESIZE);

        AnimatorSet animatorSet = new AnimatorSet();
        animatorSet.playTogether(
                ObjectAnimator.ofFloat(targetView,
// Path: AndroidClient/app/src/main/java/com/hufeiya/SignIn/helper/ViewUtils.java
// public class ViewUtils {
// 
//     /**
//      * Allows changes to the text size in transitions and animations.
//      * Using this with something else than {@link ChangeBounds}
//      * can result in a severe performance penalty due to layout passes.
//      */
//     public static final Property<TextView, Float> PROPERTY_TEXT_SIZE =
//             new FloatProperty<TextView>("textSize") {
//                 @Override
//                 public Float get(TextView view) {
//                     return view.getTextSize();
//                 }
// 
//                 @Override
//                 public void setValue(TextView view, float textSize) {
//                     view.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
//                 }
//             };
//     /**
//      * Allows making changes to the start padding of a view.
//      * Using this with something else than {@link ChangeBounds}
//      * can result in a severe performance penalty due to layout passes.
//      */
//     public static final Property<TextView, Integer> PROPERTY_TEXT_PADDING_START =
//             new IntProperty<TextView>("paddingStart") {
//                 @Override
//                 public Integer get(TextView view) {
//                     return ViewCompat.getPaddingStart(view);
//                 }
// 
//                 @Override
//                 public void setValue(TextView view, int paddingStart) {
//                     ViewCompat.setPaddingRelative(view, paddingStart, view.getPaddingTop(),
//                             ViewCompat.getPaddingEnd(view), view.getPaddingBottom());
//                 }
//             };
// 
//     private ViewUtils() {
//         //no instance
//     }
// 
//     public static void setPaddingStart(TextView target, int paddingStart) {
//         ViewCompat.setPaddingRelative(target, paddingStart, target.getPaddingTop(),
//                 ViewCompat.getPaddingEnd(target), target.getPaddingBottom());
//     }
// 
//     public static abstract class IntProperty<T> extends Property<T, Integer> {
// 
//         public IntProperty(String name) {
//             super(Integer.class, name);
//         }
// 
//         /**
//          * A type-specific override of the {@link #set(Object, Integer)} that is faster when
//          * dealing
//          * with fields of type <code>int</code>.
//          */
//         public abstract void setValue(T object, int value);
// 
//         @Override
//         final public void set(T object, Integer value) {
//             //noinspection UnnecessaryUnboxing
//             setValue(object, value.intValue());
//         }
//     }
// 
//     public static abstract class FloatProperty<T> extends Property<T, Float> {
// 
//         public FloatProperty(String name) {
//             super(Float.class, name);
//         }
// 
//         /**
//          * A type-specific override of the {@link #set(Object, Float)} that is faster when dealing
//          * with fields of type <code>int</code>.
//          */
//         public abstract void setValue(T object, float value);
// 
//         @Override
//         final public void set(T object, Float value) {
//             //noinspection UnnecessaryUnboxing
//             setValue(object, value.floatValue());
//         }
//     }
// 
// }


// Path: AndroidClient/app/src/main/java/com/hufeiya/SignIn/widget/TextResizeTransition.java
import com.hufeiya.SignIn.helper.ViewUtils;
import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.support.v4.view.ViewCompat;
import android.transition.Transition;
import android.transition.TransitionValues;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.ViewGroup;
import android.widget.TextView;

        }
        TextView view = (TextView) transitionValues.view;
        transitionValues.values.put(PROPERTY_NAME_TEXT_RESIZE, view.getTextSize());
        transitionValues.values.put(PROPERTY_NAME_PADDING_RESIZE,
                ViewCompat.getPaddingStart(view));
    }

    @Override
    public String[] getTransitionProperties() {
        return TRANSITION_PROPERTIES;
    }

    @Override
    public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues,
                                   TransitionValues endValues) {
        if (startValues == null || endValues == null) {
            return null;
        }

        float initialTextSize = (float) startValues.values.get(PROPERTY_NAME_TEXT_RESIZE);
        float targetTextSize = (float) endValues.values.get(PROPERTY_NAME_TEXT_RESIZE);
        TextView targetView = (TextView) endValues.view;
        targetView.setTextSize(TypedValue.COMPLEX_UNIT_PX, initialTextSize);

        int initialPaddingStart = (int) startValues.values.get(PROPERTY_NAME_PADDING_RESIZE);
        int targetPaddingStart = (int) endValues.values.get(PROPERTY_NAME_PADDING_RESIZE);

        AnimatorSet animatorSet = new AnimatorSet();
        animatorSet.playTogether(
                ObjectAnimator.ofFloat(targetView,
                        ViewUtils.PROPERTY_TEXT_SIZE,