From 42a450149e8348c3d29e29ecae37cbc0d207742b Mon Sep 17 00:00:00 2001 From: android-merger Date: Fri, 9 Sep 2011 14:49:13 -0700 Subject: [PATCH 1/4] bring nfc-extras up to date (same as gingerbread) Change-Id: Ia9cfce0a9919d1903b05fc7eda170a3aa97655ee --- .../android/nfc_extras/NfcAdapterExtras.java | 39 +++++++------ .../nfc_extras/NfcExecutionEnvironment.java | 58 +++++++++++++++++++ 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 6001be92a322c..99cbb860d029a 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) { + /** + * 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.registerTearDownApdus(packageName, apdus); - } catch (RemoteException e) { - attemptDeadServiceRecovery(e); - } - } - - public void unregisterTearDownApdus(String packageName) { - 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 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 a5e3ede7616961f048e89f316dedffcfc2f6cd2b Mon Sep 17 00:00:00 2001 From: android-merger Date: Fri, 9 Sep 2011 16:15:00 -0700 Subject: [PATCH 2/4] missed aidl change in previous merge Change-Id: I6c1c55d0b79d5f2d7be538ec3a51c5708522a08f --- core/java/android/nfc/INfcAdapterExtras.aidl | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/core/java/android/nfc/INfcAdapterExtras.aidl b/core/java/android/nfc/INfcAdapterExtras.aidl index 8677a503b270d..0c2a2fd065b27 100755 --- a/core/java/android/nfc/INfcAdapterExtras.aidl +++ b/core/java/android/nfc/INfcAdapterExtras.aidl @@ -16,7 +16,6 @@ package android.nfc; -import android.nfc.ApduList; import android.os.Bundle; @@ -29,6 +28,5 @@ interface INfcAdapterExtras { Bundle transceive(in byte[] data_in); int getCardEmulationRoute(); void setCardEmulationRoute(int route); - void registerTearDownApdus(String packageName, in ApduList apdu); - void unregisterTearDownApdus(String packageName); + void authenticate(in byte[] token); } From 61ae88e54cbc42391bc526bd686ec71793670f9b Mon Sep 17 00:00:00 2001 From: android-merger Date: Fri, 9 Sep 2011 16:27:36 -0700 Subject: [PATCH 3/4] missed part of https://android-git.corp.google.com/g/#/c/104540/ Change-Id: I0da6d5bd860b1fe9df76b9df372e4ad9ab6e7202 --- core/java/android/nfc/INfcAdapterExtras.aidl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/java/android/nfc/INfcAdapterExtras.aidl b/core/java/android/nfc/INfcAdapterExtras.aidl index 0c2a2fd065b27..8677a503b270d 100755 --- a/core/java/android/nfc/INfcAdapterExtras.aidl +++ b/core/java/android/nfc/INfcAdapterExtras.aidl @@ -16,6 +16,7 @@ package android.nfc; +import android.nfc.ApduList; import android.os.Bundle; @@ -28,5 +29,6 @@ interface INfcAdapterExtras { Bundle transceive(in byte[] data_in); int getCardEmulationRoute(); void setCardEmulationRoute(int route); - void authenticate(in byte[] token); + void registerTearDownApdus(String packageName, in ApduList apdu); + void unregisterTearDownApdus(String packageName); } From 1524cad7f7f379f7df15638f0ae2bc08951b8ec1 Mon Sep 17 00:00:00 2001 From: android-merger Date: Fri, 9 Sep 2011 18:35:13 -0700 Subject: [PATCH 4/4] one more api missed Change-Id: Ibfcb9155974edc96b4c98742d8d89987d3b176b6 --- core/java/android/nfc/INfcAdapterExtras.aidl | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/core/java/android/nfc/INfcAdapterExtras.aidl b/core/java/android/nfc/INfcAdapterExtras.aidl index 8677a503b270d..0c2a2fd065b27 100755 --- a/core/java/android/nfc/INfcAdapterExtras.aidl +++ b/core/java/android/nfc/INfcAdapterExtras.aidl @@ -16,7 +16,6 @@ package android.nfc; -import android.nfc.ApduList; import android.os.Bundle; @@ -29,6 +28,5 @@ interface INfcAdapterExtras { Bundle transceive(in byte[] data_in); int getCardEmulationRoute(); void setCardEmulationRoute(int route); - void registerTearDownApdus(String packageName, in ApduList apdu); - void unregisterTearDownApdus(String packageName); + void authenticate(in byte[] token); }