diff options
| author | 2018-03-09 13:13:11 -0800 | |
|---|---|---|
| committer | 2018-03-09 13:13:11 -0800 | |
| commit | 09da294c7a3fc65aa3d9b34bb332fa962fa04f4c (patch) | |
| tree | 2a94b3e4e87504d47ab3c961c878e01ebb09054f | |
| parent | 27e1f26e0149d2e38373d0d3d59bbb30f4f291a5 (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.java | 34 |
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 |