Loading packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java +11 −23 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 { Loading Loading @@ -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 Loading Loading @@ -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()); } } Loading Loading @@ -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 */); Loading @@ -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) { Loading Loading @@ -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() { Loading packages/SystemUI/src/com/android/systemui/recents/events/EventBus.java +79 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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. Loading Loading @@ -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) { Loading @@ -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(); } } /** Loading packages/SystemUI/src/com/android/systemui/recents/events/activity/HideHistoryEvent.java +2 −8 Original line number Diff line number Diff line Loading @@ -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; } } packages/SystemUI/src/com/android/systemui/recents/events/activity/ShowHistoryEvent.java +2 −9 Original line number Diff line number Diff line Loading @@ -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; } } packages/SystemUI/src/com/android/systemui/recents/events/ui/dragndrop/DragEndEvent.java +2 −5 Original line number Diff line number Diff line Loading @@ -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
packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java +11 −23 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 { Loading Loading @@ -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 Loading Loading @@ -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()); } } Loading Loading @@ -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 */); Loading @@ -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) { Loading Loading @@ -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() { Loading
packages/SystemUI/src/com/android/systemui/recents/events/EventBus.java +79 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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. Loading Loading @@ -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) { Loading @@ -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(); } } /** Loading
packages/SystemUI/src/com/android/systemui/recents/events/activity/HideHistoryEvent.java +2 −8 Original line number Diff line number Diff line Loading @@ -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; } }
packages/SystemUI/src/com/android/systemui/recents/events/activity/ShowHistoryEvent.java +2 −9 Original line number Diff line number Diff line Loading @@ -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; } }
packages/SystemUI/src/com/android/systemui/recents/events/ui/dragndrop/DragEndEvent.java +2 −5 Original line number Diff line number Diff line Loading @@ -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; } }