From 7fecb97dfbd0e845cce273fa88686a25f3325084 Mon Sep 17 00:00:00 2001 From: Will Osborn Date: Tue, 7 Jan 2025 14:17:37 +0000 Subject: [PATCH] Move recents dependency destruction to onDestroy from onDetachedWindow With Overview running in a window, this clearing up needs to move later in the lifecycle. Bug: 388232647 Test: ran locally on device Flag: EXEMPT bugfix Change-Id: Id35c7fce390c2874b453c8b14c4eb0e7220ccd94 --- .../android/launcher3/uioverrides/QuickstepLauncher.java | 5 +++++ quickstep/src/com/android/quickstep/RecentsActivity.java | 4 ++++ .../quickstep/fallback/window/RecentsWindowManager.kt | 1 + .../src/com/android/quickstep/views/RecentsView.java | 9 ++++++++- .../android/quickstep/views/RecentsViewModelHelper.kt | 4 ++-- 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java index 6d744c2f9b..f49ffdb67d 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java +++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java @@ -564,6 +564,11 @@ public class QuickstepLauncher extends Launcher implements RecentsViewContainer, mSplitSelectStateController.onDestroy(); } + RecentsView recentsView = getOverviewPanel(); + if (recentsView != null) { + recentsView.destroy(); + } + super.onDestroy(); mHotseatPredictionController.destroy(); mSplitWithKeyboardShortcutController.onDestroy(); diff --git a/quickstep/src/com/android/quickstep/RecentsActivity.java b/quickstep/src/com/android/quickstep/RecentsActivity.java index 17c17ccef0..28e140a834 100644 --- a/quickstep/src/com/android/quickstep/RecentsActivity.java +++ b/quickstep/src/com/android/quickstep/RecentsActivity.java @@ -461,6 +461,10 @@ public final class RecentsActivity extends StatefulActivity implem @Override protected void onDestroy() { + RecentsView recentsView = getOverviewPanel(); + if (recentsView != null) { + recentsView.destroy(); + } super.onDestroy(); ACTIVITY_TRACKER.onContextDestroyed(this); mActivityLaunchAnimationRunner = null; diff --git a/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowManager.kt b/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowManager.kt index 9bd7a19ec4..4d02890ae1 100644 --- a/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowManager.kt +++ b/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowManager.kt @@ -163,6 +163,7 @@ class RecentsWindowManager(context: Context) : TaskStackChangeListeners.getInstance().unregisterTaskStackListener(taskStackChangeListener) callbacks?.removeListener(recentsAnimationListener) recentsWindowTracker.onContextDestroyed(this) + recentsView?.destroy() } override fun startHome() { diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index ab96474dc7..594bd71b6e 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -1241,8 +1241,15 @@ public abstract class RecentsView< mSplitSelectStateController.unregisterSplitListener(mSplitSelectionListener); } reset(); + } + + /** + * Execute clean-up logic needed when the view is destroyed. + */ + public void destroy() { + Log.d(TAG, "destroy"); if (enableRefactorTaskThumbnail()) { - mHelper.onDetachedFromWindow(); + mHelper.onDestroy(); RecentsDependencies.destroy(); } } diff --git a/quickstep/src/com/android/quickstep/views/RecentsViewModelHelper.kt b/quickstep/src/com/android/quickstep/views/RecentsViewModelHelper.kt index 87771c6c37..1435f11630 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsViewModelHelper.kt +++ b/quickstep/src/com/android/quickstep/views/RecentsViewModelHelper.kt @@ -32,8 +32,8 @@ class RecentsViewModelHelper( private val recentsCoroutineScope: CoroutineScope, private val dispatcherProvider: DispatcherProvider, ) { - fun onDetachedFromWindow() { - recentsCoroutineScope.cancel("RecentsView detaching from window") + fun onDestroy() { + recentsCoroutineScope.cancel("RecentsView is being destroyed") } fun switchToScreenshot(