Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f1a35113 authored by Noah Wang's avatar Noah Wang Committed by android-build-merger
Browse files

Merge "Postpone commit on PreviewSeekBarPreferenceFragment until the...

Merge "Postpone commit on PreviewSeekBarPreferenceFragment until the cross-fade animation has completed Bug: 27142332" into nyc-dev am: 858a1c6f
am: d9c591bd

* commit 'd9c591bd':
  Postpone commit on PreviewSeekBarPreferenceFragment until the cross-fade animation has completed Bug: 27142332

Change-Id: I33bfa8255604141f6950c38e01413fc4ba69d068
parents 918dbcb0 d9c591bd
Loading
Loading
Loading
Loading
+48 −2
Original line number Diff line number Diff line
@@ -15,6 +15,8 @@
 */
package com.android.settings;

import android.animation.Animator;
import android.animation.Animator.AnimatorListener;
import android.content.Context;
import android.content.res.Configuration;
import android.support.v4.view.PagerAdapter;
@@ -34,8 +36,6 @@ import android.widget.ScrollView;
 */
public class PreviewPagerAdapter extends PagerAdapter {

    private FrameLayout[] mPreviewFrames;

    /** Duration to use when cross-fading between previews. */
    private static final long CROSS_FADE_DURATION_MS = 400;

@@ -45,6 +45,12 @@ public class PreviewPagerAdapter extends PagerAdapter {
    /** Interpolator to use when cross-fading between previews. */
    private static final Interpolator FADE_OUT_INTERPOLATOR = new AccelerateInterpolator();

    private final FrameLayout[] mPreviewFrames;

    private Runnable mAnimationEndAction;

    private int mAnimationCounter;

    public PreviewPagerAdapter(Context context, int[] previewSampleResIds,
                               Configuration[] configurations) {
        mPreviewFrames = new FrameLayout[previewSampleResIds.length];
@@ -95,6 +101,14 @@ public class PreviewPagerAdapter extends PagerAdapter {
        return (view == object);
    }

    boolean isAnimating() {
        return mAnimationCounter > 0;
    }

    void setAnimationEndAction(Runnable action) {
        mAnimationEndAction = action;
    }

    void setPreviewLayer(int newIndex, int currentIndex, int currentItem, boolean animate) {
        for (FrameLayout previewFrame : mPreviewFrames) {
            if (currentIndex >= 0) {
@@ -104,6 +118,7 @@ public class PreviewPagerAdapter extends PagerAdapter {
                            .alpha(0)
                            .setInterpolator(FADE_OUT_INTERPOLATOR)
                            .setDuration(CROSS_FADE_DURATION_MS)
                            .setListener(new PreviewFrameAnimatorListener())
                            .withEndAction(new Runnable() {
                                @Override
                                public void run() {
@@ -122,6 +137,7 @@ public class PreviewPagerAdapter extends PagerAdapter {
                        .alpha(1)
                        .setInterpolator(FADE_IN_INTERPOLATOR)
                        .setDuration(CROSS_FADE_DURATION_MS)
                        .setListener(new PreviewFrameAnimatorListener())
                        .withStartAction(new Runnable() {
                            @Override
                            public void run() {
@@ -134,4 +150,34 @@ public class PreviewPagerAdapter extends PagerAdapter {
            }
        }
    }

    private void runAnimationEndAction() {
        if (mAnimationEndAction != null && !isAnimating()) {
            mAnimationEndAction.run();
            mAnimationEndAction = null;
        }
    }

    private class PreviewFrameAnimatorListener implements AnimatorListener {
        @Override
        public void onAnimationStart(Animator animation) {
            mAnimationCounter++;
        }

        @Override
        public void onAnimationEnd(Animator animation) {
            mAnimationCounter--;
            runAnimationEndAction();
        }

        @Override
        public void onAnimationCancel(Animator animation) {
            // Empty method.
        }

        @Override
        public void onAnimationRepeat(Animator animation) {
            // Empty method.
        }
    }
}
+10 −1
Original line number Diff line number Diff line
@@ -79,7 +79,16 @@ public abstract class PreviewSeekBarPreferenceFragment extends SettingsPreferenc

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            if (mPreviewPagerAdapter.isAnimating()) {
                mPreviewPagerAdapter.setAnimationEndAction(new Runnable() {
                    @Override
                    public void run() {
                        commit();
                    }
                });
            } else {
                commit();
            }
            mSeekByTouch = false;
        }
    }