summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartijn Coenen <maco@google.com>2014-11-20 17:59:22 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-11-20 17:59:24 +0000
commit2bf6529bf8f81d1b9f0ff103f12d004937d0f59f (patch)
tree0ff0defdf327e92d36b3f71ac6179a11cbebd091
parentac4af18bbb077a89696260e595fc130d9c172f79 (diff)
parentd8bcfbadf7037dd2574312a3bfa04dd70d967166 (diff)
downloadframeworks_base-2bf6529bf8f81d1b9f0ff103f12d004937d0f59f.zip
frameworks_base-2bf6529bf8f81d1b9f0ff103f12d004937d0f59f.tar.gz
frameworks_base-2bf6529bf8f81d1b9f0ff103f12d004937d0f59f.tar.bz2
Merge "Verify NFC permission immediately on API calls." into lmp-mr1-dev
-rw-r--r--core/java/android/nfc/INfcAdapter.aidl2
-rw-r--r--core/java/android/nfc/NfcActivityManager.java28
2 files changed, 30 insertions, 0 deletions
diff --git a/core/java/android/nfc/INfcAdapter.aidl b/core/java/android/nfc/INfcAdapter.aidl
index 5b926ad..961a3f4 100644
--- a/core/java/android/nfc/INfcAdapter.aidl
+++ b/core/java/android/nfc/INfcAdapter.aidl
@@ -60,4 +60,6 @@ interface INfcAdapter
void addNfcUnlockHandler(INfcUnlockHandler unlockHandler, in int[] techList);
void removeNfcUnlockHandler(INfcUnlockHandler unlockHandler);
+
+ void verifyNfcPermission();
}
diff --git a/core/java/android/nfc/NfcActivityManager.java b/core/java/android/nfc/NfcActivityManager.java
index dd9765d..d009295 100644
--- a/core/java/android/nfc/NfcActivityManager.java
+++ b/core/java/android/nfc/NfcActivityManager.java
@@ -254,7 +254,11 @@ public final class NfcActivityManager extends IAppCallback.Stub
isResumed = state.resumed;
}
if (isResumed) {
+ // requestNfcServiceCallback() verifies permission also
requestNfcServiceCallback();
+ } else {
+ // Crash API calls early in case NFC permission is missing
+ verifyNfcPermission();
}
}
@@ -268,7 +272,11 @@ public final class NfcActivityManager extends IAppCallback.Stub
isResumed = state.resumed;
}
if (isResumed) {
+ // requestNfcServiceCallback() verifies permission also
requestNfcServiceCallback();
+ } else {
+ // Crash API calls early in case NFC permission is missing
+ verifyNfcPermission();
}
}
@@ -281,7 +289,11 @@ public final class NfcActivityManager extends IAppCallback.Stub
isResumed = state.resumed;
}
if (isResumed) {
+ // requestNfcServiceCallback() verifies permission also
requestNfcServiceCallback();
+ } else {
+ // Crash API calls early in case NFC permission is missing
+ verifyNfcPermission();
}
}
@@ -295,7 +307,11 @@ public final class NfcActivityManager extends IAppCallback.Stub
isResumed = state.resumed;
}
if (isResumed) {
+ // requestNfcServiceCallback() verifies permission also
requestNfcServiceCallback();
+ } else {
+ // Crash API calls early in case NFC permission is missing
+ verifyNfcPermission();
}
}
@@ -308,7 +324,11 @@ public final class NfcActivityManager extends IAppCallback.Stub
isResumed = state.resumed;
}
if (isResumed) {
+ // requestNfcServiceCallback() verifies permission also
requestNfcServiceCallback();
+ } else {
+ // Crash API calls early in case NFC permission is missing
+ verifyNfcPermission();
}
}
@@ -324,6 +344,14 @@ public final class NfcActivityManager extends IAppCallback.Stub
}
}
+ void verifyNfcPermission() {
+ try {
+ NfcAdapter.sService.verifyNfcPermission();
+ } catch (RemoteException e) {
+ mAdapter.attemptDeadServiceRecovery(e);
+ }
+ }
+
/** Callback from NFC service, usually on binder thread */
@Override
public BeamShareData createBeamShareData() {