Loading services/core/java/com/android/server/wm/ActivityRecord.java +3 −7 Original line number Diff line number Diff line Loading @@ -789,8 +789,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A */ private boolean mWillCloseOrEnterPip; final LetterboxUiController mLetterboxUiController; /** * App Compat Facade */ Loading Loading @@ -1324,7 +1322,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A pw.print(prefix); pw.println("mWaitForEnteringPinnedMode=true"); } mLetterboxUiController.dump(pw, prefix); mAppCompatController.dump(pw, prefix); } static boolean dumpActivity(FileDescriptor fd, PrintWriter pw, int index, ActivityRecord r, Loading Loading @@ -1988,12 +1986,10 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } // Don't move below setActivityType since it triggers onConfigurationChange -> // resolveOverrideConfiguration that requires having mLetterboxUiController initialised. // resolveOverrideConfiguration that requires having mAppCompatController initialised. // Don't move below setOrientation(info.screenOrientation) since it triggers // getOverrideOrientation that requires having mLetterboxUiController // initialised. // getOverrideOrientation that requires having mAppCompatController initialised. mAppCompatController = new AppCompatController(mWmService, this); mLetterboxUiController = new LetterboxUiController(mWmService, this); mResolveConfigHint = new TaskFragment.ConfigOverrideHint(); if (mWmService.mFlags.mInsetsDecoupledConfiguration) { // When the stable configuration is the default behavior, override for the legacy apps Loading services/core/java/com/android/server/wm/AppCompatConfiguration.java +21 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.server.wm.utils.DimenPxIntSupplier; import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.function.Function; Loading Loading @@ -1382,6 +1383,26 @@ final class AppCompatConfiguration { setUserAppAspectRatioFullscreenOverrideEnabled(false); } void dump(@NonNull PrintWriter pw, @NonNull String prefix) { // TODO(b/359438445): Add more useful information to dump(). pw.println(prefix + " letterboxPositionForHorizontalReachability=" + letterboxHorizontalReachabilityPositionToString( getLetterboxPositionForHorizontalReachability( /* isInFullScreenBookMode */ false))); pw.println(prefix + " letterboxPositionForVerticalReachability=" + letterboxVerticalReachabilityPositionToString( getLetterboxPositionForVerticalReachability( /* isInFullScreenTabletopMode */ false))); pw.println(prefix + " fixedOrientationLetterboxAspectRatio=" + getFixedOrientationLetterboxAspectRatio()); pw.println(prefix + " defaultMinAspectRatioForUnresizableApps=" + getDefaultMinAspectRatioForUnresizableApps()); pw.println(prefix + " isSplitScreenAspectRatioForUnresizableAppsEnabled=" + getIsSplitScreenAspectRatioForUnresizableAppsEnabled()); pw.println(prefix + " isDisplayAspectRatioEnabledForFixedOrientationLetterbox=" + getIsDisplayAspectRatioEnabledForFixedOrientationLetterbox()); } /** * Checks whether the multiplier is between [0,1]. * Loading services/core/java/com/android/server/wm/AppCompatController.java +9 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ import android.content.pm.PackageManager; import com.android.server.wm.utils.OptPropFactory; import java.io.PrintWriter; /** * Allows the interaction with all the app compat policies and configurations */ Loading Loading @@ -59,7 +61,8 @@ class AppCompatController { mTransparentPolicy, mAppCompatOverrides); mAppCompatReachabilityPolicy = new AppCompatReachabilityPolicy(mActivityRecord, wmService.mAppCompatConfiguration); mAppCompatLetterboxPolicy = new AppCompatLetterboxPolicy(mActivityRecord); mAppCompatLetterboxPolicy = new AppCompatLetterboxPolicy(mActivityRecord, wmService.mAppCompatConfiguration); } @NonNull Loading Loading @@ -140,4 +143,9 @@ class AppCompatController { return mAppCompatOverrides.getAppCompatLetterboxOverrides(); } void dump(@NonNull PrintWriter pw, @NonNull String prefix) { getTransparentPolicy().dump(pw, prefix); getAppCompatLetterboxPolicy().dump(pw, prefix); } } services/core/java/com/android/server/wm/AppCompatLetterboxPolicy.java +40 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; import static com.android.server.wm.AppCompatConfiguration.LETTERBOX_BACKGROUND_WALLPAPER; import static com.android.server.wm.AppCompatConfiguration.letterboxBackgroundTypeToString; import android.annotation.NonNull; import android.annotation.Nullable; Loading @@ -32,6 +33,8 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.statusbar.LetterboxDetails; import com.android.server.wm.AppCompatConfiguration.LetterboxBackgroundType; import java.io.PrintWriter; /** * Encapsulates the logic for the Letterboxing policy. */ Loading @@ -43,15 +46,19 @@ class AppCompatLetterboxPolicy { private final LetterboxPolicyState mLetterboxPolicyState; @NonNull private final AppCompatRoundedCorners mAppCompatRoundedCorners; @NonNull private final AppCompatConfiguration mAppCompatConfiguration; private boolean mLastShouldShowLetterboxUi; AppCompatLetterboxPolicy(@NonNull ActivityRecord activityRecord) { AppCompatLetterboxPolicy(@NonNull ActivityRecord activityRecord, @NonNull AppCompatConfiguration appCompatConfiguration) { mActivityRecord = activityRecord; mLetterboxPolicyState = new LetterboxPolicyState(); // TODO (b/358334569) Improve cutout logic dependency on app compat. mAppCompatRoundedCorners = new AppCompatRoundedCorners(mActivityRecord, this::isLetterboxedNotForDisplayCutout); mAppCompatConfiguration = appCompatConfiguration; } /** Cleans up {@link Letterbox} if it exists.*/ Loading Loading @@ -156,6 +163,38 @@ class AppCompatLetterboxPolicy { return mAppCompatRoundedCorners.getRoundedCornersRadius(mainWindow); } void dump(@NonNull PrintWriter pw, @NonNull String prefix) { final WindowState mainWin = mActivityRecord.findMainWindow(); if (mainWin == null) { return; } boolean areBoundsLetterboxed = mainWin.areAppWindowBoundsLetterboxed(); pw.println(prefix + "areBoundsLetterboxed=" + areBoundsLetterboxed); pw.println(prefix + "isLetterboxRunning=" + isRunning()); if (!areBoundsLetterboxed) { return; } pw.println(prefix + " letterboxReason=" + AppCompatUtils.getLetterboxReasonString(mActivityRecord, mainWin)); mActivityRecord.mAppCompatController.getAppCompatReachabilityPolicy().dump(pw, prefix); final AppCompatLetterboxOverrides letterboxOverride = mActivityRecord.mAppCompatController .getAppCompatLetterboxOverrides(); pw.println(prefix + " letterboxBackgroundColor=" + Integer.toHexString( letterboxOverride.getLetterboxBackgroundColor().toArgb())); pw.println(prefix + " letterboxBackgroundType=" + letterboxBackgroundTypeToString(letterboxOverride.getLetterboxBackgroundType())); pw.println(prefix + " letterboxCornerRadius=" + getRoundedCornersRadius(mainWin)); if (letterboxOverride.getLetterboxBackgroundType() == LETTERBOX_BACKGROUND_WALLPAPER) { pw.println(prefix + " isLetterboxWallpaperBlurSupported=" + letterboxOverride.isLetterboxWallpaperBlurSupported()); pw.println(prefix + " letterboxBackgroundWallpaperDarkScrimAlpha=" + letterboxOverride.getLetterboxWallpaperDarkScrimAlpha()); pw.println(prefix + " letterboxBackgroundWallpaperBlurRadius=" + letterboxOverride.getLetterboxWallpaperBlurRadiusPx()); } mAppCompatConfiguration.dump(pw, prefix); } private void updateWallpaperForLetterbox(@NonNull WindowState mainWindow) { final AppCompatLetterboxOverrides letterboxOverrides = mActivityRecord .mAppCompatController.getAppCompatLetterboxOverrides(); Loading services/core/java/com/android/server/wm/AppCompatReachabilityPolicy.java +20 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.graphics.Rect; import com.android.internal.annotations.VisibleForTesting; import java.io.PrintWriter; import java.util.function.Supplier; /** Loading Loading @@ -74,6 +75,25 @@ class AppCompatReachabilityPolicy { handleVerticalDoubleTap(y); } void dump(@NonNull PrintWriter pw, @NonNull String prefix) { final AppCompatReachabilityOverrides reachabilityOverrides = mActivityRecord.mAppCompatController.getAppCompatReachabilityOverrides(); pw.println(prefix + " isVerticalThinLetterboxed=" + reachabilityOverrides .isVerticalThinLetterboxed()); pw.println(prefix + " isHorizontalThinLetterboxed=" + reachabilityOverrides .isHorizontalThinLetterboxed()); pw.println(prefix + " isHorizontalReachabilityEnabled=" + reachabilityOverrides.isHorizontalReachabilityEnabled()); pw.println(prefix + " isVerticalReachabilityEnabled=" + reachabilityOverrides.isVerticalReachabilityEnabled()); pw.println(prefix + " letterboxHorizontalPositionMultiplier=" + reachabilityOverrides.getHorizontalPositionMultiplier( mActivityRecord.getParent().getConfiguration())); pw.println(prefix + " letterboxVerticalPositionMultiplier=" + reachabilityOverrides.getVerticalPositionMultiplier( mActivityRecord.getParent().getConfiguration())); } private void handleHorizontalDoubleTap(int x) { final AppCompatReachabilityOverrides reachabilityOverrides = mActivityRecord.mAppCompatController.getAppCompatReachabilityOverrides(); Loading Loading
services/core/java/com/android/server/wm/ActivityRecord.java +3 −7 Original line number Diff line number Diff line Loading @@ -789,8 +789,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A */ private boolean mWillCloseOrEnterPip; final LetterboxUiController mLetterboxUiController; /** * App Compat Facade */ Loading Loading @@ -1324,7 +1322,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A pw.print(prefix); pw.println("mWaitForEnteringPinnedMode=true"); } mLetterboxUiController.dump(pw, prefix); mAppCompatController.dump(pw, prefix); } static boolean dumpActivity(FileDescriptor fd, PrintWriter pw, int index, ActivityRecord r, Loading Loading @@ -1988,12 +1986,10 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } // Don't move below setActivityType since it triggers onConfigurationChange -> // resolveOverrideConfiguration that requires having mLetterboxUiController initialised. // resolveOverrideConfiguration that requires having mAppCompatController initialised. // Don't move below setOrientation(info.screenOrientation) since it triggers // getOverrideOrientation that requires having mLetterboxUiController // initialised. // getOverrideOrientation that requires having mAppCompatController initialised. mAppCompatController = new AppCompatController(mWmService, this); mLetterboxUiController = new LetterboxUiController(mWmService, this); mResolveConfigHint = new TaskFragment.ConfigOverrideHint(); if (mWmService.mFlags.mInsetsDecoupledConfiguration) { // When the stable configuration is the default behavior, override for the legacy apps Loading
services/core/java/com/android/server/wm/AppCompatConfiguration.java +21 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.server.wm.utils.DimenPxIntSupplier; import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.function.Function; Loading Loading @@ -1382,6 +1383,26 @@ final class AppCompatConfiguration { setUserAppAspectRatioFullscreenOverrideEnabled(false); } void dump(@NonNull PrintWriter pw, @NonNull String prefix) { // TODO(b/359438445): Add more useful information to dump(). pw.println(prefix + " letterboxPositionForHorizontalReachability=" + letterboxHorizontalReachabilityPositionToString( getLetterboxPositionForHorizontalReachability( /* isInFullScreenBookMode */ false))); pw.println(prefix + " letterboxPositionForVerticalReachability=" + letterboxVerticalReachabilityPositionToString( getLetterboxPositionForVerticalReachability( /* isInFullScreenTabletopMode */ false))); pw.println(prefix + " fixedOrientationLetterboxAspectRatio=" + getFixedOrientationLetterboxAspectRatio()); pw.println(prefix + " defaultMinAspectRatioForUnresizableApps=" + getDefaultMinAspectRatioForUnresizableApps()); pw.println(prefix + " isSplitScreenAspectRatioForUnresizableAppsEnabled=" + getIsSplitScreenAspectRatioForUnresizableAppsEnabled()); pw.println(prefix + " isDisplayAspectRatioEnabledForFixedOrientationLetterbox=" + getIsDisplayAspectRatioEnabledForFixedOrientationLetterbox()); } /** * Checks whether the multiplier is between [0,1]. * Loading
services/core/java/com/android/server/wm/AppCompatController.java +9 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ import android.content.pm.PackageManager; import com.android.server.wm.utils.OptPropFactory; import java.io.PrintWriter; /** * Allows the interaction with all the app compat policies and configurations */ Loading Loading @@ -59,7 +61,8 @@ class AppCompatController { mTransparentPolicy, mAppCompatOverrides); mAppCompatReachabilityPolicy = new AppCompatReachabilityPolicy(mActivityRecord, wmService.mAppCompatConfiguration); mAppCompatLetterboxPolicy = new AppCompatLetterboxPolicy(mActivityRecord); mAppCompatLetterboxPolicy = new AppCompatLetterboxPolicy(mActivityRecord, wmService.mAppCompatConfiguration); } @NonNull Loading Loading @@ -140,4 +143,9 @@ class AppCompatController { return mAppCompatOverrides.getAppCompatLetterboxOverrides(); } void dump(@NonNull PrintWriter pw, @NonNull String prefix) { getTransparentPolicy().dump(pw, prefix); getAppCompatLetterboxPolicy().dump(pw, prefix); } }
services/core/java/com/android/server/wm/AppCompatLetterboxPolicy.java +40 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; import static com.android.server.wm.AppCompatConfiguration.LETTERBOX_BACKGROUND_WALLPAPER; import static com.android.server.wm.AppCompatConfiguration.letterboxBackgroundTypeToString; import android.annotation.NonNull; import android.annotation.Nullable; Loading @@ -32,6 +33,8 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.statusbar.LetterboxDetails; import com.android.server.wm.AppCompatConfiguration.LetterboxBackgroundType; import java.io.PrintWriter; /** * Encapsulates the logic for the Letterboxing policy. */ Loading @@ -43,15 +46,19 @@ class AppCompatLetterboxPolicy { private final LetterboxPolicyState mLetterboxPolicyState; @NonNull private final AppCompatRoundedCorners mAppCompatRoundedCorners; @NonNull private final AppCompatConfiguration mAppCompatConfiguration; private boolean mLastShouldShowLetterboxUi; AppCompatLetterboxPolicy(@NonNull ActivityRecord activityRecord) { AppCompatLetterboxPolicy(@NonNull ActivityRecord activityRecord, @NonNull AppCompatConfiguration appCompatConfiguration) { mActivityRecord = activityRecord; mLetterboxPolicyState = new LetterboxPolicyState(); // TODO (b/358334569) Improve cutout logic dependency on app compat. mAppCompatRoundedCorners = new AppCompatRoundedCorners(mActivityRecord, this::isLetterboxedNotForDisplayCutout); mAppCompatConfiguration = appCompatConfiguration; } /** Cleans up {@link Letterbox} if it exists.*/ Loading Loading @@ -156,6 +163,38 @@ class AppCompatLetterboxPolicy { return mAppCompatRoundedCorners.getRoundedCornersRadius(mainWindow); } void dump(@NonNull PrintWriter pw, @NonNull String prefix) { final WindowState mainWin = mActivityRecord.findMainWindow(); if (mainWin == null) { return; } boolean areBoundsLetterboxed = mainWin.areAppWindowBoundsLetterboxed(); pw.println(prefix + "areBoundsLetterboxed=" + areBoundsLetterboxed); pw.println(prefix + "isLetterboxRunning=" + isRunning()); if (!areBoundsLetterboxed) { return; } pw.println(prefix + " letterboxReason=" + AppCompatUtils.getLetterboxReasonString(mActivityRecord, mainWin)); mActivityRecord.mAppCompatController.getAppCompatReachabilityPolicy().dump(pw, prefix); final AppCompatLetterboxOverrides letterboxOverride = mActivityRecord.mAppCompatController .getAppCompatLetterboxOverrides(); pw.println(prefix + " letterboxBackgroundColor=" + Integer.toHexString( letterboxOverride.getLetterboxBackgroundColor().toArgb())); pw.println(prefix + " letterboxBackgroundType=" + letterboxBackgroundTypeToString(letterboxOverride.getLetterboxBackgroundType())); pw.println(prefix + " letterboxCornerRadius=" + getRoundedCornersRadius(mainWin)); if (letterboxOverride.getLetterboxBackgroundType() == LETTERBOX_BACKGROUND_WALLPAPER) { pw.println(prefix + " isLetterboxWallpaperBlurSupported=" + letterboxOverride.isLetterboxWallpaperBlurSupported()); pw.println(prefix + " letterboxBackgroundWallpaperDarkScrimAlpha=" + letterboxOverride.getLetterboxWallpaperDarkScrimAlpha()); pw.println(prefix + " letterboxBackgroundWallpaperBlurRadius=" + letterboxOverride.getLetterboxWallpaperBlurRadiusPx()); } mAppCompatConfiguration.dump(pw, prefix); } private void updateWallpaperForLetterbox(@NonNull WindowState mainWindow) { final AppCompatLetterboxOverrides letterboxOverrides = mActivityRecord .mAppCompatController.getAppCompatLetterboxOverrides(); Loading
services/core/java/com/android/server/wm/AppCompatReachabilityPolicy.java +20 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.graphics.Rect; import com.android.internal.annotations.VisibleForTesting; import java.io.PrintWriter; import java.util.function.Supplier; /** Loading Loading @@ -74,6 +75,25 @@ class AppCompatReachabilityPolicy { handleVerticalDoubleTap(y); } void dump(@NonNull PrintWriter pw, @NonNull String prefix) { final AppCompatReachabilityOverrides reachabilityOverrides = mActivityRecord.mAppCompatController.getAppCompatReachabilityOverrides(); pw.println(prefix + " isVerticalThinLetterboxed=" + reachabilityOverrides .isVerticalThinLetterboxed()); pw.println(prefix + " isHorizontalThinLetterboxed=" + reachabilityOverrides .isHorizontalThinLetterboxed()); pw.println(prefix + " isHorizontalReachabilityEnabled=" + reachabilityOverrides.isHorizontalReachabilityEnabled()); pw.println(prefix + " isVerticalReachabilityEnabled=" + reachabilityOverrides.isVerticalReachabilityEnabled()); pw.println(prefix + " letterboxHorizontalPositionMultiplier=" + reachabilityOverrides.getHorizontalPositionMultiplier( mActivityRecord.getParent().getConfiguration())); pw.println(prefix + " letterboxVerticalPositionMultiplier=" + reachabilityOverrides.getVerticalPositionMultiplier( mActivityRecord.getParent().getConfiguration())); } private void handleHorizontalDoubleTap(int x) { final AppCompatReachabilityOverrides reachabilityOverrides = mActivityRecord.mAppCompatController.getAppCompatReachabilityOverrides(); Loading