Apply the scale to surfaceinsets when computing crop region

While in computing surface crop region, magnification specs are
not applied to surface insets from LayoutParams.

So, in case magnification specs are set,
surface crop region should be calculated considering scale factor.

(For instance, using TouchZoom in Accessibility
at AppsPermissionActivity in market app)

Bug: 20863078
Change-Id: I9e7e21e502b29208f2856918d6fcda050f515595
Signed-off-by: Seunghyun Lee <seunghyun85.lee@lge.com>
This commit is contained in:
seunghyun85.lee
2015-02-26 11:24:08 +09:00
committed by Wale Ogunwale
parent ce7dba6bdf
commit 92d9c81835

View File

@@ -1417,10 +1417,21 @@ class WindowStateAnimator {
// Adjust for surface insets.
final LayoutParams attrs = w.getAttrs();
width += attrs.surfaceInsets.left + attrs.surfaceInsets.right;
height += attrs.surfaceInsets.top + attrs.surfaceInsets.bottom;
left -= attrs.surfaceInsets.left;
top -= attrs.surfaceInsets.top;
final int displayId = w.getDisplayId();
float scale = 1.0f;
// Magnification is supported only for the default display.
if (mService.mAccessibilityController != null && displayId == Display.DEFAULT_DISPLAY) {
MagnificationSpec spec =
mService.mAccessibilityController.getMagnificationSpecForWindowLocked(w);
if (spec != null && !spec.isNop()) {
scale = spec.scale;
}
}
width += scale * (attrs.surfaceInsets.left + attrs.surfaceInsets.right);
height += scale * (attrs.surfaceInsets.top + attrs.surfaceInsets.bottom);
left -= scale * attrs.surfaceInsets.left;
top -= scale * attrs.surfaceInsets.top;
final boolean surfaceMoved = mSurfaceX != left || mSurfaceY != top;
if (surfaceMoved) {