New API stubs: NdefMessage and NdefRecord.

NDEF Messages and NDEF Record data classes.

Change-Id: I9b7114773281b0eb9680f595c95ac79943d2903b
Signed-off-by: Nick Pelly <npelly@google.com>
diff --git a/core/java/android/nfc/NdefRecord.java b/core/java/android/nfc/NdefRecord.java
new file mode 100644
index 0000000..54cbbeb
--- /dev/null
+++ b/core/java/android/nfc/NdefRecord.java
@@ -0,0 +1,231 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.nfc;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.lang.UnsupportedOperationException;
+
+/**
+ * NDEF Record data.
+ * <p>
+ * Immutable data class. An NDEF record always contains
+ * <ul>
+ * <li>3-bit TNF field
+ * <li>Variable length type
+ * <li>Variable length ID
+ * <li>Variable length payload
+ * </ul>
+ * The TNF (Type Name Format) field indicates how to interpret the type field.
+ * <p>
+ * This class represents a logical (unchunked) NDEF record. The underlying
+ * representation may be chunked across several NDEF records when the payload is
+ * large.
+ */
+public class NdefRecord implements Parcelable {
+    /**
+     * Indicates no type, id, or payload is associated with this NDEF Record.
+     * <p>
+     * Type, id and payload fields must all be empty to be a valid TNF_EMPTY
+     * record.
+     */
+    public static final short TNF_EMPTY = 0x00;
+
+    /**
+     * Indicates the type field uses the RTD type name format.
+     * <p>
+     * Use this TNF with RTD types such as RTD_TEXT, RTD_URI.
+     */
+    public static final short TNF_WELL_KNOWN = 0x01;
+
+    /**
+     * Indicates the type field contains a value that follows the media-type BNF
+     * construct defined by RFC 2046.
+     */
+    public static final short TNF_MIME_MEDIA = 0x02;
+
+    /**
+     * Indicates the type field contains a value that follows the absolute-URI
+     * BNF construct defined by RFC 3986.
+     */
+    public static final short TNF_ABSOLUTE_URI = 0x03;
+
+    /**
+     * Indicates the type field contains a value that follows the RTD external
+     * name specification.
+     * <p>
+     * Note this TNF should not be used with RTD_TEXT or RTD_URI constants.
+     * Those are well known RTD constants, not external RTD constants.
+     */
+    public static final short TNF_EXTERNAL_TYPE = 0x04;
+
+    /**
+     * Indicates the payload type is unknown.
+     * <p>
+     * This is similar to the "application/octet-stream" MIME type. The payload
+     * type is not explicitly encoded within the NDEF Message.
+     * <p>
+     * The type field must be empty to be a valid TNF_UNKNOWN record.
+     */
+    public static final short TNF_UNKNOWN = 0x05;
+
+    /**
+     * Indicates the payload is an intermediate or final chunk of a chunked
+     * NDEF Record.
+     * <p>
+     * The payload type is specified in the first chunk, and subsequent chunks
+     * must use TNF_UNCHANGED with an empty type field. TNF_UNCHANGED must not
+     * be used in any other situation.
+     */
+    public static final short TNF_UNCHANGED = 0x06;
+
+    /**
+     * Reserved TNF type.
+     * <p>
+     * The NFC Forum NDEF Specification v1.0 suggests for NDEF parsers to treat this
+     * value like TNF_UNKNOWN.
+     * @hide
+     */
+    public static final short TNF_RESERVED = 0x07;
+
+    /**
+     * RTD Text type. For use with TNF_WELL_KNOWN.
+     */
+    public static final byte[] RTD_TEXT = {0x54};  // "T"
+
+    /**
+     * RTD URI type. For use with TNF_WELL_KNOWN.
+     */
+    public static final byte[] RTD_URI = {0x55};   // "U"
+
+    /**
+     * RTD Smart Poster type. For use with TNF_WELL_KNOWN.
+     */
+    public static final byte[] RTD_SMART_POSTER = {0x53, 0x70};  // "Sp"
+
+    /**
+     * RTD Alternative Carrier type. For use with TNF_WELL_KNOWN.
+     */
+    public static final byte[] RTD_ALTERNATIVE_CARRIER = {0x61, 0x63};  // "ac"
+
+    /**
+     * RTD Handover Carrier type. For use with TNF_WELL_KNOWN.
+     */
+    public static final byte[] RTD_HANDOVER_CARRIER = {0x48, 0x63};  // "Hc"
+
+    /**
+     * RTD Handover Request type. For use with TNF_WELL_KNOWN.
+     */
+    public static final byte[] RTD_HANDOVER_REQUEST = {0x48, 0x72};  // "Hr"
+
+    /**
+     * RTD Handover Select type. For use with TNF_WELL_KNOWN.
+     */
+    public static final byte[] RTD_HANDOVER_SELECT = {0x48, 0x73}; // "Hs"
+
+    /**
+     * Construct an NDEF Record.
+     * <p>
+     * Applications should not attempt to manually chunk NDEF Records - the
+     * implementation of android.nfc will automatically chunk an NDEF Record
+     * when necessary (and only present a single logical NDEF Record to the
+     * application). So applications should not use TNF_UNCHANGED.
+     *
+     * @param tnf  a 3-bit TNF constant
+     * @param type byte array, containing zero to 255 bytes, must not be null
+     * @param id   byte array, containing zero to 255 bytes, must not be null
+     * @param payload byte array, containing zero to (2 ** 32 - 1) bytes,
+     *                must not be null
+     */
+    public NdefRecord(short tnf, byte[] type, byte[] id, byte[] payload) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Construct an NDEF Record from raw bytes.
+     * <p>
+     * Validation is performed to make sure the header is valid, and that
+     * the id, type and payload sizes appear to be valid.
+     *
+     * @throws FormatException if the data is not a valid NDEF record
+     */
+    public NdefRecord(byte[] data) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Returns the 3-bit TNF.
+     * <p>
+     * TNF is the top-level type.
+     */
+    public short getTnf() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Returns the variable length Type field.
+     * <p>
+     * This should be used in conjunction with the TNF field to determine the
+     * payload format.
+     */
+    public byte[] getType() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Returns the variable length ID.
+     */
+    public byte[] getId() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Returns the variable length payload.
+     */
+    public byte[] getPayload() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Return this NDEF Record as a byte array.
+     * @hide
+     */
+    public byte[] toByteArray() {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        throw new UnsupportedOperationException();
+    }
+
+    public static final Parcelable.Creator<NdefRecord> CREATOR =
+            new Parcelable.Creator<NdefRecord>() {
+        public NdefRecord createFromParcel(Parcel in) {
+            throw new UnsupportedOperationException();
+        }
+        public NdefRecord[] newArray(int size) {
+            throw new UnsupportedOperationException();
+        }
+    };
+}
\ No newline at end of file