Loading libs/WindowManager/Shell/src/com/android/wm/shell/protolog/ShellProtoLogGroup.java +3 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,8 @@ public enum ShellProtoLogGroup implements IProtoLogGroup { Consts.TAG_WM_SHELL), WM_SHELL_DRAG_AND_DROP(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, false, Consts.TAG_WM_SHELL), WM_SHELL_STARTING_WINDOW(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, false, Consts.TAG_WM_STARTING_WINDOW), TEST_GROUP(true, true, false, "WindowManagerShellProtoLogTest"); private final boolean mEnabled; Loading Loading @@ -91,6 +93,7 @@ public enum ShellProtoLogGroup implements IProtoLogGroup { private static class Consts { private static final String TAG_WM_SHELL = "WindowManagerShell"; private static final String TAG_WM_STARTING_WINDOW = "ShellStartingWindow"; private static final boolean ENABLE_DEBUG = true; private static final boolean ENABLE_LOG_TO_PROTO_DEBUG = true; Loading libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashScreenExitAnimation.java +1 −1 Original line number Diff line number Diff line Loading @@ -56,7 +56,7 @@ import com.android.wm.shell.common.TransactionPool; public class SplashScreenExitAnimation implements Animator.AnimatorListener { private static final boolean DEBUG_EXIT_ANIMATION = false; private static final boolean DEBUG_EXIT_ANIMATION_BLEND = false; private static final String TAG = StartingSurfaceDrawer.TAG; private static final String TAG = StartingWindowController.TAG; private static final Interpolator ICON_INTERPOLATOR = new PathInterpolator(0.15f, 0f, 1f, 1f); private static final Interpolator MASK_RADIUS_INTERPOLATOR = Loading libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java +33 −46 Original line number Diff line number Diff line Loading @@ -61,9 +61,11 @@ 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.internal.protolog.common.ProtoLog; import com.android.launcher3.icons.BaseIconFactory; import com.android.launcher3.icons.IconProvider; import com.android.wm.shell.common.TransactionPool; import com.android.wm.shell.protolog.ShellProtoLogGroup; import java.util.List; import java.util.function.Consumer; Loading @@ -78,8 +80,7 @@ import java.util.function.UnaryOperator; * @hide */ public class SplashscreenContentDrawer { private static final String TAG = StartingSurfaceDrawer.TAG; private static final boolean DEBUG = StartingSurfaceDrawer.DEBUG_SPLASH_SCREEN; private static final String TAG = StartingWindowController.TAG; // The acceptable area ratio of foreground_icon_area/background_icon_area, if there is an // icon which it's non-transparent foreground area is similar to it's background area, then Loading Loading @@ -295,12 +296,10 @@ public class SplashscreenContentDrawer { R.styleable.Window_windowSplashScreenIconBackgroundColor, def), Color.TRANSPARENT); typedArray.recycle(); if (DEBUG) { Slog.d(TAG, "window attributes color: " + Integer.toHexString(attrs.mWindowBgColor) + " icon " + attrs.mSplashScreenIcon + " duration " + attrs.mAnimationDuration + " brandImage " + attrs.mBrandingImage); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "getWindowAttrs: window attributes color: %s, replace icon: %b, avd duration: %d", Integer.toHexString(attrs.mWindowBgColor), attrs.mSplashScreenIcon != null, attrs.mAnimationDuration); } /** Creates the wrapper with system theme to avoid unexpected styles from app. */ Loading Loading @@ -385,9 +384,8 @@ public class SplashscreenContentDrawer { iconDrawable = mContext.getPackageManager().getDefaultActivityIcon(); } if (!processAdaptiveIcon(iconDrawable)) { if (DEBUG) { Slog.d(TAG, "The icon is not an AdaptiveIconDrawable"); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "The icon is not an AdaptiveIconDrawable"); Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "legacy_icon_factory"); final ShapeIconFactory factory = new ShapeIconFactory( SplashscreenContentDrawer.this.mContext, Loading Loading @@ -435,14 +433,14 @@ public class SplashscreenContentDrawer { () -> new DrawableColorTester(iconForeground, DrawableColorTester.TRANSLUCENT_FILTER /* filterType */), () -> new DrawableColorTester(adaptiveIconDrawable.getBackground())); if (DEBUG) { Slog.d(TAG, "FgMainColor=" + Integer.toHexString(iconColor.mFgColor) + " BgMainColor=" + Integer.toHexString(iconColor.mBgColor) + " IsBgComplex=" + iconColor.mIsBgComplex + " FromCache=" + (iconColor.mReuseCount > 0) + " ThemeColor=" + Integer.toHexString(mThemeColor)); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "processAdaptiveIcon: FgMainColor=%s, BgMainColor=%s, " + "IsBgComplex=%b, FromCache=%b, ThemeColor=%s", Integer.toHexString(iconColor.mFgColor), Integer.toHexString(iconColor.mBgColor), iconColor.mIsBgComplex, iconColor.mReuseCount > 0, Integer.toHexString(mThemeColor)); // Only draw the foreground of AdaptiveIcon to the splash screen if below condition // meet: Loading @@ -456,9 +454,8 @@ public class SplashscreenContentDrawer { && (isRgbSimilarInHsv(mThemeColor, iconColor.mBgColor) || (iconColor.mIsBgGrayscale && !isRgbSimilarInHsv(mThemeColor, iconColor.mFgColor)))) { if (DEBUG) { Slog.d(TAG, "makeSplashScreenContentView: choose fg icon"); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "processAdaptiveIcon: choose fg icon"); // Reference AdaptiveIcon description, outer is 108 and inner is 72, so we // scale by 192/160 if we only draw adaptiveIcon's foreground. final float noBgScale = Loading @@ -469,9 +466,8 @@ public class SplashscreenContentDrawer { mFinalIconSize = (int) (0.5f + mIconSize * noBgScale); createIconDrawable(iconForeground, false); } else { if (DEBUG) { Slog.d(TAG, "makeSplashScreenContentView: draw whole icon"); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "processAdaptiveIcon: draw whole icon"); createIconDrawable(iconDrawable, false); } Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); Loading Loading @@ -504,9 +500,6 @@ public class SplashscreenContentDrawer { mBrandingImageHeight); } final SplashScreenView splashScreenView = builder.build(); if (DEBUG) { Slog.d(TAG, "fillViewWithIcon surfaceWindowView " + splashScreenView); } if (mSuggestType != STARTING_WINDOW_TYPE_LEGACY_SPLASH_SCREEN) { splashScreenView.addOnAttachStateChangeListener( new View.OnAttachStateChangeListener() { Loading Loading @@ -536,10 +529,9 @@ public class SplashscreenContentDrawer { final float lumB = Color.luminance(b); final float contrastRatio = lumA > lumB ? (lumA + 0.05f) / (lumB + 0.05f) : (lumB + 0.05f) / (lumA + 0.05f); if (DEBUG) { Slog.d(TAG, "isRgbSimilarInHsv a: " + Integer.toHexString(a) + " b " + Integer.toHexString(b) + " contrast ratio: " + contrastRatio); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "isRgbSimilarInHsv a:%s, b:%s, contrast ratio:%f", Integer.toHexString(a), Integer.toHexString(b), contrastRatio); if (contrastRatio < 2) { return true; } Loading @@ -560,14 +552,11 @@ public class SplashscreenContentDrawer { final double square = squareH + squareS + squareV; final double mean = square / 3; final double root = Math.sqrt(mean); if (DEBUG) { Slog.d(TAG, "hsvDiff " + minAngle + " ah " + aHsv[0] + " bh " + bHsv[0] + " as " + aHsv[1] + " bs " + bHsv[1] + " av " + aHsv[2] + " bv " + bHsv[2] + " sqH " + squareH + " sqS " + squareS + " sqV " + squareV + " root " + root); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "isRgbSimilarInHsv hsvDiff: %d, ah: %f, bh: %f, as: %f, bs: %f, av: %f, bv: %f, " + "sqH: %f, sqS: %f, sqV: %f, rsm: %f", minAngle, aHsv[0], bHsv[0], aHsv[1], bHsv[1], aHsv[2], bHsv[2], squareH, squareS, squareV, root); return root < 0.1; } Loading Loading @@ -598,9 +587,8 @@ public class SplashscreenContentDrawer { if (drawable instanceof LayerDrawable) { LayerDrawable layerDrawable = (LayerDrawable) drawable; if (layerDrawable.getNumberOfLayers() > 0) { if (DEBUG) { Slog.d(TAG, "replace drawable with bottom layer drawable"); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "DrawableColorTester: replace drawable with bottom layer drawable"); drawable = layerDrawable.getDrawable(0); } } Loading Loading @@ -805,9 +793,8 @@ public class SplashscreenContentDrawer { } } if (realSize == 0) { if (DEBUG) { Slog.d(TAG, "quantize: this is pure transparent image"); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "DrawableTester quantize: pure transparent image"); mInnerQuantizer.quantize(pixels, maxColors); return; } Loading libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenIconDrawableFactory.java +1 −1 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ import com.android.internal.R; */ public class SplashscreenIconDrawableFactory { private static final String TAG = "SplashscreenIconDrawableFactory"; private static final String TAG = StartingWindowController.TAG; /** * @return An array containing the foreground drawable at index 0 and if needed a background Loading libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java +25 −35 Original line number Diff line number Diff line Loading @@ -61,10 +61,12 @@ import android.window.TaskSnapshot; import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.protolog.common.ProtoLog; import com.android.launcher3.icons.IconProvider; import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.TransactionPool; import com.android.wm.shell.common.annotations.ShellSplashscreenThread; import com.android.wm.shell.protolog.ShellProtoLogGroup; import java.util.function.Supplier; Loading Loading @@ -106,9 +108,7 @@ import java.util.function.Supplier; */ @ShellSplashscreenThread public class StartingSurfaceDrawer { static final String TAG = StartingSurfaceDrawer.class.getSimpleName(); static final boolean DEBUG_SPLASH_SCREEN = StartingWindowController.DEBUG_SPLASH_SCREEN; static final boolean DEBUG_TASK_SNAPSHOT = StartingWindowController.DEBUG_TASK_SNAPSHOT; private static final String TAG = StartingWindowController.TAG; private final Context mContext; private final DisplayManager mDisplayManager; Loading Loading @@ -178,11 +178,9 @@ public class StartingSurfaceDrawer { // replace with the default theme if the application didn't set final int theme = getSplashScreenTheme(windowInfo.splashScreenThemeResId, activityInfo); if (DEBUG_SPLASH_SCREEN) { Slog.d(TAG, "addSplashScreen " + activityInfo.packageName + " theme=" + Integer.toHexString(theme) + " task=" + taskInfo.taskId + " suggestType=" + suggestType); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "addSplashScreen for package: %s with theme: %s for task: %d, suggestType: %d", activityInfo.packageName, Integer.toHexString(theme), taskId, suggestType); final Display display = getDisplay(displayId); if (display == null) { // Can't show splash screen on requested display, so skip showing at all. Loading @@ -207,10 +205,9 @@ public class StartingSurfaceDrawer { final Configuration taskConfig = taskInfo.getConfiguration(); if (taskConfig.diffPublicOnly(context.getResources().getConfiguration()) != 0) { if (DEBUG_SPLASH_SCREEN) { Slog.d(TAG, "addSplashScreen: creating context based" + " on task Configuration " + taskConfig + " for splash screen"); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "addSplashScreen: creating context based on task Configuration %s", taskConfig); final Context overrideContext = context.createConfigurationContext(taskConfig); overrideContext.setTheme(theme); final TypedArray typedArray = overrideContext.obtainStyledAttributes( Loading @@ -221,10 +218,9 @@ public class StartingSurfaceDrawer { // We want to use the windowBackground for the override context if it is // available, otherwise we use the default one to make sure a themed starting // window is displayed for the app. if (DEBUG_SPLASH_SCREEN) { Slog.d(TAG, "addSplashScreen: apply overrideConfig" + taskConfig + " to starting window resId=" + resId); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "addSplashScreen: apply overrideConfig %s", taskConfig); context = overrideContext; } } catch (Resources.NotFoundException e) { Loading Loading @@ -460,10 +456,9 @@ public class StartingSurfaceDrawer { * Called when the content of a task is ready to show, starting window can be removed. */ public void removeStartingWindow(StartingWindowRemovalInfo removalInfo) { if (DEBUG_SPLASH_SCREEN || DEBUG_TASK_SNAPSHOT) { Slog.d(TAG, "Task start finish, remove starting surface for task " + removalInfo.taskId); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "Task start finish, remove starting surface for task: %d", removalInfo.taskId); removeWindowSynced(removalInfo); } Loading @@ -485,10 +480,9 @@ public class StartingSurfaceDrawer { } else { parcelable = null; } if (DEBUG_SPLASH_SCREEN) { Slog.v(TAG, "Copying splash screen window view for task: " + taskId + " parcelable: " + parcelable); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "Copying splash screen window view for task: %d with parcelable %b", taskId, parcelable != null); ActivityTaskManager.getInstance().onSplashScreenViewCopyFinished(taskId, parcelable); } Loading @@ -514,11 +508,9 @@ public class StartingSurfaceDrawer { return; } mAnimatedSplashScreenSurfaceHosts.remove(taskId); if (DEBUG_SPLASH_SCREEN) { String reason = fromServer ? "Server cleaned up" : "App removed"; Slog.v(TAG, reason + "the splash screen. Releasing SurfaceControlViewHost for task:" + taskId); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "%s the splash screen. Releasing SurfaceControlViewHost for task: %d", fromServer ? "Server cleaned up" : "App removed", taskId); SplashScreenView.releaseIconHost(viewHost); } Loading Loading @@ -576,9 +568,8 @@ public class StartingSurfaceDrawer { final StartingWindowRecord record = mStartingWindowRecords.get(taskId); if (record != null) { if (record.mDecorView != null) { if (DEBUG_SPLASH_SCREEN) { Slog.v(TAG, "Removing splash screen window for task: " + taskId); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "Removing splash screen window for task: %d", taskId); if (record.mContentView != null) { if (record.mSuggestType == STARTING_WINDOW_TYPE_LEGACY_SPLASH_SCREEN) { removeWindowInner(record.mDecorView, false); Loading @@ -601,9 +592,8 @@ public class StartingSurfaceDrawer { mStartingWindowRecords.remove(taskId); } if (record.mTaskSnapshotWindow != null) { if (DEBUG_TASK_SNAPSHOT) { Slog.v(TAG, "Removing task snapshot window for " + taskId); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "Removing task snapshot window for %d", taskId); record.mTaskSnapshotWindow.scheduleRemove( () -> mStartingWindowRecords.remove(taskId), removalInfo.deferRemoveForIme); } Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/protolog/ShellProtoLogGroup.java +3 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,8 @@ public enum ShellProtoLogGroup implements IProtoLogGroup { Consts.TAG_WM_SHELL), WM_SHELL_DRAG_AND_DROP(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, false, Consts.TAG_WM_SHELL), WM_SHELL_STARTING_WINDOW(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, false, Consts.TAG_WM_STARTING_WINDOW), TEST_GROUP(true, true, false, "WindowManagerShellProtoLogTest"); private final boolean mEnabled; Loading Loading @@ -91,6 +93,7 @@ public enum ShellProtoLogGroup implements IProtoLogGroup { private static class Consts { private static final String TAG_WM_SHELL = "WindowManagerShell"; private static final String TAG_WM_STARTING_WINDOW = "ShellStartingWindow"; private static final boolean ENABLE_DEBUG = true; private static final boolean ENABLE_LOG_TO_PROTO_DEBUG = true; Loading
libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashScreenExitAnimation.java +1 −1 Original line number Diff line number Diff line Loading @@ -56,7 +56,7 @@ import com.android.wm.shell.common.TransactionPool; public class SplashScreenExitAnimation implements Animator.AnimatorListener { private static final boolean DEBUG_EXIT_ANIMATION = false; private static final boolean DEBUG_EXIT_ANIMATION_BLEND = false; private static final String TAG = StartingSurfaceDrawer.TAG; private static final String TAG = StartingWindowController.TAG; private static final Interpolator ICON_INTERPOLATOR = new PathInterpolator(0.15f, 0f, 1f, 1f); private static final Interpolator MASK_RADIUS_INTERPOLATOR = Loading
libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java +33 −46 Original line number Diff line number Diff line Loading @@ -61,9 +61,11 @@ 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.internal.protolog.common.ProtoLog; import com.android.launcher3.icons.BaseIconFactory; import com.android.launcher3.icons.IconProvider; import com.android.wm.shell.common.TransactionPool; import com.android.wm.shell.protolog.ShellProtoLogGroup; import java.util.List; import java.util.function.Consumer; Loading @@ -78,8 +80,7 @@ import java.util.function.UnaryOperator; * @hide */ public class SplashscreenContentDrawer { private static final String TAG = StartingSurfaceDrawer.TAG; private static final boolean DEBUG = StartingSurfaceDrawer.DEBUG_SPLASH_SCREEN; private static final String TAG = StartingWindowController.TAG; // The acceptable area ratio of foreground_icon_area/background_icon_area, if there is an // icon which it's non-transparent foreground area is similar to it's background area, then Loading Loading @@ -295,12 +296,10 @@ public class SplashscreenContentDrawer { R.styleable.Window_windowSplashScreenIconBackgroundColor, def), Color.TRANSPARENT); typedArray.recycle(); if (DEBUG) { Slog.d(TAG, "window attributes color: " + Integer.toHexString(attrs.mWindowBgColor) + " icon " + attrs.mSplashScreenIcon + " duration " + attrs.mAnimationDuration + " brandImage " + attrs.mBrandingImage); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "getWindowAttrs: window attributes color: %s, replace icon: %b, avd duration: %d", Integer.toHexString(attrs.mWindowBgColor), attrs.mSplashScreenIcon != null, attrs.mAnimationDuration); } /** Creates the wrapper with system theme to avoid unexpected styles from app. */ Loading Loading @@ -385,9 +384,8 @@ public class SplashscreenContentDrawer { iconDrawable = mContext.getPackageManager().getDefaultActivityIcon(); } if (!processAdaptiveIcon(iconDrawable)) { if (DEBUG) { Slog.d(TAG, "The icon is not an AdaptiveIconDrawable"); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "The icon is not an AdaptiveIconDrawable"); Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "legacy_icon_factory"); final ShapeIconFactory factory = new ShapeIconFactory( SplashscreenContentDrawer.this.mContext, Loading Loading @@ -435,14 +433,14 @@ public class SplashscreenContentDrawer { () -> new DrawableColorTester(iconForeground, DrawableColorTester.TRANSLUCENT_FILTER /* filterType */), () -> new DrawableColorTester(adaptiveIconDrawable.getBackground())); if (DEBUG) { Slog.d(TAG, "FgMainColor=" + Integer.toHexString(iconColor.mFgColor) + " BgMainColor=" + Integer.toHexString(iconColor.mBgColor) + " IsBgComplex=" + iconColor.mIsBgComplex + " FromCache=" + (iconColor.mReuseCount > 0) + " ThemeColor=" + Integer.toHexString(mThemeColor)); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "processAdaptiveIcon: FgMainColor=%s, BgMainColor=%s, " + "IsBgComplex=%b, FromCache=%b, ThemeColor=%s", Integer.toHexString(iconColor.mFgColor), Integer.toHexString(iconColor.mBgColor), iconColor.mIsBgComplex, iconColor.mReuseCount > 0, Integer.toHexString(mThemeColor)); // Only draw the foreground of AdaptiveIcon to the splash screen if below condition // meet: Loading @@ -456,9 +454,8 @@ public class SplashscreenContentDrawer { && (isRgbSimilarInHsv(mThemeColor, iconColor.mBgColor) || (iconColor.mIsBgGrayscale && !isRgbSimilarInHsv(mThemeColor, iconColor.mFgColor)))) { if (DEBUG) { Slog.d(TAG, "makeSplashScreenContentView: choose fg icon"); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "processAdaptiveIcon: choose fg icon"); // Reference AdaptiveIcon description, outer is 108 and inner is 72, so we // scale by 192/160 if we only draw adaptiveIcon's foreground. final float noBgScale = Loading @@ -469,9 +466,8 @@ public class SplashscreenContentDrawer { mFinalIconSize = (int) (0.5f + mIconSize * noBgScale); createIconDrawable(iconForeground, false); } else { if (DEBUG) { Slog.d(TAG, "makeSplashScreenContentView: draw whole icon"); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "processAdaptiveIcon: draw whole icon"); createIconDrawable(iconDrawable, false); } Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); Loading Loading @@ -504,9 +500,6 @@ public class SplashscreenContentDrawer { mBrandingImageHeight); } final SplashScreenView splashScreenView = builder.build(); if (DEBUG) { Slog.d(TAG, "fillViewWithIcon surfaceWindowView " + splashScreenView); } if (mSuggestType != STARTING_WINDOW_TYPE_LEGACY_SPLASH_SCREEN) { splashScreenView.addOnAttachStateChangeListener( new View.OnAttachStateChangeListener() { Loading Loading @@ -536,10 +529,9 @@ public class SplashscreenContentDrawer { final float lumB = Color.luminance(b); final float contrastRatio = lumA > lumB ? (lumA + 0.05f) / (lumB + 0.05f) : (lumB + 0.05f) / (lumA + 0.05f); if (DEBUG) { Slog.d(TAG, "isRgbSimilarInHsv a: " + Integer.toHexString(a) + " b " + Integer.toHexString(b) + " contrast ratio: " + contrastRatio); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "isRgbSimilarInHsv a:%s, b:%s, contrast ratio:%f", Integer.toHexString(a), Integer.toHexString(b), contrastRatio); if (contrastRatio < 2) { return true; } Loading @@ -560,14 +552,11 @@ public class SplashscreenContentDrawer { final double square = squareH + squareS + squareV; final double mean = square / 3; final double root = Math.sqrt(mean); if (DEBUG) { Slog.d(TAG, "hsvDiff " + minAngle + " ah " + aHsv[0] + " bh " + bHsv[0] + " as " + aHsv[1] + " bs " + bHsv[1] + " av " + aHsv[2] + " bv " + bHsv[2] + " sqH " + squareH + " sqS " + squareS + " sqV " + squareV + " root " + root); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "isRgbSimilarInHsv hsvDiff: %d, ah: %f, bh: %f, as: %f, bs: %f, av: %f, bv: %f, " + "sqH: %f, sqS: %f, sqV: %f, rsm: %f", minAngle, aHsv[0], bHsv[0], aHsv[1], bHsv[1], aHsv[2], bHsv[2], squareH, squareS, squareV, root); return root < 0.1; } Loading Loading @@ -598,9 +587,8 @@ public class SplashscreenContentDrawer { if (drawable instanceof LayerDrawable) { LayerDrawable layerDrawable = (LayerDrawable) drawable; if (layerDrawable.getNumberOfLayers() > 0) { if (DEBUG) { Slog.d(TAG, "replace drawable with bottom layer drawable"); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "DrawableColorTester: replace drawable with bottom layer drawable"); drawable = layerDrawable.getDrawable(0); } } Loading Loading @@ -805,9 +793,8 @@ public class SplashscreenContentDrawer { } } if (realSize == 0) { if (DEBUG) { Slog.d(TAG, "quantize: this is pure transparent image"); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "DrawableTester quantize: pure transparent image"); mInnerQuantizer.quantize(pixels, maxColors); return; } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenIconDrawableFactory.java +1 −1 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ import com.android.internal.R; */ public class SplashscreenIconDrawableFactory { private static final String TAG = "SplashscreenIconDrawableFactory"; private static final String TAG = StartingWindowController.TAG; /** * @return An array containing the foreground drawable at index 0 and if needed a background Loading
libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java +25 −35 Original line number Diff line number Diff line Loading @@ -61,10 +61,12 @@ import android.window.TaskSnapshot; import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.protolog.common.ProtoLog; import com.android.launcher3.icons.IconProvider; import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.TransactionPool; import com.android.wm.shell.common.annotations.ShellSplashscreenThread; import com.android.wm.shell.protolog.ShellProtoLogGroup; import java.util.function.Supplier; Loading Loading @@ -106,9 +108,7 @@ import java.util.function.Supplier; */ @ShellSplashscreenThread public class StartingSurfaceDrawer { static final String TAG = StartingSurfaceDrawer.class.getSimpleName(); static final boolean DEBUG_SPLASH_SCREEN = StartingWindowController.DEBUG_SPLASH_SCREEN; static final boolean DEBUG_TASK_SNAPSHOT = StartingWindowController.DEBUG_TASK_SNAPSHOT; private static final String TAG = StartingWindowController.TAG; private final Context mContext; private final DisplayManager mDisplayManager; Loading Loading @@ -178,11 +178,9 @@ public class StartingSurfaceDrawer { // replace with the default theme if the application didn't set final int theme = getSplashScreenTheme(windowInfo.splashScreenThemeResId, activityInfo); if (DEBUG_SPLASH_SCREEN) { Slog.d(TAG, "addSplashScreen " + activityInfo.packageName + " theme=" + Integer.toHexString(theme) + " task=" + taskInfo.taskId + " suggestType=" + suggestType); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "addSplashScreen for package: %s with theme: %s for task: %d, suggestType: %d", activityInfo.packageName, Integer.toHexString(theme), taskId, suggestType); final Display display = getDisplay(displayId); if (display == null) { // Can't show splash screen on requested display, so skip showing at all. Loading @@ -207,10 +205,9 @@ public class StartingSurfaceDrawer { final Configuration taskConfig = taskInfo.getConfiguration(); if (taskConfig.diffPublicOnly(context.getResources().getConfiguration()) != 0) { if (DEBUG_SPLASH_SCREEN) { Slog.d(TAG, "addSplashScreen: creating context based" + " on task Configuration " + taskConfig + " for splash screen"); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "addSplashScreen: creating context based on task Configuration %s", taskConfig); final Context overrideContext = context.createConfigurationContext(taskConfig); overrideContext.setTheme(theme); final TypedArray typedArray = overrideContext.obtainStyledAttributes( Loading @@ -221,10 +218,9 @@ public class StartingSurfaceDrawer { // We want to use the windowBackground for the override context if it is // available, otherwise we use the default one to make sure a themed starting // window is displayed for the app. if (DEBUG_SPLASH_SCREEN) { Slog.d(TAG, "addSplashScreen: apply overrideConfig" + taskConfig + " to starting window resId=" + resId); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "addSplashScreen: apply overrideConfig %s", taskConfig); context = overrideContext; } } catch (Resources.NotFoundException e) { Loading Loading @@ -460,10 +456,9 @@ public class StartingSurfaceDrawer { * Called when the content of a task is ready to show, starting window can be removed. */ public void removeStartingWindow(StartingWindowRemovalInfo removalInfo) { if (DEBUG_SPLASH_SCREEN || DEBUG_TASK_SNAPSHOT) { Slog.d(TAG, "Task start finish, remove starting surface for task " + removalInfo.taskId); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "Task start finish, remove starting surface for task: %d", removalInfo.taskId); removeWindowSynced(removalInfo); } Loading @@ -485,10 +480,9 @@ public class StartingSurfaceDrawer { } else { parcelable = null; } if (DEBUG_SPLASH_SCREEN) { Slog.v(TAG, "Copying splash screen window view for task: " + taskId + " parcelable: " + parcelable); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "Copying splash screen window view for task: %d with parcelable %b", taskId, parcelable != null); ActivityTaskManager.getInstance().onSplashScreenViewCopyFinished(taskId, parcelable); } Loading @@ -514,11 +508,9 @@ public class StartingSurfaceDrawer { return; } mAnimatedSplashScreenSurfaceHosts.remove(taskId); if (DEBUG_SPLASH_SCREEN) { String reason = fromServer ? "Server cleaned up" : "App removed"; Slog.v(TAG, reason + "the splash screen. Releasing SurfaceControlViewHost for task:" + taskId); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "%s the splash screen. Releasing SurfaceControlViewHost for task: %d", fromServer ? "Server cleaned up" : "App removed", taskId); SplashScreenView.releaseIconHost(viewHost); } Loading Loading @@ -576,9 +568,8 @@ public class StartingSurfaceDrawer { final StartingWindowRecord record = mStartingWindowRecords.get(taskId); if (record != null) { if (record.mDecorView != null) { if (DEBUG_SPLASH_SCREEN) { Slog.v(TAG, "Removing splash screen window for task: " + taskId); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "Removing splash screen window for task: %d", taskId); if (record.mContentView != null) { if (record.mSuggestType == STARTING_WINDOW_TYPE_LEGACY_SPLASH_SCREEN) { removeWindowInner(record.mDecorView, false); Loading @@ -601,9 +592,8 @@ public class StartingSurfaceDrawer { mStartingWindowRecords.remove(taskId); } if (record.mTaskSnapshotWindow != null) { if (DEBUG_TASK_SNAPSHOT) { Slog.v(TAG, "Removing task snapshot window for " + taskId); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW, "Removing task snapshot window for %d", taskId); record.mTaskSnapshotWindow.scheduleRemove( () -> mStartingWindowRecords.remove(taskId), removalInfo.deferRemoveForIme); } Loading