OSDN Git Service

Add cleanup method to FalsingManager to prevent memory leaks.
authorDave Mankoff <mankoff@google.com>
Tue, 16 Jul 2019 19:07:01 +0000 (15:07 -0400)
committerDave Mankoff <mankoff@google.com>
Tue, 16 Jul 2019 20:01:29 +0000 (20:01 +0000)
When the FalsingManager gets reloaded (due to plugins) it can
leak its listeners and callbacks. This change fixes that.

Bug: 136351609
Test: manual
Change-Id: I2b52d018d478dbcad4ecb7d8a5b361638d5c5877
Merged-In: I2b52d018d478dbcad4ecb7d8a5b361638d5c5877

packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingManager.java
packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerImpl.java
packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java
packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java

index 28d5402..52ec1f0 100644 (file)
@@ -30,7 +30,7 @@ import java.io.PrintWriter;
  */
 @ProvidesInterface(version = FalsingManager.VERSION)
 public interface FalsingManager {
-    int VERSION = 1;
+    int VERSION = 2;
 
     void onSucccessfulUnlock();
 
@@ -103,4 +103,6 @@ public interface FalsingManager {
     void onTouchEvent(MotionEvent ev, int width, int height);
 
     void dump(PrintWriter pw);
+
+    void cleanup();
 }
index 67dfdca..fba0d50 100644 (file)
@@ -168,6 +168,7 @@ public class FalsingManagerImpl implements FalsingManager {
                     .append("enabled=").append(isEnabled() ? 1 : 0)
                     .append(" mScreenOn=").append(mScreenOn ? 1 : 0)
                     .append(" mState=").append(StatusBarState.toShortString(mState))
+                    .append(" mShowingAod=").append(mShowingAod ? 1 : 0)
                     .toString()
             );
         }
@@ -550,6 +551,14 @@ public class FalsingManagerImpl implements FalsingManager {
         pw.println();
     }
 
+    @Override
+    public void cleanup() {
+        mSensorManager.unregisterListener(mSensorEventListener);
+        mContext.getContentResolver().unregisterContentObserver(mSettingsObserver);
+        Dependency.get(StatusBarStateController.class).removeCallback(mStatusBarStateListener);
+        KeyguardUpdateMonitor.getInstance(mContext).removeCallback(mKeyguardUpdateCallback);
+    }
+
     public Uri reportRejectedTouch() {
         if (mDataCollector.isEnabled()) {
             return mDataCollector.reportRejectedTouch();
index 3cc8ec9..8210951 100644 (file)
@@ -65,6 +65,7 @@ public class FalsingManagerProxy implements FalsingManager {
             public void onPluginConnected(FalsingPlugin plugin, Context context) {
                 FalsingManager pluginFalsingManager = plugin.getFalsingManager(context);
                 if (pluginFalsingManager != null) {
+                    mInternalFalsingManager.cleanup();
                     mInternalFalsingManager = pluginFalsingManager;
                 }
             }
@@ -290,4 +291,9 @@ public class FalsingManagerProxy implements FalsingManager {
     public void dump(PrintWriter pw) {
         mInternalFalsingManager.dump(pw);
     }
+
+    @Override
+    public void cleanup() {
+        mInternalFalsingManager.cleanup();
+    }
 }
index 00f35aa..cee01a4 100644 (file)
@@ -324,6 +324,11 @@ public class BrightLineFalsingManager implements FalsingManager {
     public void dump(PrintWriter printWriter) {
     }
 
+    @Override
+    public void cleanup() {
+        unregisterSensors();
+    }
+
     static void logDebug(String msg) {
         logDebug(msg, null);
     }