Fix up NFC permissions.

The initial (vendor) implementation had 4 perms, replace with 1.

Requires no permissions:
- Viewing UID, type of discovered tags and cards.
- Viewing the NDEF message contents of NDEF formatted tags and cards.

Requires android.permission.NFC
- Get/Set the local tag "MyTag"
- Creating or using a RawTagConnection (transceive())
- Creating or using a NdefTagConnection (write()/read())

Change-Id: I1b585c7d91738bed6261277061a48cf7c939482a
Signed-off-by: Nick Pelly <npelly@google.com>
diff --git a/api/current.xml b/api/current.xml
index bdc7f2e..70f2bff 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -705,6 +705,17 @@
  visibility="public"
 >
 </field>
+<field name="NFC"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.permission.NFC&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="PERSISTENT_ACTIVITY"
  type="java.lang.String"
  transient="false"
diff --git a/core/java/android/nfc/NdefTagConnection.java b/core/java/android/nfc/NdefTagConnection.java
index 4e9865c..4795fa7 100644
--- a/core/java/android/nfc/NdefTagConnection.java
+++ b/core/java/android/nfc/NdefTagConnection.java
@@ -25,6 +25,9 @@
  * A connection to an NDEF target on an {@link NdefTag}.
  * <p>You can acquire this kind of connection with {@link NfcAdapter#createNdefTagConnection
  * createNdefTagConnection()}. Use the connection to read or write {@link NdefMessage}s.
