Loading services/core/java/com/android/server/wm/AppCompatUtils.java +15 −7 Original line number Diff line number Diff line Loading @@ -187,14 +187,18 @@ final class AppCompatUtils { top.getAppCompatDisplayInsets() != null ? top.getAppCompatDisplayInsets().mAspectRatio : TaskInfo.PROPERTY_VALUE_UNSET; final boolean isTopActivityLetterboxed = top.areBoundsLetterboxed(); final AppCompatLetterboxPolicy letterboxPolicy = top.mAppCompatController.getLetterboxPolicy(); final boolean isTopActivityLetterboxed = letterboxPolicy.isRunning(); appCompatTaskInfo.setTopActivityLetterboxed(isTopActivityLetterboxed); if (isTopActivityLetterboxed) { final Rect bounds = top.getBounds(); appCompatTaskInfo.topActivityLetterboxWidth = bounds.width(); appCompatTaskInfo.topActivityLetterboxHeight = bounds.height(); // TODO(b/379824541) Remove duplicate information. appCompatTaskInfo.topActivityLetterboxBounds = bounds; appCompatTaskInfo.topActivityLetterboxBounds = new Rect(); letterboxPolicy.getLetterboxInnerBounds(appCompatTaskInfo.topActivityLetterboxBounds); appCompatTaskInfo.topActivityLetterboxWidth = appCompatTaskInfo.topActivityLetterboxBounds.width(); appCompatTaskInfo.topActivityLetterboxHeight = appCompatTaskInfo.topActivityLetterboxBounds.height(); // We need to consider if letterboxed or pillarboxed. // TODO(b/336807329) Encapsulate reachability logic appCompatTaskInfo.setLetterboxDoubleTapEnabled(reachabilityOverrides Loading Loading @@ -323,8 +327,12 @@ final class AppCompatUtils { @Nullable static AppCompatTransitionInfo createAppCompatTransitionInfo( @NonNull ActivityRecord activityRecord) { if (activityRecord.areBoundsLetterboxed()) { return new AppCompatTransitionInfo(new Rect(activityRecord.getBounds())); final AppCompatLetterboxPolicy letterboxPolicy = activityRecord.mAppCompatController.getLetterboxPolicy(); if (letterboxPolicy.isRunning()) { final Rect letterboxBounds = new Rect(); letterboxPolicy.getLetterboxInnerBounds(letterboxBounds); return new AppCompatTransitionInfo(letterboxBounds); } return null; } Loading services/tests/wmtests/src/com/android/server/wm/AppCompatUtilsTest.java +21 −1 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; Loading Loading @@ -245,8 +246,9 @@ public class AppCompatUtilsTest extends WindowTestsBase { a.createActivityWithComponent(); a.checkTopActivityInSizeCompatMode(/* inScm */ false); a.setIgnoreOrientationRequest(true); a.configureTopActivityBounds(new Rect(20, 30, 520, 630)); }); robot.setIsLetterboxPolicyRunning(true); robot.setLetterboxPolicyLetterboxBounds(new Rect(20, 30, 520, 630)); robot.setIsLetterboxedForAspectRatioOnly(/* forAspectRatio */ true); Loading Loading @@ -290,6 +292,9 @@ public class AppCompatUtilsTest extends WindowTestsBase { a.configureTopActivityBounds(new Rect(20, 30, 520, 630)); }); robot.setIsLetterboxPolicyRunning(true); robot.setLetterboxPolicyLetterboxBounds(new Rect(20, 30, 520, 630)); robot.createAppCompatTransitionInfo(); robot.checkAppCompatTransitionInfoIsCreated(/* expected */ true); Loading Loading @@ -327,6 +332,7 @@ public class AppCompatUtilsTest extends WindowTestsBase { super.onPostActivityCreation(activity); spyOn(activity.mAppCompatController.getAspectRatioPolicy()); spyOn(activity.mAppCompatController.getSafeRegionPolicy()); spyOn(activity.mAppCompatController.getLetterboxPolicy()); } @Override Loading Loading @@ -360,6 +366,20 @@ public class AppCompatUtilsTest extends WindowTestsBase { when(mWindowState.isLetterboxedForDisplayCutout()).thenReturn(displayCutout); } void setIsLetterboxPolicyRunning(boolean isLetterboxRunning) { when(activity().top().mAppCompatController.getLetterboxPolicy().isRunning()) .thenReturn(isLetterboxRunning); } void setLetterboxPolicyLetterboxBounds(@NonNull Rect expectedBounds) { doAnswer(invocation -> { Rect bounds = invocation.getArgument(0); bounds.set(expectedBounds); return null; }).when(activity().top().mAppCompatController.getLetterboxPolicy()) .getLetterboxInnerBounds(any(Rect.class)); } void setIsLetterboxedForSafeRegionOnlyAllowed(boolean safeRegionOnly) { when(activity().top().mAppCompatController.getSafeRegionPolicy() .isLetterboxedForSafeRegionOnlyAllowed()).thenReturn(safeRegionOnly); Loading services/tests/wmtests/src/com/android/server/wm/TransitionTests.java +7 −3 Original line number Diff line number Diff line Loading @@ -75,7 +75,6 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static java.lang.Integer.MAX_VALUE; Loading Loading @@ -111,7 +110,6 @@ import androidx.test.filters.SmallTest; import com.android.internal.graphics.ColorUtils; import com.android.server.wm.TransitionController.OnStartCollect; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; Loading Loading @@ -222,7 +220,13 @@ public class TransitionTests extends WindowTestsBase { new Rect(10, 10, 200, 300)); opening.onRequestedOverrideConfigurationChanged( opening.getRequestedOverrideConfiguration()); final Rect letterboxBounds = opening.getBounds(); final WindowState appWindow = newWindowBuilder("appWindow", TYPE_BASE_APPLICATION).setWindowToken(opening).build(); final Rect letterboxBounds = new Rect(); final AppCompatLetterboxPolicy letterboxPolicy = opening.mAppCompatController.getLetterboxPolicy(); letterboxPolicy.start(appWindow); letterboxPolicy.getLetterboxInnerBounds(letterboxBounds); final ActivityTransitionInfo closingActivityTransitionInfo = new ActivityTransitionInfo(closing.mActivityComponent, theTask.mTaskId); final ActivityTransitionInfo openingActivityTransitionInfo = new ActivityTransitionInfo( Loading Loading
services/core/java/com/android/server/wm/AppCompatUtils.java +15 −7 Original line number Diff line number Diff line Loading @@ -187,14 +187,18 @@ final class AppCompatUtils { top.getAppCompatDisplayInsets() != null ? top.getAppCompatDisplayInsets().mAspectRatio : TaskInfo.PROPERTY_VALUE_UNSET; final boolean isTopActivityLetterboxed = top.areBoundsLetterboxed(); final AppCompatLetterboxPolicy letterboxPolicy = top.mAppCompatController.getLetterboxPolicy(); final boolean isTopActivityLetterboxed = letterboxPolicy.isRunning(); appCompatTaskInfo.setTopActivityLetterboxed(isTopActivityLetterboxed); if (isTopActivityLetterboxed) { final Rect bounds = top.getBounds(); appCompatTaskInfo.topActivityLetterboxWidth = bounds.width(); appCompatTaskInfo.topActivityLetterboxHeight = bounds.height(); // TODO(b/379824541) Remove duplicate information. appCompatTaskInfo.topActivityLetterboxBounds = bounds; appCompatTaskInfo.topActivityLetterboxBounds = new Rect(); letterboxPolicy.getLetterboxInnerBounds(appCompatTaskInfo.topActivityLetterboxBounds); appCompatTaskInfo.topActivityLetterboxWidth = appCompatTaskInfo.topActivityLetterboxBounds.width(); appCompatTaskInfo.topActivityLetterboxHeight = appCompatTaskInfo.topActivityLetterboxBounds.height(); // We need to consider if letterboxed or pillarboxed. // TODO(b/336807329) Encapsulate reachability logic appCompatTaskInfo.setLetterboxDoubleTapEnabled(reachabilityOverrides Loading Loading @@ -323,8 +327,12 @@ final class AppCompatUtils { @Nullable static AppCompatTransitionInfo createAppCompatTransitionInfo( @NonNull ActivityRecord activityRecord) { if (activityRecord.areBoundsLetterboxed()) { return new AppCompatTransitionInfo(new Rect(activityRecord.getBounds())); final AppCompatLetterboxPolicy letterboxPolicy = activityRecord.mAppCompatController.getLetterboxPolicy(); if (letterboxPolicy.isRunning()) { final Rect letterboxBounds = new Rect(); letterboxPolicy.getLetterboxInnerBounds(letterboxBounds); return new AppCompatTransitionInfo(letterboxBounds); } return null; } Loading
services/tests/wmtests/src/com/android/server/wm/AppCompatUtilsTest.java +21 −1 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; Loading Loading @@ -245,8 +246,9 @@ public class AppCompatUtilsTest extends WindowTestsBase { a.createActivityWithComponent(); a.checkTopActivityInSizeCompatMode(/* inScm */ false); a.setIgnoreOrientationRequest(true); a.configureTopActivityBounds(new Rect(20, 30, 520, 630)); }); robot.setIsLetterboxPolicyRunning(true); robot.setLetterboxPolicyLetterboxBounds(new Rect(20, 30, 520, 630)); robot.setIsLetterboxedForAspectRatioOnly(/* forAspectRatio */ true); Loading Loading @@ -290,6 +292,9 @@ public class AppCompatUtilsTest extends WindowTestsBase { a.configureTopActivityBounds(new Rect(20, 30, 520, 630)); }); robot.setIsLetterboxPolicyRunning(true); robot.setLetterboxPolicyLetterboxBounds(new Rect(20, 30, 520, 630)); robot.createAppCompatTransitionInfo(); robot.checkAppCompatTransitionInfoIsCreated(/* expected */ true); Loading Loading @@ -327,6 +332,7 @@ public class AppCompatUtilsTest extends WindowTestsBase { super.onPostActivityCreation(activity); spyOn(activity.mAppCompatController.getAspectRatioPolicy()); spyOn(activity.mAppCompatController.getSafeRegionPolicy()); spyOn(activity.mAppCompatController.getLetterboxPolicy()); } @Override Loading Loading @@ -360,6 +366,20 @@ public class AppCompatUtilsTest extends WindowTestsBase { when(mWindowState.isLetterboxedForDisplayCutout()).thenReturn(displayCutout); } void setIsLetterboxPolicyRunning(boolean isLetterboxRunning) { when(activity().top().mAppCompatController.getLetterboxPolicy().isRunning()) .thenReturn(isLetterboxRunning); } void setLetterboxPolicyLetterboxBounds(@NonNull Rect expectedBounds) { doAnswer(invocation -> { Rect bounds = invocation.getArgument(0); bounds.set(expectedBounds); return null; }).when(activity().top().mAppCompatController.getLetterboxPolicy()) .getLetterboxInnerBounds(any(Rect.class)); } void setIsLetterboxedForSafeRegionOnlyAllowed(boolean safeRegionOnly) { when(activity().top().mAppCompatController.getSafeRegionPolicy() .isLetterboxedForSafeRegionOnlyAllowed()).thenReturn(safeRegionOnly); Loading
services/tests/wmtests/src/com/android/server/wm/TransitionTests.java +7 −3 Original line number Diff line number Diff line Loading @@ -75,7 +75,6 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static java.lang.Integer.MAX_VALUE; Loading Loading @@ -111,7 +110,6 @@ import androidx.test.filters.SmallTest; import com.android.internal.graphics.ColorUtils; import com.android.server.wm.TransitionController.OnStartCollect; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; Loading Loading @@ -222,7 +220,13 @@ public class TransitionTests extends WindowTestsBase { new Rect(10, 10, 200, 300)); opening.onRequestedOverrideConfigurationChanged( opening.getRequestedOverrideConfiguration()); final Rect letterboxBounds = opening.getBounds(); final WindowState appWindow = newWindowBuilder("appWindow", TYPE_BASE_APPLICATION).setWindowToken(opening).build(); final Rect letterboxBounds = new Rect(); final AppCompatLetterboxPolicy letterboxPolicy = opening.mAppCompatController.getLetterboxPolicy(); letterboxPolicy.start(appWindow); letterboxPolicy.getLetterboxInnerBounds(letterboxBounds); final ActivityTransitionInfo closingActivityTransitionInfo = new ActivityTransitionInfo(closing.mActivityComponent, theTask.mTaskId); final ActivityTransitionInfo openingActivityTransitionInfo = new ActivityTransitionInfo( Loading