Correct magnification switch button position after screen size is changed

This is for the foldable devices.
When the screen size is changed when the device is folded or  unfolded,
the magnification switch button position should be adjusted to keep the
X postion stick to the closest screen edge and Y position in the same
height ration.
https://buganizer.corp.google.com/issues/190365799#comment2

Bug: 190365799
Test: atest MagnificationModeSwitchTest
Mannual testing by using adb shell wm size 1080x2280 to change the screen size.

Change-Id: Ic73309c9d79fb8476b2de823f8d4d75355c4d944
This commit is contained in:
mincheli
2021-07-04 06:31:22 +08:00
parent 1da31e4873
commit 059dd66847
2 changed files with 26 additions and 1 deletions

View File

@@ -310,7 +310,8 @@ class MagnificationModeSwitch implements MagnificationGestureDetector.OnGestureL
}
void onConfigurationChanged(int configDiff) {
if ((configDiff & ActivityInfo.CONFIG_ORIENTATION) != 0) {
if ((configDiff & (ActivityInfo.CONFIG_ORIENTATION | ActivityInfo.CONFIG_SCREEN_SIZE))
!= 0) {
final Rect previousDraggableBounds = new Rect(mDraggableWindowBounds);
mDraggableWindowBounds.set(getDraggableWindowBounds());
// Keep the Y position with the same height ratio before the window bounds and

View File

@@ -507,6 +507,30 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
expectedY, mWindowManager.getLayoutParamsFromAttachedView().y);
}
@Test
public void onScreenSizeChanged_buttonIsShowingOnTheRightSide_expectedPosition() {
final Rect windowBounds = mWindowManager.getCurrentWindowMetrics().getBounds();
mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
final Rect oldDraggableBounds = new Rect(mMagnificationModeSwitch.mDraggableWindowBounds);
final float windowHeightFraction =
(float) (mWindowManager.getLayoutParamsFromAttachedView().y
- oldDraggableBounds.top) / oldDraggableBounds.height();
// The window bounds and the draggable bounds are changed due to the screen size change.
final Rect tmpRect = new Rect(windowBounds);
tmpRect.scale(2);
final Rect newWindowBounds = new Rect(tmpRect);
mWindowManager.setWindowBounds(newWindowBounds);
mMagnificationModeSwitch.onConfigurationChanged(ActivityInfo.CONFIG_SCREEN_SIZE);
final int expectedX = mMagnificationModeSwitch.mDraggableWindowBounds.right;
final int expectedY = (int) (windowHeightFraction
* mMagnificationModeSwitch.mDraggableWindowBounds.height())
+ mMagnificationModeSwitch.mDraggableWindowBounds.top;
assertEquals(expectedX, mWindowManager.getLayoutParamsFromAttachedView().x);
assertEquals(expectedY, mWindowManager.getLayoutParamsFromAttachedView().y);
}
private void assertModeUnchanged(int expectedMode) {
final int actualMode = Settings.Secure.getInt(mContext.getContentResolver(),
Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE, 0);