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

Commit 11b075e2 authored by Nick Pelly's avatar Nick Pelly
Browse files

Hide some NFC API's.



We are leaving enough API so that you can see when any Tag is discovered,
get its ID, and get its NDEF messages.

But for advanced use - creating tag connections and writing messages - we have
2 problems. Firstly a lot of the code is untested
(RawTagConnection.transceive()), or in some cases known not to work
(NdefTagConnection.write()). Secondly, there is still debate about how to
best expose information about Tags.

The set of data/methods exposed for a Tag changes completely depending on the
tag technology. There may be multiple sets of technology implemented in a
single tag. Tag A may have technology X and Y, Tag B may have technology Y
and Z. Furthermore, some NFC controllers will be not be able to use all
technologies, and so Android Device 1 may see technology X and Y on Tag A but
Android device 2 may only see technology X. So we have a pretty challenging
set of constraints to work under, and we are not convinced the current Tag and
NdefTag class is the best approach going forwards.

The Tag application should be able to remain unbundled, since it just needs to
get incoming NDEF Messages.

Change-Id: Ic09f094f33794e10f8d730fffe011c9a5957e0ac
Signed-off-by: default avatarNick Pelly <npelly@google.com>
parent 120a4594
Loading
Loading
Loading
Loading
+14 −618
Original line number Diff line number Diff line
@@ -99791,7 +99791,7 @@
 extends="java.lang.Object"
 abstract="false"
 static="false"
 final="false"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
@@ -99882,7 +99882,7 @@
 extends="java.lang.Object"
 abstract="false"
 static="false"
 final="false"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
@@ -100162,173 +100162,26 @@
>
</field>
</class>
<class name="NdefTag"
 extends="android.nfc.Tag"
 abstract="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<implements name="android.os.Parcelable">
</implements>
<method name="createMockNdefTag"
 return="android.nfc.NdefTag"
 abstract="false"
 native="false"
 synchronized="false"
 static="true"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="id" type="byte[]">
</parameter>
<parameter name="rawTargets" type="java.lang.String[]">
</parameter>
<parameter name="pollBytes" type="byte[]">
</parameter>
<parameter name="activationBytes" type="byte[]">
</parameter>
<parameter name="ndefTargets" type="java.lang.String[]">
</parameter>
<parameter name="messages" type="android.nfc.NdefMessage[][]">
</parameter>
</method>
<method name="getNdefMessages"
 return="android.nfc.NdefMessage[]"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="getNdefMessages"
 return="android.nfc.NdefMessage[]"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="target" type="java.lang.String">
</parameter>
</method>
<method name="getNdefTargets"
 return="java.lang.String[]"
<class name="NfcAdapter"
 extends="java.lang.Object"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<field name="CREATOR"
 type="android.os.Parcelable.Creator"
 transient="false"
 volatile="false"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="TARGET_MIFARE_CLASSIC"
 type="java.lang.String"
 transient="false"
 volatile="false"
 value="&quot;type_mifare_classic&quot;"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="TARGET_OTHER"
 type="java.lang.String"
 transient="false"
 volatile="false"
 value="&quot;other&quot;"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="TARGET_TYPE_1"
 type="java.lang.String"
 transient="false"
 volatile="false"
 value="&quot;type_1&quot;"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="TARGET_TYPE_2"
 type="java.lang.String"
 transient="false"
 volatile="false"
 value="&quot;type_2&quot;"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="TARGET_TYPE_3"
 type="java.lang.String"
 transient="false"
 volatile="false"
 value="&quot;type_3&quot;"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="TARGET_TYPE_4"
 type="java.lang.String"
 transient="false"
 volatile="false"
 value="&quot;type_4&quot;"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
</class>
<class name="NdefTagConnection"
 extends="android.nfc.RawTagConnection"
 abstract="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<method name="getModeHint"
 return="int"
<method name="getDefaultAdapter"
 return="android.nfc.NfcAdapter"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 static="true"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<exception name="IOException" type="java.io.IOException">
