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

Commit e605d128 authored by Graciela Wissen Putri's avatar Graciela Wissen Putri
Browse files

Refactor fill AppCompatTaskInfo into AppCompatUtils

Flag: EXEMPT refactor
Bug: 328390251
Test: m
Change-Id: I49a1abfa8f029059168353767f2ae08629ea6a17
parent ff29ab29
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);
    }

    /**