/* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.app; import android.annotation.NonNull; import android.annotation.Nullable; import android.os.Parcel; import android.os.Parcelable; /** * Stores App Compat information about a particular Task. * @hide */ public class AppCompatTaskInfo implements Parcelable { /** * Whether the direct top activity is eligible for letterbox education. */ public boolean topActivityEligibleForLetterboxEducation; /** * Whether the letterbox education is enabled */ public boolean isLetterboxEducationEnabled; /** * Whether the direct top activity is in size compat mode on foreground. */ public boolean topActivityInSizeCompat; /** * Whether the double tap is enabled. */ public boolean isLetterboxDoubleTapEnabled; /** * Whether the user aspect ratio settings button is enabled. */ public boolean topActivityEligibleForUserAspectRatioButton; /** * Whether the user has forced the activity to be fullscreen through the user aspect ratio * settings. */ public boolean isUserFullscreenOverrideEnabled; /** * Whether the system has forced the activity to be fullscreen */ public boolean isSystemFullscreenOverrideEnabled; /** * Hint about the letterbox state of the top activity. */ public boolean topActivityBoundsLetterboxed; /** * Whether the update comes from a letterbox double-tap action from the user or not. */ public boolean isFromLetterboxDoubleTap; /** * 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. */ public int topActivityLetterboxHorizontalPosition; /** * 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. */ public int topActivityLetterboxHeight; /** * Stores camera-related app compat information about a particular Task. */ public CameraCompatTaskInfo cameraCompatTaskInfo = CameraCompatTaskInfo.create(); private AppCompatTaskInfo() { // Do nothing } @NonNull static AppCompatTaskInfo create() { return new AppCompatTaskInfo(); } private AppCompatTaskInfo(Parcel source) { readFromParcel(source); } @Override public int describeContents() { return 0; } public static final Creator CREATOR = new Creator<>() { @Override public AppCompatTaskInfo createFromParcel(Parcel in) { return new AppCompatTaskInfo(in); } @Override public AppCompatTaskInfo[] newArray(int size) { return new AppCompatTaskInfo[size]; } }; /** * @return {@value true} if the task has some compat ui. */ public boolean hasCompatUI() { return cameraCompatTaskInfo.hasCameraCompatUI() || topActivityInSizeCompat || topActivityEligibleForLetterboxEducation || isLetterboxDoubleTapEnabled || topActivityEligibleForUserAspectRatioButton; } /** * @return {@value true} if top activity is pillarboxed. */ public boolean isTopActivityPillarboxed() { return topActivityLetterboxWidth < topActivityLetterboxHeight; } /** * @return {@code true} if the app compat parameters that are important for task organizers * are equal. */ public boolean equalsForTaskOrganizer(@Nullable AppCompatTaskInfo that) { if (that == null) { return false; } return isFromLetterboxDoubleTap == that.isFromLetterboxDoubleTap && topActivityEligibleForUserAspectRatioButton == that.topActivityEligibleForUserAspectRatioButton && topActivityLetterboxVerticalPosition == that.topActivityLetterboxVerticalPosition && topActivityLetterboxWidth == that.topActivityLetterboxWidth && topActivityLetterboxHeight == that.topActivityLetterboxHeight && topActivityLetterboxHorizontalPosition == that.topActivityLetterboxHorizontalPosition && isUserFullscreenOverrideEnabled == that.isUserFullscreenOverrideEnabled && isSystemFullscreenOverrideEnabled == that.isSystemFullscreenOverrideEnabled && cameraCompatTaskInfo.equalsForTaskOrganizer(that.cameraCompatTaskInfo); } /** * @return {@code true} if parameters that are important for size compat have changed. */ public boolean equalsForCompatUi(@Nullable AppCompatTaskInfo that) { if (that == null) { return false; } return topActivityInSizeCompat == that.topActivityInSizeCompat && isFromLetterboxDoubleTap == that.isFromLetterboxDoubleTap && topActivityEligibleForUserAspectRatioButton == that.topActivityEligibleForUserAspectRatioButton && topActivityEligibleForLetterboxEducation == that.topActivityEligibleForLetterboxEducation && isLetterboxEducationEnabled == that.isLetterboxEducationEnabled && topActivityLetterboxVerticalPosition == that.topActivityLetterboxVerticalPosition && topActivityLetterboxHorizontalPosition == that.topActivityLetterboxHorizontalPosition && topActivityLetterboxWidth == that.topActivityLetterboxWidth && topActivityLetterboxHeight == that.topActivityLetterboxHeight && isUserFullscreenOverrideEnabled == that.isUserFullscreenOverrideEnabled && isSystemFullscreenOverrideEnabled == that.isSystemFullscreenOverrideEnabled && cameraCompatTaskInfo.equalsForCompatUi(that.cameraCompatTaskInfo); } /** * Reads the AppCompatTaskInfo from a parcel. */ void readFromParcel(Parcel source) { isLetterboxEducationEnabled = source.readBoolean(); topActivityInSizeCompat = source.readBoolean(); topActivityEligibleForLetterboxEducation = source.readBoolean(); isLetterboxDoubleTapEnabled = source.readBoolean(); topActivityEligibleForUserAspectRatioButton = source.readBoolean(); topActivityBoundsLetterboxed = source.readBoolean(); isFromLetterboxDoubleTap = source.readBoolean(); topActivityLetterboxVerticalPosition = source.readInt(); topActivityLetterboxHorizontalPosition = source.readInt(); topActivityLetterboxWidth = source.readInt(); topActivityLetterboxHeight = source.readInt(); isUserFullscreenOverrideEnabled = source.readBoolean(); isSystemFullscreenOverrideEnabled = source.readBoolean(); cameraCompatTaskInfo = source.readTypedObject(CameraCompatTaskInfo.CREATOR); } /** * Writes the AppCompatTaskInfo to a parcel. */ @Override public void writeToParcel(Parcel dest, int flags) { dest.writeBoolean(isLetterboxEducationEnabled); dest.writeBoolean(topActivityInSizeCompat); dest.writeBoolean(topActivityEligibleForLetterboxEducation); dest.writeBoolean(isLetterboxDoubleTapEnabled); dest.writeBoolean(topActivityEligibleForUserAspectRatioButton); dest.writeBoolean(topActivityBoundsLetterboxed); dest.writeBoolean(isFromLetterboxDoubleTap); dest.writeInt(topActivityLetterboxVerticalPosition); dest.writeInt(topActivityLetterboxHorizontalPosition); dest.writeInt(topActivityLetterboxWidth); dest.writeInt(topActivityLetterboxHeight); dest.writeBoolean(isUserFullscreenOverrideEnabled); dest.writeBoolean(isSystemFullscreenOverrideEnabled); dest.writeTypedObject(cameraCompatTaskInfo, flags); } @Override public String toString() { return "AppCompatTaskInfo { topActivityInSizeCompat=" + topActivityInSizeCompat + " topActivityEligibleForLetterboxEducation= " + topActivityEligibleForLetterboxEducation + "isLetterboxEducationEnabled= " + isLetterboxEducationEnabled + " isLetterboxDoubleTapEnabled= " + isLetterboxDoubleTapEnabled + " topActivityEligibleForUserAspectRatioButton= " + topActivityEligibleForUserAspectRatioButton + " topActivityBoundsLetterboxed= " + topActivityBoundsLetterboxed + " isFromLetterboxDoubleTap= " + isFromLetterboxDoubleTap + " topActivityLetterboxVerticalPosition= " + topActivityLetterboxVerticalPosition + " topActivityLetterboxHorizontalPosition= " + topActivityLetterboxHorizontalPosition + " topActivityLetterboxWidth=" + topActivityLetterboxWidth + " topActivityLetterboxHeight=" + topActivityLetterboxHeight + " isUserFullscreenOverrideEnabled=" + isUserFullscreenOverrideEnabled + " isSystemFullscreenOverrideEnabled=" + isSystemFullscreenOverrideEnabled + " cameraCompatTaskInfo=" + cameraCompatTaskInfo.toString() + "}"; } }