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

Commit aaeaac17 authored by Winson Chung's avatar Winson Chung
Browse files

Refactoring to AnimatedEvent.

Change-Id: I87ce63201120dc687eccd63024801cc2c19bebd6
parent aa4f8008
Loading
Loading
Loading
Loading
+11 −23
Original line number Diff line number Diff line
@@ -246,10 +246,7 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD
    boolean dismissHistory() {
        // Try and hide the history view first
        if (mHistoryView != null && mHistoryView.isVisible()) {
            ReferenceCountedTrigger t = new ReferenceCountedTrigger(this);
            t.increment();
            EventBus.getDefault().send(new HideHistoryEvent(true /* animate */, t));
            t.decrement();
            EventBus.getDefault().send(new HideHistoryEvent(true /* animate */));
            return true;
        }
        return false;
@@ -301,8 +298,8 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD
     */
    void dismissRecentsToHome(boolean animated) {
        if (animated) {
            ReferenceCountedTrigger exitTrigger = new ReferenceCountedTrigger(this,
                    null, mFinishLaunchHomeRunnable, null);
            ReferenceCountedTrigger exitTrigger = new ReferenceCountedTrigger(null,
                    mFinishLaunchHomeRunnable, null);
            mRecentsView.startExitToHomeAnimation(
                    new ViewAnimation.TaskViewExitContext(exitTrigger));
        } else {
@@ -439,10 +436,7 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD
        // Reset some states
        mIgnoreAltTabRelease = false;
        if (mHistoryView != null) {
            ReferenceCountedTrigger t = new ReferenceCountedTrigger(this);
            t.increment();
            EventBus.getDefault().send(new HideHistoryEvent(false /* animate */, t));
            t.decrement();
            EventBus.getDefault().send(new HideHistoryEvent(false /* animate */));
        }

        // Notify that recents is now hidden
@@ -511,11 +505,7 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        if (savedInstanceState.getBoolean(KEY_SAVED_STATE_HISTORY_VISIBLE, false)) {
            ReferenceCountedTrigger postHideStackAnimationTrigger =
                    new ReferenceCountedTrigger(this);
            postHideStackAnimationTrigger.increment();
            EventBus.getDefault().send(new ShowHistoryEvent(postHideStackAnimationTrigger));
            postHideStackAnimationTrigger.decrement();
            EventBus.getDefault().send(new ShowHistoryEvent());
        }
    }

@@ -644,16 +634,14 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD
        } else if (event.triggeredFromHomeKey) {
            // Otherwise, dismiss Recents to Home
            if (mHistoryView != null && mHistoryView.isVisible()) {
                ReferenceCountedTrigger t = new ReferenceCountedTrigger(this);
                t.increment();
                t.addLastDecrementRunnable(new Runnable() {
                HideHistoryEvent hideEvent = new HideHistoryEvent(true /* animate */);
                hideEvent.addPostAnimationCallback(new Runnable() {
                    @Override
                    public void run() {
                        dismissRecentsToHome(true /* animated */);
                    }
                });
                EventBus.getDefault().send(new HideHistoryEvent(true, t));
                t.decrement();
                EventBus.getDefault().send(hideEvent);

            } else {
                dismissRecentsToHome(true /* animated */);
@@ -665,7 +653,7 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD

    public final void onBusEvent(EnterRecentsWindowAnimationCompletedEvent event) {
        // Try and start the enter animation (or restart it on configuration changed)
        ReferenceCountedTrigger t = new ReferenceCountedTrigger(this);
        ReferenceCountedTrigger t = new ReferenceCountedTrigger();
        ViewAnimation.TaskViewEnterContext ctx = new ViewAnimation.TaskViewEnterContext(t);
        ctx.postAnimationTrigger.increment();
        if (mSearchWidgetInfo != null) {
@@ -784,11 +772,11 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD
            // provided.
            mHistoryView.setSystemInsets(mRecentsView.getSystemInsets());
        }
        mHistoryView.show(mRecentsView.getTaskStack(), event.postHideStackAnimationTrigger);
        mHistoryView.show(mRecentsView.getTaskStack(), event.getAnimationTrigger());
    }

    public final void onBusEvent(HideHistoryEvent event) {
        mHistoryView.hide(event.animate, event.postHideHistoryAnimationTrigger);
        mHistoryView.hide(event.animate, event.getAnimationTrigger());
    }

    private void refreshSearchWidgetView() {
+79 −0
Original line number Diff line number Diff line
@@ -28,6 +28,8 @@ import android.os.UserHandle;
import android.util.Log;
import android.util.MutableBoolean;

import com.android.systemui.recents.misc.ReferenceCountedTrigger;

import java.lang.ref.WeakReference;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
@@ -220,6 +222,20 @@ public class EventBus extends BroadcastReceiver {
        // Only accessible from derived events
        protected Event() {}

        /**
         * Called by the EventBus prior to dispatching this event to any subscriber of this event.
         */
        void onPreDispatch() {
            // Do nothing
        }

        /**
         * Called by the EventBus after dispatching this event to every subscriber of this event.
         */
        void onPostDispatch() {
            // Do nothing
        }

        @Override
        protected Object clone() throws CloneNotSupportedException {
            Event evt = (Event) super.clone();
@@ -229,6 +245,51 @@ public class EventBus extends BroadcastReceiver {
        }
    }

    /**
     * An event that represents an animated state change, which allows subscribers to coordinate
     * callbacks which happen after the animation has taken place.
     *
     * Internally, it is guaranteed that increment() and decrement() will be called before and the
     * after the event is dispatched.
     */
    public static class AnimatedEvent extends Event {

        private final ReferenceCountedTrigger mTrigger = new ReferenceCountedTrigger();

        // Only accessible from derived events
        protected AnimatedEvent() {}

        /**
         * Returns the reference counted trigger that coordinates the animations for this event.
         */
        public ReferenceCountedTrigger getAnimationTrigger() {
            return mTrigger;
        }

        /**
         * Adds a callback that is guaranteed to be called after the state has changed regardless of
         * whether an actual animation took place.
         */
        public void addPostAnimationCallback(Runnable r) {
            mTrigger.addLastDecrementRunnable(r);
        }

        @Override
        void onPreDispatch() {
            mTrigger.increment();
        }

        @Override
        void onPostDispatch() {
            mTrigger.decrement();
        }

        @Override
        protected Object clone() throws CloneNotSupportedException {
            throw new CloneNotSupportedException();
        }
    }

    /**
     * An inter-process event super class that allows us to track user state across subscriber
     * invocations.
@@ -706,6 +767,11 @@ public class EventBus extends BroadcastReceiver {
        if (eventHandlers == null) {
            return;
        }

        // Prepare this event
        boolean hasPostedEvent = false;
        event.onPreDispatch();

        // We need to clone the list in case a subscriber unregisters itself during traversal
        eventHandlers = (ArrayList<EventHandler>) eventHandlers.clone();
        for (final EventHandler eventHandler : eventHandlers) {
@@ -717,11 +783,24 @@ public class EventBus extends BroadcastReceiver {
                            processEvent(eventHandler, event);
                        }
                    });
                    hasPostedEvent = true;
                } else {
                    processEvent(eventHandler, event);
                }
            }
        }

        // Clean up after this event, deferring until all subscribers have been called
        if (hasPostedEvent) {
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    event.onPostDispatch();
                }
            });
        } else {
            event.onPostDispatch();
        }
    }

    /**
+2 −8
Original line number Diff line number Diff line
@@ -22,17 +22,11 @@ import com.android.systemui.recents.misc.ReferenceCountedTrigger;
/**
 * This is sent when the history view will be closed.
 */
public class HideHistoryEvent extends EventBus.Event {
public class HideHistoryEvent extends EventBus.AnimatedEvent {

    public final boolean animate;
    public final ReferenceCountedTrigger postHideHistoryAnimationTrigger;

    /**
     * @param postHideHistoryAnimationTrigger the trigger that gets called when all the history animations are finished
     *                                        when transitioning from the history view
     */
    public HideHistoryEvent(boolean animate, ReferenceCountedTrigger postHideHistoryAnimationTrigger) {
    public HideHistoryEvent(boolean animate) {
        this.animate = animate;
        this.postHideHistoryAnimationTrigger = postHideHistoryAnimationTrigger;
    }
}
+2 −9
Original line number Diff line number Diff line
@@ -22,15 +22,8 @@ import com.android.systemui.recents.misc.ReferenceCountedTrigger;
/**
 * This is sent when the history view button is clicked.
 */
public class ShowHistoryEvent extends EventBus.Event {
public class ShowHistoryEvent extends EventBus.AnimatedEvent {

    public final ReferenceCountedTrigger postHideStackAnimationTrigger;
    // Simple event

    /**
     * @param postHideStackAnimationTrigger the trigger that gets called when all the task animations are finished when
     *                                      transitioning to the history view
     */
    public ShowHistoryEvent(ReferenceCountedTrigger postHideStackAnimationTrigger) {
        this.postHideStackAnimationTrigger = postHideStackAnimationTrigger;
    }
}
+2 −5
Original line number Diff line number Diff line
@@ -25,18 +25,15 @@ import com.android.systemui.recents.views.TaskView;
/**
 * This event is sent whenever a drag ends.
 */
public class DragEndEvent extends EventBus.Event {
public class DragEndEvent extends EventBus.AnimatedEvent {

    public final Task task;
    public final TaskView taskView;
    public final DropTarget dropTarget;
    public final ReferenceCountedTrigger postAnimationTrigger;

    public DragEndEvent(Task task, TaskView taskView, DropTarget dropTarget,
            ReferenceCountedTrigger postAnimationTrigger) {
    public DragEndEvent(Task task, TaskView taskView, DropTarget dropTarget) {
        this.task = task;
        this.taskView = taskView;
        this.dropTarget = dropTarget;
        this.postAnimationTrigger = postAnimationTrigger;
    }
}
Loading