Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8142d969 authored by Phil Weaver's avatar Phil Weaver Committed by android-build-merger
Browse files

Merge "Stop non-touchable regions affecting magnification" into nyc-dev

am: 352ea1e3

* commit '352ea1e3':
  Stop non-touchable regions affecting magnification

Change-Id: Ia61101d7c0cc3e1ed7b462f631dbf63ce28da185
parents 20fec52a 352ea1e3
Loading
Loading
Loading
Loading
+17 −16
Original line number Diff line number Diff line
@@ -509,34 +509,35 @@ final class AccessibilityController {
                        continue;
                    }

                    Region windowBounds = mTempRegion2;
                    // Consider the touchable portion of the window
                    Matrix matrix = mTempMatrix;
                    populateTransformationMatrixLocked(windowState, matrix);
                    RectF windowFrame = mTempRectF;

                    if (mWindowManagerService.mPolicy.canMagnifyWindow(windowState.mAttrs.type)) {
                        windowFrame.set(windowState.mFrame);
                        windowFrame.offset(-windowFrame.left, -windowFrame.top);
                        matrix.mapRect(windowFrame);
                        windowBounds.set((int) windowFrame.left, (int) windowFrame.top,
                                (int) windowFrame.right, (int) windowFrame.bottom);
                        mMagnifiedBounds.op(windowBounds, Region.Op.UNION);
                        mMagnifiedBounds.op(mAvailableBounds, Region.Op.INTERSECT);
                    } else {
                    Region touchableRegion = mTempRegion3;
                    windowState.getTouchableRegion(touchableRegion);
                    Rect touchableFrame = mTempRect1;
                    touchableRegion.getBounds(touchableFrame);
                    RectF windowFrame = mTempRectF;
                    windowFrame.set(touchableFrame);
                    windowFrame.offset(-windowState.mFrame.left, -windowState.mFrame.top);
                    matrix.mapRect(windowFrame);
                    Region windowBounds = mTempRegion2;
                    windowBounds.set((int) windowFrame.left, (int) windowFrame.top,
                            (int) windowFrame.right, (int) windowFrame.bottom);
                    // Only update new regions
                    Region portionOfWindowAlreadyAccountedFor = mTempRegion3;
                    portionOfWindowAlreadyAccountedFor.set(mMagnifiedBounds);
                    portionOfWindowAlreadyAccountedFor.op(nonMagnifiedBounds, Region.Op.UNION);
                    windowBounds.op(portionOfWindowAlreadyAccountedFor, Region.Op.DIFFERENCE);

                    if (mWindowManagerService.mPolicy.canMagnifyWindow(windowState.mAttrs.type)) {
                        mMagnifiedBounds.op(windowBounds, Region.Op.UNION);
                        mMagnifiedBounds.op(mAvailableBounds, Region.Op.INTERSECT);
                    } else {
                        nonMagnifiedBounds.op(windowBounds, Region.Op.UNION);
                        windowBounds.op(mMagnifiedBounds, Region.Op.DIFFERENCE);
                        mAvailableBounds.op(windowBounds, Region.Op.DIFFERENCE);
                    }

                    // Update accounted bounds
                    Region accountedBounds = mTempRegion2;
                    accountedBounds.set(mMagnifiedBounds);
                    accountedBounds.op(nonMagnifiedBounds, Region.Op.UNION);