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 826cdcd32f)
This commit is contained in:
committed by
Jonathan Miranda
parent
31d0a9c562
commit
bc27826478
+2
-1
@@ -505,7 +505,8 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
|
||||
initAnimFactory.run();
|
||||
}
|
||||
}
|
||||
AbstractFloatingView.closeAllOpenViews(activity, mWasLauncherAlreadyVisible);
|
||||
AbstractFloatingView.closeAllOpenViewsExcept(activity, mWasLauncherAlreadyVisible,
|
||||
AbstractFloatingView.TYPE_LISTENER);
|
||||
|
||||
if (mWasLauncherAlreadyVisible) {
|
||||
mStateCallback.setState(STATE_LAUNCHER_DRAWN);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user