From 32e8ebda8bae6c1471894566bb19eb438aeab1fb Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 27 Jun 2011 17:29:30 -0700 Subject: [PATCH 1/2] Add intent actions for new firmware events. Change-Id: I8129b7812c0d551111f0c85eacc9535a441e5453 --- .../nfc_extras/NfcExecutionEnvironment.java | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/nfc-extras/java/com/android/nfc_extras/NfcExecutionEnvironment.java b/nfc-extras/java/com/android/nfc_extras/NfcExecutionEnvironment.java index eb2f6f859191c..63c2de200224c 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. + * + *

This happens when an APDU of interest was matched by the Nfc adapter, + * for instance as the result of matching an externally-configured filter. + * + *

The filter configuration mechanism is not currently defined. + * + *

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}. + * + *

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. + * + *

This may only be issued for the first block that the reader + * authenticates to. + * + *

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}. + * + *

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; } From f4fcd4210fad5649c8983e5204151d220270118b Mon Sep 17 00:00:00 2001 From: Robert Tsai Date: Sat, 9 Jul 2011 23:57:22 -0700 Subject: [PATCH 2/2] Preserve invariant that sService is not null (although NfcAdapter.get() can return null) Change-Id: I85fcbc5e79549835dac255ce614bd5d65d39fc25 --- .../android/nfc_extras/NfcAdapterExtras.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/nfc-extras/java/com/android/nfc_extras/NfcAdapterExtras.java b/nfc-extras/java/com/android/nfc_extras/NfcAdapterExtras.java index 6001be92a322c..795b3a880fb68 100644 --- a/nfc-extras/java/com/android/nfc_extras/NfcAdapterExtras.java +++ b/nfc-extras/java/com/android/nfc_extras/NfcAdapterExtras.java @@ -68,7 +68,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 +89,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; } } }