Update NFC samples.

o Remove NFCDemo sample app. It's janky and is mostly parsing code
  that isn't needed anymore.
o Use new NDEF APIs for parsing and creating records
o Use nicer setNdefPushMessage() API
o Delete helper NDEF code that is not needed any more
o Use URL instead of Text for the foreground push demo
o Mark AndroidBeamDemo a test so it gets installed in data not system

Change-Id: I75eda84019c2075956688e26f2598f126d5659a2
diff --git a/build/sdk.atree b/build/sdk.atree
index a6f75f3..96c97d6 100644
--- a/build/sdk.atree
+++ b/build/sdk.atree
@@ -169,7 +169,6 @@
 development/samples/LunarLander                samples/${PLATFORM_NAME}/LunarLander
 development/samples/MultiResolution            samples/${PLATFORM_NAME}/MultiResolution
 development/samples/NotePad                    samples/${PLATFORM_NAME}/NotePad
-development/samples/NFCDemo                    samples/${PLATFORM_NAME}/NFCDemo
 development/samples/RandomMusicPlayer          samples/${PLATFORM_NAME}/RandomMusicPlayer
 development/samples/SpellChecker/SampleSpellCheckerService samples/${PLATFORM_NAME}/SpellChecker/SampleSpellCheckerService
 development/samples/SpellChecker/HelloSpellChecker samples/${PLATFORM_NAME}/SpellChecker/HelloSpellChecker
diff --git a/samples/AndroidBeamDemo/Android.mk b/samples/AndroidBeamDemo/Android.mk
index f125f0f..b5f45e8 100644
--- a/samples/AndroidBeamDemo/Android.mk
+++ b/samples/AndroidBeamDemo/Android.mk
@@ -1,7 +1,7 @@
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
-LOCAL_MODULE_TAGS := samples
+LOCAL_MODULE_TAGS := samples tests
 
 # Only compile source java files in this apk.
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
diff --git a/samples/AndroidBeamDemo/src/com/example/android/beam/Beam.java b/samples/AndroidBeamDemo/src/com/example/android/beam/Beam.java
index 0cc5f89..d419bac 100644
--- a/samples/AndroidBeamDemo/src/com/example/android/beam/Beam.java
+++ b/samples/AndroidBeamDemo/src/com/example/android/beam/Beam.java
@@ -73,9 +73,8 @@
         time.setToNow();
         String text = ("Beam me up!\n\n" +
                 "Beam Time: " + time.format("%H:%M:%S"));
-        NdefMessage msg = new NdefMessage(
-                new NdefRecord[] { createMimeRecord(
-                        "application/com.example.android.beam", text.getBytes())
+        NdefMessage msg = new NdefMessage(NdefRecord.createMime(
+                "application/com.example.android.beam", text.getBytes())
          /**
           * The Android Application Record (AAR) is commented out. When a device
           * receives a push with an AAR in it, the application specified in the AAR
@@ -85,7 +84,7 @@
           * uses the tag dispatch system.
           */
           //,NdefRecord.createApplicationRecord("com.example.android.beam")
-        });
+        );
         return msg;
     }
 
@@ -138,18 +137,6 @@
         mInfoText.setText(new String(msg.getRecords()[0].getPayload()));
     }
 
-    /**
-     * Creates a custom MIME type encapsulated in an NDEF record
-     *
-     * @param mimeType
-     */
-    public NdefRecord createMimeRecord(String mimeType, byte[] payload) {
-        byte[] mimeBytes = mimeType.getBytes(Charset.forName("US-ASCII"));
-        NdefRecord mimeRecord = new NdefRecord(
-                NdefRecord.TNF_MIME_MEDIA, mimeBytes, new byte[0], payload);
-        return mimeRecord;
-    }
-
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
         // If NFC is not available, we won't be needing this menu
diff --git a/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundNdefPush.java b/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundNdefPush.java
index fe478ed..08eb839 100644
--- a/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundNdefPush.java
+++ b/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundNdefPush.java
@@ -25,9 +25,6 @@
 import android.os.Bundle;
 import android.widget.TextView;
 
-import java.nio.charset.Charset;
-import java.util.Locale;
-
 /**
  * An example of how to use the NFC foreground NDEF push APIs.
  */
@@ -36,51 +33,23 @@
     private TextView mText;
     private NdefMessage mMessage;
 
-    public static NdefRecord newTextRecord(String text, Locale locale, boolean encodeInUtf8) {
-        byte[] langBytes = locale.getLanguage().getBytes(Charset.forName("US-ASCII"));
-
-        Charset utfEncoding = encodeInUtf8 ? Charset.forName("UTF-8") : Charset.forName("UTF-16");
-        byte[] textBytes = text.getBytes(utfEncoding);
-
-        int utfBit = encodeInUtf8 ? 0 : (1 << 7);
-        char status = (char) (utfBit + langBytes.length);
-
-        byte[] data = new byte[1 + langBytes.length + textBytes.length]; 
-        data[0] = (byte) status;
-        System.arraycopy(langBytes, 0, data, 1, langBytes.length);
-        System.arraycopy(textBytes, 0, data, 1 + langBytes.length, textBytes.length);
-
-        return new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte[0], data);
-    }
-
     @Override
     public void onCreate(Bundle savedState) {
         super.onCreate(savedState);
 
         mAdapter = NfcAdapter.getDefaultAdapter(this);
 
+        // Create an NDEF message a URL
+        mMessage = new NdefMessage(NdefRecord.createUri("http://www.android.com"));
+
         setContentView(R.layout.foreground_dispatch);
         mText = (TextView) findViewById(R.id.text);
+
         if (mAdapter != null) {
-            mText.setText("Tap another Android phone with NFC to push 'NDEF Push Sample'");
+            mAdapter.setNdefPushMessage(mMessage, this);
+            mText.setText("Tap another Android phone with NFC to push a URL");
         } else {
             mText.setText("This phone is not NFC enabled.");
         }
-
-        // Create an NDEF message with some sample text
-        mMessage = new NdefMessage(
-                new NdefRecord[] { newTextRecord("NDEF Push Sample", Locale.ENGLISH, true)});        
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        if (mAdapter != null) mAdapter.enableForegroundNdefPush(this, mMessage);
-    }
-
-    @Override
-    public void onPause() {
-        super.onPause();
-        if (mAdapter != null) mAdapter.disableForegroundNdefPush(this);
     }
 }
