diff options
author | Jon Miranda <jonmiranda@google.com> | 2019-07-02 14:35:11 -0700 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2019-07-18 04:10:15 +0000 |
commit | 0473dcee070b9ea827d32bfd998a0c7cc19a0312 (patch) | |
tree | 465c69a388bbfa340cdcab5a08bf7576dde666d4 /src | |
parent | 6a2718b24144d53908ff5f9e565a3c642762bbd7 (diff) | |
download | android_packages_apps_Trebuchet-0473dcee070b9ea827d32bfd998a0c7cc19a0312.tar.gz android_packages_apps_Trebuchet-0473dcee070b9ea827d32bfd998a0c7cc19a0312.tar.bz2 android_packages_apps_Trebuchet-0473dcee070b9ea827d32bfd998a0c7cc19a0312.zip |
Fix bug where icon is no present during app close animation.
* WindowTransformSwipeHandler closes all AbstractFloatingViews, including
ListenerView, which results in FloatingIconView getting removed.
* In IconLoadResult.onIconLoaded, we remove the check for isIconLoaded since
its not needed. This was also causing a race condition since isIconLoaded
is not set to true until after we tell onIconLoaded to run.
* In BaseDragLayer, we have a delay before checking if the view is open and
then closing the floating view if true. This caused issues since we reycle
the view. Now we check if the view is open before running the delay to call
close.
Bug: 136044361
Change-Id: I7442a589a62c3cdf90b70d146e0ecf3e4300ddf7
(cherry picked from commit 826cdcd32fa91afe932c8c07be1a4e92a6f73301)
(cherry picked from commit bc2782647803d2a8942311f917d66a91bdc24d8d)
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/launcher3/views/BaseDragLayer.java | 10 | ||||
-rw-r--r-- | src/com/android/launcher3/views/FloatingIconView.java | 10 |
2 files changed, 9 insertions, 11 deletions
diff --git a/src/com/android/launcher3/views/BaseDragLayer.java b/src/com/android/launcher3/views/BaseDragLayer.java index c1ba78050..15f272470 100644 --- a/src/com/android/launcher3/views/BaseDragLayer.java +++ b/src/com/android/launcher3/views/BaseDragLayer.java @@ -221,12 +221,10 @@ public abstract class BaseDragLayer<T extends Context & ActivityContext> if (child instanceof AbstractFloatingView) { // Handles the case where the view is removed without being properly closed. // This can happen if something goes wrong during a state change/transition. - postDelayed(() -> { - AbstractFloatingView floatingView = (AbstractFloatingView) child; - if (floatingView.isOpen()) { - floatingView.close(false); - } - }, SINGLE_FRAME_MS); + AbstractFloatingView floatingView = (AbstractFloatingView) child; + if (floatingView.isOpen()) { + postDelayed(() -> floatingView.close(false), SINGLE_FRAME_MS); + } } } diff --git a/src/com/android/launcher3/views/FloatingIconView.java b/src/com/android/launcher3/views/FloatingIconView.java index b6c4fedac..ab4b576bf 100644 --- a/src/com/android/launcher3/views/FloatingIconView.java +++ b/src/com/android/launcher3/views/FloatingIconView.java @@ -574,17 +574,17 @@ public class FloatingIconView extends View implements if (cancellationSignal.isCanceled()) { return; } - if (mIconLoadResult.isIconLoaded) { - setIcon(originalView, mIconLoadResult.drawable, mIconLoadResult.badge, - mIconLoadResult.iconOffset); - } + + setIcon(originalView, mIconLoadResult.drawable, mIconLoadResult.badge, + mIconLoadResult.iconOffset); + // Delay swapping views until the icon is loaded to prevent a flash. setVisibility(VISIBLE); originalView.setVisibility(INVISIBLE); }; + mLoadIconSignal = cancellationSignal; } } - mLoadIconSignal = cancellationSignal; } private void setBackgroundDrawableBounds(float scale) { |