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

Commit 5ce0ec0e authored by Alan Viverette's avatar Alan Viverette
Browse files

Revert "Animates AbsSeekBar progress movement from key presses."

Incorrect implementation that broke the Brightness dialog slider. Reverting
to the previous behavior.

This reverts commit c5c9d0af764f590ae0031b5470192a0a08ca42d1.

BUG: 18510040
Change-Id: I201b1da46be964fcf6f041bb92ef79c335c2d23d
parent 59093d92
Loading
Loading
Loading
Loading
+10 −57
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package android.widget;

import android.animation.ObjectAnimator;
import android.annotation.Nullable;
import android.content.Context;
import android.content.res.ColorStateList;
@@ -65,9 +64,6 @@ public abstract class AbsSeekBar extends ProgressBar {
     * progress.
     */
    private int mKeyProgressIncrement = 1;
    private ObjectAnimator mPositionAnimator;
    private static final int PROGRESS_ANIMATION_DURATION = 250;


    private static final int NO_ALPHA = 0xFF;
    private float mDisabledAlpha;
@@ -388,14 +384,15 @@ public abstract class AbsSeekBar extends ProgressBar {
    void onProgressRefresh(float scale, boolean fromUser) {
        super.onProgressRefresh(scale, fromUser);

        if (!isAnimationRunning()) {
            setThumbPos(scale);
        }
    }
        final Drawable thumb = mThumb;
        if (thumb != null) {
            setThumbPos(getWidth(), thumb, scale, Integer.MIN_VALUE);

    @Override
    void onAnimatePosition(float scale, boolean fromUser) {
        setThumbPos(scale);
            // Since we draw translated, the drawable's bounds that it signals
            // for invalidation won't be the actual bounds we want invalidated,
            // so just invalidate this whole view.
            invalidate();
        }
    }

    @Override
@@ -440,18 +437,6 @@ public abstract class AbsSeekBar extends ProgressBar {
        return max > 0 ? getProgress() / (float) max : 0;
    }

    private void setThumbPos(float scale) {
        final Drawable thumb = mThumb;
        if (thumb != null) {
            setThumbPos(getWidth(), thumb, scale, Integer.MIN_VALUE);
            // Since we draw translated, the drawable's bounds that it signals
            // for invalidation won't be the actual bounds we want invalidated,
            // so just invalidate this whole view.
            invalidate();

        }
    }

    /**
     * Updates the thumb drawable bounds.
     *
@@ -714,13 +699,13 @@ public abstract class AbsSeekBar extends ProgressBar {
            switch (keyCode) {
                case KeyEvent.KEYCODE_DPAD_LEFT:
                    if (progress <= 0) break;
                    animateSetProgress(progress - mKeyProgressIncrement);
                    setProgress(progress - mKeyProgressIncrement, true);
                    onKeyChange();
                    return true;

                case KeyEvent.KEYCODE_DPAD_RIGHT:
                    if (progress >= getMax()) break;
                    animateSetProgress(progress + mKeyProgressIncrement);
                    setProgress(progress + mKeyProgressIncrement, true);
                    onKeyChange();
                    return true;
            }
@@ -729,38 +714,6 @@ public abstract class AbsSeekBar extends ProgressBar {
        return super.onKeyDown(keyCode, event);
    }

    boolean isAnimationRunning() {
        return mPositionAnimator != null && mPositionAnimator.isRunning();
    }

    /**
     * @hide
     */
    @Override
    public void setProgress(int progress, boolean fromUser) {
        if (isAnimationRunning()) {
            mPositionAnimator.cancel();
        }
        super.setProgress(progress, fromUser);
    }

    void animateSetProgress(int progress) {
        float curProgress = isAnimationRunning() ? getAnimationPosition() : getProgress();

        if (progress < 0) {
            progress = 0;
        } else if (progress > getMax()) {
            progress = getMax();
        }
        setProgressValueOnly(progress);

        mPositionAnimator = ObjectAnimator.ofFloat(this, "animationPosition", curProgress,
                progress);
        mPositionAnimator.setDuration(PROGRESS_ANIMATION_DURATION);
        mPositionAnimator.setAutoCancel(true);
        mPositionAnimator.start();
    }

    @Override
    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
        super.onInitializeAccessibilityEvent(event);
+52 −105
Original line number Diff line number Diff line
@@ -227,8 +227,6 @@ public class ProgressBar extends View {
    private long mUiThreadId;
    private boolean mShouldStartAnimationDrawable;

    private float mAnimationPosition;

    private boolean mInDrawing;
    private boolean mAttached;
    private boolean mRefreshIsPosted;
@@ -1188,7 +1186,7 @@ public class ProgressBar extends View {
                final int count = mRefreshData.size();
                for (int i = 0; i < count; i++) {
                    final RefreshData rd = mRefreshData.get(i);
                    doRefreshProgress(rd.id, rd.progress, rd.fromUser, true, rd.animate);
                    doRefreshProgress(rd.id, rd.progress, rd.fromUser, true);
                    rd.recycle();
                }
                mRefreshData.clear();
@@ -1203,12 +1201,10 @@ public class ProgressBar extends View {
                new SynchronizedPool<RefreshData>(POOL_MAX);

        public int id;
        public float progress;
        public int progress;
        public boolean fromUser;
        public boolean animate;

        public static RefreshData obtain(int id, float progress, boolean fromUser,
                boolean animate) {
        public static RefreshData obtain(int id, int progress, boolean fromUser) {
            RefreshData rd = sPool.acquire();
            if (rd == null) {
                rd = new RefreshData();
@@ -1216,7 +1212,6 @@ public class ProgressBar extends View {
            rd.id = id;
            rd.progress = progress;
            rd.fromUser = fromUser;
            rd.animate = animate;
            return rd;
        }
        
@@ -1243,19 +1238,9 @@ public class ProgressBar extends View {
        layer.setTintMode(tintMode);
    }

    private float getScale(float progress) {
        return mMax > 0 ? progress / (float) mMax : 0;
    }

    private synchronized void doRefreshProgress(int id, float progress, boolean fromUser,
    private synchronized void doRefreshProgress(int id, int progress, boolean fromUser,
            boolean callBackToApp) {
        doRefreshProgress(id, progress, fromUser, callBackToApp, false);
    }

    private synchronized void doRefreshProgress(int id, float progress, boolean fromUser,
            boolean callBackToApp, boolean animate) {
        float scale = getScale(progress);

        float scale = mMax > 0 ? (float) progress / (float) mMax : 0;
        final Drawable d = mCurrentDrawable;
        if (d != null) {
            Drawable progressDrawable = null;
@@ -1273,43 +1258,10 @@ public class ProgressBar extends View {
            invalidate();
        }
        
        if (id == R.id.progress) {
            if (animate) {
                onAnimatePosition(scale, fromUser);
            } else if (callBackToApp) {
        if (callBackToApp && id == R.id.progress) {
            onProgressRefresh(scale, fromUser);
        }
    }
    }

    /**
     * Called when a ProgressBar is animating its position.
     *
     * @param scale Current position/progress between 0 and 1.
     * @param fromUser True if the progress change was initiated by the user.
     */
    void onAnimatePosition(float scale, boolean fromUser) {
    }

    /**
     * Sets the progress value without going through the entire refresh process.
     *
     * @see #setProgress(int, boolean)
     * @param progress The new progress, between 0 and {@link #getMax()}
     */
    void setProgressValueOnly(int progress) {
        mProgress = progress;
        onProgressRefresh(getScale(progress), true);
    }

    void setAnimationPosition(float position) {
        mAnimationPosition = position;
        refreshProgress(R.id.progress, position, true, true);
    }

    float getAnimationPosition() {
        return mAnimationPosition;
    }

    void onProgressRefresh(float scale, boolean fromUser) {
        if (AccessibilityManager.getInstance(mContext).isEnabled()) {
@@ -1317,20 +1269,15 @@ public class ProgressBar extends View {
        }
    }

    private synchronized void refreshProgress(int id, float progress, boolean fromUser) {
        refreshProgress(id, progress, fromUser, false);
    }

    private synchronized void refreshProgress(int id, float progress, boolean fromUser,
            boolean animate) {
    private synchronized void refreshProgress(int id, int progress, boolean fromUser) {
        if (mUiThreadId == Thread.currentThread().getId()) {
            doRefreshProgress(id, progress, fromUser, true, animate);
            doRefreshProgress(id, progress, fromUser, true);
        } else {
            if (mRefreshProgressRunnable == null) {
                mRefreshProgressRunnable = new RefreshProgressRunnable();
            }

            final RefreshData rd = RefreshData.obtain(id, progress, fromUser, animate);
            final RefreshData rd = RefreshData.obtain(id, progress, fromUser);
            mRefreshData.add(rd);
            if (mAttached && !mRefreshIsPosted) {
                post(mRefreshProgressRunnable);
@@ -1849,7 +1796,7 @@ public class ProgressBar extends View {
                final int count = mRefreshData.size();
                for (int i = 0; i < count; i++) {
                    final RefreshData rd = mRefreshData.get(i);
                    doRefreshProgress(rd.id, rd.progress, rd.fromUser, rd.animate);
                    doRefreshProgress(rd.id, rd.progress, rd.fromUser, true);
                    rd.recycle();
                }
                mRefreshData.clear();
+0 −4
Original line number Diff line number Diff line
@@ -314,10 +314,6 @@ public class RatingBar extends AbsSeekBar {
        dispatchRatingChange(true);
    }

    @Override
    void animateSetProgress(int progress) {
    }

    void dispatchRatingChange(boolean fromUser) {
        if (mOnRatingBarChangeListener != null) {
            mOnRatingBarChangeListener.onRatingChanged(this, getRating(),