Inherit smallest width if TF is not multi-window without bounds override

So the embedded TaskFragment in fullscreen mode can have the same
configuration as in a normal fullscreen task. Such as the fullscreen
mode parent's smallestScreenWidthDp is calculated based on all
rotations, while the multi-window mode child calculates the value
by current size.

Bug: 256787005
Test: atest TaskFragmentTest#testOnConfigurationChanged
Change-Id: Ib79c6dc443cc0688b06035ddf64fe4dd766616a0
This commit is contained in:
Riddle Hsu
2022-12-14 19:56:21 +08:00
parent 2016b1dcd1
commit d8d22e9577
2 changed files with 20 additions and 5 deletions

View File

@@ -2223,7 +2223,8 @@ class TaskFragment extends WindowContainer<WindowContainer> {
// task, because they should not be affected by insets.
inOutConfig.smallestScreenWidthDp = (int) (0.5f
+ Math.min(mTmpFullBounds.width(), mTmpFullBounds.height()) / density);
} else if (isEmbedded()) {
} else if (windowingMode == WINDOWING_MODE_MULTI_WINDOW
&& isEmbeddedWithBoundsOverride()) {
// For embedded TFs, the smallest width should be updated. Otherwise, inherit
// from the parent task would result in applications loaded wrong resource.
inOutConfig.smallestScreenWidthDp =

View File

@@ -38,6 +38,7 @@ import static com.android.server.wm.WindowContainer.POSITION_TOP;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -98,12 +99,25 @@ public class TaskFragmentTest extends WindowTestsBase {
}
@Test
public void testOnConfigurationChanged_updateSurface() {
final Rect bounds = new Rect(100, 100, 1100, 1100);
public void testOnConfigurationChanged() {
final Configuration parentConfig = mTaskFragment.getParent().getConfiguration();
final Rect parentBounds = parentConfig.windowConfiguration.getBounds();
parentConfig.smallestScreenWidthDp += 10;
final int parentSw = parentConfig.smallestScreenWidthDp;
final Rect bounds = new Rect(parentBounds);
bounds.inset(100, 100);
mTaskFragment.setBounds(bounds);
mTaskFragment.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW);
// Calculate its own sw with smaller bounds in multi-window mode.
assertNotEquals(parentSw, mTaskFragment.getConfiguration().smallestScreenWidthDp);
verify(mTransaction).setPosition(mLeash, 100, 100);
verify(mTransaction).setWindowCrop(mLeash, 1000, 1000);
verify(mTransaction).setPosition(mLeash, bounds.left, bounds.top);
verify(mTransaction).setWindowCrop(mLeash, bounds.width(), bounds.height());
mTaskFragment.setBounds(parentBounds);
mTaskFragment.setWindowingMode(WINDOWING_MODE_FULLSCREEN);
// Inherit parent's sw in fullscreen mode.
assertEquals(parentSw, mTaskFragment.getConfiguration().smallestScreenWidthDp);
}
@Test