diff options
| -rw-r--r-- | core/java/android/view/MagnificationSpec.java | 6 | ||||
| -rw-r--r-- | services/accessibility/java/com/android/server/accessibility/MagnificationController.java | 78 |
2 files changed, 49 insertions, 35 deletions
diff --git a/core/java/android/view/MagnificationSpec.java b/core/java/android/view/MagnificationSpec.java index 49242bb5aa65..956a211525ee 100644 --- a/core/java/android/view/MagnificationSpec.java +++ b/core/java/android/view/MagnificationSpec.java @@ -131,11 +131,11 @@ public class MagnificationSpec implements Parcelable { public String toString() { StringBuilder builder = new StringBuilder(); builder.append("<scale:"); - builder.append(scale); + builder.append(Float.toString(scale)); builder.append(",offsetX:"); - builder.append(offsetX); + builder.append(Float.toString(offsetX)); builder.append(",offsetY:"); - builder.append(offsetY); + builder.append(Float.toString(offsetY)); builder.append(">"); return builder.toString(); } diff --git a/services/accessibility/java/com/android/server/accessibility/MagnificationController.java b/services/accessibility/java/com/android/server/accessibility/MagnificationController.java index b2196bf946e2..f1b3722eed8e 100644 --- a/services/accessibility/java/com/android/server/accessibility/MagnificationController.java +++ b/services/accessibility/java/com/android/server/accessibility/MagnificationController.java @@ -144,27 +144,35 @@ class MagnificationController { * @param updateSpec {@code true} to update the scale and center based on * the region bounds, {@code false} to leave them as-is */ - public void setMagnifiedRegion(Region magnified, Region available, boolean updateSpec) { + private void setMagnifiedRegion(Region magnified, Region available, boolean updateSpec) { synchronized (mLock) { - mMagnifiedRegion.set(magnified); - mMagnifiedRegion.getBounds(mMagnifiedBounds); - mAvailableRegion.set(available); - - final MagnificationSpec sentSpec = mSpecAnimationBridge.mSentMagnificationSpec; - final float scale = sentSpec.scale; - final float offsetX = sentSpec.offsetX; - final float offsetY = sentSpec.offsetY; + boolean magnificationChanged = false; + boolean boundsChanged = false; - // Compute the new center and update spec as needed. - final float centerX = (mMagnifiedBounds.width() / 2.0f - + mMagnifiedBounds.left - offsetX) / scale; - final float centerY = (mMagnifiedBounds.height() / 2.0f - + mMagnifiedBounds.top - offsetY) / scale; + if (!mMagnifiedRegion.equals(magnified)) { + mMagnifiedRegion.set(magnified); + mMagnifiedRegion.getBounds(mMagnifiedBounds); + boundsChanged = true; + } + mAvailableRegion.set(available); if (updateSpec) { - setScaleAndCenter(scale, centerX, centerY, false); - } else { - mAms.onMagnificationStateChanged(); - mAms.notifyMagnificationChanged(mMagnifiedRegion, scale, centerX, centerY); + final MagnificationSpec sentSpec = mSpecAnimationBridge.mSentMagnificationSpec; + final float scale = sentSpec.scale; + final float offsetX = sentSpec.offsetX; + final float offsetY = sentSpec.offsetY; + + // Compute the new center and update spec as needed. + final float centerX = (mMagnifiedBounds.width() / 2.0f + + mMagnifiedBounds.left - offsetX) / scale; + final float centerY = (mMagnifiedBounds.height() / 2.0f + + mMagnifiedBounds.top - offsetY) / scale; + magnificationChanged = setScaleAndCenterLocked( + scale, centerX, centerY, false); + } + + // If magnification changed we already notified for the change. + if (boundsChanged && updateSpec && !magnificationChanged) { + onMagnificationChangedLocked(); } } } @@ -327,19 +335,15 @@ class MagnificationController { */ public boolean reset(boolean animate) { synchronized (mLock) { - return resetLocked(animate); - } - } - - private boolean resetLocked(boolean animate) { - final MagnificationSpec spec = mCurrentMagnificationSpec; - final boolean changed = !spec.isNop(); - if (changed) { - spec.clear(); + final MagnificationSpec spec = mCurrentMagnificationSpec; + final boolean changed = !spec.isNop(); + if (changed) { + spec.clear(); + onMagnificationChangedLocked(); + } + mSpecAnimationBridge.updateSentSpec(spec, animate); + return changed; } - - mSpecAnimationBridge.updateSentSpec(spec, animate); - return changed; } /** @@ -416,8 +420,8 @@ class MagnificationController { } } - private boolean setScaleAndCenterLocked( - float scale, float centerX, float centerY, boolean animate) { + private boolean setScaleAndCenterLocked(float scale, float centerX, float centerY, + boolean animate) { final boolean changed = updateMagnificationSpecLocked(scale, centerX, centerY); mSpecAnimationBridge.updateSentSpec(mCurrentMagnificationSpec, animate); return changed; @@ -440,6 +444,12 @@ class MagnificationController { } } + private void onMagnificationChangedLocked() { + mAms.onMagnificationStateChanged(); + mAms.notifyMagnificationChanged(mMagnifiedRegion, + getScale(), getCenterX(), getCenterY()); + } + /** * Persists the current magnification scale to the current user's settings. */ @@ -524,6 +534,10 @@ class MagnificationController { changed = true; } + if (changed) { + onMagnificationChangedLocked(); + } + return changed; } |