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

Commit c8139785 authored by Riddle Hsu's avatar Riddle Hsu Committed by Android Build Coastguard Worker
Browse files

Clear size compat config when resizing to large screen

The CompatDisplayInsets could be created when the activity is
on a small screen. If the activity is moved or the display is
resized to large screen, then the compat config should be cleared
to fit container size if universal resizable is enabled.

For example:
 Fold to unfold(large screen): clear size compat info
 Unfold to fold(compact screen): create size compat info

Fix: 407952252
Flag: com.android.window.flags.universal_resizable_by_default
Test: SizeCompatTests#testUniversalResizeableByDefault
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:8f81dad65e2ba97b69438c28de0d34d9620404a3)
Merged-In: I4da10de140c8bdf565e97239e9ea3901c293ea3d
Change-Id: I4da10de140c8bdf565e97239e9ea3901c293ea3d
parent d97422fc
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -7580,6 +7580,9 @@ final class ActivityRecord extends WindowToken {


    @Override
    @Override
    void resolveOverrideConfiguration(Configuration newParentConfiguration) {
    void resolveOverrideConfiguration(Configuration newParentConfiguration) {
        final AppCompatSizeCompatModePolicy scmPolicy =
                mAppCompatController.getSizeCompatModePolicy();
        scmPolicy.clearSizeCompatModeIfNeededOnResolveOverrideConfiguration();
        final Configuration requestedOverrideConfig = getRequestedOverrideConfiguration();
        final Configuration requestedOverrideConfig = getRequestedOverrideConfiguration();
        if (requestedOverrideConfig.assetsSeq != ASSETS_SEQ_UNDEFINED
        if (requestedOverrideConfig.assetsSeq != ASSETS_SEQ_UNDEFINED
                && newParentConfiguration.assetsSeq > requestedOverrideConfig.assetsSeq) {
                && newParentConfiguration.assetsSeq > requestedOverrideConfig.assetsSeq) {
@@ -7637,8 +7640,6 @@ final class ActivityRecord extends WindowToken {
        // Don't apply aspect ratio if app is overridden to fullscreen by device user/manufacturer.
        // Don't apply aspect ratio if app is overridden to fullscreen by device user/manufacturer.
        aspectRatioPolicy.resolveAspectRatioRestrictionIfNeeded(newParentConfiguration);
        aspectRatioPolicy.resolveAspectRatioRestrictionIfNeeded(newParentConfiguration);
        final AppCompatDisplayInsets appCompatDisplayInsets = getAppCompatDisplayInsets();
        final AppCompatDisplayInsets appCompatDisplayInsets = getAppCompatDisplayInsets();
        final AppCompatSizeCompatModePolicy scmPolicy =
                mAppCompatController.getSizeCompatModePolicy();
        if (appCompatDisplayInsets != null) {
        if (appCompatDisplayInsets != null) {
            scmPolicy.resolveSizeCompatModeConfiguration(newParentConfiguration,
            scmPolicy.resolveSizeCompatModeConfiguration(newParentConfiguration,
                    appCompatDisplayInsets, mTmpBounds);
                    appCompatDisplayInsets, mTmpBounds);
+15 −2
Original line number Original line Diff line number Diff line
@@ -171,8 +171,7 @@ class AppCompatSizeCompatModePolicy {
                .clearInheritedAppCompatDisplayInsets();
                .clearInheritedAppCompatDisplayInsets();
    }
    }


    void clearSizeCompatMode() {
    private Configuration clearOverrideConfiguration() {
        clearSizeCompatModeAttributes();
        // Clear config override in #updateAppCompatDisplayInsets().
        // Clear config override in #updateAppCompatDisplayInsets().
        final int activityType = mActivityRecord.getActivityType();
        final int activityType = mActivityRecord.getActivityType();
        final Configuration overrideConfig = mActivityRecord.getRequestedOverrideConfiguration();
        final Configuration overrideConfig = mActivityRecord.getRequestedOverrideConfiguration();
@@ -180,9 +179,23 @@ class AppCompatSizeCompatModePolicy {
        // Keep the activity type which was set when attaching to a task to prevent leaving it
        // Keep the activity type which was set when attaching to a task to prevent leaving it
        // undefined.
        // undefined.
        overrideConfig.windowConfiguration.setActivityType(activityType);
        overrideConfig.windowConfiguration.setActivityType(activityType);
        return overrideConfig;
    }

    void clearSizeCompatMode() {
        clearSizeCompatModeAttributes();
        final Configuration overrideConfig = clearOverrideConfiguration();
        mActivityRecord.onRequestedOverrideConfigurationChanged(overrideConfig);
        mActivityRecord.onRequestedOverrideConfigurationChanged(overrideConfig);
    }
    }


    void clearSizeCompatModeIfNeededOnResolveOverrideConfiguration() {
        if (mAppCompatDisplayInsets == null || !mActivityRecord.isUniversalResizeable()) {
            return;
        }
        clearSizeCompatModeAttributes();
        clearOverrideConfiguration();
    }

    void dump(@NonNull PrintWriter pw, @NonNull String prefix) {
    void dump(@NonNull PrintWriter pw, @NonNull String prefix) {
        if (mSizeCompatScale != 1f || hasSizeCompatBounds()) {
        if (mSizeCompatScale != 1f || hasSizeCompatBounds()) {
            pw.println(prefix + "mSizeCompatScale=" + mSizeCompatScale + " mSizeCompatBounds="
            pw.println(prefix + "mSizeCompatScale=" + mSizeCompatScale + " mSizeCompatBounds="
+7 −1
Original line number Original line Diff line number Diff line
@@ -5393,12 +5393,18 @@ public class SizeCompatTests extends WindowTestsBase {
    public void testUniversalResizeableByDefault() {
    public void testUniversalResizeableByDefault() {
        mSetFlagsRule.enableFlags(Flags.FLAG_UNIVERSAL_RESIZABLE_BY_DEFAULT);
        mSetFlagsRule.enableFlags(Flags.FLAG_UNIVERSAL_RESIZABLE_BY_DEFAULT);
        mDisplayContent.setIgnoreOrientationRequest(false);
        mDisplayContent.setIgnoreOrientationRequest(false);
        setUpApp(mDisplayContent);
        setUpApp(mDisplayContent, new ActivityBuilder(mAtm)
                .setResizeMode(RESIZE_MODE_UNRESIZEABLE)
                .setScreenOrientation(SCREEN_ORIENTATION_LANDSCAPE)
                .setMinAspectRatio(OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE));
        assertFalse(mActivity.isUniversalResizeable());
        assertFalse(mActivity.isUniversalResizeable());
        mActivity.mAppCompatController.getSizeCompatModePolicy().updateAppCompatDisplayInsets();
        assertNotNull(mActivity.getAppCompatDisplayInsets());


        mDisplayContent.setIgnoreOrientationRequest(true);
        mDisplayContent.setIgnoreOrientationRequest(true);
        makeDisplayLargeScreen(mDisplayContent);
        makeDisplayLargeScreen(mDisplayContent);
        assertTrue(mActivity.isUniversalResizeable());
        assertTrue(mActivity.isUniversalResizeable());
        assertFitted();
    }
    }


    @Test
    @Test