diff options
3 files changed, 18 insertions, 2 deletions
diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java index c5f51dc25a2e..8dddbc10242a 100644 --- a/core/java/android/accessibilityservice/AccessibilityService.java +++ b/core/java/android/accessibilityservice/AccessibilityService.java @@ -615,6 +615,7 @@ public abstract class AccessibilityService extends Service { mCallback.onServiceConnected(); } else { AccessibilityInteractionClient.getInstance().removeConnection(connectionId); + AccessibilityInteractionClient.getInstance().clearCache(); mCallback.onSetConnectionId(AccessibilityInteractionClient.NO_ID); } return; diff --git a/services/java/com/android/server/wm/DisplayMagnifier.java b/services/java/com/android/server/wm/DisplayMagnifier.java index d3c01f08079d..6e876f6511fa 100644 --- a/services/java/com/android/server/wm/DisplayMagnifier.java +++ b/services/java/com/android/server/wm/DisplayMagnifier.java @@ -228,6 +228,10 @@ final class DisplayMagnifier { return spec; } + public void destroyLocked() { + mMagnifedViewport.destroyWindow(); + } + /** NOTE: This has to be called within a surface transaction. */ public void drawMagnifiedRegionBorderIfNeededLocked() { mMagnifedViewport.drawWindowIfNeededLocked(); @@ -258,7 +262,7 @@ final class DisplayMagnifier { private final int mBorderWidth; private final int mHalfBorderWidth; - private ViewportWindow mWindow; + private final ViewportWindow mWindow; private boolean mFullRedrawNeeded; @@ -459,6 +463,10 @@ final class DisplayMagnifier { mWindow.drawIfNeeded(); } + public void destroyWindow() { + mWindow.releaseSurface(); + } + private final class ViewportWindow { private static final String SURFACE_TITLE = "Magnification Overlay"; @@ -640,6 +648,10 @@ final class DisplayMagnifier { } } } + + public void releaseSurface() { + mSurface.release(); + } } } diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 8d44f366b003..1e5cd548c42b 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -3039,7 +3039,10 @@ public class WindowManagerService extends IWindowManager.Stub mDisplayMagnifier = new DisplayMagnifier(this, callbacks); } else { if (callbacks == null) { - mDisplayMagnifier = null; + if (mDisplayMagnifier != null) { + mDisplayMagnifier.destroyLocked(); + mDisplayMagnifier = null; + } } else { throw new IllegalStateException("Magnification callbacks already set!"); } |