diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2019-04-10 22:34:09 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-04-10 22:34:09 +0000 |
commit | 25138354844505816a1d7412811be7d1817a3e8c (patch) | |
tree | 590d908c50ef7438d261f66ac96b125796c55db3 /src | |
parent | e9c4c5016849ec76f5b94c9661f030fd7e190740 (diff) | |
parent | d53a9bf8a0cc13fc39b80ddc422aecbf16931529 (diff) | |
download | android_packages_apps_Trebuchet-25138354844505816a1d7412811be7d1817a3e8c.tar.gz android_packages_apps_Trebuchet-25138354844505816a1d7412811be7d1817a3e8c.tar.bz2 android_packages_apps_Trebuchet-25138354844505816a1d7412811be7d1817a3e8c.zip |
Merge "Fix bug where app icons stay invisible after app open animation." into ub-launcher3-qt-dev
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/launcher3/views/FloatingIconView.java | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/com/android/launcher3/views/FloatingIconView.java b/src/com/android/launcher3/views/FloatingIconView.java index 5889468c5..fab21fada 100644 --- a/src/com/android/launcher3/views/FloatingIconView.java +++ b/src/com/android/launcher3/views/FloatingIconView.java @@ -34,6 +34,7 @@ import android.graphics.drawable.AdaptiveIconDrawable; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Build; +import android.os.CancellationSignal; import android.os.Handler; import android.os.Looper; import android.view.View; @@ -73,6 +74,7 @@ public class FloatingIconView extends View implements Animator.AnimatorListener, private static final Rect sTmpRect = new Rect(); private Runnable mEndRunnable; + private CancellationSignal mLoadIconSignal; private final int mBlurSizeOutline; @@ -153,6 +155,9 @@ public class FloatingIconView extends View implements Animator.AnimatorListener, @Override public void onAnimationEnd(Animator animator) { + if (mLoadIconSignal != null) { + mLoadIconSignal.cancel(); + } if (mEndRunnable != null) { mEndRunnable.run(); } else { @@ -186,7 +191,7 @@ public class FloatingIconView extends View implements Animator.AnimatorListener, @WorkerThread private void getIcon(Launcher launcher, View v, ItemInfo info, boolean isOpening, - Runnable onIconLoadedRunnable) { + Runnable onIconLoadedRunnable, CancellationSignal loadIconSignal) { final LayoutParams lp = (LayoutParams) getLayoutParams(); Drawable drawable = null; boolean supportsAdaptiveIcons = ADAPTIVE_ICON_WINDOW_ANIM.get() @@ -290,7 +295,9 @@ public class FloatingIconView extends View implements Animator.AnimatorListener, setBackground(finalDrawable); } - onIconLoadedRunnable.run(); + if (!loadIconSignal.isCanceled()) { + onIconLoadedRunnable.run(); + } invalidate(); invalidateOutline(); }); @@ -386,6 +393,7 @@ public class FloatingIconView extends View implements Animator.AnimatorListener, // Get the drawable on the background thread // Must be called after matchPositionOf so that we know what size to load. if (originalView.getTag() instanceof ItemInfo) { + view.mLoadIconSignal = new CancellationSignal(); Runnable onIconLoaded = () -> { // Delay swapping views until the icon is loaded to prevent a flash. view.setVisibility(VISIBLE); @@ -393,9 +401,10 @@ public class FloatingIconView extends View implements Animator.AnimatorListener, originalView.setVisibility(INVISIBLE); } }; + CancellationSignal loadIconSignal = view.mLoadIconSignal; new Handler(LauncherModel.getWorkerLooper()).postAtFrontOfQueue(() -> { view.getIcon(launcher, originalView, (ItemInfo) originalView.getTag(), isOpening, - onIconLoaded); + onIconLoaded, loadIconSignal); }); } @@ -461,6 +470,10 @@ public class FloatingIconView extends View implements Animator.AnimatorListener, setScaleY(1); setAlpha(1); setBackground(null); + if (mLoadIconSignal != null) { + mLoadIconSignal.cancel(); + } + mLoadIconSignal = null; mEndRunnable = null; mIsAdaptiveIcon = false; mForeground = null; |