Ensure the icon load request matches the ItemInfo for the floating view.

This fixes the bug where the wrong icon is present during the app close
animation.

Bug: 138195597
Change-Id: Ife2c6ad135dde54583f6f2bb2caf3b1e9325e064
Merged-In: Ib3767ec5c2b4eb22b35e5148879e11d2c1b28e3c
This commit is contained in:
Jon Miranda
2019-09-09 15:36:08 -07:00
committed by Jonathan Miranda
parent 01f8fb9132
commit bdda7251df
@@ -721,7 +721,7 @@ public class FloatingIconView extends View implements
*/
@UiThread
public static IconLoadResult fetchIcon(Launcher l, View v, ItemInfo info, boolean isOpening) {
IconLoadResult result = new IconLoadResult();
IconLoadResult result = new IconLoadResult(info);
new Handler(LauncherModel.getWorkerLooper()).postAtFrontOfQueue(() -> {
RectF position = new RectF();
getLocationBoundsForView(l, v, isOpening, position);
@@ -750,10 +750,13 @@ public class FloatingIconView extends View implements
// Get the drawable on the background thread
boolean shouldLoadIcon = originalView.getTag() instanceof ItemInfo && hideOriginal;
view.mIconLoadResult = sIconLoadResult;
if (shouldLoadIcon && view.mIconLoadResult == null) {
view.mIconLoadResult = fetchIcon(launcher, originalView,
(ItemInfo) originalView.getTag(), isOpening);
if (shouldLoadIcon) {
if (sIconLoadResult != null && sIconLoadResult.itemInfo == originalView.getTag()) {
view.mIconLoadResult = sIconLoadResult;
} else {
view.mIconLoadResult = fetchIcon(launcher, originalView,
(ItemInfo) originalView.getTag(), isOpening);
}
}
sIconLoadResult = null;
@@ -895,10 +898,15 @@ public class FloatingIconView extends View implements
}
private static class IconLoadResult {
final ItemInfo itemInfo;
Drawable drawable;
Drawable badge;
int iconOffset;
Runnable onIconLoaded;
boolean isIconLoaded;
public IconLoadResult(ItemInfo itemInfo) {
this.itemInfo = itemInfo;
}
}
}