diff options
author | Svetoslav <svetoslavganov@google.com> | 2015-04-30 18:39:32 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-04-30 18:39:32 +0000 |
commit | cae8686c8853de745baf8a26406d18efab09a380 (patch) | |
tree | c670f1d05e6f7805898e8b7cbfe7fd2145c975a7 /services/core/java/com | |
parent | bc4affc982c508da58c934d5d30f393dfd701a9a (diff) | |
parent | 0165cf4d719ab6560507a18ffd7375b0ad850622 (diff) | |
download | frameworks_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.java | 49 |
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(); } } |