</exception>
</method>
<method name="makeReadOnly"
<method name="isEnabled"
 return="boolean"
 abstract="false"
 native="false"
@@ -100338,220 +100191,9 @@
 deprecated="not deprecated"
 visibility="public"
>
<exception name="IOException" type="java.io.IOException">
</exception>
</method>
<method name="readNdefMessages"
 return="android.nfc.NdefMessage[]"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<exception name="FormatException" type="android.nfc.FormatException">
</exception>
<exception name="IOException" type="java.io.IOException">
</exception>
</method>
<method name="writeNdefMessage"
 return="void"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="message" type="android.nfc.NdefMessage">
</parameter>
<exception name="FormatException" type="android.nfc.FormatException">
</exception>
<exception name="IOException" type="java.io.IOException">
</exception>
</method>
<field name="NDEF_MODE_READ_ONCE"
 type="int"
 transient="false"
 volatile="false"
 value="1"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="NDEF_MODE_READ_ONLY"
 type="int"
 transient="false"
 volatile="false"
 value="2"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="NDEF_MODE_UNKNOWN"
 type="int"
 transient="false"
 volatile="false"
 value="5"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="NDEF_MODE_WRITE_MANY"
 type="int"
 transient="false"
 volatile="false"
 value="4"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="NDEF_MODE_WRITE_ONCE"
 type="int"
 transient="false"
 volatile="false"
 value="3"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
</class>
<class name="NfcAdapter"
 extends="java.lang.Object"
 abstract="false"
 static="false"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
<method name="createNdefTagConnection"
 return="android.nfc.NdefTagConnection"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="tag" type="android.nfc.NdefTag">
</parameter>
</method>
<method name="createNdefTagConnection"
 return="android.nfc.NdefTagConnection"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="tag" type="android.nfc.NdefTag">
</parameter>
<parameter name="target" type="java.lang.String">
</parameter>
</method>
<method name="createRawTagConnection"
 return="android.nfc.RawTagConnection"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="tag" type="android.nfc.Tag">
</parameter>
</method>
<method name="createRawTagConnection"
 return="android.nfc.RawTagConnection"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="tag" type="android.nfc.Tag">
</parameter>
<parameter name="target" type="java.lang.String">
</parameter>
</method>
<method name="getDefaultAdapter"
 return="android.nfc.NfcAdapter"
 abstract="false"
 native="false"
 synchronized="false"
 static="true"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="getLocalNdefMessage"
 return="android.nfc.NdefMessage"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="isEnabled"
 return="boolean"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="setLocalNdefMessage"
 return="void"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="message" type="android.nfc.NdefMessage">
</parameter>
</method>
<field name="ACTION_NDEF_TAG_DISCOVERED"
 type="java.lang.String"
 transient="false"
 volatile="false"
 value="&quot;android.nfc.action.NDEF_TAG_DISCOVERED&quot;"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="ACTION_TAG_DISCOVERED"
 type="java.lang.String"
<field name="ACTION_TAG_DISCOVERED"
 type="java.lang.String"
 transient="false"
 volatile="false"
 value="&quot;android.nfc.action.TAG_DISCOVERED&quot;"
@@ -100561,268 +100203,22 @@
 visibility="public"
>
</field>
<field name="EXTRA_TAG"
 type="java.lang.String"
 transient="false"
 volatile="false"
 value="&quot;android.nfc.extra.TAG&quot;"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
</class>
<class name="RawTagConnection"
 extends="java.lang.Object"
 abstract="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<method name="close"
 return="void"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="connect"
 return="void"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<exception name="IOException" type="java.io.IOException">
</exception>
</method>
<method name="getTag"
 return="android.nfc.Tag"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="getTagTarget"
 return="java.lang.String"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="isConnected"
 return="boolean"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="transceive"
 return="byte[]"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="data" type="byte[]">
