From b44c6552b3f3d02a1dd5e92fce798b12b0d0d945 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 21 Jun 2018 12:17:09 -0700 Subject: Fetching assist data only if required by overlay > Preloading assist data after the touch interaction is complete > Fixing swipe-up callbacks called in case of quickscrub Bug: 110532258 Change-Id: I472884ec96be877db5f38098fd0165d464e836ed --- .../launcher3/uioverrides/OverviewState.java | 2 + .../quickstep/OtherActivityTouchConsumer.java | 20 +++++-- .../src/com/android/quickstep/RecentsModel.java | 4 ++ .../com/android/quickstep/TaskOverlayFactory.java | 6 ++ .../android/quickstep/TouchInteractionService.java | 4 +- .../quickstep/WindowTransformSwipeHandler.java | 65 ++++++++++++++++------ 6 files changed, 78 insertions(+), 23 deletions(-) (limited to 'quickstep') diff --git a/quickstep/src/com/android/launcher3/uioverrides/OverviewState.java b/quickstep/src/com/android/launcher3/uioverrides/OverviewState.java index 1e1031958..7f956f8a2 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/OverviewState.java +++ b/quickstep/src/com/android/launcher3/uioverrides/OverviewState.java @@ -29,6 +29,7 @@ import com.android.launcher3.R; import com.android.launcher3.Workspace; import com.android.launcher3.allapps.DiscoveryBounce; import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType; +import com.android.quickstep.RecentsModel; import com.android.quickstep.views.RecentsView; /** @@ -76,6 +77,7 @@ public class OverviewState extends LauncherState { public void onStateDisabled(Launcher launcher) { RecentsView rv = launcher.getOverviewPanel(); rv.setOverviewStateEnabled(false); + RecentsModel.getInstance(launcher).resetAssistCache(); } @Override diff --git a/quickstep/src/com/android/quickstep/OtherActivityTouchConsumer.java b/quickstep/src/com/android/quickstep/OtherActivityTouchConsumer.java index c85628263..0e811f771 100644 --- a/quickstep/src/com/android/quickstep/OtherActivityTouchConsumer.java +++ b/quickstep/src/com/android/quickstep/OtherActivityTouchConsumer.java @@ -78,6 +78,7 @@ public class OtherActivityTouchConsumer extends ContextWrapper implements TouchC private final MainThreadExecutor mMainThreadExecutor; private final Choreographer mBackgroundThreadChoreographer; private final OverviewCallbacks mOverviewCallbacks; + private final TaskOverlayFactory mTaskOverlayFactory; private final boolean mIsDeferredDownTarget; private final PointF mDownPos = new PointF(); @@ -99,7 +100,7 @@ public class OtherActivityTouchConsumer extends ContextWrapper implements TouchC RecentsModel recentsModel, Intent homeIntent, ActivityControlHelper activityControl, MainThreadExecutor mainThreadExecutor, Choreographer backgroundThreadChoreographer, @HitTarget int downHitTarget, OverviewCallbacks overviewCallbacks, - VelocityTracker velocityTracker) { + TaskOverlayFactory taskOverlayFactory, VelocityTracker velocityTracker) { super(base); mRunningTask = runningTaskInfo; @@ -111,6 +112,7 @@ public class OtherActivityTouchConsumer extends ContextWrapper implements TouchC mBackgroundThreadChoreographer = backgroundThreadChoreographer; mIsDeferredDownTarget = activityControl.deferStartingActivity(downHitTarget); mOverviewCallbacks = overviewCallbacks; + mTaskOverlayFactory = taskOverlayFactory; } @Override @@ -233,14 +235,22 @@ public class OtherActivityTouchConsumer extends ContextWrapper implements TouchC handler.initWhenReady(); TraceHelper.beginSection("RecentsController"); - Runnable startActivity = () -> ActivityManagerWrapper.getInstance().startRecentsActivity( - mHomeIntent, + + AssistDataReceiver assistDataReceiver = !mTaskOverlayFactory.needAssist() ? null : new AssistDataReceiver() { @Override public void onHandleAssistData(Bundle bundle) { - mRecentsModel.preloadAssistData(mRunningTask.id, bundle); + if (mInteractionHandler == null) { + // Interaction is probably complete + mRecentsModel.preloadAssistData(mRunningTask.id, bundle); + } else if (handler == mInteractionHandler) { + handler.onAssistDataReceived(bundle); + } } - }, animationState, null, null); + }; + + Runnable startActivity = () -> ActivityManagerWrapper.getInstance().startRecentsActivity( + mHomeIntent, assistDataReceiver, animationState, null, null); if (Looper.myLooper() != Looper.getMainLooper()) { startActivity.run(); diff --git a/quickstep/src/com/android/quickstep/RecentsModel.java b/quickstep/src/com/android/quickstep/RecentsModel.java index 9c2c8b313..0c8e47f2b 100644 --- a/quickstep/src/com/android/quickstep/RecentsModel.java +++ b/quickstep/src/com/android/quickstep/RecentsModel.java @@ -256,6 +256,10 @@ public class RecentsModel extends TaskStackChangeListener { } } + public void resetAssistCache() { + mCachedAssistData.clear(); + } + @WorkerThread public void preloadAssistData(int taskId, Bundle data) { mMainThreadExecutor.execute(() -> { diff --git a/quickstep/src/com/android/quickstep/TaskOverlayFactory.java b/quickstep/src/com/android/quickstep/TaskOverlayFactory.java index 66969c65a..9d3ac6af6 100644 --- a/quickstep/src/com/android/quickstep/TaskOverlayFactory.java +++ b/quickstep/src/com/android/quickstep/TaskOverlayFactory.java @@ -18,6 +18,7 @@ package com.android.quickstep; import android.content.Context; import android.graphics.Matrix; +import android.support.annotation.AnyThread; import android.view.View; import com.android.launcher3.R; @@ -42,6 +43,11 @@ public class TaskOverlayFactory { return sInstance; } + @AnyThread + public boolean needAssist() { + return false; + } + public TaskOverlay createOverlay(View thumbnailView) { return new TaskOverlay(); } diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java index 49a4ac8ba..6c542628e 100644 --- a/quickstep/src/com/android/quickstep/TouchInteractionService.java +++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java @@ -171,6 +171,7 @@ public class TouchInteractionService extends Service { private OverviewCommandHelper mOverviewCommandHelper; private OverviewInteractionState mOverviewInteractionState; private OverviewCallbacks mOverviewCallbacks; + private TaskOverlayFactory mTaskOverlayFactory; private Choreographer mMainThreadChoreographer; private Choreographer mBackgroundThreadChoreographer; @@ -187,6 +188,7 @@ public class TouchInteractionService extends Service { mEventQueue = new MotionEventQueue(mMainThreadChoreographer, mNoOpTouchConsumer); mOverviewInteractionState = OverviewInteractionState.getInstance(this); mOverviewCallbacks = OverviewCallbacks.get(this); + mTaskOverlayFactory = TaskOverlayFactory.get(this); sConnected = true; @@ -239,7 +241,7 @@ public class TouchInteractionService extends Service { mOverviewCommandHelper.overviewIntent, mOverviewCommandHelper.getActivityControlHelper(), mMainThreadExecutor, mBackgroundThreadChoreographer, downHitTarget, mOverviewCallbacks, - tracker); + mTaskOverlayFactory, tracker); } } diff --git a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java index 703ea2ea2..ff3137d44 100644 --- a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java +++ b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java @@ -37,6 +37,7 @@ import android.graphics.Canvas; import android.graphics.Point; import android.graphics.Rect; import android.os.Build; +import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.SystemClock; @@ -109,19 +110,21 @@ public class WindowTransformSwipeHandler { private static final int STATE_SCALED_CONTROLLER_APP = 1 << 6; private static final int STATE_HANDLER_INVALIDATED = 1 << 7; - private static final int STATE_GESTURE_STARTED = 1 << 8; - private static final int STATE_GESTURE_CANCELLED = 1 << 9; - private static final int STATE_GESTURE_COMPLETED = 1 << 10; + private static final int STATE_GESTURE_STARTED_QUICKSTEP = 1 << 8; + private static final int STATE_GESTURE_STARTED_QUICKSCRUB = 1 << 9; + private static final int STATE_GESTURE_CANCELLED = 1 << 10; + private static final int STATE_GESTURE_COMPLETED = 1 << 11; // States for quick switch/scrub - private static final int STATE_CURRENT_TASK_FINISHED = 1 << 11; - private static final int STATE_QUICK_SCRUB_START = 1 << 12; - private static final int STATE_QUICK_SCRUB_END = 1 << 13; + private static final int STATE_CURRENT_TASK_FINISHED = 1 << 12; + private static final int STATE_QUICK_SCRUB_START = 1 << 13; + private static final int STATE_QUICK_SCRUB_END = 1 << 14; - private static final int STATE_CAPTURE_SCREENSHOT = 1 << 14; - private static final int STATE_SCREENSHOT_CAPTURED = 1 << 15; + private static final int STATE_CAPTURE_SCREENSHOT = 1 << 15; + private static final int STATE_SCREENSHOT_CAPTURED = 1 << 16; - private static final int STATE_RESUME_LAST_TASK = 1 << 16; + private static final int STATE_RESUME_LAST_TASK = 1 << 17; + private static final int STATE_ASSIST_DATA_RECEIVED = 1 << 18; private static final int LAUNCHER_UI_STATES = STATE_LAUNCHER_PRESENT | STATE_LAUNCHER_DRAWN | STATE_ACTIVITY_MULTIPLIER_COMPLETE @@ -145,7 +148,8 @@ public class WindowTransformSwipeHandler { "STATE_SCALED_CONTROLLER_RECENTS", "STATE_SCALED_CONTROLLER_APP", "STATE_HANDLER_INVALIDATED", - "STATE_GESTURE_STARTED", + "STATE_GESTURE_STARTED_QUICKSTEP", + "STATE_GESTURE_STARTED_QUICKSCRUB", "STATE_GESTURE_CANCELLED", "STATE_GESTURE_COMPLETED", "STATE_CURRENT_TASK_FINISHED", @@ -154,6 +158,7 @@ public class WindowTransformSwipeHandler { "STATE_CAPTURE_SCREENSHOT", "STATE_SCREENSHOT_CAPTURED", "STATE_RESUME_LAST_TASK", + "STATE_ASSIST_DATA_RECEIVED", }; public static final long MAX_SWIPE_DURATION = 350; @@ -227,6 +232,8 @@ public class WindowTransformSwipeHandler { private float mLongSwipeDisplacement = 0; private LongSwipeHelper mLongSwipeController; + private Bundle mAssistData; + WindowTransformSwipeHandler(int id, RunningTaskInfo runningTaskInfo, Context context, long touchTimeMs, ActivityControlHelper controller) { this.id = id; @@ -253,12 +260,19 @@ public class WindowTransformSwipeHandler { } }; - mStateCallback.addCallback(STATE_LAUNCHER_DRAWN | STATE_GESTURE_STARTED, + mStateCallback.addCallback(STATE_LAUNCHER_DRAWN | STATE_GESTURE_STARTED_QUICKSCRUB, + this::initializeLauncherAnimationController); + mStateCallback.addCallback(STATE_LAUNCHER_DRAWN | STATE_GESTURE_STARTED_QUICKSTEP, this::initializeLauncherAnimationController); + mStateCallback.addCallback(STATE_LAUNCHER_PRESENT | STATE_LAUNCHER_DRAWN, this::launcherFrameDrawn); - mStateCallback.addCallback(STATE_LAUNCHER_PRESENT | STATE_GESTURE_STARTED, + + mStateCallback.addCallback(STATE_LAUNCHER_PRESENT | STATE_GESTURE_STARTED_QUICKSTEP, this::notifyGestureStartedAsync); + mStateCallback.addCallback(STATE_LAUNCHER_PRESENT | STATE_GESTURE_STARTED_QUICKSCRUB, + this::notifyGestureStartedAsync); + mStateCallback.addCallback(STATE_LAUNCHER_PRESENT | STATE_LAUNCHER_STARTED | STATE_GESTURE_CANCELLED, this::resetStateForAnimationCancel); @@ -281,11 +295,15 @@ public class WindowTransformSwipeHandler { this::finishCurrentTransitionToHome); mStateCallback.addCallback(STATE_LAUNCHER_PRESENT | STATE_APP_CONTROLLER_RECEIVED - | STATE_ACTIVITY_MULTIPLIER_COMPLETE - | STATE_SCALED_CONTROLLER_RECENTS - | STATE_CURRENT_TASK_FINISHED - | STATE_GESTURE_COMPLETED, + | STATE_ACTIVITY_MULTIPLIER_COMPLETE | STATE_SCALED_CONTROLLER_RECENTS + | STATE_CURRENT_TASK_FINISHED | STATE_GESTURE_COMPLETED + | STATE_GESTURE_STARTED_QUICKSTEP, this::setupLauncherUiAfterSwipeUpAnimation); + mStateCallback.addCallback(STATE_LAUNCHER_PRESENT | STATE_APP_CONTROLLER_RECEIVED + | STATE_ACTIVITY_MULTIPLIER_COMPLETE | STATE_SCALED_CONTROLLER_RECENTS + | STATE_CURRENT_TASK_FINISHED | STATE_GESTURE_COMPLETED + | STATE_GESTURE_STARTED_QUICKSTEP | STATE_ASSIST_DATA_RECEIVED, + this::preloadAssistData); mStateCallback.addCallback(STATE_HANDLER_INVALIDATED, this::invalidateHandler); mStateCallback.addCallback(STATE_LAUNCHER_PRESENT | STATE_HANDLER_INVALIDATED, @@ -641,7 +659,8 @@ public class WindowTransformSwipeHandler { public void onGestureStarted() { notifyGestureStartedAsync(); - setStateOnUiThread(STATE_GESTURE_STARTED); + setStateOnUiThread(mInteractionType == INTERACTION_NORMAL + ? STATE_GESTURE_STARTED_QUICKSTEP : STATE_GESTURE_STARTED_QUICKSCRUB); mGestureStarted = true; mRecentsAnimationWrapper.hideCurrentInputMethod(); mRecentsAnimationWrapper.enableInputConsumer(); @@ -910,6 +929,9 @@ public class WindowTransformSwipeHandler { return; } mQuickScrubController.onFinishedTransitionToQuickScrub(); + + mRecentsView.setRunningTaskIconScaledDown(false /* isScaledDown */, true /* animate */); + RecentsModel.getInstance(mContext).onOverviewShown(false, TAG); } public void onQuickScrubProgress(float progress) { @@ -1036,4 +1058,13 @@ public class WindowTransformSwipeHandler { mClipAnimationHelper.setTaskAlphaCallback(provider); updateFinalShift(); } + + public void onAssistDataReceived(Bundle assistData) { + mAssistData = assistData; + setStateOnUiThread(STATE_ASSIST_DATA_RECEIVED); + } + + private void preloadAssistData() { + RecentsModel.getInstance(mContext).preloadAssistData(mRunningTaskId, mAssistData); + } } -- cgit v1.2.3