Merge "Fixing various system UI flags not getting updated properly on theme changes." into ub-launcher3-dorval-polish
diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java
index f8e87c5..cb3cbd2 100644
--- a/src/com/android/launcher3/BubbleTextView.java
+++ b/src/com/android/launcher3/BubbleTextView.java
@@ -30,6 +30,7 @@
 import android.graphics.Region;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
+import android.support.annotation.NonNull;
 import android.support.v4.graphics.ColorUtils;
 import android.util.AttributeSet;
 import android.util.Property;
@@ -47,6 +48,7 @@
 import com.android.launcher3.badge.BadgeInfo;
 import com.android.launcher3.badge.BadgeRenderer;
 import com.android.launcher3.folder.FolderIconPreviewVerifier;
+import com.android.launcher3.folder.FolderPagedView;
 import com.android.launcher3.graphics.DrawableFactory;
 import com.android.launcher3.graphics.HolographicOutlineHelper;
 import com.android.launcher3.graphics.IconPalette;
@@ -207,6 +209,17 @@
         applyFromShortcutInfo(info, false);
     }
 
+    @Override
+    public void invalidateDrawable(@NonNull Drawable drawable) {
+        super.invalidateDrawable(drawable);
+
+        if (getParent() != null
+                && getParent().getParent() != null
+                && getParent().getParent().getParent() instanceof FolderPagedView) {
+            ((FolderPagedView) getParent().getParent().getParent()).onIconInvalidated(this);
+        }
+    }
+
     public void applyFromShortcutInfo(ShortcutInfo info, boolean promiseStateChanged) {
         applyIconAndLabel(info.iconBitmap, info);
         setTag(info);
diff --git a/src/com/android/launcher3/anim/RoundedRectRevealOutlineProvider.java b/src/com/android/launcher3/anim/RoundedRectRevealOutlineProvider.java
index d01b26c..7c5fa1c 100644
--- a/src/com/android/launcher3/anim/RoundedRectRevealOutlineProvider.java
+++ b/src/com/android/launcher3/anim/RoundedRectRevealOutlineProvider.java
@@ -56,7 +56,7 @@
 
     @Override
     public boolean shouldRemoveElevationDuringAnimation() {
-        return false;
+        return true;
     }
 
     @Override
diff --git a/src/com/android/launcher3/folder/Folder.java b/src/com/android/launcher3/folder/Folder.java
index fc25c9a..2838351 100644
--- a/src/com/android/launcher3/folder/Folder.java
+++ b/src/com/android/launcher3/folder/Folder.java
@@ -791,8 +791,11 @@
         mDragController.removeDropTarget(this);
         clearFocus();
         if (mFolderIcon != null) {
-            mFolderIcon.setBackgroundVisible(true);
             mFolderIcon.setVisibility(View.VISIBLE);
+            if (FeatureFlags.LAUNCHER3_NEW_FOLDER_ANIMATION) {
+                mFolderIcon.setBackgroundVisible(true);
+                mFolderIcon.mBackground.fadeInBackgroundShadow();
+            }
             if (wasAnimated) {
                 mFolderIcon.mBackground.animateBackgroundStroke();
                 if (mFolderIcon.hasBadge()) {
diff --git a/src/com/android/launcher3/folder/FolderAnimationManager.java b/src/com/android/launcher3/folder/FolderAnimationManager.java
index bb2d1a2..74e8d3b 100644
--- a/src/com/android/launcher3/folder/FolderAnimationManager.java
+++ b/src/com/android/launcher3/folder/FolderAnimationManager.java
@@ -221,6 +221,12 @@
                 mFolder.setTranslationY(0.0f);
                 mFolder.setScaleX(1f);
                 mFolder.setScaleY(1f);
+
+                if (mIsOpening) {
+                    getAnimator(mFolder, View.TRANSLATION_Z, -mFolder.getElevation(), 0)
+                            .setDuration(150)
+                            .start();
+                }
             }
         });
 
diff --git a/src/com/android/launcher3/folder/FolderIcon.java b/src/com/android/launcher3/folder/FolderIcon.java
index aaa19af..b6f05f3 100644
--- a/src/com/android/launcher3/folder/FolderIcon.java
+++ b/src/com/android/launcher3/folder/FolderIcon.java
@@ -75,6 +75,7 @@
 import com.android.launcher3.config.FeatureFlags;
 import com.android.launcher3.dragndrop.DragLayer;
 import com.android.launcher3.dragndrop.DragView;
+import com.android.launcher3.graphics.PreloadIconDrawable;
 import com.android.launcher3.util.Themes;
 import com.android.launcher3.graphics.IconPalette;
 import com.android.launcher3.util.Thunk;
@@ -511,7 +512,8 @@
         if (d != null) {
             mTempBounds.set(d.getBounds());
             d.setBounds(0, 0, mIntrinsicIconSize, mIntrinsicIconSize);
-            if (d instanceof FastBitmapDrawable) {
+            boolean isPreloadIcon = d instanceof PreloadIconDrawable;
+            if (!isPreloadIcon && d instanceof FastBitmapDrawable) {
                 FastBitmapDrawable fd = (FastBitmapDrawable) d;
                 fd.drawWithBrightness(canvas, params.overlayAlpha);
             } else {
@@ -555,6 +557,7 @@
         private int mBgColor;
         private float mStrokeWidth;
         private int mStrokeAlpha = MAX_BG_OPACITY;
+        private int mShadowAlpha = 255;
         private View mInvalidateDelegate;
 
         public int previewSize;
@@ -580,6 +583,7 @@
 
         ValueAnimator mScaleAnimator;
         ObjectAnimator mStrokeAlphaAnimator;
+        ObjectAnimator mShadowAnimator;
 
         private static final Property<PreviewBackground, Integer> STROKE_ALPHA =
                 new Property<PreviewBackground, Integer>(Integer.class, "strokeAlpha") {
@@ -595,6 +599,20 @@
                     }
                 };
 
+        private static final Property<PreviewBackground, Integer> SHADOW_ALPHA =
+                new Property<PreviewBackground, Integer>(Integer.class, "shadowAlpha") {
+                    @Override
+                    public Integer get(PreviewBackground previewBackground) {
+                        return previewBackground.mShadowAlpha;
+                    }
+
+                    @Override
+                    public void set(PreviewBackground previewBackground, Integer alpha) {
+                        previewBackground.mShadowAlpha = alpha;
+                        previewBackground.invalidate();
+                    }
+                };
+
         public void setup(Launcher launcher, View invalidateDelegate,
                    int availableSpace, int topPadding) {
             mInvalidateDelegate = invalidateDelegate;
@@ -692,10 +710,11 @@
             mShaderMatrix.setScale(shadowRadius, shadowRadius);
             mShaderMatrix.postTranslate(radius + offsetX, shadowRadius + offsetY);
             mShadowShader.setLocalMatrix(mShaderMatrix);
+            mPaint.setAlpha(mShadowAlpha);
             mPaint.setShader(mShadowShader);
             canvas.drawPaint(mPaint);
+            mPaint.setAlpha(255);
             mPaint.setShader(null);
-
             if (canvas.isHardwareAccelerated()) {
                 mPaint.setXfermode(mShadowPorterDuffXfermode);
                 canvas.drawCircle(radius + offsetX, radius + offsetY, radius, mPaint);
@@ -705,6 +724,22 @@
             canvas.restoreToCount(saveCount);
         }
 
+        public void fadeInBackgroundShadow() {
+            if (mShadowAnimator != null) {
+                mShadowAnimator.cancel();
+            }
+            mShadowAnimator = ObjectAnimator
+                    .ofInt(this, SHADOW_ALPHA, 0, 255)
+                    .setDuration(100);
+            mShadowAnimator.addListener(new AnimatorListenerAdapter() {
+                @Override
+                public void onAnimationEnd(Animator animation) {
+                    mShadowAnimator = null;
+                }
+            });
+            mShadowAnimator.start();
+        }
+
         public void animateBackgroundStroke() {
             if (mStrokeAlphaAnimator != null) {
                 mStrokeAlphaAnimator.cancel();
diff --git a/src/com/android/launcher3/folder/FolderPagedView.java b/src/com/android/launcher3/folder/FolderPagedView.java
index 898a4e9..87e42eb 100644
--- a/src/com/android/launcher3/folder/FolderPagedView.java
+++ b/src/com/android/launcher3/folder/FolderPagedView.java
@@ -180,6 +180,14 @@
         super.dispatchDraw(canvas);
     }
 
+    public void onIconInvalidated(BubbleTextView icon) {
+        FolderIcon folderIcon = mFolder.mFolderIcon;
+        if (icon.getTag() instanceof ItemInfo
+                && folderIcon.mPreviewVerifier.isItemInPreview(((ItemInfo) icon.getTag()).rank)) {
+            folderIcon.invalidate();
+        }
+    }
+
     /**
      * Binds items to the layout.
      * @return list of items that could not be bound, probably because we hit the max size limit.
diff --git a/src_flags/com/android/launcher3/config/FeatureFlags.java b/src_flags/com/android/launcher3/config/FeatureFlags.java
index 40200c5..42a110c 100644
--- a/src_flags/com/android/launcher3/config/FeatureFlags.java
+++ b/src_flags/com/android/launcher3/config/FeatureFlags.java
@@ -37,7 +37,7 @@
     // When enabled while all-apps open, the soft input will be set to adjust resize .
     public static boolean LAUNCHER3_UPDATE_SOFT_INPUT_MODE = true;
     // When enabled the promise icon is visible in all apps while installation an app.
-    public static boolean LAUNCHER3_PROMISE_APPS_IN_ALL_APPS = true;
+    public static boolean LAUNCHER3_PROMISE_APPS_IN_ALL_APPS = false;
     // When enabled uses the AllAppsRadialGradientAndScrimDrawable for all apps
     public static boolean LAUNCHER3_GRADIENT_ALL_APPS = true;
     // When enabled allows use of physics based motions in the Launcher.