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
This commit is contained in:
Jim Miller
2011-10-16 12:46:06 -07:00
parent e6b680364d
commit 7b5dd87351
2 changed files with 17 additions and 0 deletions

View File

@@ -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);
}

View File

@@ -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;