Merge "Listen to task stack only when AuthenticationClient is running" into pi-dev
diff --git a/services/core/java/com/android/server/fingerprint/AuthenticationClient.java b/services/core/java/com/android/server/fingerprint/AuthenticationClient.java
index d30b13c..a52dd0b 100644
--- a/services/core/java/com/android/server/fingerprint/AuthenticationClient.java
+++ b/services/core/java/com/android/server/fingerprint/AuthenticationClient.java
@@ -74,6 +74,17 @@
         }
     };
 
+    /**
+     * This method is called when authentication starts.
+     */
+    public abstract void onStart();
+
+    /**
+     * This method is called when a fingerprint is authenticated or authentication is stopped
+     * (cancelled by the user, or an error such as lockout has occurred).
+     */
+    public abstract void onStop();
+
     public AuthenticationClient(Context context, long halDeviceId, IBinder token,
             IFingerprintServiceReceiver receiver, int targetUserId, int groupId, long opId,
             boolean restricted, String owner, Bundle bundle,
@@ -220,6 +231,7 @@
             }
             result |= true; // we have a valid fingerprint, done
             resetFailedAttempts();
+            onStop();
         }
         return result;
     }
@@ -234,6 +246,7 @@
             Slog.w(TAG, "start authentication: no fingerprint HAL!");
             return ERROR_ESRCH;
         }
+        onStart();
         try {
             final int result = daemon.authenticate(mOpId, getGroupId());
             if (result != 0) {
@@ -266,6 +279,7 @@
             return 0;
         }
 
+        onStop();
         IBiometricsFingerprint daemon = getFingerprintDaemon();
         if (daemon == null) {
             Slog.w(TAG, "stopAuthentication: no fingerprint HAL!");
diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java
index ac85484..fc8aace 100644
--- a/services/core/java/com/android/server/fingerprint/FingerprintService.java
+++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java
@@ -259,11 +259,6 @@
                 ServiceManager.getService(Context.STATUS_BAR_SERVICE));
         mActivityManager = ((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE))
                 .getService();
-        try {
-            mActivityManager.registerTaskStackListener(mTaskStackListener);
-        } catch (RemoteException e) {
-            Slog.e(TAG, "Could not register task stack listener", e);
-        }
     }
 
     @Override
@@ -859,6 +854,24 @@
                 receiver, mCurrentUserId, groupId, opId, restricted, opPackageName, bundle,
                 dialogReceiver, mStatusBarService) {
             @Override
+            public void onStart() {
+                try {
+                    mActivityManager.registerTaskStackListener(mTaskStackListener);
+                } catch (RemoteException e) {
+                    Slog.e(TAG, "Could not register task stack listener", e);
+                }
+            }
+
+            @Override
+            public void onStop() {
+                try {
+                    mActivityManager.unregisterTaskStackListener(mTaskStackListener);
+                } catch (RemoteException e) {
+                    Slog.e(TAG, "Could not unregister task stack listener", e);
+                }
+            }
+
+            @Override
             public int handleFailedAttempt() {
                 final int currentUser = ActivityManager.getCurrentUser();
                 mFailedAttempts.put(currentUser, mFailedAttempts.get(currentUser, 0) + 1);