Loading libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java +17 −34 Original line number Diff line number Diff line Loading @@ -245,7 +245,7 @@ public class SplashscreenContentDrawer { private SplashScreenView mCachedResult; private int mThemeColor; private Drawable mFinalIconDrawable; private float mScale = 1f; private int mFinalIconSize = mIconSize; StartingWindowViewBuilder setWindowBGColor(@ColorInt int background) { mThemeColor = background; Loading Loading @@ -282,48 +282,46 @@ public class SplashscreenContentDrawer { Drawable iconDrawable; final int animationDuration; final int iconSize; if (mEmptyView) { // empty splash screen case animationDuration = 0; iconSize = 0; mFinalIconSize = 0; } else if (mTmpAttrs.mReplaceIcon != null) { // replaced icon, don't process iconDrawable = mTmpAttrs.mReplaceIcon; animationDuration = mTmpAttrs.mAnimationDuration; createIconDrawable(iconDrawable, mIconSize); iconSize = mIconSize; createIconDrawable(iconDrawable); } else { final float iconScale = (float) mIconSize / (float) mDefaultIconSize; iconDrawable = mIconProvider.getIcon(mActivityInfo); final int densityDpi = mContext.getResources().getDisplayMetrics().densityDpi; final int scaledIconDpi = (int) (0.5f + iconScale * densityDpi); iconDrawable = mIconProvider.getIcon(mActivityInfo, scaledIconDpi); if (iconDrawable == null) { iconDrawable = mContext.getPackageManager().getDefaultActivityIcon(); } if (!processAdaptiveIcon(iconDrawable, iconScale)) { if (!processAdaptiveIcon(iconDrawable)) { if (DEBUG) { Slog.d(TAG, "The icon is not an AdaptiveIconDrawable"); } // TODO process legacy icon(bitmap) final Drawable tempIcon = loadIconByDensity(iconDrawable, iconScale); createIconDrawable(tempIcon, mIconSize); createIconDrawable(iconDrawable); } animationDuration = 0; iconSize = (int) (0.5 + mIconSize * mScale); } mCachedResult = fillViewWithIcon(iconSize, mFinalIconDrawable, animationDuration); mCachedResult = fillViewWithIcon(mFinalIconSize, mFinalIconDrawable, animationDuration); mBuildComplete = true; return mCachedResult; } private void createIconDrawable(Drawable iconDrawable, int iconSize) { private void createIconDrawable(Drawable iconDrawable) { mFinalIconDrawable = SplashscreenIconDrawableFactory.makeIconDrawable( mTmpAttrs.mIconBgColor != Color.TRANSPARENT ? mTmpAttrs.mIconBgColor : mThemeColor, iconDrawable, iconSize, mSplashscreenWorkerHandler); iconDrawable, mFinalIconSize, mSplashscreenWorkerHandler); } private boolean processAdaptiveIcon(Drawable iconDrawable, float iconScale) { private boolean processAdaptiveIcon(Drawable iconDrawable) { if (!(iconDrawable instanceof AdaptiveIconDrawable)) { return false; } Loading @@ -334,7 +332,7 @@ public class SplashscreenContentDrawer { final DrawableColorTester backIconTester = new DrawableColorTester(adaptiveIconDrawable.getBackground()); Drawable iconForeground = adaptiveIconDrawable.getForeground(); final Drawable iconForeground = adaptiveIconDrawable.getForeground(); final DrawableColorTester foreIconTester = new DrawableColorTester(iconForeground, true /* filterTransparent */); Loading Loading @@ -373,35 +371,20 @@ public class SplashscreenContentDrawer { final float noBgScale = foreIconTester.nonTransparentRatio() < ENLARGE_FOREGROUND_ICON_THRESHOLD ? NO_BACKGROUND_SCALE : 1f; final Drawable tempIcon = loadIconByDensity(iconDrawable, iconScale * noBgScale); if (tempIcon instanceof AdaptiveIconDrawable) { mScale = noBgScale; iconForeground = ((AdaptiveIconDrawable) tempIcon).getForeground(); } // Using AdaptiveIconDrawable here can help keep the shape consistent with the // current settings. final int iconSize = (int) (0.5f + mIconSize * mScale); createIconDrawable(iconForeground, iconSize); mFinalIconSize = (int) (0.5f + mIconSize * noBgScale); createIconDrawable(iconForeground); } else { if (DEBUG) { Slog.d(TAG, "makeSplashScreenContentView: draw whole icon"); } final Drawable tempIcon = loadIconByDensity(iconDrawable, iconScale); createIconDrawable(tempIcon, mIconSize); createIconDrawable(iconDrawable); } Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); return true; } private Drawable loadIconByDensity(Drawable baseDrawable, float scale) { if (scale == 1 && baseDrawable != null) { return baseDrawable; } final int densityDpi = mContext.getResources().getDisplayMetrics().densityDpi; final int updateDpi = (int) (0.5f + scale * densityDpi); return mIconProvider.getIcon(mActivityInfo, updateDpi); } private SplashScreenView fillViewWithIcon(int iconSize, Drawable iconDrawable, int animationDuration) { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "fillViewWithIcon"); Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java +17 −34 Original line number Diff line number Diff line Loading @@ -245,7 +245,7 @@ public class SplashscreenContentDrawer { private SplashScreenView mCachedResult; private int mThemeColor; private Drawable mFinalIconDrawable; private float mScale = 1f; private int mFinalIconSize = mIconSize; StartingWindowViewBuilder setWindowBGColor(@ColorInt int background) { mThemeColor = background; Loading Loading @@ -282,48 +282,46 @@ public class SplashscreenContentDrawer { Drawable iconDrawable; final int animationDuration; final int iconSize; if (mEmptyView) { // empty splash screen case animationDuration = 0; iconSize = 0; mFinalIconSize = 0; } else if (mTmpAttrs.mReplaceIcon != null) { // replaced icon, don't process iconDrawable = mTmpAttrs.mReplaceIcon; animationDuration = mTmpAttrs.mAnimationDuration; createIconDrawable(iconDrawable, mIconSize); iconSize = mIconSize; createIconDrawable(iconDrawable); } else { final float iconScale = (float) mIconSize / (float) mDefaultIconSize; iconDrawable = mIconProvider.getIcon(mActivityInfo); final int densityDpi = mContext.getResources().getDisplayMetrics().densityDpi; final int scaledIconDpi = (int) (0.5f + iconScale * densityDpi); iconDrawable = mIconProvider.getIcon(mActivityInfo, scaledIconDpi); if (iconDrawable == null) { iconDrawable = mContext.getPackageManager().getDefaultActivityIcon(); } if (!processAdaptiveIcon(iconDrawable, iconScale)) { if (!processAdaptiveIcon(iconDrawable)) { if (DEBUG) { Slog.d(TAG, "The icon is not an AdaptiveIconDrawable"); } // TODO process legacy icon(bitmap) final Drawable tempIcon = loadIconByDensity(iconDrawable, iconScale); createIconDrawable(tempIcon, mIconSize); createIconDrawable(iconDrawable); } animationDuration = 0; iconSize = (int) (0.5 + mIconSize * mScale); } mCachedResult = fillViewWithIcon(iconSize, mFinalIconDrawable, animationDuration); mCachedResult = fillViewWithIcon(mFinalIconSize, mFinalIconDrawable, animationDuration); mBuildComplete = true; return mCachedResult; } private void createIconDrawable(Drawable iconDrawable, int iconSize) { private void createIconDrawable(Drawable iconDrawable) { mFinalIconDrawable = SplashscreenIconDrawableFactory.makeIconDrawable( mTmpAttrs.mIconBgColor != Color.TRANSPARENT ? mTmpAttrs.mIconBgColor : mThemeColor, iconDrawable, iconSize, mSplashscreenWorkerHandler); iconDrawable, mFinalIconSize, mSplashscreenWorkerHandler); } private boolean processAdaptiveIcon(Drawable iconDrawable, float iconScale) { private boolean processAdaptiveIcon(Drawable iconDrawable) { if (!(iconDrawable instanceof AdaptiveIconDrawable)) { return false; } Loading @@ -334,7 +332,7 @@ public class SplashscreenContentDrawer { final DrawableColorTester backIconTester = new DrawableColorTester(adaptiveIconDrawable.getBackground()); Drawable iconForeground = adaptiveIconDrawable.getForeground(); final Drawable iconForeground = adaptiveIconDrawable.getForeground(); final DrawableColorTester foreIconTester = new DrawableColorTester(iconForeground, true /* filterTransparent */); Loading Loading @@ -373,35 +371,20 @@ public class SplashscreenContentDrawer { final float noBgScale = foreIconTester.nonTransparentRatio() < ENLARGE_FOREGROUND_ICON_THRESHOLD ? NO_BACKGROUND_SCALE : 1f; final Drawable tempIcon = loadIconByDensity(iconDrawable, iconScale * noBgScale); if (tempIcon instanceof AdaptiveIconDrawable) { mScale = noBgScale; iconForeground = ((AdaptiveIconDrawable) tempIcon).getForeground(); } // Using AdaptiveIconDrawable here can help keep the shape consistent with the // current settings. final int iconSize = (int) (0.5f + mIconSize * mScale); createIconDrawable(iconForeground, iconSize); mFinalIconSize = (int) (0.5f + mIconSize * noBgScale); createIconDrawable(iconForeground); } else { if (DEBUG) { Slog.d(TAG, "makeSplashScreenContentView: draw whole icon"); } final Drawable tempIcon = loadIconByDensity(iconDrawable, iconScale); createIconDrawable(tempIcon, mIconSize); createIconDrawable(iconDrawable); } Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); return true; } private Drawable loadIconByDensity(Drawable baseDrawable, float scale) { if (scale == 1 && baseDrawable != null) { return baseDrawable; } final int densityDpi = mContext.getResources().getDisplayMetrics().densityDpi; final int updateDpi = (int) (0.5f + scale * densityDpi); return mIconProvider.getIcon(mActivityInfo, updateDpi); } private SplashScreenView fillViewWithIcon(int iconSize, Drawable iconDrawable, int animationDuration) { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "fillViewWithIcon"); Loading