diff --git a/samples/NFCDemo/Android.mk b/samples/NFCDemo/Android.mk
deleted file mode 100644
index 60815a2..0000000
--- a/samples/NFCDemo/Android.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := samples tests
-
-LOCAL_STATIC_JAVA_LIBRARIES := guava
-
-# Only compile source java files in this apk.
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := NFCDemo
-
-LOCAL_SDK_VERSION := current
-
-include $(BUILD_PACKAGE)
-
-# Use the following include to make our test apk.
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/samples/NFCDemo/AndroidManifest.xml b/samples/NFCDemo/AndroidManifest.xml
deleted file mode 100644
index 044690b..0000000
--- a/samples/NFCDemo/AndroidManifest.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<!-- Declare the contents of this Android application.  The namespace
-     attribute brings in the Android platform namespace, and the package
-     supplies a unique name for the application.  When writing your
-     own application, the package name must be changed from "com.example.*"
-     to come from a domain that you own or have control over. -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.nfc"
->
-    <uses-permission android:name="android.permission.NFC" />
-    <uses-permission android:name="android.permission.CALL_PHONE" />
-    <application
-        android:icon="@drawable/icon"
-        android:label="@string/app_name"
-    >
-    <activity android:name=".simulator.FakeTagsActivity"
-        android:theme="@android:style/Theme.NoTitleBar">
-        <intent-filter>
-            <action android:name="android.intent.action.MAIN" />
-            <category android:name="android.intent.category.LAUNCHER" />
-        </intent-filter>
-    </activity>
-        <activity android:name="TagViewer"
-            android:theme="@android:style/Theme.NoTitleBar"
-        >
-            <intent-filter>
-                <action android:name="android.nfc.action.TAG_DISCOVERED"/>
-                <category android:name="android.intent.category.DEFAULT"/>
-            </intent-filter>
-        </activity>
-    </application>
-    <uses-sdk android:minSdkVersion="9" />
-    <uses-feature android:name="android.hardware.nfc" android:required="true" />
-</manifest>
diff --git a/samples/NFCDemo/NOTICE b/samples/NFCDemo/NOTICE
deleted file mode 100644
index 171b575..0000000
--- a/samples/NFCDemo/NOTICE
+++ /dev/null
@@ -1,209 +0,0 @@
-
-   Copyright (c) 2010-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-This product also includes the following third-party components:
-
- * Guava (libs/guava-10.0.1.jar)
-   http://code.google.com/p/guava-libraries/
-
-   Copyright 2004-2011 The Guava Authors
-
-   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.
-
diff --git a/samples/NFCDemo/_index.html b/samples/NFCDemo/_index.html
deleted file mode 100644
index d1c53f1..0000000
--- a/samples/NFCDemo/_index.html
+++ /dev/null
@@ -1,129 +0,0 @@
-<p>
-  Near-field Communication or NFC is a standard defined by the
-  <a href=http://www.nfc-forum.org/home>NFC Forum
-  </a>.
-  NFC Data Exchange Format (NDEF) defines a common data format between NFC-compliant devices and tags.
-  This demo application shows how to read a NDEF Tags using using Android 2.3 SDK APIs.
-  The NFC Tags consist of data encoded in NDEF Message format specified by NFC Forum Type 2 Specification.
-  Each NDEF message consists of one or more NDEF Records.
-
-  You need a NFC compliant device and a NFC compliant Tag to use this sample app. Or else, you could use
-  the FakeTagsActivity displayed at launch of this sample app, to generate fake Tag broadcasts from the emulator.
-</p>
-
-<p>The application includes:
-</p>
-  <ul>
-    <li>
-      <a href="src/com/example/android/nfc/TagViewer.html">
-        <code>TagViewer
-        </code>
-      </a>
-      &mdash; an
-      <code>Activity
-      </code> that handles a broadcast of a new tag that the device
-      just discovered, parses it, and displays its record contents in a
-      <code>ListActivity
-      </code>
-    </li>
-    <li>
-      <a href="src/com/example/android/nfc/NdefMessageParser.html">
-        <code> NdefMessageParser
-        </code>
-      </a>
-      &mdash; parses the record type of records within the NDEF message.
-    </li>
-    <li>
-      <a href="src/com/example/android/nfc/record/ParsedNdefRecord.html">
-        <code>ParsedNdefRecord
-        </code>
-      </a>
-      &mdash; an interface implemented by all parsed NdefRecord types.
-    </li>
-    <li>
-      <a href="src/com/example/android/nfc/record/SmartPoster.html">
-        <code>SmartPoster
-        </code>
-      </a>
-      &mdash; a representation of an NFC Forum Smart Poster Record Type.
-    </li>
-    <li>
-      <a href="src/com/example/android/nfc/record/TextRecord.html">
-        <code>TextRecord
-        </code>
-      </a>
-      &mdash; a representation of an NFC Forum Text Record Type.
-    </li>
-    <li>
-      <a href="src/com/example/android/nfc/record/UriRecord.html">
-        <code>UriRecord
-        </code>
-      </a>
-      &mdash; a representation of an NFC Forum Uri Record Type.
-    </li>
-    <li>
-      <a href="src/com/example/android/nfc/simulator/FakeTagsActivity.html">
-        <code>FakeTagsActivity
-        </code>
-      </a>
-      &mdash; A activity that launches tags as if they had been scanned.
-      This is useful if you don't have access to NFC enabled device or tag.
-    </li>
-    <li>
-      <a href="src/com/example/android/nfc/simulator/MockNdefMessages.html">
-        <code>MockNdefMessages
-        </code>
-      </a>
-      &mdash; this class provides a list of fake NFC Ndef format Tags.
-    </li>
-
-  </ul>
-<p>If you are developing an application that uses the NFC API, remember that the feature
-  is supported only on Android 2.3 (API level 9) and higher versions of the platform. Also,
-  among devices running Android 2.3 (API level 9) or higher, not all devices will offer NFC
-  support. To ensure that your application can only be installed on devices that are capable
-  of supporting NFC, remember to add the following to the application's manifest before
-  publishing to Android Market:
-</p>
-<ul>
-  <li>
-    <code>&lt;uses-sdk android:minSdkVersion="9" /&gt;
-    </code>,
-    which indicates to Android Market and the platform that your application requires
-    Android 2.3 or higher. For more information, see
-    <a href="../../../guide/appendix/api-levels.html">API Levels
-    </a>
-    and the documentation for the
-    <a href="../../../guide/topics/manifest/uses-sdk-element.html">
-      <code>&lt;uses-sdk&gt;
-      </code>
-    </a> element.
-  </li>
-</ul>
-<p>To control how Android Market filters your application
-  from devices that do not support NFC, remember to add the following to the application's manifest
-  <ul>
-    <li>
-      <code>&lt;uses-feature android:name="android.hardware.nfc" /&gt;
-      </code>,
-      which tells Android Market that your application uses the NFC API. The declaration
-      should include an
-      <code>android:required
-      </code> attribute that indicates whether you want
-      Android Market to filter the application from devices that do not offer NFC support. Other
-      <code>&lt;uses-feature&gt;
-      </code> declarations may also be needed, depending on your
-      implementation. For more information, see the documentation for the
-      <a href="../../../guide/topics/manifest/uses-feature-element.html">
-        <code>&lt;uses-feature&gt;
-        </code>
-      </a> element.
-    </li>
-  </ul>
-<p>For more information about using the NFC API, see the
-  <a href="../../../reference/android/nfc/package-summary.html">
-    <code>android.nfc</code>
-    </a>
-   documentation.
-</p>
-<img alt="" src="../images/NfcDemo.png"/>
diff --git a/samples/NFCDemo/libs/guava-10.0.1.jar b/samples/NFCDemo/libs/guava-10.0.1.jar
deleted file mode 100644
index d107c0f..0000000
--- a/samples/NFCDemo/libs/guava-10.0.1.jar
+++ /dev/null
Binary files differ
diff --git a/samples/NFCDemo/res/drawable/icon.png b/samples/NFCDemo/res/drawable/icon.png
deleted file mode 100644
index a07c69f..0000000
--- a/samples/NFCDemo/res/drawable/icon.png
+++ /dev/null
Binary files differ
diff --git a/samples/NFCDemo/res/layout/tag_divider.xml b/samples/NFCDemo/res/layout/tag_divider.xml
deleted file mode 100644
index b6b1b7c..0000000
--- a/samples/NFCDemo/res/layout/tag_divider.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     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.
--->
-
-<View xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:background="?android:attr/listDivider"
-/>
\ No newline at end of file
diff --git a/samples/NFCDemo/res/layout/tag_text.xml b/samples/NFCDemo/res/layout/tag_text.xml
deleted file mode 100644
index 59cbbfb..0000000
--- a/samples/NFCDemo/res/layout/tag_text.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     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.
--->
-
-<TextView xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/text"
-    android:layout_width="match_parent"
-    android:minHeight="?android:attr/listPreferredItemHeight"
-    android:layout_height="wrap_content"
-    android:padding="4dip"
-    android:textAppearance="?android:attr/textAppearanceMedium"
-    android:maxLines="5"
-    android:ellipsize="end"
-    android:gravity="center_vertical"
-/>
\ No newline at end of file
diff --git a/samples/NFCDemo/res/layout/tag_viewer.xml b/samples/NFCDemo/res/layout/tag_viewer.xml
deleted file mode 100644
index a429ef9..0000000
--- a/samples/NFCDemo/res/layout/tag_viewer.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     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.
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent" android:layout_height="match_parent"
-    android:orientation="vertical">
-    <!-- Title -->
-    <TextView android:id="@+id/title" android:layout_width="wrap_content"
-        android:layout_height="wrap_content" android:singleLine="true"
-        android:textAppearance="?android:attr/textAppearanceMedium"
-        android:textStyle="bold" android:shadowColor="#BB000000"
-        android:shadowRadius="2.75" android:gravity="center_vertical" />
-    <!-- Content -->
-    <ScrollView android:layout_width="match_parent"
-        android:layout_height="0dip" android:layout_weight="1">
-        <LinearLayout android:id="@+id/list" android:layout_width="match_parent"
-            android:layout_height="wrap_content" android:orientation="vertical" />
-    </ScrollView>
-</LinearLayout>
\ No newline at end of file
diff --git a/samples/NFCDemo/res/raw/discovered_tag_notification.ogg b/samples/NFCDemo/res/raw/discovered_tag_notification.ogg
deleted file mode 100755
index 7bf5df7..0000000
--- a/samples/NFCDemo/res/raw/discovered_tag_notification.ogg
+++ /dev/null
Binary files differ
diff --git a/samples/NFCDemo/res/values/strings.xml b/samples/NFCDemo/res/values/strings.xml
deleted file mode 100644
index 251d2f6..0000000
--- a/samples/NFCDemo/res/values/strings.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
-    <!-- The title of the NFC tag application -->
-    <string name="app_name">NFCDemo</string>
-
-    <!-- The title for the activity that shows a tag that was just scanned -->
-    <string name="title_scanned_tag">New tag collected</string>
-
-    <!-- Heading for the text of the content in the "my tag" feature. -->
-    <string name="tag_text">Text</string>
-
-</resources>
diff --git a/samples/NFCDemo/src/com/example/android/nfc/NdefMessageParser.java b/samples/NFCDemo/src/com/example/android/nfc/NdefMessageParser.java
deleted file mode 100644
index 7372810..0000000
--- a/samples/NFCDemo/src/com/example/android/nfc/NdefMessageParser.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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 com.example.android.nfc;
-
-import android.nfc.NdefMessage;
-import android.nfc.NdefRecord;
-
-import com.example.android.nfc.record.ParsedNdefRecord;
-import com.example.android.nfc.record.SmartPoster;
-import com.example.android.nfc.record.TextRecord;
-import com.example.android.nfc.record.UriRecord;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Utility class for creating {@link ParsedNdefMessage}s.
- */
-public class NdefMessageParser {
-
-    // Utility class
-    private NdefMessageParser() {
-
-    }
-
-    /** Parse an NdefMessage */
-    public static List<ParsedNdefRecord> parse(NdefMessage message) {
-        return getRecords(message.getRecords());
-    }
-
-    public static List<ParsedNdefRecord> getRecords(NdefRecord[] records) {
-        List<ParsedNdefRecord> elements = new ArrayList<ParsedNdefRecord>();
-        for (NdefRecord record : records) {
-            if (UriRecord.isUri(record)) {
-                elements.add(UriRecord.parse(record));
-            } else if (TextRecord.isText(record)) {
-                elements.add(TextRecord.parse(record));
-            } else if (SmartPoster.isPoster(record)) {
-                elements.add(SmartPoster.parse(record));
-            }
-        }
-        return elements;
-    }
-}
diff --git a/samples/NFCDemo/src/com/example/android/nfc/TagViewer.java b/samples/NFCDemo/src/com/example/android/nfc/TagViewer.java
deleted file mode 100644
index 01dc0bd..0000000
--- a/samples/NFCDemo/src/com/example/android/nfc/TagViewer.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * 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 com.example.android.nfc;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.nfc.NdefMessage;
-import android.nfc.NdefRecord;
-import android.nfc.NfcAdapter;
-import android.os.Bundle;
-import android.os.Parcelable;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.WindowManager;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.example.android.nfc.record.ParsedNdefRecord;
-
-import java.util.List;
-
-/**
- * An {@link Activity} which handles a broadcast of a new tag that the device
- * just discovered.
- */
-public class TagViewer extends Activity {
-
-    static final String TAG = "ViewTag";
-
-    /**
-     * This activity will finish itself in this amount of time if the user
-     * doesn't do anything.
-     */
-    static final int ACTIVITY_TIMEOUT_MS = 1 * 1000;
-
-    TextView mTitle;
-
-    LinearLayout mTagContent;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.tag_viewer);
-        mTagContent = (LinearLayout) findViewById(R.id.list);
-        mTitle = (TextView) findViewById(R.id.title);
-        resolveIntent(getIntent());
-    }
-
-    void resolveIntent(Intent intent) {
-        // Parse the intent
-        String action = intent.getAction();
-        if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)) {
-            // When a tag is discovered we send it to the service to be save. We
-            // include a PendingIntent for the service to call back onto. This
-            // will cause this activity to be restarted with onNewIntent(). At
-            // that time we read it from the database and view it.
-            Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
-            NdefMessage[] msgs;
-            if (rawMsgs != null) {
-                msgs = new NdefMessage[rawMsgs.length];
-                for (int i = 0; i < rawMsgs.length; i++) {
-                    msgs[i] = (NdefMessage) rawMsgs[i];
-                }
-            } else {
-                // Unknown tag type
-                byte[] empty = new byte[] {};
-                NdefRecord record = new NdefRecord(NdefRecord.TNF_UNKNOWN, empty, empty, empty);
-                NdefMessage msg = new NdefMessage(new NdefRecord[] {record});
-                msgs = new NdefMessage[] {msg};
-            }
-            // Setup the views
-            setTitle(R.string.title_scanned_tag);
-            buildTagViews(msgs);
-        } else {
-            Log.e(TAG, "Unknown intent " + intent);
-            finish();
-            return;
-        }
-    }
-
-    void buildTagViews(NdefMessage[] msgs) {
-        if (msgs == null || msgs.length == 0) {
-            return;
-        }
-        LayoutInflater inflater = LayoutInflater.from(this);
-        LinearLayout content = mTagContent;
-        // Clear out any old views in the content area, for example if you scan
-        // two tags in a row.
-        content.removeAllViews();
-        // Parse the first message in the list
-        // Build views for all of the sub records
-        List<ParsedNdefRecord> records = NdefMessageParser.parse(msgs[0]);
-        final int size = records.size();
-        for (int i = 0; i < size; i++) {
-            ParsedNdefRecord record = records.get(i);
-            content.addView(record.getView(this, inflater, content, i));
-            inflater.inflate(R.layout.tag_divider, content, true);
-        }
-    }
-
-    @Override
-    public void onNewIntent(Intent intent) {
-        setIntent(intent);
-        resolveIntent(intent);
-    }
-
-    @Override
-    public void setTitle(CharSequence title) {
-        mTitle.setText(title);
-    }
-}
diff --git a/samples/NFCDemo/src/com/example/android/nfc/record/ParsedNdefRecord.java b/samples/NFCDemo/src/com/example/android/nfc/record/ParsedNdefRecord.java
deleted file mode 100644
index b706ae8..0000000
--- a/samples/NFCDemo/src/com/example/android/nfc/record/ParsedNdefRecord.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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 com.example.android.nfc.record;
-
-import android.app.Activity;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-
-public interface ParsedNdefRecord {
-
-    /**
-     * Returns a view to display this record.
-     */
-    public View getView(Activity activity, LayoutInflater inflater, ViewGroup parent,
-            int offset);
-
-}
diff --git a/samples/NFCDemo/src/com/example/android/nfc/record/SmartPoster.java b/samples/NFCDemo/src/com/example/android/nfc/record/SmartPoster.java
deleted file mode 100644
index f86d3ef..0000000
--- a/samples/NFCDemo/src/com/example/android/nfc/record/SmartPoster.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * 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 com.example.android.nfc.record;
-
-import android.app.Activity;
-import android.nfc.FormatException;
-import android.nfc.NdefMessage;
-import android.nfc.NdefRecord;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewGroup.LayoutParams;
-import android.widget.LinearLayout;
-
-import com.google.common.base.Charsets;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Iterables;
-
-import com.example.android.nfc.NdefMessageParser;
-import com.example.android.nfc.R;
-
-import java.util.Arrays;
-import java.util.NoSuchElementException;
-
-/**
- * A representation of an NFC Forum "Smart Poster".
- */
-public class SmartPoster implements ParsedNdefRecord {
-
-    /**
-     * NFC Forum Smart Poster Record Type Definition section 3.2.1.
-     *
-     * "The Title record for the service (there can be many of these in
-     * different languages, but a language MUST NOT be repeated). This record is
-     * optional."
-     */
-    private final TextRecord mTitleRecord;
-
-    /**
-     * NFC Forum Smart Poster Record Type Definition section 3.2.1.
-     *
-     * "The URI record. This is the core of the Smart Poster, and all other
-     * records are just metadata about this record. There MUST be one URI record
-     * and there MUST NOT be more than one."
-     */
-    private final UriRecord mUriRecord;
-
-    /**
-     * NFC Forum Smart Poster Record Type Definition section 3.2.1.
-     *
-     * "The Action record. This record describes how the service should be
-     * treated. For example, the action may indicate that the device should save
-     * the URI as a bookmark or open a browser. The Action record is optional.
-     * If it does not exist, the device may decide what to do with the service.
-     * If the action record exists, it should be treated as a strong suggestion;
-     * the UI designer may ignore it, but doing so will induce a different user
-     * experience from device to device."
-     */
-    private final RecommendedAction mAction;
-
-    /**
-     * NFC Forum Smart Poster Record Type Definition section 3.2.1.
-     *
-     * "The Type record. If the URI references an external entity (e.g., via a
-     * URL), the Type record may be used to declare the MIME type of the entity.
-     * This can be used to tell the mobile device what kind of an object it can
-     * expect before it opens the connection. The Type record is optional."
-     */
-    private final String mType;
-
-    private SmartPoster(UriRecord uri, TextRecord title, RecommendedAction action, String type) {
-        mUriRecord = Preconditions.checkNotNull(uri);
-        mTitleRecord = title;
-        mAction = Preconditions.checkNotNull(action);
-        mType = type;
-    }
-
-    public UriRecord getUriRecord() {
-        return mUriRecord;
-    }
-
-    /**
-     * Returns the title of the smart poster. This may be {@code null}.
-     */
-    public TextRecord getTitle() {
-        return mTitleRecord;
-    }
-
-    public static SmartPoster parse(NdefRecord record) {
-        Preconditions.checkArgument(record.getTnf() == NdefRecord.TNF_WELL_KNOWN);
-        Preconditions.checkArgument(Arrays.equals(record.getType(), NdefRecord.RTD_SMART_POSTER));
-        try {
-            NdefMessage subRecords = new NdefMessage(record.getPayload());
-            return parse(subRecords.getRecords());
-        } catch (FormatException e) {
-            throw new IllegalArgumentException(e);
-        }
-    }
-
-    public static SmartPoster parse(NdefRecord[] recordsRaw) {
-        try {
-            Iterable<ParsedNdefRecord> records = NdefMessageParser.getRecords(recordsRaw);
-            UriRecord uri = Iterables.getOnlyElement(Iterables.filter(records, UriRecord.class));
-            TextRecord title = getFirstIfExists(records, TextRecord.class);
-            RecommendedAction action = parseRecommendedAction(recordsRaw);
-            String type = parseType(recordsRaw);
-            return new SmartPoster(uri, title, action, type);
-        } catch (NoSuchElementException e) {
-            throw new IllegalArgumentException(e);
-        }
-    }
-
-    public static boolean isPoster(NdefRecord record) {
-        try {
-            parse(record);
-            return true;
-        } catch (IllegalArgumentException e) {
-            return false;
-        }
-    }
-
-    public View getView(Activity activity, LayoutInflater inflater, ViewGroup parent, int offset) {
-        if (mTitleRecord != null) {
-            // Build a container to hold the title and the URI
-            LinearLayout container = new LinearLayout(activity);
-            container.setOrientation(LinearLayout.VERTICAL);
-            container.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
-                LayoutParams.WRAP_CONTENT));
-            container.addView(mTitleRecord.getView(activity, inflater, container, offset));
-            inflater.inflate(R.layout.tag_divider, container);
-            container.addView(mUriRecord.getView(activity, inflater, container, offset));
-            return container;
-        } else {
-            // Just a URI, return a view for it directly
-            return mUriRecord.getView(activity, inflater, parent, offset);
-        }
-    }
-
-    /**
-     * Returns the first element of {@code elements} which is an instance of
-     * {@code type}, or {@code null} if no such element exists.
-     */
-    private static <T> T getFirstIfExists(Iterable<?> elements, Class<T> type) {
-        Iterable<T> filtered = Iterables.filter(elements, type);
-        T instance = null;
-        if (!Iterables.isEmpty(filtered)) {
-            instance = Iterables.get(filtered, 0);
-        }
-        return instance;
-    }
-
-    private enum RecommendedAction {
-        UNKNOWN((byte) -1), DO_ACTION((byte) 0), SAVE_FOR_LATER((byte) 1), OPEN_FOR_EDITING(
-            (byte) 2);
-
-        private static final ImmutableMap<Byte, RecommendedAction> LOOKUP;
-        static {
-            ImmutableMap.Builder<Byte, RecommendedAction> builder = ImmutableMap.builder();
-            for (RecommendedAction action : RecommendedAction.values()) {
-                builder.put(action.getByte(), action);
-            }
-            LOOKUP = builder.build();
-        }
-
-        private final byte mAction;
-
-        private RecommendedAction(byte val) {
-            this.mAction = val;
-        }
-
-        private byte getByte() {
-            return mAction;
-        }
-    }
-
-    private static NdefRecord getByType(byte[] type, NdefRecord[] records) {
-        for (NdefRecord record : records) {
-            if (Arrays.equals(type, record.getType())) {
-                return record;
-            }
-        }
-        return null;
-    }
-
-    private static final byte[] ACTION_RECORD_TYPE = new byte[] {'a', 'c', 't'};
-
-    private static RecommendedAction parseRecommendedAction(NdefRecord[] records) {
-        NdefRecord record = getByType(ACTION_RECORD_TYPE, records);
-        if (record == null) {
-            return RecommendedAction.UNKNOWN;
-        }
-        byte action = record.getPayload()[0];
-        if (RecommendedAction.LOOKUP.containsKey(action)) {
-            return RecommendedAction.LOOKUP.get(action);
-        }
-        return RecommendedAction.UNKNOWN;
-    }
-
-    private static final byte[] TYPE_TYPE = new byte[] {'t'};
-
-    private static String parseType(NdefRecord[] records) {
-        NdefRecord type = getByType(TYPE_TYPE, records);
-        if (type == null) {
-            return null;
-        }
-        return new String(type.getPayload(), Charsets.UTF_8);
-    }
-}
diff --git a/samples/NFCDemo/src/com/example/android/nfc/record/TextRecord.java b/samples/NFCDemo/src/com/example/android/nfc/record/TextRecord.java
deleted file mode 100644
index 8041cca..0000000
--- a/samples/NFCDemo/src/com/example/android/nfc/record/TextRecord.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * 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 com.example.android.nfc.record;
-
-import android.app.Activity;
-import android.nfc.NdefRecord;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import com.google.common.base.Preconditions;
-
-import com.example.android.nfc.R;
-
-import java.io.UnsupportedEncodingException;
-import java.util.Arrays;
-
-/**
- * An NFC Text Record
- */
-public class TextRecord implements ParsedNdefRecord {
-
-    /** ISO/IANA language code */
-    private final String mLanguageCode;
-
-    private final String mText;
-
-    private TextRecord(String languageCode, String text) {
-        mLanguageCode = Preconditions.checkNotNull(languageCode);
-        mText = Preconditions.checkNotNull(text);
-    }
-
-    public View getView(Activity activity, LayoutInflater inflater, ViewGroup parent, int offset) {
-        TextView text = (TextView) inflater.inflate(R.layout.tag_text, parent, false);
-        text.setText(mText);
-        return text;
-    }
-
-    public String getText() {
-        return mText;
-    }
-
-    /**
-     * Returns the ISO/IANA language code associated with this text element.
-     */
-    public String getLanguageCode() {
-        return mLanguageCode;
-    }
-
-    // TODO: deal with text fields which span multiple NdefRecords
-    public static TextRecord parse(NdefRecord record) {
-        Preconditions.checkArgument(record.getTnf() == NdefRecord.TNF_WELL_KNOWN);
-        Preconditions.checkArgument(Arrays.equals(record.getType(), NdefRecord.RTD_TEXT));
-        try {
-            byte[] payload = record.getPayload();
-            /*
-             * payload[0] contains the "Status Byte Encodings" field, per the
-             * NFC Forum "Text Record Type Definition" section 3.2.1.
-             *
-             * bit7 is the Text Encoding Field.
-             *
-             * if (Bit_7 == 0): The text is encoded in UTF-8 if (Bit_7 == 1):
-             * The text is encoded in UTF16
-             *
-             * Bit_6 is reserved for future use and must be set to zero.
-             *
-             * Bits 5 to 0 are the length of the IANA language code.
-             */
-            String textEncoding = ((payload[0] & 0200) == 0) ? "UTF-8" : "UTF-16";
-            int languageCodeLength = payload[0] & 0077;
-            String languageCode = new String(payload, 1, languageCodeLength, "US-ASCII");
-            String text =
-                new String(payload, languageCodeLength + 1,
-                    payload.length - languageCodeLength - 1, textEncoding);
-            return new TextRecord(languageCode, text);
-        } catch (UnsupportedEncodingException e) {
-            // should never happen unless we get a malformed tag.
-            throw new IllegalArgumentException(e);
-        }
-    }
-
-    public static boolean isText(NdefRecord record) {
-        try {
-            parse(record);
-            return true;
-        } catch (IllegalArgumentException e) {
-            return false;
-        }
-    }
-}
diff --git a/samples/NFCDemo/src/com/example/android/nfc/record/UriRecord.java b/samples/NFCDemo/src/com/example/android/nfc/record/UriRecord.java
deleted file mode 100644
index 452ebb2..0000000
--- a/samples/NFCDemo/src/com/example/android/nfc/record/UriRecord.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * 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 com.example.android.nfc.record;
-
-import android.app.Activity;
-import android.net.Uri;
-import android.nfc.NdefRecord;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.BiMap;
-import com.google.common.collect.ImmutableBiMap;
-import com.google.common.primitives.Bytes;
-
-import com.example.android.nfc.R;
-
-import java.nio.charset.Charset;
-import java.util.Arrays;
-
-/**
- * A parsed record containing a Uri.
- */
-public class UriRecord implements ParsedNdefRecord {
-
-    private static final String TAG = "UriRecord";
-
-    public static final String RECORD_TYPE = "UriRecord";
-
-    /**
-     * NFC Forum "URI Record Type Definition"
-     *
-     * This is a mapping of "URI Identifier Codes" to URI string prefixes,
-     * per section 3.2.2 of the NFC Forum URI Record Type Definition document.
-     */
-    private static final BiMap<Byte, String> URI_PREFIX_MAP = ImmutableBiMap.<Byte, String>builder()
-            .put((byte) 0x00, "")
-            .put((byte) 0x01, "http://www.")
-            .put((byte) 0x02, "https://www.")
-            .put((byte) 0x03, "http://")
-            .put((byte) 0x04, "https://")
-            .put((byte) 0x05, "tel:")
-            .put((byte) 0x06, "mailto:")
-            .put((byte) 0x07, "ftp://anonymous:anonymous@")
-            .put((byte) 0x08, "ftp://ftp.")
-            .put((byte) 0x09, "ftps://")
-            .put((byte) 0x0A, "sftp://")
-            .put((byte) 0x0B, "smb://")
-            .put((byte) 0x0C, "nfs://")
-            .put((byte) 0x0D, "ftp://")
-            .put((byte) 0x0E, "dav://")
-            .put((byte) 0x0F, "news:")
-            .put((byte) 0x10, "telnet://")
-            .put((byte) 0x11, "imap:")
-            .put((byte) 0x12, "rtsp://")
-            .put((byte) 0x13, "urn:")
-            .put((byte) 0x14, "pop:")
-            .put((byte) 0x15, "sip:")
-            .put((byte) 0x16, "sips:")
-            .put((byte) 0x17, "tftp:")
-            .put((byte) 0x18, "btspp://")
-            .put((byte) 0x19, "btl2cap://")
-            .put((byte) 0x1A, "btgoep://")
-            .put((byte) 0x1B, "tcpobex://")
-            .put((byte) 0x1C, "irdaobex://")
-            .put((byte) 0x1D, "file://")
-            .put((byte) 0x1E, "urn:epc:id:")
-            .put((byte) 0x1F, "urn:epc:tag:")
-            .put((byte) 0x20, "urn:epc:pat:")
-            .put((byte) 0x21, "urn:epc:raw:")
-            .put((byte) 0x22, "urn:epc:")
-            .put((byte) 0x23, "urn:nfc:")
-            .build();
-
-    private final Uri mUri;
-
-    private UriRecord(Uri uri) {
-        this.mUri = Preconditions.checkNotNull(uri);
-    }
-
-    public View getView(Activity activity, LayoutInflater inflater, ViewGroup parent, int offset) {
-        TextView text = (TextView) inflater.inflate(R.layout.tag_text, parent, false);
-        text.setText(mUri.toString());
-        return text;
-    }
-
-    public Uri getUri() {
-        return mUri;
-    }
-
-    /**
-     * Convert {@link android.nfc.NdefRecord} into a {@link android.net.Uri}.
-     * This will handle both TNF_WELL_KNOWN / RTD_URI and TNF_ABSOLUTE_URI.
-     *
-     * @throws IllegalArgumentException if the NdefRecord is not a record
-     *         containing a URI.
-     */
-    public static UriRecord parse(NdefRecord record) {
-        short tnf = record.getTnf();
-        if (tnf == NdefRecord.TNF_WELL_KNOWN) {
-            return parseWellKnown(record);
-        } else if (tnf == NdefRecord.TNF_ABSOLUTE_URI) {
-            return parseAbsolute(record);
-        }
-        throw new IllegalArgumentException("Unknown TNF " + tnf);
-    }
-
-    /** Parse and absolute URI record */
-    private static UriRecord parseAbsolute(NdefRecord record) {
-        byte[] payload = record.getPayload();
-        Uri uri = Uri.parse(new String(payload, Charset.forName("UTF-8")));
-        return new UriRecord(uri);
-    }
-
-    /** Parse an well known URI record */
-    private static UriRecord parseWellKnown(NdefRecord record) {
-        Preconditions.checkArgument(Arrays.equals(record.getType(), NdefRecord.RTD_URI));
-        byte[] payload = record.getPayload();
-        /*
-         * payload[0] contains the URI Identifier Code, per the
-         * NFC Forum "URI Record Type Definition" section 3.2.2.
-         *
-         * payload[1]...payload[payload.length - 1] contains the rest of
-         * the URI.
-         */
-        String prefix = URI_PREFIX_MAP.get(payload[0]);
-        byte[] fullUri =
-            Bytes.concat(prefix.getBytes(Charset.forName("UTF-8")), Arrays.copyOfRange(payload, 1,
-                payload.length));
-        Uri uri = Uri.parse(new String(fullUri, Charset.forName("UTF-8")));
-        return new UriRecord(uri);
-    }
-
-    public static boolean isUri(NdefRecord record) {
-        try {
-            parse(record);
-            return true;
-        } catch (IllegalArgumentException e) {
-            return false;
-        }
-    }
-
-    private static final byte[] EMPTY = new byte[0];
-}
diff --git a/samples/NFCDemo/src/com/example/android/nfc/simulator/FakeTagsActivity.java b/samples/NFCDemo/src/com/example/android/nfc/simulator/FakeTagsActivity.java
deleted file mode 100644
index 313bab4..0000000
--- a/samples/NFCDemo/src/com/example/android/nfc/simulator/FakeTagsActivity.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * 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 com.example.android.nfc.simulator;
-
-import android.app.ListActivity;
-import android.content.Intent;
-import android.nfc.NdefMessage;
-import android.nfc.NdefRecord;
-import android.nfc.NfcAdapter;
-import android.os.Bundle;
-import android.view.View;
-import android.widget.ArrayAdapter;
-import android.widget.ListView;
-
-import com.google.common.base.Charsets;
-import com.google.common.base.Preconditions;
-import com.google.common.primitives.Bytes;
-
-import java.nio.charset.Charset;
-import java.util.Locale;
-
-/**
- * A activity that launches tags as if they had been scanned.
- */
-public class FakeTagsActivity extends ListActivity {
-
-    static final String TAG = "FakeTagsActivity";
-
-    static final byte[] UID = new byte[] {0x05, 0x00, 0x03, 0x08};
-
-    ArrayAdapter<TagDescription> mAdapter;
-
-    public static NdefRecord newTextRecord(String text, Locale locale, boolean encodeInUtf8) {
-        Preconditions.checkNotNull(text);
-        Preconditions.checkNotNull(locale);
-        final byte[] langBytes = locale.getLanguage().getBytes(Charsets.US_ASCII);
-        final Charset utfEncoding = encodeInUtf8 ? Charsets.UTF_8 : Charset.forName("UTF-16");
-        final byte[] textBytes = text.getBytes(utfEncoding);
-        final int utfBit = encodeInUtf8 ? 0 : (1 << 7);
-        final char status = (char) (utfBit + langBytes.length);
-        final byte[] data = Bytes.concat(new byte[] {(byte) status}, langBytes, textBytes);
-        return new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte[0], data);
-    }
-
-    public static NdefRecord newMimeRecord(String type, byte[] data) {
-        Preconditions.checkNotNull(type);
-        Preconditions.checkNotNull(data);
-        final byte[] typeBytes = type.getBytes(Charsets.US_ASCII);
-        return new NdefRecord(NdefRecord.TNF_MIME_MEDIA, typeBytes, new byte[0], data);
-    }
-
-    static final class TagDescription {
-
-        public String title;
-
-        public NdefMessage[] msgs;
-
-        public TagDescription(String title, byte[] bytes) {
-            this.title = title;
-            try {
-                msgs = new NdefMessage[] {new NdefMessage(bytes)};
-            } catch (final Exception e) {
-                throw new RuntimeException("Failed to create tag description", e);
-            }
-        }
-
-        @Override
-        public String toString() {
-            return title;
-        }
-    }
-
-    @Override
-    public void onCreate(Bundle savedState) {
-        super.onCreate(savedState);
-        final ArrayAdapter<TagDescription> adapter = new ArrayAdapter<TagDescription>(
-            this, android.R.layout.simple_list_item_1, android.R.id.text1);
-        adapter.add(
-            new TagDescription("Broadcast NFC Text Tag", MockNdefMessages.ENGLISH_PLAIN_TEXT));
-        adapter.add(new TagDescription(
-            "Broadcast NFC SmartPoster URL & text", MockNdefMessages.SMART_POSTER_URL_AND_TEXT));
-        adapter.add(new TagDescription(
-            "Broadcast NFC SmartPoster URL", MockNdefMessages.SMART_POSTER_URL_NO_TEXT));
-        setListAdapter(adapter);
-        mAdapter = adapter;
-    }
-
-    @Override
-    public void onListItemClick(ListView l, View v, int position, long id) {
-        final TagDescription description = mAdapter.getItem(position);
-        final Intent intent = new Intent(NfcAdapter.ACTION_TAG_DISCOVERED);
-        intent.putExtra(NfcAdapter.EXTRA_NDEF_MESSAGES, description.msgs);
-        startActivity(intent);
-    }
-}
diff --git a/samples/NFCDemo/src/com/example/android/nfc/simulator/MockNdefMessages.java b/samples/NFCDemo/src/com/example/android/nfc/simulator/MockNdefMessages.java
deleted file mode 100644
index 52a122f..0000000
--- a/samples/NFCDemo/src/com/example/android/nfc/simulator/MockNdefMessages.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * 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 com.example.android.nfc.simulator;
-
-/**
- * This class provides a list of fake NFC Ndef format Tags.
- */
-public class MockNdefMessages {
-
-    /**
-     * A Smart Poster containing a URL and no text.
-     */
-    public static final byte[] SMART_POSTER_URL_NO_TEXT =
-        new byte[] {(byte) 0xd1, (byte) 0x02, (byte) 0x0f, (byte) 0x53, (byte) 0x70, (byte) 0xd1,
-            (byte) 0x01, (byte) 0x0b, (byte) 0x55, (byte) 0x01, (byte) 0x67, (byte) 0x6f,
-            (byte) 0x6f, (byte) 0x67, (byte) 0x6c, (byte) 0x65, (byte) 0x2e, (byte) 0x63,
-            (byte) 0x6f, (byte) 0x6d};
-
-    /**
-     * A plain text tag in english.
-     */
-    public static final byte[] ENGLISH_PLAIN_TEXT =
-        new byte[] {(byte) 0xd1, (byte) 0x01, (byte) 0x1c, (byte) 0x54, (byte) 0x02, (byte) 0x65,
-            (byte) 0x6e, (byte) 0x53, (byte) 0x6f, (byte) 0x6d, (byte) 0x65, (byte) 0x20,
-            (byte) 0x72, (byte) 0x61, (byte) 0x6e, (byte) 0x64, (byte) 0x6f, (byte) 0x6d,
-            (byte) 0x20, (byte) 0x65, (byte) 0x6e, (byte) 0x67, (byte) 0x6c, (byte) 0x69,
-            (byte) 0x73, (byte) 0x68, (byte) 0x20, (byte) 0x74, (byte) 0x65, (byte) 0x78,
-            (byte) 0x74, (byte) 0x2e};
-
-    /**
-     * Smart Poster containing a URL and Text.
-     */
-    public static final byte[] SMART_POSTER_URL_AND_TEXT =
-        new byte[] {(byte) 0xd1, (byte) 0x02, (byte) 0x1c, (byte) 0x53, (byte) 0x70, (byte) 0x91,
-            (byte) 0x01, (byte) 0x09, (byte) 0x54, (byte) 0x02, (byte) 0x65, (byte) 0x6e,
-            (byte) 0x47, (byte) 0x6f, (byte) 0x6f, (byte) 0x67, (byte) 0x6c, (byte) 0x65,
-            (byte) 0x51, (byte) 0x01, (byte) 0x0b, (byte) 0x55, (byte) 0x01, (byte) 0x67,
-            (byte) 0x6f, (byte) 0x6f, (byte) 0x67, (byte) 0x6c, (byte) 0x65, (byte) 0x2e,
-            (byte) 0x63, (byte) 0x6f, (byte) 0x6d};
-
-    /**
-     * All the mock Ndef tags.
-     */
-    public static final byte[][] ALL_MOCK_MESSAGES =
-        new byte[][] {SMART_POSTER_URL_NO_TEXT, ENGLISH_PLAIN_TEXT, SMART_POSTER_URL_AND_TEXT};
-}