summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Kevin Chyn <kchyn@google.com> 2018-03-09 13:13:11 -0800
committer Kevin Chyn <kchyn@google.com> 2018-03-09 13:13:11 -0800
commit09da294c7a3fc65aa3d9b34bb332fa962fa04f4c (patch)
tree2a94b3e4e87504d47ab3c961c878e01ebb09054f
parent27e1f26e0149d2e38373d0d3d59bbb30f4f291a5 (diff)
Fingerprint should check current client when task stack changes
Fixes: 74407323 Test: manual test with FingerprintDialog app, modified to not cancel when onPause() Change-Id: I039ca5e8ea510b7bc1a12711c2213bd22f1198b3
-rw-r--r--services/core/java/com/android/server/fingerprint/FingerprintService.java34
1 files changed, 34 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java
index c3259c312cd7..ac85484e7f74 100644
--- a/services/core/java/com/android/server/fingerprint/FingerprintService.java
+++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java
@@ -26,8 +26,10 @@ import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.app.AlarmManager;
import android.app.AppOpsManager;
+import android.app.IActivityManager;
import android.app.PendingIntent;
import android.app.SynchronousUserSwitchObserver;
+import android.app.TaskStackListener;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -137,6 +139,7 @@ public class FingerprintService extends SystemService implements IHwBinder.Death
@GuardedBy("this")
private IBiometricsFingerprint mDaemon;
private IStatusBarService mStatusBarService;
+ private final IActivityManager mActivityManager;
private final PowerManager mPowerManager;
private final AlarmManager mAlarmManager;
private final UserManager mUserManager;
@@ -215,6 +218,30 @@ public class FingerprintService extends SystemService implements IHwBinder.Death
}
};
+ private final TaskStackListener mTaskStackListener = new TaskStackListener() {
+ @Override
+ public void onTaskStackChanged() {
+ try {
+ if (!(mCurrentClient instanceof AuthenticationClient)) {
+ return;
+ }
+ if (isKeyguard(mCurrentClient.getOwnerString())) {
+ return; // Keyguard is always allowed
+ }
+ List<ActivityManager.RunningTaskInfo> runningTasks = mActivityManager.getTasks(1);
+ if (!runningTasks.isEmpty()) {
+ if (runningTasks.get(0).topActivity.getPackageName()
+ != mCurrentClient.getOwnerString()) {
+ mCurrentClient.stop(false /* initiatedByClient */);
+ Slog.e(TAG, "Stopping background authentication");
+ }
+ }
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Unable to get running tasks", e);
+ }
+ }
+ };
+
public FingerprintService(Context context) {
super(context);
mContext = context;
@@ -230,6 +257,13 @@ public class FingerprintService extends SystemService implements IHwBinder.Death
mFailedAttempts = new SparseIntArray();
mStatusBarService = IStatusBarService.Stub.asInterface(
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