diff options
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/nfc/INfcAdapter.aidl | 2 | ||||
| -rw-r--r-- | core/java/android/nfc/NfcActivityManager.java | 28 |
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() { |
