Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7b5dd873 authored by Jim Miller's avatar Jim Miller
Browse files

Fix 5466793: Fix memory leak in system process when face lock is enabled.

Previously, the code was not unregistering the callback when we unlocked
the device, which kept a reference to LockPatternKeyguardView indirectly
by a reference to mFaceLockCallback.

It now correcly removes the callback when we unlock the device.

Change-Id: Ie592d007a1dfc2416b9e8956aba2c34e3d0120ee
parent e6b68036
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -23,4 +23,5 @@ interface IFaceLockInterface {
    void startUi(IBinder containingWindowToken, int x, int y, int width, int height);
    void stopUi();
    void registerCallback(IFaceLockCallback cb);
    void unregisterCallback(IFaceLockCallback cb);
}
+16 −0
Original line number Diff line number Diff line
@@ -782,6 +782,15 @@ public class LockPatternKeyguardView extends KeyguardViewBase implements Handler
            mUnlockScreen = null;
        }
        mUpdateMonitor.removeCallback(this);
        if (mFaceLockService != null) {
            try {
                mFaceLockService.unregisterCallback(mFaceLockCallback);
            } catch (RemoteException e) {
                // Not much we can do
            }
            stopFaceLock();
            mFaceLockService = null;
        }
    }

    private boolean isSecure() {
@@ -1206,6 +1215,13 @@ public class LockPatternKeyguardView extends KeyguardViewBase implements Handler

            if (mBoundToFaceLockService) {
                if (DEBUG) Log.d(TAG, "before unbind from FaceLock service");
                if (mFaceLockService != null) {
                    try {
                        mFaceLockService.unregisterCallback(mFaceLockCallback);
                    } catch (RemoteException e) {
                        // Not much we can do
                    }
                }
                mContext.unbindService(mFaceLockConnection);
                if (DEBUG) Log.d(TAG, "after unbind from FaceLock service");
                mBoundToFaceLockService = false;