summaryrefslogtreecommitdiffstats
path: root/services/core/java/com
diff options
context:
space:
mode:
authorSvetoslav <svetoslavganov@google.com>2015-04-30 18:39:32 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-04-30 18:39:32 +0000
commitcae8686c8853de745baf8a26406d18efab09a380 (patch)
treec670f1d05e6f7805898e8b7cbfe7fd2145c975a7 /services/core/java/com
parentbc4affc982c508da58c934d5d30f393dfd701a9a (diff)
parent0165cf4d719ab6560507a18ffd7375b0ad850622 (diff)
downloadframeworks_base-cae8686c8853de745baf8a26406d18efab09a380.zip
frameworks_base-cae8686c8853de745baf8a26406d18efab09a380.tar.gz
frameworks_base-cae8686c8853de745baf8a26406d18efab09a380.tar.bz2
am 0165cf4d: am 3327f3d6: Merge "Add use fingerprint app op - framework" into mnc-dev
* commit '0165cf4d719ab6560507a18ffd7375b0ad850622': Add use fingerprint app op - framework
Diffstat (limited to 'services/core/java/com')
-rw-r--r--services/core/java/com/android/server/fingerprint/FingerprintService.java49
1 files changed, 37 insertions, 12 deletions
diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java
index 6b5908d..ed8519a 100644
--- a/services/core/java/com/android/server/fingerprint/FingerprintService.java
+++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java
@@ -16,14 +16,15 @@
package com.android.server.fingerprint;
+import android.app.AppOpsManager;
import android.content.ContentResolver;
import android.content.Context;
+import android.os.Binder;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.os.MessageQueue;
import android.os.RemoteException;
-import android.util.ArrayMap;
import android.util.Slog;
import com.android.server.SystemService;
@@ -39,6 +40,7 @@ import static android.Manifest.permission.USE_FINGERPRINT;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
/**
@@ -55,6 +57,8 @@ public class FingerprintService extends SystemService {
private ClientMonitor mEnrollClient = null;
private ClientMonitor mRemoveClient = null;
+ private final AppOpsManager mAppOps;
+
private static final int MSG_NOTIFY = 10;
private static final int ENROLLMENT_TIMEOUT_MS = 60 * 1000; // 1 minute
@@ -96,6 +100,7 @@ public class FingerprintService extends SystemService {
public FingerprintService(Context context) {
super(context);
mContext = context;
+ mAppOps = context.getSystemService(AppOpsManager.class);
nativeInit(Looper.getMainLooper().getQueue(), this);
}
@@ -361,6 +366,13 @@ public class FingerprintService extends SystemService {
"Must have " + permission + " permission.");
}
+ private boolean canUserFingerPrint(String opPackageName) {
+ checkPermission(USE_FINGERPRINT);
+
+ return mAppOps.noteOp(AppOpsManager.OP_USE_FINGERPRINT, Binder.getCallingUid(),
+ opPackageName) == AppOpsManager.MODE_ALLOWED;
+ }
+
private class ClientMonitor implements IBinder.DeathRecipient {
IBinder token;
IFingerprintServiceReceiver receiver;
@@ -522,8 +534,11 @@ public class FingerprintService extends SystemService {
@Override
// Binder call
public void authenticate(final IBinder token, final long opId, final int groupId,
- final IFingerprintServiceReceiver receiver, final int flags) {
+ final IFingerprintServiceReceiver receiver, final int flags, String opPackageName) {
checkPermission(USE_FINGERPRINT);
+ if (!canUserFingerPrint(opPackageName)) {
+ return;
+ }
mHandler.post(new Runnable() {
@Override
public void run() {
@@ -535,8 +550,10 @@ public class FingerprintService extends SystemService {
@Override
// Binder call
- public void cancelAuthentication(final IBinder token) {
- checkPermission(USE_FINGERPRINT);
+ public void cancelAuthentication(final IBinder token, String opPackageName) {
+ if (!canUserFingerPrint(opPackageName)) {
+ return;
+ }
mHandler.post(new Runnable() {
@Override
public void run() {
@@ -561,8 +578,10 @@ public class FingerprintService extends SystemService {
@Override
// Binder call
- public boolean isHardwareDetected(long deviceId) {
- checkPermission(USE_FINGERPRINT);
+ public boolean isHardwareDetected(long deviceId, String opPackageName) {
+ if (!canUserFingerPrint(opPackageName)) {
+ return false;
+ }
return mHalDeviceId != 0; // TODO
}
@@ -580,21 +599,27 @@ public class FingerprintService extends SystemService {
@Override
// Binder call
- public List<Fingerprint> getEnrolledFingerprints(int groupId) {
- checkPermission(USE_FINGERPRINT);
+ public List<Fingerprint> getEnrolledFingerprints(int groupId, String opPackageName) {
+ if (!canUserFingerPrint(opPackageName)) {
+ return Collections.emptyList();
+ }
return FingerprintService.this.getEnrolledFingerprints(groupId);
}
@Override
// Binder call
- public boolean hasEnrolledFingerprints(int groupId) {
- checkPermission(USE_FINGERPRINT);
+ public boolean hasEnrolledFingerprints(int groupId, String opPackageName) {
+ if (!canUserFingerPrint(opPackageName)) {
+ return false;
+ }
return FingerprintService.this.hasEnrolledFingerprints(groupId);
}
@Override
- public long getAuthenticatorId() {
- checkPermission(USE_FINGERPRINT);
+ public long getAuthenticatorId(String opPackageName) {
+ if (!canUserFingerPrint(opPackageName)) {
+ return 0;
+ }
return nativeGetAuthenticatorId();
}
}