From 67606ddd4f1f5e175d3fd6c3d70d4654fbfbdfb4 Mon Sep 17 00:00:00 2001 From: LibXZR Date: Sat, 30 Apr 2022 09:50:39 +0800 Subject: [PATCH 1/2] Do not attach cleanupScreenshot() to frame update event When the animation get canceled, cleanupScreenshot() should be run instantly because it does something like removing pending animations. The switchToScreenshot() attaches it to RtFrameCallback which only be called on frame update. This is leading to problems as the next frame update may only happened when the next gesture starts, which means all the pending animations will be removed on next gesture. And then the next gesture freezed. Fixes randomly gesture freeze since 12L. Change-Id: I10247294a2dcae467706c434685b299f8b525888 Signed-off-by: LibXZR Signed-off-by: Pranav --- .../src/com/android/quickstep/AbsSwipeUpHandler.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index 06ad1c03b8..a2054050f5 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -427,12 +427,10 @@ public abstract class AbsSwipeUpHandler, HashMap snapshots = mGestureState.consumeRecentsAnimationCanceledSnapshot(); if (snapshots != null) { - mRecentsView.switchToScreenshot(snapshots, () -> { - if (mRecentsAnimationController != null) { - mRecentsAnimationController.cleanupScreenshot(); - } - }); mRecentsView.onRecentsAnimationComplete(); + if (mRecentsAnimationController != null) { + mRecentsAnimationController.cleanupScreenshot(); + } } }); From 8e9904e542286435ba6a2467c67917aa73101356 Mon Sep 17 00:00:00 2001 From: Pranav Date: Mon, 16 May 2022 08:45:58 +0530 Subject: [PATCH 2/2] workspace: Fix an npe java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.ViewGroup.removeView(android.view.View)' on a null object reference at com.android.launcher3.Workspace.removeAllWorkspaceScreens(Workspace.java:608) at com.android.launcher3.Launcher.startBinding(Launcher.java:2203) at com.android.launcher3.model.BaseLoaderResults$WorkspaceBinder.lambda$bind$0(BaseLoaderResults.java:200) at com.android.launcher3.model.BaseLoaderResults$WorkspaceBinder$$ExternalSyntheticLambda7.execute(Unknown Source:0) at com.android.launcher3.model.BaseLoaderResults$WorkspaceBinder.lambda$executeCallbacksTask$9$com-android-launcher3-model-BaseLoaderResults$WorkspaceBinder(BaseLoaderResults.java:260) at com.android.launcher3.model.BaseLoaderResults$WorkspaceBinder$$ExternalSyntheticLambda9.run(Unknown Source:4) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7871) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:550) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) Signed-off-by: Pranav --- src/com/android/launcher3/Workspace.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 8ecde1d1f0..d91e214137 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -605,7 +605,10 @@ public class Workspace extends PagedView // Recycle the QSB widget if (mQsb != null) { - ((ViewGroup) mQsb.getParent()).removeView(mQsb); + ViewGroup viewGroup = (ViewGroup) mQsb.getParent(); + if (viewGroup != null) { + viewGroup.removeView(mQsb); + } } // Remove the pages and clear the screen models