Merge "Magnification uses WindowManager.getMaximumWindiowMetrics to compute its layout instead of the display size" into sc-dev
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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(() -> {
|
||||||
|
|||||||
Reference in New Issue
Block a user