summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/MagnificationSpec.java6
-rw-r--r--services/accessibility/java/com/android/server/accessibility/MagnificationController.java78
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;
}