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

Commit f81c6af1 authored by Alan Viverette's avatar Alan Viverette
Browse files

Propagate state changes even when we don't change drawable index

Previously we could miss the state change if we were simply reversing the
current transition.

BUG: 17967405
Change-Id: I2cb396dedbff61b980741ef8c0d931be6abe129c
parent d00e68c3
Loading
Loading
Loading
Loading
+9 −21
Original line number Diff line number Diff line
@@ -139,27 +139,15 @@ public class AnimatedStateListDrawable extends StateListDrawable {

    @Override
    protected boolean onStateChange(int[] stateSet) {
        final int keyframeIndex = mState.indexOfKeyframe(stateSet);
        if (keyframeIndex == getCurrentIndex()) {
            // Propagate state change to current keyframe.
            final Drawable current = getCurrent();
            if (current != null) {
                return current.setState(stateSet);
            }
            return false;
        }

        // Attempt to find a valid transition to the keyframe.
        if (selectTransition(keyframeIndex)) {
            return true;
        }

        // No valid transition, attempt to jump directly to the keyframe.
        if (selectDrawable(keyframeIndex)) {
            return true;
        }

        return super.onStateChange(stateSet);
        // If we're not already at the target index, either attempt to find a
        // valid transition to it or jump directly there.
        final int targetIndex = mState.indexOfKeyframe(stateSet);
        final boolean changedIndex = targetIndex != getCurrentIndex()
                && (selectTransition(targetIndex) || selectDrawable(targetIndex));

        // Always call super.onStateChanged() to propagate the state change to
        // the current drawable.
        return super.onStateChange(stateSet) || changedIndex;
    }

    private boolean selectTransition(int toIndex) {