mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-28 15:56:49 +00:00
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
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -256,6 +256,10 @@ public class RecentsModel extends TaskStackChangeListener {
|
||||
}
|
||||
}
|
||||
|
||||
public void resetAssistCache() {
|
||||
mCachedAssistData.clear();
|
||||
}
|
||||
|
||||
@WorkerThread
|
||||
public void preloadAssistData(int taskId, Bundle data) {
|
||||
mMainThreadExecutor.execute(() -> {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<T extends BaseDraggingActivity> {
|
||||
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<T extends BaseDraggingActivity> {
|
||||
"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<T extends BaseDraggingActivity> {
|
||||
"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<T extends BaseDraggingActivity> {
|
||||
private float mLongSwipeDisplacement = 0;
|
||||
private LongSwipeHelper mLongSwipeController;
|
||||
|
||||
private Bundle mAssistData;
|
||||
|
||||
WindowTransformSwipeHandler(int id, RunningTaskInfo runningTaskInfo, Context context,
|
||||
long touchTimeMs, ActivityControlHelper<T> controller) {
|
||||
this.id = id;
|
||||
@@ -253,12 +260,19 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> {
|
||||
}
|
||||
};
|
||||
|
||||
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<T extends BaseDraggingActivity> {
|
||||
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<T extends BaseDraggingActivity> {
|
||||
|
||||
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<T extends BaseDraggingActivity> {
|
||||
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<T extends BaseDraggingActivity> {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user