diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/AccessibilityController.java | 71 |
1 files changed, 34 insertions, 37 deletions
diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java index fa8c35a6953e..19ea9f907306 100644 --- a/services/core/java/com/android/server/wm/AccessibilityController.java +++ b/services/core/java/com/android/server/wm/AccessibilityController.java @@ -626,6 +626,8 @@ final class AccessibilityController { private boolean mForceShowMagnifiableBounds = false; + private final MagnificationSpec mMagnificationSpec = new MagnificationSpec(); + DisplayMagnifier(WindowManagerService windowManagerService, DisplayContent displayContent, Display display, @@ -655,13 +657,28 @@ final class AccessibilityController { mAccessibilityTracing.logTrace(LOG_TAG + ".setMagnificationSpec", FLAGS_MAGNIFICATION_CALLBACK, "spec={" + spec + "}"); } - mMagnifedViewport.updateMagnificationSpec(spec); + updateMagnificationSpec(spec); mMagnifedViewport.recomputeBounds(); mService.applyMagnificationSpecLocked(mDisplay.getDisplayId(), spec); mService.scheduleAnimationLocked(); } + void updateMagnificationSpec(MagnificationSpec spec) { + if (spec != null) { + mMagnificationSpec.initialize(spec.scale, spec.offsetX, spec.offsetY); + } else { + mMagnificationSpec.clear(); + } + // If this message is pending we are in a rotation animation and do not want + // to show the border. We will do so when the pending message is handled. + if (!mHandler.hasMessages( + MyHandler.MESSAGE_SHOW_MAGNIFIED_REGION_BOUNDS_IF_NEEDED)) { + mMagnifedViewport.setMagnifiedRegionBorderShown( + isForceShowingMagnifiableBounds(), true); + } + } + void setForceShowMagnifiableBounds(boolean show) { if (mAccessibilityTracing.isTracingEnabled(FLAGS_MAGNIFICATION_CALLBACK)) { mAccessibilityTracing.logTrace(LOG_TAG + ".setForceShowMagnifiableBounds", @@ -800,8 +817,7 @@ final class AccessibilityController { case WindowManager.LayoutParams.TYPE_QS_DIALOG: case WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL: { Rect magnifiedRegionBounds = mTempRect2; - mMagnifedViewport.getMagnifiedFrameInContentCoords( - magnifiedRegionBounds); + getMagnifiedFrameInContentCoords(magnifiedRegionBounds); Rect touchableRegionBounds = mTempRect1; windowState.getTouchableRegion(mTempRegion1); mTempRegion1.getBounds(touchableRegionBounds); @@ -818,6 +834,14 @@ final class AccessibilityController { } } + void getMagnifiedFrameInContentCoords(Rect rect) { + Region magnificationRegion = new Region(); + mMagnifedViewport.getMagnificationRegion(magnificationRegion); + magnificationRegion.getBounds(rect); + rect.offset((int) -mMagnificationSpec.offsetX, (int) -mMagnificationSpec.offsetY); + rect.scale(1.0f / mMagnificationSpec.scale); + } + void notifyImeWindowVisibilityChanged(boolean shown) { if (mAccessibilityTracing.isTracingEnabled(FLAGS_MAGNIFICATION_CALLBACK)) { mAccessibilityTracing.logTrace(LOG_TAG + ".notifyImeWindowVisibilityChanged", @@ -832,13 +856,13 @@ final class AccessibilityController { mAccessibilityTracing.logTrace(LOG_TAG + ".getMagnificationSpecForWindow", FLAGS_MAGNIFICATION_CALLBACK, "windowState={" + windowState + "}"); } - MagnificationSpec spec = mMagnifedViewport.getMagnificationSpec(); - if (spec != null && !spec.isNop()) { + + if (mMagnificationSpec != null && !mMagnificationSpec.isNop()) { if (!windowState.shouldMagnify()) { return null; } } - return spec; + return mMagnificationSpec; } void getMagnificationRegion(Region outMagnificationRegion) { @@ -852,6 +876,10 @@ final class AccessibilityController { mMagnifedViewport.getMagnificationRegion(outMagnificationRegion); } + boolean isMagnifying() { + return mMagnificationSpec.scale > 1.0f; + } + void destroy() { if (mAccessibilityTracing.isTracingEnabled(FLAGS_MAGNIFICATION_CALLBACK)) { mAccessibilityTracing.logTrace(LOG_TAG + ".destroy", FLAGS_MAGNIFICATION_CALLBACK); @@ -897,8 +925,6 @@ final class AccessibilityController { private final Path mCircularPath; - private final MagnificationSpec mMagnificationSpec = new MagnificationSpec(); - private final float mBorderWidth; private final int mHalfBorderWidth; private final int mDrawBorderInset; @@ -932,20 +958,6 @@ final class AccessibilityController { outMagnificationRegion.set(mMagnificationRegion); } - void updateMagnificationSpec(MagnificationSpec spec) { - if (spec != null) { - mMagnificationSpec.initialize(spec.scale, spec.offsetX, spec.offsetY); - } else { - mMagnificationSpec.clear(); - } - // If this message is pending we are in a rotation animation and do not want - // to show the border. We will do so when the pending message is handled. - if (!mHandler.hasMessages( - MyHandler.MESSAGE_SHOW_MAGNIFIED_REGION_BOUNDS_IF_NEEDED)) { - setMagnifiedRegionBorderShown(isForceShowingMagnifiableBounds(), true); - } - } - void recomputeBounds() { getDisplaySizeLocked(mScreenSize); final int screenWidth = mScreenSize.x; @@ -1127,21 +1139,6 @@ final class AccessibilityController { } } - void getMagnifiedFrameInContentCoords(Rect rect) { - MagnificationSpec spec = mMagnificationSpec; - mMagnificationRegion.getBounds(rect); - rect.offset((int) -spec.offsetX, (int) -spec.offsetY); - rect.scale(1.0f / spec.scale); - } - - boolean isMagnifying() { - return mMagnificationSpec.scale > 1.0f; - } - - MagnificationSpec getMagnificationSpec() { - return mMagnificationSpec; - } - void drawWindowIfNeeded() { recomputeBounds(); mWindow.postDrawIfNeeded(); |