summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/accessibilityservice/AccessibilityService.java1
-rw-r--r--services/java/com/android/server/wm/DisplayMagnifier.java14
-rw-r--r--services/java/com/android/server/wm/WindowManagerService.java5
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!");
}