+ * <p class="note"><strong>Note:</strong>
+ * Use of this class requires the {@link android.Manifest.permission#NFC}
+ * permission.
  */
 public class NdefTagConnection extends RawTagConnection {
     public static final int NDEF_MODE_READ_ONCE = 1;
@@ -69,7 +72,7 @@
      * This will always return the most up to date payload, and can block.
      * It can be canceled with {@link RawTagConnection#close}.
      * Most NDEF tags will contain just one NDEF message.
-     * <p>
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
      * @throws FormatException if the tag is not NDEF formatted
      * @throws IOException if the target is lost or connection closed
      * @throws FormatException
@@ -109,8 +112,9 @@
      * message. Use {@link NdefRecord} to write several records to a single tag.
      * For write-many tags, use {@link #makeReadOnly} after this method to attempt
      * to prevent further modification. For write-once tags this is not
-     * neccesary.
-     * Requires NFC_WRITE permission.
+     * necessary.
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
+     *
      * @throws FormatException if the tag is not suitable for NDEF messages
      * @throws IOException if the target is lost or connection closed or the
      *                     write failed
@@ -138,7 +142,7 @@
      * Attempts to make the NDEF data in this tag read-only.
      * This method will block until the action is complete. It can be canceled
      * with {@link RawTagConnection#close}.
-     * Requires NFC_WRITE permission.
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
      * @return true if the tag is now read-only
      * @throws IOException if the target is lost, or connection closed
      */
@@ -164,7 +168,8 @@
 
     /**
      * Read/Write mode hint.
-     * Provides a hint if further reads or writes are likely to suceed.
+     * Provides a hint if further reads or writes are likely to succeed.
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
      * @return one of NDEF_MODE
      * @throws IOException if the target is lost or connection closed
      */
diff --git a/core/java/android/nfc/NfcAdapter.java b/core/java/android/nfc/NfcAdapter.java
index fb079f4..6f718d3 100644
--- a/core/java/android/nfc/NfcAdapter.java
+++ b/core/java/android/nfc/NfcAdapter.java
@@ -22,7 +22,6 @@
 import android.os.ServiceManager;
 import android.util.Log;
 
-//TODO(npelly) permission {@link android.Manifest.permission#NFC_MODIFY}
 /**
  * Represents the device's local NFC adapter.
  * <p>
@@ -35,7 +34,7 @@
  * to NFC Tags.
  * <p class="note">
  * <strong>Note:</strong> Some methods require the
- * TODO permission.
+ * {@link android.Manifest.permission#NFC} permission.
  */
 public final class NfcAdapter {
     /**
@@ -231,8 +230,7 @@
      * <li>provide the NDEF message on over LLCP to peer NFC adapters
      * </ul>
      * The NDEF message is preserved across reboot.
-     * <p>
-     * Requires NFC_WRITE permission
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
      *
      * @param message NDEF message to make public
      */
@@ -246,8 +244,7 @@
 
     /**
      * Get the NDEF Message that this adapter appears as to Tag readers.
-     * <p>
-     * Requires NFC_WRITE permission
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
      *
      * @return NDEF Message that is publicly readable
      */
@@ -262,6 +259,7 @@
 
     /**
      * Create a raw tag connection to the default Target
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
      */
     public RawTagConnection createRawTagConnection(Tag tag) {
         try {
@@ -274,6 +272,7 @@
 
     /**
      * Create a raw tag connection to the specified Target
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
      */
     public RawTagConnection createRawTagConnection(Tag tag, String target) {
         try {
@@ -286,6 +285,7 @@
 
     /**
      * Create an NDEF tag connection to the default Target
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
      */
     public NdefTagConnection createNdefTagConnection(NdefTag tag) {
         try {
@@ -298,6 +298,7 @@
 
     /**
      * Create an NDEF tag connection to the specified Target
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
      */
     public NdefTagConnection createNdefTagConnection(NdefTag tag, String target) {
         try {
diff --git a/core/java/android/nfc/RawTagConnection.java b/core/java/android/nfc/RawTagConnection.java
index 37d700c..265eb1b 100644
--- a/core/java/android/nfc/RawTagConnection.java
+++ b/core/java/android/nfc/RawTagConnection.java
@@ -30,7 +30,7 @@
  * Applications must implement their own protocol stack on top of {@link #transceive transceive()}.
  *
  * <p class="note"><strong>Note:</strong>
- * Most methods require the TODO
+ * Use of this class requires the {@link android.Manifest.permission#NFC}
  * permission.
  */
 public class RawTagConnection {
@@ -71,11 +71,15 @@
 
     /**
      * Get the {@link Tag} this connection is associated with.
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
      */
     public Tag getTag() {
         return mTag;
     }
 
+    /**
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
+     */
     public String getTagTarget() {
         return mSelectedTarget;
     }
@@ -84,7 +88,7 @@
      * Helper to indicate if {@link #transceive transceive()} calls might succeed.
      * <p>
      * Does not cause RF activity, and does not block.
-     * <p>
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
      * @return true if {@link #connect} has completed successfully and the {@link Tag} is believed
      * to be within range. Applications must still handle {@link java.io.IOException}
      * while using {@link #transceive transceive()}, in case connection is lost after this method
@@ -104,7 +108,7 @@
      * <p>
      * {@link #close} can be called from another thread to cancel this connection
      * attempt.
-     *
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
      * @throws IOException if the target is lost, or connect canceled
      */
     public void connect() throws IOException {
@@ -120,6 +124,7 @@
      * <p>
      * Once this method is called, this object cannot be re-used and should be discarded. Further
      * calls to {@link #transceive transceive()} or {@link #connect} will fail.
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
      */
     public void close() {
         mIsConnected = false;
@@ -135,8 +140,7 @@
      * <p>
      * This method will block until the response is received. It can be canceled
      * with {@link #close}.
-     * <p>
-     * Requires NFC_WRITE permission.
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
      *
      * @param data bytes to send
      * @return bytes received in response
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index ef4ee11..a22c827 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -341,29 +341,12 @@
         android:description="@string/permdesc_bluetooth"
         android:label="@string/permlab_bluetooth" />
 
-    <!-- Allows applications to access remote NFC devices
-         @hide -->
-    <permission android:name="com.trustedlogic.trustednfc.permission.NFC_RAW"
+    <!-- Allows applications to directly communicate over NFC -->
+    <permission android:name="android.permission.NFC"
         android:permissionGroup="android.permission-group.NETWORK"
         android:protectionLevel="dangerous"
-        android:description="@string/permdesc_nfcRaw"
-        android:label="@string/permlab_nfcRaw" />
-
-    <!-- Allows applications to be notified of remote NFC devices
-         @hide -->
-    <permission android:name="com.trustedlogic.trustednfc.permission.NFC_NOTIFY"
-        android:permissionGroup="android.permission-group.NETWORK"
-        android:protectionLevel="dangerous"
-        android:description="@string/permdesc_nfcNotify"
-        android:label="@string/permlab_nfcNotify" />
-
-    <!-- Allows applications to be notified of remote NFC LLCP devices
-         @hide -->
-    <permission android:name="com.trustedlogic.trustednfc.permission.NFC_LLCP"
-        android:permissionGroup="android.permission-group.NETWORK"
-        android:protectionLevel="dangerous"
-        android:description="@string/permdesc_nfcLlcp"
-        android:label="@string/permlab_nfcLlcp" />
+        android:description="@string/permdesc_nfc"
+        android:label="@string/permlab_nfc" />
 
     <!-- Allows an application to use SIP service -->
     <permission android:name="android.permission.USE_SIP"
@@ -875,14 +858,6 @@
         android:description="@string/permdesc_bluetoothAdmin"
         android:label="@string/permlab_bluetoothAdmin" />
 
-    <!-- Allows applications to change NFC connectivity settings 
-         @hide -->
-    <permission android:name="com.trustedlogic.trustednfc.permission.NFC_ADMIN"
-        android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
-        android:protectionLevel="dangerous"
-        android:description="@string/permdesc_nfcAdmin"
-        android:label="@string/permlab_nfcAdmin" />
-
     <!-- Allows an application to clear the caches of all installed
          applications on the device.  -->
     <permission android:name="android.permission.CLEAR_APP_CACHE"
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index e1b5d93..075cc66 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -1153,28 +1153,10 @@
       connections with paired devices.</string>
 
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permlab_nfcAdmin">NFC administration</string>
+    <string name="permlab_nfc">control Near Field Communication</string>
     <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permdesc_nfcAdmin">Allows an application to configure
-      the local NFC phone.</string>
-
-    <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permlab_nfcRaw">NFC full access to remote device</string>
-    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permdesc_nfcRaw">Allows an application to access
-      remote NFC devices.</string>
-
-    <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permlab_nfcNotify">NFC notification from remote device</string>
-    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permdesc_nfcNotify">Allows an application to be notified
-      of operations related to remote NFC devices.</string>
-
-    <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permlab_nfcLlcp">NFC notification from remote LLCP device</string>
-    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permdesc_nfcLlcp">Allows an application to be notified
-      of LLCP operations related to remote NFC devices.</string>
+    <string name="permdesc_nfc">Allows an application to communicate
+      with Near Field Communication (NFC) tags, cards, and readers.</string>
 
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permlab_disableKeyguard">disable keylock</string>