Loading core/java/android/app/ActivityThread.java +12 −1 Original line number Diff line number Diff line Loading @@ -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); } Loading @@ -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; Loading Loading @@ -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); } Loading core/java/android/app/CameraCompatTaskInfo.java +26 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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( Loading core/java/android/app/ResourcesManager.java +1 −3 Original line number Diff line number Diff line Loading @@ -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 Loading core/java/android/app/servertransaction/ActivityConfigurationChangeItem.java +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading core/java/android/app/servertransaction/ActivityRelaunchItem.java +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
core/java/android/app/ActivityThread.java +12 −1 Original line number Diff line number Diff line Loading @@ -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); } Loading @@ -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; Loading Loading @@ -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); } Loading
core/java/android/app/CameraCompatTaskInfo.java +26 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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( Loading
core/java/android/app/ResourcesManager.java +1 −3 Original line number Diff line number Diff line Loading @@ -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 Loading
core/java/android/app/servertransaction/ActivityConfigurationChangeItem.java +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading
core/java/android/app/servertransaction/ActivityRelaunchItem.java +1 −1 Original line number Diff line number Diff line Loading @@ -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