Make sure that live tile overlay is added only once.
Users report seeing empty launcher. After adding some logging, live tile
overlay can be added twice and removed only once. I added some logic to
make sure that it can only be added once.
Test: manual
Fixes: 135864059
Change-Id: I9d3325c56e76654f1397cc65979b97a6c0a80aee
(cherry picked from commit d3ef57b4ddb635580fc5898d22b31193894cda60)
(cherry picked from commit 4fa6f63ffd7a5ab230d17e8401d29cae3e5440b8)
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java
index 0d29e5d..a3bd348 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java
@@ -217,6 +217,7 @@
private AnimationFactory mAnimationFactory = (t) -> { };
private LiveTileOverlay mLiveTileOverlay = new LiveTileOverlay();
+ private boolean mLiveTileOverlayAttached = false;
private boolean mWasLauncherAlreadyVisible;
@@ -323,8 +324,7 @@
mRecentsView = activity.getOverviewPanel();
linkRecentsViewScroll();
- mRecentsView.setLiveTileOverlay(mLiveTileOverlay);
- mActivity.getRootView().getOverlay().add(mLiveTileOverlay);
+ addLiveTileOverlay();
mStateCallback.setState(STATE_LAUNCHER_PRESENT);
if (alreadyOnHome) {
@@ -972,7 +972,7 @@
@Override
public void onAnimationStart(Animator animation) {
if (mActivity != null) {
- mActivity.getRootView().getOverlay().remove(mLiveTileOverlay);
+ removeLiveTileOverlay();
}
}
@@ -1071,7 +1071,7 @@
mRecentsView.onGestureAnimationEnd();
mActivity.getRootView().setOnApplyWindowInsetsListener(null);
- mActivity.getRootView().getOverlay().remove(mLiveTileOverlay);
+ removeLiveTileOverlay();
}
private void endLauncherTransitionController() {
@@ -1201,6 +1201,22 @@
updateFinalShift();
}
+ private synchronized void addLiveTileOverlay() {
+ if (!mLiveTileOverlayAttached) {
+ mActivity.getRootView().getOverlay().add(mLiveTileOverlay);
+ mRecentsView.setLiveTileOverlay(mLiveTileOverlay);
+ mLiveTileOverlayAttached = true;
+ }
+ }
+
+ private synchronized void removeLiveTileOverlay() {
+ if (mLiveTileOverlayAttached) {
+ mActivity.getRootView().getOverlay().remove(mLiveTileOverlay);
+ mRecentsView.setLiveTileOverlay(null);
+ mLiveTileOverlayAttached = false;
+ }
+ }
+
public static float getHiddenTargetAlpha(RemoteAnimationTargetCompat app, float expectedAlpha) {
if (!isNotInRecents(app)) {
return 0;
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java
index 1bf77f5..3e1d61a 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java
@@ -825,7 +825,7 @@
*/
public void onSwipeUpAnimationSuccess() {
if (getRunningTaskView() != null) {
- float startProgress = ENABLE_QUICKSTEP_LIVE_TILE.get()
+ float startProgress = ENABLE_QUICKSTEP_LIVE_TILE.get() && mLiveTileOverlay != null
? mLiveTileOverlay.cancelIconAnimation()
: 0f;
animateUpRunningTaskIconScale(startProgress);