Don't clear size compat mode on fold/unfold.

With ag/14036667, the displays are turned off during fold and unfold transitions. While screen is off, ActivityRecord#mVisibleRequested is set to false and mCompatDisplatInsets is cleared in onConfigurationChanged > restartProcessIfVisible > clearSizeCompatMode. As a result, unresizable activities don't enter size compat mode after fold/unfold as they should. To address this checking that visibleIgnoringKeyguard is set to false before clearing mCompatDisplayInsets.

Fix: 187338605
Test: atest SizeCompatMode
Change-Id: I75ea5bba106d04c849e6b7ab446f77fcd8928981
This commit is contained in:
Mariia Sandrikova
2021-05-13 18:26:52 +01:00
parent d8ee5fbd5f
commit 437319e18b
2 changed files with 5 additions and 1 deletions

View File

@@ -7483,7 +7483,10 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
if (mVisibleRequested) {
// It may toggle the UI for user to restart the size compatibility mode activity.
display.handleActivitySizeCompatModeIfNeeded(this);
} else if (mCompatDisplayInsets != null) {
} else if (mCompatDisplayInsets != null && !visibleIgnoringKeyguard) {
// visibleIgnoringKeyguard is checked to avoid clearing mCompatDisplayInsets during
// displays change. Displays are turned off during the change so mVisibleRequested
// can be false.
// The override changes can only be obtained from display, because we don't have the
// difference of full configuration in each hierarchy.
final int displayChanges = display.getCurrentOverrideConfigurationChanges();

View File

@@ -521,6 +521,7 @@ public class SizeCompatTests extends WindowTestsBase {
mActivity.setState(STOPPED, "testSizeCompatMode");
mActivity.mVisibleRequested = false;
mActivity.visibleIgnoringKeyguard = false;
mActivity.app.setReportedProcState(ActivityManager.PROCESS_STATE_CACHED_ACTIVITY);
// Simulate the display changes orientation.