Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f24507d3 authored by Graciela Putri's avatar Graciela Putri Committed by Android (Google) Code Review
Browse files

Merge "Refactor fill AppCompatTaskInfo into AppCompatUtils" into main

parents 63601c4b e605d128
Loading
Loading
Loading
Loading
+12 −12
Original line number Diff line number Diff line
@@ -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;

@@ -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;

@@ -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
@@ -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;
+78 −0
Original line number Diff line number Diff line
@@ -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;

@@ -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();
    }
}
+2 −72
Original line number Diff line number Diff line
@@ -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;
@@ -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
@@ -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);
    }

    /**