diff options
2 files changed, 20 insertions, 68 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java index 107a3f880354..56ad2be11853 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java @@ -37,6 +37,7 @@ import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Rect; import android.graphics.drawable.AdaptiveIconDrawable; +import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; @@ -57,6 +58,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.graphics.palette.Palette; import com.android.internal.graphics.palette.Quantizer; import com.android.internal.graphics.palette.VariationalKMeansQuantizer; +import com.android.launcher3.icons.BaseIconFactory; import com.android.launcher3.icons.IconProvider; import com.android.wm.shell.common.TransactionPool; @@ -368,8 +370,14 @@ public class SplashscreenContentDrawer { if (DEBUG) { Slog.d(TAG, "The icon is not an AdaptiveIconDrawable"); } - // TODO process legacy icon(bitmap) - createIconDrawable(iconDrawable, true); + Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "legacy_icon_factory"); + final ShapeIconFactory factory = new ShapeIconFactory( + SplashscreenContentDrawer.this.mContext, + scaledIconDpi, mFinalIconSize); + final Bitmap bitmap = factory.createScaledBitmapWithoutShadow( + iconDrawable, true /* shrinkNonAdaptiveIcons */); + Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); + createIconDrawable(new BitmapDrawable(bitmap), true); } animationDuration = 0; } @@ -377,11 +385,15 @@ public class SplashscreenContentDrawer { return fillViewWithIcon(mFinalIconSize, mFinalIconDrawable, animationDuration); } + private class ShapeIconFactory extends BaseIconFactory { + protected ShapeIconFactory(Context context, int fillResIconDpi, int iconBitmapSize) { + super(context, fillResIconDpi, iconBitmapSize, true /* shapeDetection */); + } + } + private void createIconDrawable(Drawable iconDrawable, boolean legacy) { if (legacy) { mFinalIconDrawable = SplashscreenIconDrawableFactory.makeLegacyIconDrawable( - mTmpAttrs.mIconBgColor != Color.TRANSPARENT - ? mTmpAttrs.mIconBgColor : Color.WHITE, iconDrawable, mDefaultIconSize, mFinalIconSize, mSplashscreenWorkerHandler); } else { mFinalIconDrawable = SplashscreenIconDrawableFactory.makeIconDrawable( diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenIconDrawableFactory.java b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenIconDrawableFactory.java index 211941f44c8e..ba9123dca999 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenIconDrawableFactory.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenIconDrawableFactory.java @@ -64,11 +64,10 @@ public class SplashscreenIconDrawableFactory { } } - static Drawable makeLegacyIconDrawable(@ColorInt int backgroundColor, - @NonNull Drawable foregroundDrawable, int srcIconSize, int iconSize, - Handler splashscreenWorkerHandler) { - return new ImmobileIconDrawable(new LegacyIconDrawable(backgroundColor, - foregroundDrawable), srcIconSize, iconSize, splashscreenWorkerHandler); + static Drawable makeLegacyIconDrawable(@NonNull Drawable iconDrawable, int srcIconSize, + int iconSize, Handler splashscreenWorkerHandler) { + return new ImmobileIconDrawable(iconDrawable, srcIconSize, iconSize, + splashscreenWorkerHandler); } private static class ImmobileIconDrawable extends Drawable { @@ -179,65 +178,6 @@ public class SplashscreenIconDrawableFactory { } } - private static class LegacyIconDrawable extends MaskBackgroundDrawable { - // reference FixedScaleDrawable - // iconBounds = 0.7 * X * outerBounds, X is the scale of diagonal - private static final float LEGACY_ICON_SCALE = .7f * .8f; - private final Drawable mForegroundDrawable; - private float mScaleX, mScaleY, mTransX, mTransY; - - LegacyIconDrawable(@ColorInt int backgroundColor, Drawable foregroundDrawable) { - super(backgroundColor); - mForegroundDrawable = foregroundDrawable; - mScaleX = LEGACY_ICON_SCALE; - mScaleY = LEGACY_ICON_SCALE; - } - - @Override - protected void updateLayerBounds(Rect bounds) { - super.updateLayerBounds(bounds); - - if (mForegroundDrawable == null) { - return; - } - float outerBoundsWidth = bounds.width(); - float outerBoundsHeight = bounds.height(); - float h = mForegroundDrawable.getIntrinsicHeight(); - float w = mForegroundDrawable.getIntrinsicWidth(); - mScaleX = LEGACY_ICON_SCALE; - mScaleY = LEGACY_ICON_SCALE; - if (h > w && w > 0) { - mScaleX *= w / h; - } else if (w > h && h > 0) { - mScaleY *= h / w; - } - int innerBoundsWidth = (int) (0.5 + outerBoundsWidth * mScaleX); - int innerBoundsHeight = (int) (0.5 + outerBoundsHeight * mScaleY); - final Rect rect = new Rect(0, 0, innerBoundsWidth, innerBoundsHeight); - mForegroundDrawable.setBounds(rect); - mTransX = (outerBoundsWidth - innerBoundsWidth) / 2; - mTransY = (outerBoundsHeight - innerBoundsHeight) / 2; - invalidateSelf(); - } - - @Override - public void draw(Canvas canvas) { - super.draw(canvas); - int saveCount = canvas.save(); - canvas.translate(mTransX, mTransY); - if (mForegroundDrawable != null) { - mForegroundDrawable.draw(canvas); - } - canvas.restoreToCount(saveCount); - } - - @Override - public void setColorFilter(ColorFilter colorFilter) { - if (mForegroundDrawable != null) { - mForegroundDrawable.setColorFilter(colorFilter); - } - } - } /** * A lightweight AdaptiveIconDrawable which support foreground to be Animatable, and keep this * drawable masked by config_icon_mask. |