Reset the static preloaded icon result once launcher is hidden
- In the case where the system does not play the requested animation
we can still ensure that this doesn't result in a leak of the
activity by resetting the result when launcher is hidden (which
happens after the launch transition)
Bug: 285995223
Test: Presubmit
Test: Take heapdump after repro steps in b/285995223#comment6 and verify
there are no lingering static icon load results
Change-Id: I1d169df158cfaab64fbe1f4ce597d8f73d86a1c1
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 37a20bf..25eb160 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -1074,6 +1074,7 @@
logStopAndResume(false /* isResume */);
mAppWidgetHolder.setActivityStarted(false);
NotificationListener.removeNotificationsChangedListener(getPopupDataProvider());
+ FloatingIconView.resetIconLoadResult();
}
@Override
diff --git a/src/com/android/launcher3/views/FloatingIconView.java b/src/com/android/launcher3/views/FloatingIconView.java
index 4d0e2af..6b5c8df 100644
--- a/src/com/android/launcher3/views/FloatingIconView.java
+++ b/src/com/android/launcher3/views/FloatingIconView.java
@@ -572,6 +572,13 @@
}
/**
+ * Resets the static icon load result used for preloading the icon for a launching app.
+ */
+ public static void resetIconLoadResult() {
+ sIconLoadResult = null;
+ }
+
+ /**
* Creates a floating icon view for {@param originalView}.
* @param originalView The view to copy
* @param visibilitySyncView A view whose visibility should update in sync with originalView.
@@ -608,7 +615,7 @@
}
view.setOriginalDrawableBackground(view.mIconLoadResult.btvDrawable);
}
- sIconLoadResult = null;
+ resetIconLoadResult();
// Match the position of the original view.
view.matchPositionOf(launcher, originalView, isOpening, positionOut);