bring nfc-extras up to date (same as gingerbread)
Change-Id: Ia9cfce0a9919d1903b05fc7eda170a3aa97655ee
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user