</parameter>
<exception name="IOException" type="java.io.IOException">
</exception>
</method>
</class>
<class name="Tag"
 extends="java.lang.Object"
 abstract="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<implements name="android.os.Parcelable">
</implements>
<method name="createMockTag"
 return="android.nfc.Tag"
 abstract="false"
 native="false"
 synchronized="false"
 static="true"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="id" type="byte[]">
</parameter>
<parameter name="rawTargets" type="java.lang.String[]">
</parameter>
<parameter name="pollBytes" type="byte[]">
</parameter>
<parameter name="activationBytes" type="byte[]">
</parameter>
</method>
<method name="describeContents"
 return="int"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="getActivationBytes"
 return="byte[]"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="getId"
 return="byte[]"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="getPollBytes"
 return="byte[]"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="getRawTargets"
 return="java.lang.String[]"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="writeToParcel"
 return="void"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="dest" type="android.os.Parcel">
</parameter>
<parameter name="flags" type="int">
</parameter>
</method>
<field name="CREATOR"
 type="android.os.Parcelable.Creator"
 transient="false"
 volatile="false"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="TARGET_ISO_14443_3A"
 type="java.lang.String"
 transient="false"
 volatile="false"
 value="&quot;iso14443_3a&quot;"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="TARGET_ISO_14443_3B"
 type="java.lang.String"
 transient="false"
 volatile="false"
 value="&quot;iso14443_3b&quot;"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="TARGET_ISO_14443_4"
 type="java.lang.String"
 transient="false"
 volatile="false"
 value="&quot;iso14443_4&quot;"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="TARGET_ISO_15693"
 type="java.lang.String"
 transient="false"
 volatile="false"
 value="&quot;iso15693&quot;"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="TARGET_JIS_X_6319_4"
<field name="EXTRA_ID"
 type="java.lang.String"
 transient="false"
 volatile="false"
 value="&quot;jis_x_6319_4&quot;"
 value="&quot;android.nfc.extra.ID&quot;"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="TARGET_OTHER"
<field name="EXTRA_NDEF_MESSAGES"
 type="java.lang.String"
 transient="false"
 volatile="false"
 value="&quot;other&quot;"
 value="&quot;android.nfc.extra.NDEF_MESSAGES&quot;"
 static="true"
 final="true"
 deprecated="not deprecated"
+0 −1
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package android.nfc;

//TODO(npelly) javadoc or consider alternatives
public class FormatException extends Exception {
    public FormatException() {
        super();
+4 −4
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ import android.os.Parcelable;
 * message always contains zero or more NDEF records.</p>
 * <p>This is an immutable data class.
 */
public class NdefMessage implements Parcelable {
public final class NdefMessage implements Parcelable {
    private static final byte FLAG_MB = (byte) 0x80;
    private static final byte FLAG_ME = (byte) 0x40;

@@ -69,9 +69,9 @@ public class NdefMessage implements Parcelable {
     * Returns a byte array representation of this entire NDEF message.
     */
    public byte[] toByteArray() {
        //TODO(nxp): do not return null
        //TODO(nxp): allocate the byte array once, copy each record once
        //TODO(nxp): process MB and ME flags outside loop
        //TODO: do not return null
        //TODO: allocate the byte array once, copy each record once
        //TODO: process MB and ME flags outside loop
        if ((mRecords == null) || (mRecords.length == 0))
            return null;

+1 −1
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@ import java.lang.UnsupportedOperationException;
 * large.
 * <p>This is an immutable data class.
 */
public class NdefRecord implements Parcelable {
public final class NdefRecord implements Parcelable {
    /**
     * Indicates no type, id, or payload is associated with this NDEF Record.
     * <p>
+1 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import android.os.Parcelable;
 * time and calls on this class will retrieve those read-only properties, and
 * not cause any further RF activity or block. Note however that arrays passed to and
 * returned by this class are *not* cloned, so be careful not to modify them.
 * @hide
 */
public class NdefTag extends Tag implements Parcelable {
    /**
Loading