Loading core/java/android/app/AppCompatTaskInfo.java +12 −12 Original line number Diff line number Diff line Loading @@ -32,7 +32,7 @@ public class AppCompatTaskInfo implements Parcelable { public boolean topActivityEligibleForLetterboxEducation; /** * Whether the letterbox education is enabled * Whether the letterbox education is enabled. */ public boolean isLetterboxEducationEnabled; Loading Loading @@ -73,26 +73,26 @@ public class AppCompatTaskInfo implements Parcelable { public boolean isFromLetterboxDoubleTap; /** * If {@link isLetterboxDoubleTapEnabled} it contains the current letterbox vertical position or * {@link TaskInfo.PROPERTY_VALUE_UNSET} otherwise. * If {@link #isLetterboxDoubleTapEnabled} it contains the current letterbox vertical position * or {@link TaskInfo#PROPERTY_VALUE_UNSET} otherwise. */ public int topActivityLetterboxVerticalPosition; /** * If {@link isLetterboxDoubleTapEnabled} it contains the current letterbox vertical position or * {@link TaskInfo.PROPERTY_VALUE_UNSET} otherwise. * If {@link #isLetterboxDoubleTapEnabled} it contains the current letterbox vertical position * or {@link TaskInfo#PROPERTY_VALUE_UNSET} otherwise. */ public int topActivityLetterboxHorizontalPosition; /** * If {@link isLetterboxDoubleTapEnabled} it contains the current width of the letterboxed * activity or {@link TaskInfo.PROPERTY_VALUE_UNSET} otherwise. * If {@link #isLetterboxDoubleTapEnabled} it contains the current width of the letterboxed * activity or {@link TaskInfo#PROPERTY_VALUE_UNSET} otherwise. */ public int topActivityLetterboxWidth; /** * If {@link isLetterboxDoubleTapEnabled} it contains the current height of the letterboxed * activity or {@link TaskInfo.PROPERTY_VALUE_UNSET} otherwise. * If {@link #isLetterboxDoubleTapEnabled} it contains the current height of the letterboxed * activity or {@link TaskInfo#PROPERTY_VALUE_UNSET} otherwise. */ public int topActivityLetterboxHeight; Loading Loading @@ -133,7 +133,7 @@ public class AppCompatTaskInfo implements Parcelable { }; /** * @return {@value true} if the task has some compat ui. * @return {@code true} if the task has some compat ui. */ public boolean hasCompatUI() { return topActivityInSizeCompat || topActivityEligibleForLetterboxEducation Loading @@ -142,7 +142,7 @@ public class AppCompatTaskInfo implements Parcelable { } /** * @return {@value true} if top activity is pillarboxed. * @return {@code true} if top activity is pillarboxed. */ public boolean isTopActivityPillarboxed() { return topActivityLetterboxWidth < topActivityLetterboxHeight; Loading services/core/java/com/android/server/wm/AppCompatUtils.java +78 −0 Original line number Diff line number Diff line Loading @@ -19,7 +19,13 @@ package com.android.server.wm; import static android.content.res.Configuration.UI_MODE_TYPE_MASK; import static android.content.res.Configuration.UI_MODE_TYPE_VR_HEADSET; import static com.android.server.wm.ActivityRecord.State.RESUMED; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.AppCompatTaskInfo; import android.app.CameraCompatTaskInfo; import android.app.TaskInfo; import android.content.res.Configuration; import android.graphics.Rect; Loading Loading @@ -82,4 +88,76 @@ class AppCompatUtils { static boolean isChangeEnabled(@NonNull ActivityRecord activityRecord, long overrideChangeId) { return activityRecord.info.isChangeEnabled(overrideChangeId); } static void fillAppCompatTaskInfo(@NonNull Task task, @NonNull TaskInfo info, @Nullable ActivityRecord top) { final AppCompatTaskInfo appCompatTaskInfo = info.appCompatTaskInfo; appCompatTaskInfo.topActivityLetterboxVerticalPosition = TaskInfo.PROPERTY_VALUE_UNSET; appCompatTaskInfo.topActivityLetterboxHorizontalPosition = TaskInfo.PROPERTY_VALUE_UNSET; appCompatTaskInfo.topActivityLetterboxWidth = TaskInfo.PROPERTY_VALUE_UNSET; appCompatTaskInfo.topActivityLetterboxHeight = TaskInfo.PROPERTY_VALUE_UNSET; appCompatTaskInfo.cameraCompatTaskInfo.freeformCameraCompatMode = CameraCompatTaskInfo.CAMERA_COMPAT_FREEFORM_NONE; if (top == null) { return; } final boolean isTopActivityResumed = top.getOrganizedTask() == task && top.isState(RESUMED); final boolean isTopActivityVisible = top.getOrganizedTask() == task && top.isVisible(); // Whether the direct top activity is in size compat mode. appCompatTaskInfo.topActivityInSizeCompat = isTopActivityVisible && top.inSizeCompatMode(); if (appCompatTaskInfo.topActivityInSizeCompat && top.mWmService.mAppCompatConfiguration.isTranslucentLetterboxingEnabled()) { // We hide the restart button in case of transparent activities. appCompatTaskInfo.topActivityInSizeCompat = top.fillsParent(); } // Whether the direct top activity is eligible for letterbox education. appCompatTaskInfo.topActivityEligibleForLetterboxEducation = isTopActivityResumed && top.isEligibleForLetterboxEducation(); appCompatTaskInfo.isLetterboxEducationEnabled = top.mLetterboxUiController .isLetterboxEducationEnabled(); appCompatTaskInfo.isUserFullscreenOverrideEnabled = top.mAppCompatController .getAppCompatAspectRatioOverrides().shouldApplyUserFullscreenOverride(); appCompatTaskInfo.isSystemFullscreenOverrideEnabled = top.mAppCompatController .getAppCompatAspectRatioOverrides().isSystemOverrideToFullscreenEnabled(); appCompatTaskInfo.isFromLetterboxDoubleTap = top.mLetterboxUiController.isFromDoubleTap(); appCompatTaskInfo.topActivityLetterboxWidth = top.getBounds().width(); appCompatTaskInfo.topActivityLetterboxHeight = top.getBounds().height(); // We need to consider if letterboxed or pillarboxed. // TODO(b/336807329) Encapsulate reachability logic appCompatTaskInfo.isLetterboxDoubleTapEnabled = top.mLetterboxUiController .isLetterboxDoubleTapEducationEnabled(); if (appCompatTaskInfo.isLetterboxDoubleTapEnabled) { if (appCompatTaskInfo.isTopActivityPillarboxed()) { if (top.mLetterboxUiController.allowHorizontalReachabilityForThinLetterbox()) { // Pillarboxed. appCompatTaskInfo.topActivityLetterboxHorizontalPosition = top.mLetterboxUiController .getLetterboxPositionForHorizontalReachability(); } else { appCompatTaskInfo.isLetterboxDoubleTapEnabled = false; } } else { if (top.mLetterboxUiController.allowVerticalReachabilityForThinLetterbox()) { // Letterboxed. appCompatTaskInfo.topActivityLetterboxVerticalPosition = top.mLetterboxUiController .getLetterboxPositionForVerticalReachability(); } else { appCompatTaskInfo.isLetterboxDoubleTapEnabled = false; } } } appCompatTaskInfo.topActivityEligibleForUserAspectRatioButton = !info.isTopActivityTransparent && !appCompatTaskInfo.topActivityInSizeCompat && top.mAppCompatController.getAppCompatAspectRatioOverrides() .shouldEnableUserAspectRatioSettings(); appCompatTaskInfo.topActivityBoundsLetterboxed = top.areBoundsLetterboxed(); appCompatTaskInfo.cameraCompatTaskInfo.freeformCameraCompatMode = top.mAppCompatController .getAppCompatCameraOverrides().getFreeformCameraCompatMode(); } } services/core/java/com/android/server/wm/Task.java +2 −72 Original line number Diff line number Diff line Loading @@ -130,9 +130,7 @@ import android.app.ActivityManager.RecentTaskInfo.PersistedTaskSnapshotData; import android.app.ActivityManager.TaskDescription; import android.app.ActivityOptions; import android.app.ActivityTaskManager; import android.app.AppCompatTaskInfo; import android.app.AppGlobals; import android.app.CameraCompatTaskInfo; import android.app.IActivityController; import android.app.PictureInPictureParams; import android.app.TaskInfo; Loading Loading @@ -3380,25 +3378,6 @@ class Task extends TaskFragment { ? top.getLastParentBeforePip().mTaskId : INVALID_TASK_ID; info.shouldDockBigOverlays = top != null && top.shouldDockBigOverlays; info.mTopActivityLocusId = top != null ? top.getLocusId() : null; final boolean isTopActivityResumed = top != null && top.getOrganizedTask() == this && top.isState(RESUMED); final boolean isTopActivityVisible = top != null && top.getOrganizedTask() == this && top.isVisible(); final AppCompatTaskInfo appCompatTaskInfo = info.appCompatTaskInfo; // Whether the direct top activity is in size compat mode appCompatTaskInfo.topActivityInSizeCompat = isTopActivityVisible && top.inSizeCompatMode(); if (appCompatTaskInfo.topActivityInSizeCompat && mWmService.mAppCompatConfiguration.isTranslucentLetterboxingEnabled()) { // We hide the restart button in case of transparent activities. appCompatTaskInfo.topActivityInSizeCompat = top.fillsParent(); } // Whether the direct top activity is eligible for letterbox education. appCompatTaskInfo.topActivityEligibleForLetterboxEducation = isTopActivityResumed && top.isEligibleForLetterboxEducation(); appCompatTaskInfo.isLetterboxEducationEnabled = top != null && top.mLetterboxUiController.isLetterboxEducationEnabled(); final Task parentTask = getParent() != null ? getParent().asTask() : null; info.parentTaskId = parentTask != null && parentTask.mCreatedByOrganizer ? parentTask.mTaskId Loading @@ -3410,57 +3389,8 @@ class Task extends TaskFragment { info.isTopActivityTransparent = top != null && !top.fillsParent(); info.isTopActivityStyleFloating = top != null && top.isStyleFloating(); info.lastNonFullscreenBounds = topTask.mLastNonFullscreenBounds; appCompatTaskInfo.topActivityLetterboxVerticalPosition = TaskInfo.PROPERTY_VALUE_UNSET; appCompatTaskInfo.topActivityLetterboxHorizontalPosition = TaskInfo.PROPERTY_VALUE_UNSET; appCompatTaskInfo.topActivityLetterboxWidth = TaskInfo.PROPERTY_VALUE_UNSET; appCompatTaskInfo.topActivityLetterboxHeight = TaskInfo.PROPERTY_VALUE_UNSET; appCompatTaskInfo.isUserFullscreenOverrideEnabled = top != null && top.mAppCompatController.getAppCompatAspectRatioOverrides() .shouldApplyUserFullscreenOverride(); appCompatTaskInfo.isSystemFullscreenOverrideEnabled = top != null && top.mAppCompatController.getAppCompatAspectRatioOverrides() .isSystemOverrideToFullscreenEnabled(); appCompatTaskInfo.isFromLetterboxDoubleTap = top != null && top.mLetterboxUiController.isFromDoubleTap(); if (top != null) { appCompatTaskInfo.topActivityLetterboxWidth = top.getBounds().width(); appCompatTaskInfo.topActivityLetterboxHeight = top.getBounds().height(); } // We need to consider if letterboxed or pillarboxed // TODO(b/336807329) Encapsulate reachability logic appCompatTaskInfo.isLetterboxDoubleTapEnabled = top != null && top.mLetterboxUiController.isLetterboxDoubleTapEducationEnabled(); if (appCompatTaskInfo.isLetterboxDoubleTapEnabled) { if (appCompatTaskInfo.isTopActivityPillarboxed()) { if (top.mLetterboxUiController.allowHorizontalReachabilityForThinLetterbox()) { // Pillarboxed appCompatTaskInfo.topActivityLetterboxHorizontalPosition = top.mLetterboxUiController .getLetterboxPositionForHorizontalReachability(); } else { appCompatTaskInfo.isLetterboxDoubleTapEnabled = false; } } else { if (top.mLetterboxUiController.allowVerticalReachabilityForThinLetterbox()) { // Letterboxed appCompatTaskInfo.topActivityLetterboxVerticalPosition = top.mLetterboxUiController .getLetterboxPositionForVerticalReachability(); } else { appCompatTaskInfo.isLetterboxDoubleTapEnabled = false; } } } appCompatTaskInfo.topActivityEligibleForUserAspectRatioButton = top != null && !appCompatTaskInfo.topActivityInSizeCompat && top.mAppCompatController.getAppCompatAspectRatioOverrides() .shouldEnableUserAspectRatioSettings() && !info.isTopActivityTransparent; appCompatTaskInfo.topActivityBoundsLetterboxed = top != null && top.areBoundsLetterboxed(); appCompatTaskInfo.cameraCompatTaskInfo.freeformCameraCompatMode = top == null ? CameraCompatTaskInfo.CAMERA_COMPAT_FREEFORM_NONE : top.mAppCompatController.getAppCompatCameraOverrides() .getFreeformCameraCompatMode(); AppCompatUtils.fillAppCompatTaskInfo(this, info, top); } /** Loading Loading
core/java/android/app/AppCompatTaskInfo.java +12 −12 Original line number Diff line number Diff line Loading @@ -32,7 +32,7 @@ public class AppCompatTaskInfo implements Parcelable { public boolean topActivityEligibleForLetterboxEducation; /** * Whether the letterbox education is enabled * Whether the letterbox education is enabled. */ public boolean isLetterboxEducationEnabled; Loading Loading @@ -73,26 +73,26 @@ public class AppCompatTaskInfo implements Parcelable { public boolean isFromLetterboxDoubleTap; /** * If {@link isLetterboxDoubleTapEnabled} it contains the current letterbox vertical position or * {@link TaskInfo.PROPERTY_VALUE_UNSET} otherwise. * If {@link #isLetterboxDoubleTapEnabled} it contains the current letterbox vertical position * or {@link TaskInfo#PROPERTY_VALUE_UNSET} otherwise. */ public int topActivityLetterboxVerticalPosition; /** * If {@link isLetterboxDoubleTapEnabled} it contains the current letterbox vertical position or * {@link TaskInfo.PROPERTY_VALUE_UNSET} otherwise. * If {@link #isLetterboxDoubleTapEnabled} it contains the current letterbox vertical position * or {@link TaskInfo#PROPERTY_VALUE_UNSET} otherwise. */ public int topActivityLetterboxHorizontalPosition; /** * If {@link isLetterboxDoubleTapEnabled} it contains the current width of the letterboxed * activity or {@link TaskInfo.PROPERTY_VALUE_UNSET} otherwise. * If {@link #isLetterboxDoubleTapEnabled} it contains the current width of the letterboxed * activity or {@link TaskInfo#PROPERTY_VALUE_UNSET} otherwise. */ public int topActivityLetterboxWidth; /** * If {@link isLetterboxDoubleTapEnabled} it contains the current height of the letterboxed * activity or {@link TaskInfo.PROPERTY_VALUE_UNSET} otherwise. * If {@link #isLetterboxDoubleTapEnabled} it contains the current height of the letterboxed * activity or {@link TaskInfo#PROPERTY_VALUE_UNSET} otherwise. */ public int topActivityLetterboxHeight; Loading Loading @@ -133,7 +133,7 @@ public class AppCompatTaskInfo implements Parcelable { }; /** * @return {@value true} if the task has some compat ui. * @return {@code true} if the task has some compat ui. */ public boolean hasCompatUI() { return topActivityInSizeCompat || topActivityEligibleForLetterboxEducation Loading @@ -142,7 +142,7 @@ public class AppCompatTaskInfo implements Parcelable { } /** * @return {@value true} if top activity is pillarboxed. * @return {@code true} if top activity is pillarboxed. */ public boolean isTopActivityPillarboxed() { return topActivityLetterboxWidth < topActivityLetterboxHeight; Loading
services/core/java/com/android/server/wm/AppCompatUtils.java +78 −0 Original line number Diff line number Diff line Loading @@ -19,7 +19,13 @@ package com.android.server.wm; import static android.content.res.Configuration.UI_MODE_TYPE_MASK; import static android.content.res.Configuration.UI_MODE_TYPE_VR_HEADSET; import static com.android.server.wm.ActivityRecord.State.RESUMED; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.AppCompatTaskInfo; import android.app.CameraCompatTaskInfo; import android.app.TaskInfo; import android.content.res.Configuration; import android.graphics.Rect; Loading Loading @@ -82,4 +88,76 @@ class AppCompatUtils { static boolean isChangeEnabled(@NonNull ActivityRecord activityRecord, long overrideChangeId) { return activityRecord.info.isChangeEnabled(overrideChangeId); } static void fillAppCompatTaskInfo(@NonNull Task task, @NonNull TaskInfo info, @Nullable ActivityRecord top) { final AppCompatTaskInfo appCompatTaskInfo = info.appCompatTaskInfo; appCompatTaskInfo.topActivityLetterboxVerticalPosition = TaskInfo.PROPERTY_VALUE_UNSET; appCompatTaskInfo.topActivityLetterboxHorizontalPosition = TaskInfo.PROPERTY_VALUE_UNSET; appCompatTaskInfo.topActivityLetterboxWidth = TaskInfo.PROPERTY_VALUE_UNSET; appCompatTaskInfo.topActivityLetterboxHeight = TaskInfo.PROPERTY_VALUE_UNSET; appCompatTaskInfo.cameraCompatTaskInfo.freeformCameraCompatMode = CameraCompatTaskInfo.CAMERA_COMPAT_FREEFORM_NONE; if (top == null) { return; } final boolean isTopActivityResumed = top.getOrganizedTask() == task && top.isState(RESUMED); final boolean isTopActivityVisible = top.getOrganizedTask() == task && top.isVisible(); // Whether the direct top activity is in size compat mode. appCompatTaskInfo.topActivityInSizeCompat = isTopActivityVisible && top.inSizeCompatMode(); if (appCompatTaskInfo.topActivityInSizeCompat && top.mWmService.mAppCompatConfiguration.isTranslucentLetterboxingEnabled()) { // We hide the restart button in case of transparent activities. appCompatTaskInfo.topActivityInSizeCompat = top.fillsParent(); } // Whether the direct top activity is eligible for letterbox education. appCompatTaskInfo.topActivityEligibleForLetterboxEducation = isTopActivityResumed && top.isEligibleForLetterboxEducation(); appCompatTaskInfo.isLetterboxEducationEnabled = top.mLetterboxUiController .isLetterboxEducationEnabled(); appCompatTaskInfo.isUserFullscreenOverrideEnabled = top.mAppCompatController .getAppCompatAspectRatioOverrides().shouldApplyUserFullscreenOverride(); appCompatTaskInfo.isSystemFullscreenOverrideEnabled = top.mAppCompatController .getAppCompatAspectRatioOverrides().isSystemOverrideToFullscreenEnabled(); appCompatTaskInfo.isFromLetterboxDoubleTap = top.mLetterboxUiController.isFromDoubleTap(); appCompatTaskInfo.topActivityLetterboxWidth = top.getBounds().width(); appCompatTaskInfo.topActivityLetterboxHeight = top.getBounds().height(); // We need to consider if letterboxed or pillarboxed. // TODO(b/336807329) Encapsulate reachability logic appCompatTaskInfo.isLetterboxDoubleTapEnabled = top.mLetterboxUiController .isLetterboxDoubleTapEducationEnabled(); if (appCompatTaskInfo.isLetterboxDoubleTapEnabled) { if (appCompatTaskInfo.isTopActivityPillarboxed()) { if (top.mLetterboxUiController.allowHorizontalReachabilityForThinLetterbox()) { // Pillarboxed. appCompatTaskInfo.topActivityLetterboxHorizontalPosition = top.mLetterboxUiController .getLetterboxPositionForHorizontalReachability(); } else { appCompatTaskInfo.isLetterboxDoubleTapEnabled = false; } } else { if (top.mLetterboxUiController.allowVerticalReachabilityForThinLetterbox()) { // Letterboxed. appCompatTaskInfo.topActivityLetterboxVerticalPosition = top.mLetterboxUiController .getLetterboxPositionForVerticalReachability(); } else { appCompatTaskInfo.isLetterboxDoubleTapEnabled = false; } } } appCompatTaskInfo.topActivityEligibleForUserAspectRatioButton = !info.isTopActivityTransparent && !appCompatTaskInfo.topActivityInSizeCompat && top.mAppCompatController.getAppCompatAspectRatioOverrides() .shouldEnableUserAspectRatioSettings(); appCompatTaskInfo.topActivityBoundsLetterboxed = top.areBoundsLetterboxed(); appCompatTaskInfo.cameraCompatTaskInfo.freeformCameraCompatMode = top.mAppCompatController .getAppCompatCameraOverrides().getFreeformCameraCompatMode(); } }
services/core/java/com/android/server/wm/Task.java +2 −72 Original line number Diff line number Diff line Loading @@ -130,9 +130,7 @@ import android.app.ActivityManager.RecentTaskInfo.PersistedTaskSnapshotData; import android.app.ActivityManager.TaskDescription; import android.app.ActivityOptions; import android.app.ActivityTaskManager; import android.app.AppCompatTaskInfo; import android.app.AppGlobals; import android.app.CameraCompatTaskInfo; import android.app.IActivityController; import android.app.PictureInPictureParams; import android.app.TaskInfo; Loading Loading @@ -3380,25 +3378,6 @@ class Task extends TaskFragment { ? top.getLastParentBeforePip().mTaskId : INVALID_TASK_ID; info.shouldDockBigOverlays = top != null && top.shouldDockBigOverlays; info.mTopActivityLocusId = top != null ? top.getLocusId() : null; final boolean isTopActivityResumed = top != null && top.getOrganizedTask() == this && top.isState(RESUMED); final boolean isTopActivityVisible = top != null && top.getOrganizedTask() == this && top.isVisible(); final AppCompatTaskInfo appCompatTaskInfo = info.appCompatTaskInfo; // Whether the direct top activity is in size compat mode appCompatTaskInfo.topActivityInSizeCompat = isTopActivityVisible && top.inSizeCompatMode(); if (appCompatTaskInfo.topActivityInSizeCompat && mWmService.mAppCompatConfiguration.isTranslucentLetterboxingEnabled()) { // We hide the restart button in case of transparent activities. appCompatTaskInfo.topActivityInSizeCompat = top.fillsParent(); } // Whether the direct top activity is eligible for letterbox education. appCompatTaskInfo.topActivityEligibleForLetterboxEducation = isTopActivityResumed && top.isEligibleForLetterboxEducation(); appCompatTaskInfo.isLetterboxEducationEnabled = top != null && top.mLetterboxUiController.isLetterboxEducationEnabled(); final Task parentTask = getParent() != null ? getParent().asTask() : null; info.parentTaskId = parentTask != null && parentTask.mCreatedByOrganizer ? parentTask.mTaskId Loading @@ -3410,57 +3389,8 @@ class Task extends TaskFragment { info.isTopActivityTransparent = top != null && !top.fillsParent(); info.isTopActivityStyleFloating = top != null && top.isStyleFloating(); info.lastNonFullscreenBounds = topTask.mLastNonFullscreenBounds; appCompatTaskInfo.topActivityLetterboxVerticalPosition = TaskInfo.PROPERTY_VALUE_UNSET; appCompatTaskInfo.topActivityLetterboxHorizontalPosition = TaskInfo.PROPERTY_VALUE_UNSET; appCompatTaskInfo.topActivityLetterboxWidth = TaskInfo.PROPERTY_VALUE_UNSET; appCompatTaskInfo.topActivityLetterboxHeight = TaskInfo.PROPERTY_VALUE_UNSET; appCompatTaskInfo.isUserFullscreenOverrideEnabled = top != null && top.mAppCompatController.getAppCompatAspectRatioOverrides() .shouldApplyUserFullscreenOverride(); appCompatTaskInfo.isSystemFullscreenOverrideEnabled = top != null && top.mAppCompatController.getAppCompatAspectRatioOverrides() .isSystemOverrideToFullscreenEnabled(); appCompatTaskInfo.isFromLetterboxDoubleTap = top != null && top.mLetterboxUiController.isFromDoubleTap(); if (top != null) { appCompatTaskInfo.topActivityLetterboxWidth = top.getBounds().width(); appCompatTaskInfo.topActivityLetterboxHeight = top.getBounds().height(); } // We need to consider if letterboxed or pillarboxed // TODO(b/336807329) Encapsulate reachability logic appCompatTaskInfo.isLetterboxDoubleTapEnabled = top != null && top.mLetterboxUiController.isLetterboxDoubleTapEducationEnabled(); if (appCompatTaskInfo.isLetterboxDoubleTapEnabled) { if (appCompatTaskInfo.isTopActivityPillarboxed()) { if (top.mLetterboxUiController.allowHorizontalReachabilityForThinLetterbox()) { // Pillarboxed appCompatTaskInfo.topActivityLetterboxHorizontalPosition = top.mLetterboxUiController .getLetterboxPositionForHorizontalReachability(); } else { appCompatTaskInfo.isLetterboxDoubleTapEnabled = false; } } else { if (top.mLetterboxUiController.allowVerticalReachabilityForThinLetterbox()) { // Letterboxed appCompatTaskInfo.topActivityLetterboxVerticalPosition = top.mLetterboxUiController .getLetterboxPositionForVerticalReachability(); } else { appCompatTaskInfo.isLetterboxDoubleTapEnabled = false; } } } appCompatTaskInfo.topActivityEligibleForUserAspectRatioButton = top != null && !appCompatTaskInfo.topActivityInSizeCompat && top.mAppCompatController.getAppCompatAspectRatioOverrides() .shouldEnableUserAspectRatioSettings() && !info.isTopActivityTransparent; appCompatTaskInfo.topActivityBoundsLetterboxed = top != null && top.areBoundsLetterboxed(); appCompatTaskInfo.cameraCompatTaskInfo.freeformCameraCompatMode = top == null ? CameraCompatTaskInfo.CAMERA_COMPAT_FREEFORM_NONE : top.mAppCompatController.getAppCompatCameraOverrides() .getFreeformCameraCompatMode(); AppCompatUtils.fillAppCompatTaskInfo(this, info, top); } /** Loading