Update split context when display size changed

Because SnapAlgorithm use many resources value and it will be
affected by density, we should update context and
mDividerSnapAlgorithm too when configuration density changed.

Fix: 250483334
Test: manaul
Test: atest SplitLayoutTests
Change-Id: I207a025503c032318ede707eed786ae83b60e658
This commit is contained in:
Tony Huang
2022-10-06 16:59:26 +08:00
parent 26ed84b746
commit b3d7ef6d85
2 changed files with 13 additions and 0 deletions

View File

@@ -118,6 +118,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
private boolean mFreezeDividerWindow = false;
private int mOrientation;
private int mRotation;
private int mDensity;
private final boolean mDimNonImeSide;
@@ -290,9 +291,11 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
final int rotation = configuration.windowConfiguration.getRotation();
final Rect rootBounds = configuration.windowConfiguration.getBounds();
final int orientation = configuration.orientation;
final int density = configuration.densityDpi;
if (mOrientation == orientation
&& mRotation == rotation
&& mDensity == density
&& mRootBounds.equals(rootBounds)) {
return false;
}
@@ -303,6 +306,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
mTempRect.set(mRootBounds);
mRootBounds.set(rootBounds);
mRotation = rotation;
mDensity = density;
mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds, null);
initDividerPosition(mTempRect);
updateInvisibleRect();

View File

@@ -16,6 +16,7 @@
package com.android.wm.shell.common.split;
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
import static com.google.common.truth.Truth.assertThat;
@@ -91,6 +92,14 @@ public class SplitLayoutTests extends ShellTestCase {
// Verify updateConfiguration returns true if the root bounds changed.
config.windowConfiguration.setBounds(new Rect(0, 0, 2160, 1080));
assertThat(mSplitLayout.updateConfiguration(config)).isTrue();
// Verify updateConfiguration returns true if the orientation changed.
config.orientation = ORIENTATION_LANDSCAPE;
assertThat(mSplitLayout.updateConfiguration(config)).isTrue();
// Verify updateConfiguration returns true if the density changed.
config.densityDpi = 123;
assertThat(mSplitLayout.updateConfiguration(config)).isTrue();
}
@Test