diff options
Diffstat (limited to 'src/com/android/launcher3/graphics')
7 files changed, 68 insertions, 19 deletions
diff --git a/src/com/android/launcher3/graphics/DragPreviewProvider.java b/src/com/android/launcher3/graphics/DragPreviewProvider.java index bb136f7a3..492d85373 100644 --- a/src/com/android/launcher3/graphics/DragPreviewProvider.java +++ b/src/com/android/launcher3/graphics/DragPreviewProvider.java @@ -29,7 +29,7 @@ import com.android.launcher3.Launcher; import com.android.launcher3.LauncherAppWidgetHostView; import com.android.launcher3.R; import com.android.launcher3.Workspace; -import com.android.launcher3.config.ProviderConfig; +import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.folder.FolderIcon; /** @@ -138,7 +138,7 @@ public class DragPreviewProvider { } public final void generateDragOutline(Canvas canvas) { - if (ProviderConfig.IS_DOGFOOD_BUILD && generatedDragOutline != null) { + if (FeatureFlags.IS_DOGFOOD_BUILD && generatedDragOutline != null) { throw new RuntimeException("Drag outline generated twice"); } diff --git a/src/com/android/launcher3/graphics/DrawableFactory.java b/src/com/android/launcher3/graphics/DrawableFactory.java index 8b207bb0c..60bbce406 100644 --- a/src/com/android/launcher3/graphics/DrawableFactory.java +++ b/src/com/android/launcher3/graphics/DrawableFactory.java @@ -85,10 +85,10 @@ public class DrawableFactory { if (Utilities.isAtLeastO()) { try { // Try to load the path from Mask Icon - Drawable maskIcon = context.getDrawable(R.drawable.mask_drawable_wrapper); - maskIcon.setBounds(0, 0, + Drawable icon = context.getDrawable(R.drawable.adaptive_icon_drawable_wrapper); + icon.setBounds(0, 0, PreloadIconDrawable.PATH_SIZE, PreloadIconDrawable.PATH_SIZE); - return (Path) maskIcon.getClass().getMethod("getIconMask").invoke(maskIcon); + return (Path) icon.getClass().getMethod("getIconMask").invoke(icon); } catch (Exception e) { Log.e(TAG, "Error loading mask icon", e); } diff --git a/src/com/android/launcher3/graphics/HolographicOutlineHelper.java b/src/com/android/launcher3/graphics/HolographicOutlineHelper.java index c9873d9ea..b22182883 100644 --- a/src/com/android/launcher3/graphics/HolographicOutlineHelper.java +++ b/src/com/android/launcher3/graphics/HolographicOutlineHelper.java @@ -31,7 +31,7 @@ import android.util.SparseArray; import com.android.launcher3.BubbleTextView; import com.android.launcher3.R; -import com.android.launcher3.config.ProviderConfig; +import com.android.launcher3.config.FeatureFlags; import java.nio.ByteBuffer; @@ -86,7 +86,7 @@ public class HolographicOutlineHelper { * bitmap. */ public void applyExpensiveOutlineWithBlur(Bitmap srcDst, Canvas srcDstCanvas) { - if (ProviderConfig.IS_DOGFOOD_BUILD && srcDst.getConfig() != Bitmap.Config.ALPHA_8) { + if (FeatureFlags.IS_DOGFOOD_BUILD && srcDst.getConfig() != Bitmap.Config.ALPHA_8) { throw new RuntimeException("Outline blue is only supported on alpha bitmaps"); } diff --git a/src/com/android/launcher3/graphics/IconPalette.java b/src/com/android/launcher3/graphics/IconPalette.java index 23c6a1230..cd7cf702e 100644 --- a/src/com/android/launcher3/graphics/IconPalette.java +++ b/src/com/android/launcher3/graphics/IconPalette.java @@ -19,11 +19,12 @@ package com.android.launcher3.graphics; import android.app.Notification; import android.content.Context; import android.graphics.Color; +import android.graphics.ColorMatrix; +import android.graphics.ColorMatrixColorFilter; import android.support.v4.graphics.ColorUtils; import android.util.Log; import com.android.launcher3.R; -import com.android.launcher3.Utilities; import com.android.launcher3.util.Themes; /** @@ -41,12 +42,16 @@ public class IconPalette { public final int dominantColor; public final int backgroundColor; + public final ColorMatrixColorFilter backgroundColorMatrixFilter; public final int textColor; public final int secondaryColor; private IconPalette(int color) { dominantColor = color; backgroundColor = getMutedColor(dominantColor); + ColorMatrix backgroundColorMatrix = new ColorMatrix(); + Themes.setColorScaleOnMatrix(backgroundColor, backgroundColorMatrix); + backgroundColorMatrixFilter = new ColorMatrixColorFilter(backgroundColorMatrix); textColor = getTextColorForBackground(backgroundColor); secondaryColor = getLowContrastColor(backgroundColor); } diff --git a/src/com/android/launcher3/graphics/LauncherIcons.java b/src/com/android/launcher3/graphics/LauncherIcons.java index 1a50dfe14..ef54661d3 100644 --- a/src/com/android/launcher3/graphics/LauncherIcons.java +++ b/src/com/android/launcher3/graphics/LauncherIcons.java @@ -40,7 +40,6 @@ import com.android.launcher3.LauncherAppState; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.config.FeatureFlags; -import com.android.launcher3.config.ProviderConfig; import com.android.launcher3.model.PackageItemInfo; import com.android.launcher3.shortcuts.DeepShortcutManager; import com.android.launcher3.shortcuts.ShortcutInfoCompat; @@ -166,7 +165,7 @@ public class LauncherIcons { * @param scale the scale to apply before drawing {@param icon} on the canvas */ public static Bitmap createIconBitmap(Drawable icon, Context context, float scale) { - icon = wrapToMaskableIconDrawable(context, icon); + icon = wrapToAdaptiveIconDrawable(context, icon); synchronized (sCanvas) { final int iconBitmapSize = LauncherAppState.getIDP(context).iconBitmapSize; @@ -201,7 +200,7 @@ public class LauncherIcons { int textureWidth = iconBitmapSize; int textureHeight = iconBitmapSize; - final Bitmap bitmap = Bitmap.createBitmap(textureWidth, textureHeight, + Bitmap bitmap = Bitmap.createBitmap(textureWidth, textureHeight, Bitmap.Config.ARGB_8888); final Canvas canvas = sCanvas; canvas.setBitmap(bitmap); @@ -218,29 +217,39 @@ public class LauncherIcons { icon.setBounds(sOldBounds); canvas.setBitmap(null); + if (FeatureFlags.ADAPTIVE_ICON_SHADOW && Utilities.isAtLeastO()) { + try { + Class clazz = Class.forName("android.graphics.drawable.AdaptiveIconDrawable"); + if (clazz.isAssignableFrom(icon.getClass())) { + bitmap = ShadowGenerator.getInstance(context).recreateIcon(bitmap); + } + } catch (Exception e) { + // do nothing + } + } return bitmap; } } /** - * If the platform is running O but the app is not providing MaskableIconDrawable, then + * If the platform is running O but the app is not providing AdaptiveIconDrawable, then * shrink the legacy icon and set it as foreground. Use color drawable as background to - * create MaskableIconDrawable. + * create AdaptiveIconDrawable. */ - static Drawable wrapToMaskableIconDrawable(Context context, Drawable drawable) { + static Drawable wrapToAdaptiveIconDrawable(Context context, Drawable drawable) { if (!(FeatureFlags.LEGACY_ICON_TREATMENT && Utilities.isAtLeastO())) { return drawable; } try { - Class clazz = Class.forName("android.graphics.drawable.MaskableIconDrawable"); + Class clazz = Class.forName("android.graphics.drawable.AdaptiveIconDrawable"); if (!clazz.isAssignableFrom(drawable.getClass())) { - Drawable maskWrapper = - context.getDrawable(R.drawable.mask_drawable_wrapper).mutate(); - ((FixedScaleDrawable) clazz.getMethod("getForeground").invoke(maskWrapper)) + Drawable iconWrapper = + context.getDrawable(R.drawable.adaptive_icon_drawable_wrapper).mutate(); + ((FixedScaleDrawable) clazz.getMethod("getForeground").invoke(iconWrapper)) .setDrawable(drawable); - return maskWrapper; + return iconWrapper; } } catch (Exception e) { return drawable; diff --git a/src/com/android/launcher3/graphics/PreloadIconDrawable.java b/src/com/android/launcher3/graphics/PreloadIconDrawable.java index 3514a37c4..22ce0981d 100644 --- a/src/com/android/launcher3/graphics/PreloadIconDrawable.java +++ b/src/com/android/launcher3/graphics/PreloadIconDrawable.java @@ -217,6 +217,9 @@ public class PreloadIconDrawable extends FastBitmapDrawable { if (Float.compare(finalProgress, mInternalStateProgress) == 0) { return; } + if (finalProgress < mInternalStateProgress) { + shouldAnimate = false; + } if (!shouldAnimate || mRanFinishAnimation) { setInternalProgress(finalProgress); } else { diff --git a/src/com/android/launcher3/graphics/ShadowGenerator.java b/src/com/android/launcher3/graphics/ShadowGenerator.java index 31276ecc0..6c603c971 100644 --- a/src/com/android/launcher3/graphics/ShadowGenerator.java +++ b/src/com/android/launcher3/graphics/ShadowGenerator.java @@ -83,6 +83,38 @@ public class ShadowGenerator { return result; } + public static Bitmap createCircleWithShadow(int circleColor, int diameter) { + + float shadowRadius = diameter * 1f / 32; + float shadowYOffset = diameter * 1f / 16; + + int radius = diameter / 2; + + Canvas canvas = new Canvas(); + Paint blurPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); + blurPaint.setMaskFilter(new BlurMaskFilter(shadowRadius, Blur.NORMAL)); + + int center = Math.round(radius + shadowRadius + shadowYOffset); + int size = center * 2; + Bitmap result = Bitmap.createBitmap(size, size, Config.ARGB_8888); + canvas.setBitmap(result); + + // Draw ambient shadow, center aligned within size + blurPaint.setAlpha(AMBIENT_SHADOW_ALPHA); + canvas.drawCircle(center, center, radius, blurPaint); + + // Draw key shadow, bottom aligned within size + blurPaint.setAlpha(KEY_SHADOW_ALPHA); + canvas.drawCircle(center, center + shadowYOffset, radius, blurPaint); + + // Draw the circle + Paint drawPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); + drawPaint.setColor(circleColor); + canvas.drawCircle(center, center, radius, drawPaint); + + return result; + } + public static ShadowGenerator getInstance(Context context) { Preconditions.assertNonUiThread(); synchronized (LOCK) { |