Merge "Magnification uses WindowManager.getMaximumWindiowMetrics to compute its layout instead of the display size" into sc-dev

This commit is contained in:
Minche Li
2021-04-21 10:19:45 +00:00
committed by Android (Google) Code Review
2 changed files with 19 additions and 15 deletions

View File

@@ -30,7 +30,6 @@ import android.content.pm.ActivityInfo;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Matrix; import android.graphics.Matrix;
import android.graphics.PixelFormat; import android.graphics.PixelFormat;
import android.graphics.Point;
import android.graphics.Rect; import android.graphics.Rect;
import android.graphics.RectF; import android.graphics.RectF;
import android.graphics.Region; import android.graphics.Region;
@@ -80,7 +79,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
private final Context mContext; private final Context mContext;
private final Resources mResources; private final Resources mResources;
private final Handler mHandler; private final Handler mHandler;
private final Point mDisplaySize = new Point(); private Rect mWindowBounds;
private final int mDisplayId; private final int mDisplayId;
@Surface.Rotation @Surface.Rotation
@VisibleForTesting @VisibleForTesting
@@ -143,12 +142,13 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
mHandler = handler; mHandler = handler;
mSfVsyncFrameProvider = sfVsyncFrameProvider; mSfVsyncFrameProvider = sfVsyncFrameProvider;
mWindowMagnifierCallback = callback; mWindowMagnifierCallback = callback;
Display display = mContext.getDisplay();
display.getRealSize(mDisplaySize); final Display display = mContext.getDisplay();
mDisplayId = mContext.getDisplayId(); mDisplayId = mContext.getDisplayId();
mRotation = display.getRotation(); mRotation = display.getRotation();
mWm = context.getSystemService(WindowManager.class); mWm = context.getSystemService(WindowManager.class);
mWindowBounds = mWm.getCurrentWindowMetrics().getBounds();
mResources = mContext.getResources(); mResources = mContext.getResources();
mScale = mResources.getInteger(R.integer.magnification_default_scale); mScale = mResources.getInteger(R.integer.magnification_default_scale);
@@ -225,7 +225,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
mNavGestureHeight = 0; mNavGestureHeight = 0;
return; return;
} }
mNavGestureHeight = (mDisplaySize.x > mDisplaySize.y) mNavGestureHeight = (mWindowBounds.width() > mWindowBounds.height())
? mResources.getDimensionPixelSize( ? mResources.getDimensionPixelSize(
com.android.internal.R.dimen.navigation_bar_height_landscape) com.android.internal.R.dimen.navigation_bar_height_landscape)
: mResources.getDimensionPixelSize( : mResources.getDimensionPixelSize(
@@ -295,7 +295,8 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
private void onRotate() { private void onRotate() {
final Display display = mContext.getDisplay(); final Display display = mContext.getDisplay();
final int oldRotation = mRotation; final int oldRotation = mRotation;
display.getRealSize(mDisplaySize); mWindowBounds = mWm.getCurrentWindowMetrics().getBounds();
setMagnificationFrameBoundary(); setMagnificationFrameBoundary();
mRotation = display.getRotation(); mRotation = display.getRotation();
updateNavigationBarDimensions(); updateNavigationBarDimensions();
@@ -309,9 +310,9 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
final Matrix matrix = new Matrix(); final Matrix matrix = new Matrix();
matrix.setRotate(rotationDegree); matrix.setRotate(rotationDegree);
if (rotationDegree == 90) { if (rotationDegree == 90) {
matrix.postTranslate(mDisplaySize.x, 0); matrix.postTranslate(mWindowBounds.width(), 0);
} else if (rotationDegree == 270) { } else if (rotationDegree == 270) {
matrix.postTranslate(0, mDisplaySize.y); matrix.postTranslate(0, mWindowBounds.height());
} else { } else {
Log.w(TAG, "Invalid rotation change. " + rotationDegree); Log.w(TAG, "Invalid rotation change. " + rotationDegree);
return; return;
@@ -409,10 +410,10 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
private void setInitialStartBounds() { private void setInitialStartBounds() {
// Sets the initial frame area for the mirror and places it in the center of the display. // Sets the initial frame area for the mirror and places it in the center of the display.
final int initSize = Math.min(mDisplaySize.x, mDisplaySize.y) / 2 final int initSize = Math.min(mWindowBounds.width(), mWindowBounds.height()) / 2
+ 2 * mMirrorSurfaceMargin; + 2 * mMirrorSurfaceMargin;
final int initX = mDisplaySize.x / 2 - initSize / 2; final int initX = mWindowBounds.width() / 2 - initSize / 2;
final int initY = mDisplaySize.y / 2 - initSize / 2; final int initY = mWindowBounds.height() / 2 - initSize / 2;
mMagnificationFrame.set(initX, initY, initX + initSize, initY + initSize); mMagnificationFrame.set(initX, initY, initX + initSize, initY + initSize);
} }
@@ -462,8 +463,9 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
if (!isWindowVisible()) { if (!isWindowVisible()) {
return; return;
} }
final int maxMirrorViewX = mDisplaySize.x - mMirrorView.getWidth(); final int maxMirrorViewX = mWindowBounds.width() - mMirrorView.getWidth();
final int maxMirrorViewY = mDisplaySize.y - mMirrorView.getHeight() - mNavGestureHeight; final int maxMirrorViewY =
mWindowBounds.height() - mMirrorView.getHeight() - mNavGestureHeight;
LayoutParams params = LayoutParams params =
(LayoutParams) mMirrorView.getLayoutParams(); (LayoutParams) mMirrorView.getLayoutParams();
params.x = mMagnificationFrame.left - mMirrorSurfaceMargin; params.x = mMagnificationFrame.left - mMirrorSurfaceMargin;
@@ -535,7 +537,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
final int exceededHeight = halfHeight - scaledHeight; final int exceededHeight = halfHeight - scaledHeight;
mMagnificationFrameBoundary.set(-exceededWidth, -exceededHeight, mMagnificationFrameBoundary.set(-exceededWidth, -exceededHeight,
mDisplaySize.x + exceededWidth, mDisplaySize.y + exceededHeight); mWindowBounds.width() + exceededWidth, mWindowBounds.height() + exceededHeight);
} }
/** /**

View File

@@ -97,6 +97,9 @@ public class WindowMagnificationControllerTest extends SysuiTestCase {
doAnswer(invocation -> doAnswer(invocation ->
wm.getMaximumWindowMetrics() wm.getMaximumWindowMetrics()
).when(mWindowManager).getMaximumWindowMetrics(); ).when(mWindowManager).getMaximumWindowMetrics();
doAnswer(invocation ->
wm.getCurrentWindowMetrics()
).when(mWindowManager).getCurrentWindowMetrics();
mContext.addMockSystemService(Context.WINDOW_SERVICE, mWindowManager); mContext.addMockSystemService(Context.WINDOW_SERVICE, mWindowManager);
doAnswer(invocation -> { doAnswer(invocation -> {
mMirrorView = invocation.getArgument(0); mMirrorView = invocation.getArgument(0);
@@ -200,7 +203,6 @@ public class WindowMagnificationControllerTest extends SysuiTestCase {
mInstrumentation.runOnMainSync(() -> { mInstrumentation.runOnMainSync(() -> {
mWindowMagnificationController.enableWindowMagnification(Float.NaN, Float.NaN, mWindowMagnificationController.enableWindowMagnification(Float.NaN, Float.NaN,
Float.NaN); Float.NaN);
Mockito.reset(mWindowManager);
}); });
mInstrumentation.runOnMainSync(() -> { mInstrumentation.runOnMainSync(() -> {