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

Commit 673e42fa authored by Chet Haase's avatar Chet Haase
Browse files

Fix for end events from Sequencer objects

Change-Id: I8947d8b016b880f9f54f2bf6ab22b4e188cdb29a
parent dc059804
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -19870,6 +19870,17 @@
 visibility="public"
>
</method>
<method name="isRunning"
 return="boolean"
 abstract="true"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="removeAllListeners"
 return="void"
 abstract="false"
@@ -20968,6 +20979,17 @@
 visibility="public"
>
</method>
<method name="isRunning"
 return="boolean"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="play"
 return="android.animation.Sequencer.Builder"
 abstract="false"
+7 −0
Original line number Diff line number Diff line
@@ -56,6 +56,13 @@ public abstract class Animatable implements Cloneable {
    public void end() {
    }


    /**
     * Returns whether this Animatable is currently running (having been started and not yet ended).
     * @return Whether the Animatable is running.
     */
    public abstract boolean isRunning();

    /**
     * Adds a listener to the set of listeners that are sent events through the life of an
     * animation, such as start, repeat, and end.
+11 −5
Original line number Diff line number Diff line
@@ -699,15 +699,21 @@ public class Animator<T> extends Animatable {

    @Override
    public void end() {
        if (!sAnimations.contains(this) &&
                (Thread.currentThread() == Looper.getMainLooper().getThread())) {
            // Special case if the animation has not yet started. Set the end value.
            long endTime = mDuration;
            if (mRepeatCount > 0) {
                endTime += mRepeatCount * mDuration;
            }
            setCurrentPlayTime(endTime);
        }
        // Just set the ENDED flag - this causes the animation to end the next time a frame
        // is processed.
        mPlayingState = ENDED;
    }

    /**
     * Returns whether this Animator is currently running (having been started and not yet ended).
     * @return Wehther the Animator is running.
     */
    @Override
    public boolean isRunning() {
        return mPlayingState == RUNNING;
    }
@@ -737,6 +743,7 @@ public class Animator<T> extends Animatable {
     */
    private void endAnimation() {
        sAnimations.remove(this);
        mPlayingState = STOPPED;
        if (mListeners != null) {
            ArrayList<AnimatableListener> tmpListeners =
                    (ArrayList<AnimatableListener>) mListeners.clone();
@@ -744,7 +751,6 @@ public class Animator<T> extends Animatable {
                listener.onAnimationEnd(this);
            }
        }
        mPlayingState = STOPPED;
    }

    /**
+17 −14
Original line number Diff line number Diff line
@@ -240,6 +240,21 @@ public final class Sequencer extends Animatable {
        }
    }

    /**
     * Returns true if any of the child animations of this Sequencer have been started and have not
     * yet ended.
     * @return Whether this Sequencer has been started and has not yet ended.
     */
    @Override
    public boolean isRunning() {
        for (Node node : mNodes) {
            if (node.animation.isRunning()) {
                return true;
            }
        }
        return false;
    }

    /**
     * {@inheritDoc}
     *
@@ -467,14 +482,10 @@ public final class Sequencer extends Animatable {
        public void onAnimationEnd(Animatable animation) {
            animation.removeListener(this);
            mPlayingSet.remove(animation);
            Node animNode = mSequencer.mNodeMap.get(animation);
            animNode.done = true;
            ArrayList<Node> sortedNodes = mSequencer.mSortedNodes;
            int numNodes = sortedNodes.size();
            int nodeIndex = sortedNodes.indexOf(animNode);
            boolean allDone = true;
            for (int i = nodeIndex + 1; i < numNodes; ++i) {
                if (!sortedNodes.get(i).done) {
            for (Node node : sortedNodes) {
                if (node.animation.isRunning()) {
                    allDone = false;
                    break;
                }
@@ -558,7 +569,6 @@ public final class Sequencer extends Animatable {
                        }
                    }
                }
                node.done = false; // also reset done flag
            }
        }
    }
@@ -625,13 +635,6 @@ public final class Sequencer extends Animatable {
         */
        public ArrayList<Node> nodeDependents = null;

        /**
         * Flag indicating whether the animation in this node is finished. This flag
         * is used by Sequencer to check, as each animation ends, whether all child animations
         * are done and it's time to send out an end event for the entire Sequencer.
         */
        public boolean done = false;

        /**
         * Constructs the Node with the animation that it encapsulates. A Node has no
         * dependencies by default; dependencies are added via the addDependency()
+1 −1
Original line number Diff line number Diff line
@@ -75,7 +75,7 @@ class TextLine {
            }
        }
        tl = new TextLine();
        Log.e("TLINE", "new: " + tl);
        Log.v("TLINE", "new: " + tl);
        return tl;
    }