Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 42a45014 authored by android-merger's avatar android-merger
Browse files

bring nfc-extras up to date (same as gingerbread)

Change-Id: Ia9cfce0a9919d1903b05fc7eda170a3aa97655ee
parent 365522a8
Loading
Loading
Loading
Loading
+22 −17
Original line number Diff line number Diff line
@@ -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);
        }
+58 −0
Original line number Diff line number Diff line
@@ -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;
    }