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

Commit 6ea1116d authored by Mina Granic's avatar Mina Granic Committed by Android (Google) Code Review
Browse files

Merge "Sandbox display rotation for camera compat using CompatInfo." into main

parents fc51f58a 6d8e2819
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -1372,7 +1372,8 @@ public final class ActivityThread extends ClientTransactionHandler
            data.startRequestedElapsedTime = startRequestedElapsedTime;
            data.startRequestedUptime = startRequestedUptime;
            updateCompatOverrideScale(compatInfo);
            CompatibilityInfo.applyOverrideScaleIfNeeded(config);
            updateCompatOverrideDisplayRotation(compatInfo);
            CompatibilityInfo.applyOverrideIfNeeded(config);
            sendMessage(H.BIND_APPLICATION, data);
        }

@@ -1386,6 +1387,15 @@ public final class ActivityThread extends ClientTransactionHandler
            }
        }

        private void updateCompatOverrideDisplayRotation(@NonNull CompatibilityInfo info) {
            if (info.isOverrideDisplayRotationRequired()) {
                CompatibilityInfo.setOverrideDisplayRotation(info.applicationDisplayRotation);
            } else {
                CompatibilityInfo.setOverrideDisplayRotation(
                        WindowConfiguration.ROTATION_UNDEFINED);
            }
        }

        public final void runIsolatedEntryPoint(String entryPoint, String[] entryPointArgs) {
            SomeArgs args = SomeArgs.obtain();
            args.arg1 = entryPoint;
@@ -2036,6 +2046,7 @@ public final class ActivityThread extends ClientTransactionHandler
            ucd.pkg = pkg;
            ucd.info = info;
            updateCompatOverrideScale(info);
            updateCompatOverrideDisplayRotation(info);
            sendMessage(H.UPDATE_PACKAGE_COMPATIBILITY_INFO, ucd);
        }

+26 −0
Original line number Diff line number Diff line
@@ -16,11 +16,16 @@

package android.app;

import static android.app.WindowConfiguration.ROTATION_UNDEFINED;
import static android.view.Surface.ROTATION_0;
import static android.view.Surface.ROTATION_90;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.os.Parcel;
import android.os.Parcelable;
import android.view.Surface;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -153,6 +158,27 @@ public class CameraCompatTaskInfo implements Parcelable {
                + "}";
    }

    /**
     * Returns the sandboxed display rotation based on the given {@code cameraCompatMode}.
     *
     * <p>This will be what the app likely expects in its requested orientation while running on a
     * device with portrait natural orientation: `CAMERA_COMPAT_FREEFORM_PORTRAIT_*` is 0, and
     * `CAMERA_COMPAT_FREEFORM_LANDSCAPE_*` is 90.
     *
     * @return {@link WindowConfiguration#ROTATION_UNDEFINED} if not in camera compat mode.
     */
    @Surface.Rotation
    public static int getDisplayRotationFromCameraCompatMode(@FreeformCameraCompatMode int
            cameraCompatMode) {
        return switch (cameraCompatMode) {
            case CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE,
                 CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_PORTRAIT -> ROTATION_0;
            case CAMERA_COMPAT_FREEFORM_LANDSCAPE_DEVICE_IN_LANDSCAPE,
                 CAMERA_COMPAT_FREEFORM_LANDSCAPE_DEVICE_IN_PORTRAIT -> ROTATION_90;
            default -> ROTATION_UNDEFINED;
        };
    }

    /** Human readable version of the freeform camera compat mode. */
    @NonNull
    public static String freeformCameraCompatModeToString(
+1 −3
Original line number Diff line number Diff line
@@ -1517,10 +1517,8 @@ public class ResourcesManager {
                int changes = mResConfiguration.updateFrom(config);
                if (compat != null && (mResCompatibilityInfo == null
                        || !mResCompatibilityInfo.equals(compat))) {
                    changes |= compat.getCompatibilityChangesForConfig(mResCompatibilityInfo);
                    mResCompatibilityInfo = compat;
                    changes |= ActivityInfo.CONFIG_SCREEN_LAYOUT
                            | ActivityInfo.CONFIG_SCREEN_SIZE
                            | ActivityInfo.CONFIG_SMALLEST_SCREEN_SIZE;
                }

                // If a application info update was scheduled to occur in this process but has not
+1 −1
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@ public class ActivityConfigurationChangeItem extends ActivityTransactionItem {

    @Override
    public void preExecute(@NonNull ClientTransactionHandler client) {
        CompatibilityInfo.applyOverrideScaleIfNeeded(mConfiguration);
        CompatibilityInfo.applyOverrideIfNeeded(mConfiguration);
        // Notify the client of an upcoming change in the token configuration. This ensures that
        // batches of config change items only process the newest configuration.
        client.updatePendingActivityConfiguration(getActivityToken(), mConfiguration);
+1 −1
Original line number Diff line number Diff line
@@ -89,7 +89,7 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {
    public void preExecute(@NonNull ClientTransactionHandler client) {
        // The local config is already scaled so only apply if this item is from server side.
        if (!client.isExecutingLocalTransaction()) {
            CompatibilityInfo.applyOverrideScaleIfNeeded(mConfig);
            CompatibilityInfo.applyOverrideIfNeeded(mConfig);
        }
        mActivityClientRecord = client.prepareRelaunchActivity(getActivityToken(), mPendingResults,
                mPendingNewIntents, mConfigChanges, mConfig, mPreserveWindow, mActivityWindowInfo);
Loading