diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java index f407bdcb8852c374fdbbf872e192b5b6307c7be9..a45931953c0bd2ff32845d777651e7e48fac439a 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java @@ -96,6 +96,8 @@ import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.common.TaskStackListenerCallback; import com.android.wm.shell.common.TaskStackListenerImpl; +import com.android.wm.shell.common.annotations.ShellBackgroundThread; +import com.android.wm.shell.common.annotations.ShellMainThread; import com.android.wm.shell.draganddrop.DragAndDropController; import com.android.wm.shell.onehanded.OneHandedController; import com.android.wm.shell.onehanded.OneHandedTransitionCallback; @@ -158,6 +160,8 @@ public class BubbleController { private final ShellExecutor mMainExecutor; private final Handler mMainHandler; + private final ShellExecutor mBackgroundExecutor; + private BubbleLogger mLogger; private BubbleData mBubbleData; @Nullable private BubbleStackView mStackView; @@ -234,8 +238,9 @@ public class BubbleController { DisplayController displayController, Optional oneHandedOptional, DragAndDropController dragAndDropController, - ShellExecutor mainExecutor, - Handler mainHandler, + @ShellMainThread ShellExecutor mainExecutor, + @ShellMainThread Handler mainHandler, + @ShellBackgroundThread ShellExecutor bgExecutor, TaskViewTransitions taskViewTransitions, SyncTransactionQueue syncQueue) { BubbleLogger logger = new BubbleLogger(uiEventLogger); @@ -245,7 +250,7 @@ public class BubbleController { new BubbleDataRepository(context, launcherApps, mainExecutor), statusBarService, windowManager, windowManagerShellWrapper, launcherApps, logger, taskStackListener, organizer, positioner, displayController, - oneHandedOptional, dragAndDropController, mainExecutor, mainHandler, + oneHandedOptional, dragAndDropController, mainExecutor, mainHandler, bgExecutor, taskViewTransitions, syncQueue); } @@ -269,8 +274,9 @@ public class BubbleController { DisplayController displayController, Optional oneHandedOptional, DragAndDropController dragAndDropController, - ShellExecutor mainExecutor, - Handler mainHandler, + @ShellMainThread ShellExecutor mainExecutor, + @ShellMainThread Handler mainHandler, + @ShellBackgroundThread ShellExecutor bgExecutor, TaskViewTransitions taskViewTransitions, SyncTransactionQueue syncQueue) { mContext = context; @@ -286,6 +292,7 @@ public class BubbleController { mLogger = bubbleLogger; mMainExecutor = mainExecutor; mMainHandler = mainHandler; + mBackgroundExecutor = bgExecutor; mTaskStackListener = taskStackListener; mTaskOrganizer = organizer; mSurfaceSynchronizer = synchronizer; @@ -725,7 +732,8 @@ public class BubbleController { try { mAddedToWindowManager = false; - mContext.unregisterReceiver(mBroadcastReceiver); + // Put on background for this binder call, was causing jank + mBackgroundExecutor.execute(() -> mContext.unregisterReceiver(mBroadcastReceiver)); if (mStackView != null) { mWindowManager.removeView(mStackView); mBubbleData.getOverflow().cleanUpExpandedState(); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java index 9c4ec5313c50cfa8a1b67cd8a49d90a4c7e0b81b..f833797c3b3c8ce263c019fe0916c59510b4e275 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java @@ -41,6 +41,7 @@ import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.common.SystemWindows; import com.android.wm.shell.common.TaskStackListenerImpl; import com.android.wm.shell.common.TransactionPool; +import com.android.wm.shell.common.annotations.ShellBackgroundThread; import com.android.wm.shell.common.annotations.ShellMainThread; import com.android.wm.shell.draganddrop.DragAndDropController; import com.android.wm.shell.freeform.FreeformTaskListener; @@ -113,13 +114,15 @@ public class WMShellModule { DragAndDropController dragAndDropController, @ShellMainThread ShellExecutor mainExecutor, @ShellMainThread Handler mainHandler, + @ShellBackgroundThread ShellExecutor bgExecutor, TaskViewTransitions taskViewTransitions, SyncTransactionQueue syncQueue) { return BubbleController.create(context, null /* synchronizer */, floatingContentCoordinator, statusBarService, windowManager, windowManagerShellWrapper, launcherApps, taskStackListener, uiEventLogger, organizer, displayController, oneHandedOptional, - dragAndDropController, mainExecutor, mainHandler, taskViewTransitions, syncQueue); + dragAndDropController, mainExecutor, mainHandler, bgExecutor, + taskViewTransitions, syncQueue); } // diff --git a/packages/SystemUI/tests/src/com/android/systemui/wmshell/TestableBubbleController.java b/packages/SystemUI/tests/src/com/android/systemui/wmshell/TestableBubbleController.java index 9646edf6756a4dd912036b3b8ffc4d548dae82ca..9ca6bb0af8d5af4e814437e4bc26fb88ee762b0d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/TestableBubbleController.java +++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/TestableBubbleController.java @@ -69,7 +69,7 @@ public class TestableBubbleController extends BubbleController { statusBarService, windowManager, windowManagerShellWrapper, launcherApps, bubbleLogger, taskStackListener, shellTaskOrganizer, positioner, displayController, oneHandedOptional, dragAndDropController, shellMainExecutor, shellMainHandler, - taskViewTransitions, syncQueue); + new SyncExecutor(), taskViewTransitions, syncQueue); setInflateSynchronously(true); initialize(); }