summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jorim Jaggi <jjaggi@google.com> 2015-04-15 22:56:05 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2015-04-15 22:56:09 +0000
commit053dee79283a7c7c547e9a7c162eaef388f529d4 (patch)
tree7b6da20c4abf7914f8b2796302a15924df45eb2a
parent7a18d08252f84b13665d47311fdaeeb78eb9969a (diff)
parent2aad7ee245857a46aae305fefc4e3c1bcdd4a586 (diff)
Merge "More fingerprint API's for 3rd party apps"
-rw-r--r--api/current.txt2
-rw-r--r--api/system-current.txt2
-rw-r--r--core/java/android/hardware/fingerprint/FingerprintManager.java31
-rw-r--r--core/java/android/hardware/fingerprint/IFingerprintService.aidl3
-rw-r--r--packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java13
-rw-r--r--services/core/java/com/android/server/fingerprint/FingerprintService.java12
6 files changed, 49 insertions, 14 deletions
diff --git a/api/current.txt b/api/current.txt
index 933fa0801675..abd30813eb74 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -13771,6 +13771,8 @@ package android.hardware.fingerprint {
public class FingerprintManager {
method public void authenticate(android.hardware.fingerprint.FingerprintManager.CryptoObject, android.os.CancellationSignal, android.hardware.fingerprint.FingerprintManager.AuthenticationCallback, int);
+ method public boolean hasEnrolledFingerprints();
+ method public boolean isHardwareDetected();
field public static final int FINGERPRINT_ACQUIRED_GOOD = 0; // 0x0
field public static final int FINGERPRINT_ACQUIRED_IMAGER_DIRTY = 3; // 0x3
field public static final int FINGERPRINT_ACQUIRED_INSUFFICIENT = 2; // 0x2
diff --git a/api/system-current.txt b/api/system-current.txt
index 15c00f4b2c9c..fae1aa4b653d 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -14067,6 +14067,8 @@ package android.hardware.fingerprint {
public class FingerprintManager {
method public void authenticate(android.hardware.fingerprint.FingerprintManager.CryptoObject, android.os.CancellationSignal, android.hardware.fingerprint.FingerprintManager.AuthenticationCallback, int);
+ method public boolean hasEnrolledFingerprints();
+ method public boolean isHardwareDetected();
field public static final int FINGERPRINT_ACQUIRED_GOOD = 0; // 0x0
field public static final int FINGERPRINT_ACQUIRED_IMAGER_DIRTY = 3; // 0x3
field public static final int FINGERPRINT_ACQUIRED_INSUFFICIENT = 2; // 0x2
diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java
index b757a9acb782..31a2647d0b3e 100644
--- a/core/java/android/hardware/fingerprint/FingerprintManager.java
+++ b/core/java/android/hardware/fingerprint/FingerprintManager.java
@@ -535,9 +535,9 @@ public class FingerprintManager {
*
* @hide
*/
- public List<Fingerprint> getEnrolledFingerprints() {
+ public List<Fingerprint> getEnrolledFingerprints(int userId) {
if (mService != null) try {
- return mService.getEnrolledFingerprints(getCurrentUserId());
+ return mService.getEnrolledFingerprints(userId);
} catch (RemoteException e) {
Log.v(TAG, "Remote exception in getEnrolledFingerprints: ", e);
}
@@ -545,11 +545,34 @@ public class FingerprintManager {
}
/**
- * Determine if fingerprint hardware is present and functional.
- * @return true if hardware is present and functional, false otherwise.
+ * Obtain the list of enrolled fingerprints templates.
+ * @return list of current fingerprint items
*
* @hide
*/
+ public List<Fingerprint> getEnrolledFingerprints() {
+ return getEnrolledFingerprints(UserHandle.myUserId());
+ }
+
+ /**
+ * Determine if there is at least one fingerprint enrolled.
+ *
+ * @return true if at least one fingerprint is enrolled, false otherwise
+ */
+ public boolean hasEnrolledFingerprints() {
+ if (mService != null) try {
+ return mService.hasEnrolledFingerprints(UserHandle.myUserId());
+ } catch (RemoteException e) {
+ Log.v(TAG, "Remote exception in getEnrolledFingerprints: ", e);
+ }
+ return false;
+ }
+
+ /**
+ * Determine if fingerprint hardware is present and functional.
+ *
+ * @return true if hardware is present and functional, false otherwise.
+ */
public boolean isHardwareDetected() {
if (mService != null) {
try {
diff --git a/core/java/android/hardware/fingerprint/IFingerprintService.aidl b/core/java/android/hardware/fingerprint/IFingerprintService.aidl
index 6fe72d55a446..51a0e4ce2b9a 100644
--- a/core/java/android/hardware/fingerprint/IFingerprintService.aidl
+++ b/core/java/android/hardware/fingerprint/IFingerprintService.aidl
@@ -54,6 +54,9 @@ interface IFingerprintService {
// Get a pre-enrollment authentication token
long preEnroll(IBinder token);
+ // Determine if a user has at least one enrolled fingerprint
+ boolean hasEnrolledFingerprints(int groupId);
+
// Gets the number of hardware devices
// int getHardwareDeviceCount();
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
index a02fb4a6fd97..50c9f2d9aa38 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -783,21 +783,14 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
private void startListeningForFingerprint() {
if (DEBUG) Log.v(TAG, "startListeningForFingerprint()");
- final int userId;
- try {
- userId = ActivityManagerNative.getDefault().getCurrentUser().id;
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to get current user id: ", e);
- return;
- }
+ int userId = ActivityManager.getCurrentUser();
if (mFpm != null && mFpm.isHardwareDetected() && !isFingerprintDisabled(userId)
- && mFpm.getEnrolledFingerprints().size() > 0) {
+ && mFpm.getEnrolledFingerprints(userId).size() > 0) {
if (mFingerprintCancelSignal != null) {
mFingerprintCancelSignal.cancel();
}
mFingerprintCancelSignal = new CancellationSignal();
- mFpm.authenticate(null, mFingerprintCancelSignal, mAuthenticationCallback, 0,
- ActivityManager.getCurrentUser());
+ mFpm.authenticate(null, mFingerprintCancelSignal, mAuthenticationCallback, 0, userId);
setFingerprintRunningDetectionRunning(true);
}
}
diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java
index 90e69d7c9812..0ca0c0e5ad27 100644
--- a/services/core/java/com/android/server/fingerprint/FingerprintService.java
+++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java
@@ -358,6 +358,11 @@ public class FingerprintService extends SystemService {
return result;
}
+ public boolean hasEnrolledFingerprints(int groupId) {
+ ContentResolver resolver = mContext.getContentResolver();
+ return FingerprintUtils.getFingerprintIdsForUser(resolver, groupId).length > 0;
+ }
+
void checkPermission(String permission) {
getContext().enforceCallingOrSelfPermission(permission,
"Must have " + permission + " permission.");
@@ -572,6 +577,13 @@ public class FingerprintService extends SystemService {
checkPermission(USE_FINGERPRINT);
return FingerprintService.this.getEnrolledFingerprints(groupId);
}
+
+ @Override
+ // Binder call
+ public boolean hasEnrolledFingerprints(int groupId) {
+ checkPermission(USE_FINGERPRINT);
+ return FingerprintService.this.hasEnrolledFingerprints(groupId);
+ }
}
@Override