System crash fixed when turn off MagnificationGesture

Symptom:
WindowManagerService throws exception and system crashes.

Root cause:
When the MagnificationGesture is turned off during animation of scale
up/down, WindowManagerService.mAccessibilityController can be null so
exception is thrown.

Solution:
Cancel ongoing animation before turning off MagnificationGesture.

Change-Id: I469d84e024bdd453e3729a69229398233ed2eb61
This commit is contained in:
Masaaki Iwaguchi
2015-11-06 12:38:27 +01:00
committed by Zoran Jovanovic
parent 7abb36599d
commit 5b6d99e87a

View File

@@ -372,6 +372,9 @@ public final class ScreenMagnifier implements WindowManagerInternal.Magnificatio
@Override
public void onDestroy() {
if (mMagnificationController != null) {
mMagnificationController.cancelAnimation();
}
mScreenStateObserver.destroy();
mWindowManager.setMagnificationCallbacks(null);
}
@@ -988,10 +991,14 @@ public final class ScreenMagnifier implements WindowManagerInternal.Magnificatio
return mCurrentMagnificationSpec.scale > 1.0f;
}
public void reset(boolean animate) {
public void cancelAnimation() {
if (mTransformationAnimator.isRunning()) {
mTransformationAnimator.cancel();
}
}
public void reset(boolean animate) {
cancelAnimation();
mCurrentMagnificationSpec.clear();
if (animate) {
animateMangificationSpec(mSentMagnificationSpec,
@@ -1056,9 +1063,7 @@ public final class ScreenMagnifier implements WindowManagerInternal.Magnificatio
centerY) == 0) {
return;
}
if (mTransformationAnimator.isRunning()) {
mTransformationAnimator.cancel();
}
cancelAnimation();
if (DEBUG_MAGNIFICATION_CONTROLLER) {
Slog.i(LOG_TAG, "scale: " + scale + " offsetX: " + centerX
+ " offsetY: " + centerY);