summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-merger <android-build@android.com>2011-09-09 14:49:13 -0700
committerandroid-merger <android-build@android.com>2011-09-09 14:49:13 -0700
commit42a450149e8348c3d29e29ecae37cbc0d207742b (patch)
treeb1c506681876f4bc95d384f08a31c58635827738
parent365522a828f529593aa87e4d5a22f0cf2460c45a (diff)
downloadbase-42a450149e8348c3d29e29ecae37cbc0d207742b.tar.gz
bring nfc-extras up to date (same as gingerbread)
Change-Id: Ia9cfce0a9919d1903b05fc7eda170a3aa97655ee
-rw-r--r--nfc-extras/java/com/android/nfc_extras/NfcAdapterExtras.java39
-rw-r--r--nfc-extras/java/com/android/nfc_extras/NfcExecutionEnvironment.java58
2 files changed, 80 insertions, 17 deletions
diff --git a/nfc-extras/java/com/android/nfc_extras/NfcAdapterExtras.java b/nfc-extras/java/com/android/nfc_extras/NfcAdapterExtras.java
index 6001be92a322..99cbb860d029 100644
--- a/nfc-extras/java/com/android/nfc_extras/NfcAdapterExtras.java
+++ b/nfc-extras/java/com/android/nfc_extras/NfcAdapterExtras.java
@@ -18,7 +18,6 @@ package com.android.nfc_extras;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
-import android.nfc.ApduList;
import android.nfc.INfcAdapterExtras;
import android.nfc.NfcAdapter;
import android.os.RemoteException;
@@ -68,7 +67,11 @@ public final class NfcAdapterExtras {
/** get service handles */
private static void initService() {
- sService = sAdapter.getNfcAdapterExtrasInterface();
+ final INfcAdapterExtras service = sAdapter.getNfcAdapterExtrasInterface();
+ if (service != null) {
+ // Leave stale rather than receive a null value.
+ sService = service;
+ }
}
/**
@@ -85,18 +88,19 @@ public final class NfcAdapterExtras {
if (sSingleton == null) {
try {
sAdapter = adapter;
- sRouteOff = new CardEmulationRoute(CardEmulationRoute.ROUTE_OFF, null);
sSingleton = new NfcAdapterExtras();
sEmbeddedEe = new NfcExecutionEnvironment(sSingleton);
+ sRouteOff = new CardEmulationRoute(CardEmulationRoute.ROUTE_OFF, null);
sRouteOnWhenScreenOn = new CardEmulationRoute(
CardEmulationRoute.ROUTE_ON_WHEN_SCREEN_ON, sEmbeddedEe);
initService();
} finally {
- if (sSingleton == null) {
- sService = null;
- sEmbeddedEe = null;
- sRouteOff = null;
+ if (sService == null) {
sRouteOnWhenScreenOn = null;
+ sRouteOff = null;
+ sEmbeddedEe = null;
+ sSingleton = null;
+ sAdapter = null;
}
}
}
@@ -208,17 +212,18 @@ public final class NfcAdapterExtras {
return sEmbeddedEe;
}
- public void registerTearDownApdus(String packageName, ApduList apdus) {
- try {
- sService.registerTearDownApdus(packageName, apdus);
- } catch (RemoteException e) {
- attemptDeadServiceRecovery(e);
- }
- }
-
- public void unregisterTearDownApdus(String packageName) {
+ /**
+ * Authenticate the client application.
+ *
+ * Some implementations of NFC Adapter Extras may require applications
+ * to authenticate with a token, before using other methods.
+ *
+ * @param a implementation specific token
+ * @throws a {@link java.lang.SecurityException} if authentication failed
+ */
+ public void authenticate(byte[] token) {
try {
- sService.unregisterTearDownApdus(packageName);
+ sService.authenticate(token);
} catch (RemoteException e) {
attemptDeadServiceRecovery(e);
}
diff --git a/nfc-extras/java/com/android/nfc_extras/NfcExecutionEnvironment.java b/nfc-extras/java/com/android/nfc_extras/NfcExecutionEnvironment.java
index eb2f6f859191..63c2de200224 100644
--- a/nfc-extras/java/com/android/nfc_extras/NfcExecutionEnvironment.java
+++ b/nfc-extras/java/com/android/nfc_extras/NfcExecutionEnvironment.java
@@ -55,6 +55,64 @@ public class NfcExecutionEnvironment {
*/
public static final String EXTRA_AID = "com.android.nfc_extras.extra.AID";
+ /**
+ * Broadcast action: A filtered APDU was received.
+ *
+ * <p>This happens when an APDU of interest was matched by the Nfc adapter,
+ * for instance as the result of matching an externally-configured filter.
+ *
+ * <p>The filter configuration mechanism is not currently defined.
+ *
+ * <p>Always contains the extra field {@link EXTRA_APDU_BYTES}.
+ *
+ * @hide
+ */
+ public static final String ACTION_APDU_RECEIVED =
+ "com.android.nfc_extras.action.APDU_RECEIVED";
+
+ /**
+ * Mandatory byte array extra field in {@link #ACTION_APDU_RECEIVED}.
+ *
+ * <p>Contains the bytes of the received APDU.
+ *
+ * @hide
+ */
+ public static final String EXTRA_APDU_BYTES =
+ "com.android.nfc_extras.extra.APDU_BYTES";
+
+ /**
+ * Broadcast action: An EMV card removal event was detected.
+ *
+ * @hide
+ */
+ public static final String ACTION_EMV_CARD_REMOVAL =
+ "com.android.nfc_extras.action.EMV_CARD_REMOVAL";
+
+ /**
+ * Broadcast action: An adapter implementing MIFARE Classic via card
+ * emulation detected that a block has been accessed.
+ *
+ * <p>This may only be issued for the first block that the reader
+ * authenticates to.
+ *
+ * <p>May contain the extra field {@link #EXTRA_MIFARE_BLOCK}.
+ *
+ * @hide
+ */
+ public static final String ACTION_MIFARE_ACCESS_DETECTED =
+ "com.android.nfc_extras.action.MIFARE_ACCESS_DETECTED";
+
+ /**
+ * Optional integer extra field in {@link #ACTION_MIFARE_ACCESS_DETECTED}.
+ *
+ * <p>Provides the block number being accessed. If not set, the block
+ * number being accessed is unknown.
+ *
+ * @hide
+ */
+ public static final String EXTRA_MIFARE_BLOCK =
+ "com.android.nfc_extras.extra.MIFARE_BLOCK";
+
NfcExecutionEnvironment(NfcAdapterExtras extras) {
mExtras = extras;
}