diff --git a/Android.mk b/Android.mk
index 7728b02..93e1c4f 100644
--- a/Android.mk
+++ b/Android.mk
@@ -367,6 +367,7 @@
     -since ./frameworks/base/api/7.xml 7 \
     -since ./frameworks/base/api/8.xml 8 \
     -since ./frameworks/base/api/9.xml 9 \
+    -since ./frameworks/base/api/10.xml 10 \
     -since ./frameworks/base/api/current.xml Honeycomb \
 		-werror -hide 113 \
 		-overview $(LOCAL_PATH)/core/java/overview.html
diff --git a/NOTICE b/NOTICE
index d857ba3..462d5ae 100644
--- a/NOTICE
+++ b/NOTICE
@@ -56,6 +56,16 @@
    =========================================================================
    ==  NOTICE file corresponding to the section 4 d of                    ==
    ==  the Apache License, Version 2.0,                                   ==
+   ==  in this case for Additional Codecs code.                           ==
+   =========================================================================
+
+Additional Codecs
+These files are Copyright 2003-2010 VisualOn, but released under
+the Apache2 License.
+
+   =========================================================================
+   ==  NOTICE file corresponding to the section 4 d of                    ==
+   ==  the Apache License, Version 2.0,                                   ==
    ==  in this case for the TagSoup code.                                 ==
    =========================================================================
 
diff --git a/api/10.xml b/api/10.xml
index 15fcffe..ad54650 100644
--- a/api/10.xml
+++ b/api/10.xml
@@ -29401,6 +29401,23 @@
  visibility="public"
 >
 </method>
+<method name="listenUsingInsecureRfcommWithServiceRecord"
+ return="android.bluetooth.BluetoothServerSocket"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="name" type="java.lang.String">
+</parameter>
+<parameter name="uuid" type="java.util.UUID">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
 <method name="listenUsingRfcommWithServiceRecord"
  return="android.bluetooth.BluetoothServerSocket"
  abstract="false"
@@ -30587,6 +30604,21 @@
 >
 <implements name="android.os.Parcelable">
 </implements>
+<method name="createInsecureRfcommSocketToServiceRecord"
+ return="android.bluetooth.BluetoothSocket"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="uuid" type="java.util.UUID">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
 <method name="createRfcommSocketToServiceRecord"
  return="android.bluetooth.BluetoothSocket"
  abstract="false"
@@ -35673,6 +35705,17 @@
  visibility="public"
 >
 </field>
+<field name="NFC_SERVICE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;nfc&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="NOTIFICATION_SERVICE"
  type="java.lang.String"
  transient="false"
@@ -59851,6 +59894,16 @@
  visibility="public"
 >
 </field>
+<field name="inPreferQualityOverSpeed"
+ type="boolean"
+ transient="false"
+ volatile="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="inPreferredConfig"
  type="android.graphics.Bitmap.Config"
  transient="false"
@@ -59963,6 +60016,146 @@
 >
 </field>
 </class>
+<class name="BitmapRegionDecoder"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="decodeRegion"
+ return="android.graphics.Bitmap"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="rect" type="android.graphics.Rect">
+</parameter>
+<parameter name="options" type="android.graphics.BitmapFactory.Options">
+</parameter>
+</method>
+<method name="getHeight"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getWidth"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="isRecycled"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="newInstance"
+ return="android.graphics.BitmapRegionDecoder"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="data" type="byte[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+<parameter name="length" type="int">
+</parameter>
+<parameter name="isShareable" type="boolean">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="newInstance"
+ return="android.graphics.BitmapRegionDecoder"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="fd" type="java.io.FileDescriptor">
+</parameter>
+<parameter name="isShareable" type="boolean">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="newInstance"
+ return="android.graphics.BitmapRegionDecoder"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="is" type="java.io.InputStream">
+</parameter>
+<parameter name="isShareable" type="boolean">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="newInstance"
+ return="android.graphics.BitmapRegionDecoder"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pathName" type="java.lang.String">
+</parameter>
+<parameter name="isShareable" type="boolean">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="recycle"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+</class>
 <class name="BitmapShader"
  extends="android.graphics.Shader"
  abstract="false"
@@ -85926,6 +86119,385 @@
 </parameter>
 </method>
 </interface>
+<class name="MediaMetadataRetriever"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="MediaMetadataRetriever"
+ type="android.media.MediaMetadataRetriever"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</constructor>
+<method name="extractMetadata"
+ return="java.lang.String"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="keyCode" type="int">
+</parameter>
+</method>
+<method name="getEmbeddedPicture"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getFrameAtTime"
+ return="android.graphics.Bitmap"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="timeUs" type="long">
+</parameter>
+<parameter name="option" type="int">
+</parameter>
+</method>
+<method name="getFrameAtTime"
+ return="android.graphics.Bitmap"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="timeUs" type="long">
+</parameter>
+</method>
+<method name="getFrameAtTime"
+ return="android.graphics.Bitmap"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="release"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="setDataSource"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="path" type="java.lang.String">
+</parameter>
+<exception name="IllegalArgumentException" type="java.lang.IllegalArgumentException">
+</exception>
+</method>
+<method name="setDataSource"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="fd" type="java.io.FileDescriptor">
+</parameter>
+<parameter name="offset" type="long">
+</parameter>
+<parameter name="length" type="long">
+</parameter>
+<exception name="IllegalArgumentException" type="java.lang.IllegalArgumentException">
+</exception>
+</method>
+<method name="setDataSource"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="fd" type="java.io.FileDescriptor">
+</parameter>
+<exception name="IllegalArgumentException" type="java.lang.IllegalArgumentException">
+</exception>
+</method>
+<method name="setDataSource"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="context" type="android.content.Context">
+</parameter>
+<parameter name="uri" type="android.net.Uri">
+</parameter>
+<exception name="IllegalArgumentException" type="java.lang.IllegalArgumentException">
+</exception>
+<exception name="SecurityException" type="java.lang.SecurityException">
+</exception>
+</method>
+<field name="METADATA_KEY_ALBUM"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="METADATA_KEY_ALBUMARTIST"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="13"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="METADATA_KEY_ARTIST"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="METADATA_KEY_AUTHOR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="METADATA_KEY_CD_TRACK_NUMBER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="METADATA_KEY_COMPILATION"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="15"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="METADATA_KEY_COMPOSER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="METADATA_KEY_DATE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="METADATA_KEY_DISC_NUMBER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="14"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="METADATA_KEY_DURATION"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="9"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="METADATA_KEY_GENRE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="6"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="METADATA_KEY_MIMETYPE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="METADATA_KEY_NUM_TRACKS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="10"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="METADATA_KEY_TITLE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="7"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="METADATA_KEY_WRITER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="11"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="METADATA_KEY_YEAR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="8"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="OPTION_CLOSEST"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="OPTION_CLOSEST_SYNC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="OPTION_NEXT_SYNC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="OPTION_PREVIOUS_SYNC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
 <class name="MediaPlayer"
  extends="java.lang.Object"
  abstract="false"
@@ -87195,6 +87767,17 @@
  deprecated="not deprecated"
  visibility="public"
 >
+<field name="AAC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="AMR_NB"
  type="int"
  transient="false"
@@ -87206,6 +87789,17 @@
  visibility="public"
 >
 </field>
+<field name="AMR_WB"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="DEFAULT"
  type="int"
  transient="false"
@@ -87362,6 +87956,28 @@
  deprecated="not deprecated"
  visibility="public"
 >
+<field name="AMR_NB"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AMR_WB"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="DEFAULT"
  type="int"
  transient="false"
@@ -100173,6 +100789,66 @@
  deprecated="not deprecated"
  visibility="public"
 >
+<method name="disableForegroundDispatch"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="activity" type="android.app.Activity">
+</parameter>
+</method>
+<method name="disableForegroundNdefPush"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="activity" type="android.app.Activity">
+</parameter>
+</method>
+<method name="enableForegroundDispatch"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="activity" type="android.app.Activity">
+</parameter>
+<parameter name="intent" type="android.app.PendingIntent">
+</parameter>
+<parameter name="filters" type="android.content.IntentFilter[]">
+</parameter>
+<parameter name="techLists" type="java.lang.String[][]">
+</parameter>
+</method>
+<method name="enableForegroundNdefPush"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="activity" type="android.app.Activity">
+</parameter>
+<parameter name="msg" type="android.nfc.NdefMessage">
+</parameter>
+</method>
 <method name="getDefaultAdapter"
  return="android.nfc.NfcAdapter"
  abstract="false"
@@ -100183,6 +100859,19 @@
  deprecated="not deprecated"
  visibility="public"
 >
+<parameter name="context" type="android.content.Context">
+</parameter>
+</method>
+<method name="getDefaultAdapter"
+ return="android.nfc.NfcAdapter"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="deprecated"
+ visibility="public"
+>
 </method>
 <method name="isEnabled"
  return="boolean"
@@ -100195,6 +100884,17 @@
  visibility="public"
 >
 </method>
+<field name="ACTION_NDEF_DISCOVERED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.nfc.action.NDEF_DISCOVERED&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="ACTION_TAG_DISCOVERED"
  type="java.lang.String"
  transient="false"
@@ -100206,6 +100906,17 @@
  visibility="public"
 >
 </field>
+<field name="ACTION_TECHNOLOGY_DISCOVERED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.nfc.action.TECH_DISCOVERED&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="EXTRA_ID"
  type="java.lang.String"
  transient="false"
@@ -100228,7 +100939,1327 @@
  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="NfcManager"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="getDefaultAdapter"
+ return="android.nfc.NfcAdapter"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</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="techList" type="int[]">
+</parameter>
+<parameter name="techListExtras" type="android.os.Bundle[]">
+</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="getId"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getTechList"
+ 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>
+</class>
+<class name="TagLostException"
+ extends="java.io.IOException"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="TagLostException"
+ type="android.nfc.TagLostException"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</constructor>
+<constructor name="TagLostException"
+ type="android.nfc.TagLostException"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="message" type="java.lang.String">
+</parameter>
+</constructor>
+</class>
+</package>
+<package name="android.nfc.tech"
+>
+<class name="BasicTagTechnology"
+ extends="java.lang.Object"
+ abstract="true"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility=""
+>
+<implements name="android.nfc.tech.TagTechnology">
+</implements>
+<method name="close"
+ 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="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="isConnected"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="reconnect"
+ 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>
+</class>
+<class name="IsoDep"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="get"
+ return="android.nfc.tech.IsoDep"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getHiLayerResponse"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getHistoricalBytes"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="setTimeout"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="timeout" type="int">
+</parameter>
+</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="MifareClassic"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="authenticateSectorWithKeyA"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="sectorIndex" type="int">
+</parameter>
+<parameter name="key" type="byte[]">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="authenticateSectorWithKeyB"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="sectorIndex" type="int">
+</parameter>
+<parameter name="key" type="byte[]">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="blockToSector"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="blockIndex" type="int">
+</parameter>
+</method>
+<method name="decrement"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="blockIndex" type="int">
+</parameter>
+<parameter name="value" type="int">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="get"
+ return="android.nfc.tech.MifareClassic"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getBlockCount"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getBlockCountInSector"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="sectorIndex" type="int">
+</parameter>
+</method>
+<method name="getSectorCount"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getSize"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getType"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="increment"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="blockIndex" type="int">
+</parameter>
+<parameter name="value" type="int">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="readBlock"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="blockIndex" type="int">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="restore"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="blockIndex" type="int">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="sectorToBlock"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="sectorIndex" type="int">
+</parameter>
+</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>
+<method name="transfer"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="blockIndex" type="int">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="writeBlock"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="blockIndex" type="int">
+</parameter>
+<parameter name="data" type="byte[]">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<field name="BLOCK_SIZE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEY_DEFAULT"
+ type="byte[]"
+ transient="false"
+ volatile="false"
+ value="null"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEY_MIFARE_APPLICATION_DIRECTORY"
+ type="byte[]"
+ transient="false"
+ volatile="false"
+ value="null"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEY_NFC_FORUM"
+ type="byte[]"
+ transient="false"
+ volatile="false"
+ value="null"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SIZE_1K"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1024"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SIZE_2K"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2048"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SIZE_4K"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4096"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SIZE_MINI"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="320"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_CLASSIC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_PLUS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_PRO"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_UNKNOWN"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="-1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="MifareUltralight"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="get"
+ return="android.nfc.tech.MifareUltralight"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getType"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="readPages"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pageOffset" type="int">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</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>
+<method name="writePage"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pageOffset" type="int">
+</parameter>
+<parameter name="data" type="byte[]">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<field name="PAGE_SIZE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_ULTRALIGHT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_ULTRALIGHT_C"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_UNKNOWN"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="-1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="Ndef"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="canMakeReadonly"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="get"
+ return="android.nfc.tech.Ndef"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getCachedNdefMessage"
+ return="android.nfc.NdefMessage"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getMaxSize"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getNdefMessage"
+ 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="getType"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="isWritable"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="makeReadonly"
+ return="boolean"
+ 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="writeNdefMessage"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="msg" type="android.nfc.NdefMessage">
+</parameter>
+<exception name="FormatException" type="android.nfc.FormatException">
+</exception>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<field name="MIFARE_CLASSIC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="101"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NFC_FORUM_TYPE_1"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NFC_FORUM_TYPE_2"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NFC_FORUM_TYPE_3"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NFC_FORUM_TYPE_4"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="OTHER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="-1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="NdefFormatable"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="format"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="firstMessage" type="android.nfc.NdefMessage">
+</parameter>
+<exception name="FormatException" type="android.nfc.FormatException">
+</exception>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="get"
+ return="android.nfc.tech.NdefFormatable"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+</class>
+<class name="NfcA"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="get"
+ return="android.nfc.tech.NfcA"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getAtqa"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getSak"
+ return="short"
+ 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="NfcB"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="get"
+ return="android.nfc.tech.NfcB"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getApplicationData"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getProtocolInfo"
+ return="byte[]"
+ 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="NfcF"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="get"
+ return="android.nfc.tech.NfcF"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getManufacturer"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getSystemCode"
+ return="byte[]"
+ 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="NfcV"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="get"
+ return="android.nfc.tech.NfcV"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getDsfId"
+ return="byte"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getResponseFlags"
+ return="byte"
+ 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>
+<interface name="TagTechnology"
+ abstract="true"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="java.io.Closeable">
+</implements>
+<method name="close"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="connect"
+ return="void"
+ abstract="true"
+ 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="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="reconnect"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+</interface>
 </package>
 <package name="android.opengl"
 >
@@ -120245,6 +122276,17 @@
  visibility="public"
 >
 </field>
+<field name="GINGERBREAD_MR1"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="10"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 </class>
 <class name="Bundle"
  extends="java.lang.Object"
@@ -147050,6 +149092,92 @@
 >
 </field>
 </class>
+<class name="RecognizerResultsIntent"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<field name="ACTION_VOICE_SEARCH_RESULTS"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.speech.action.VOICE_SEARCH_RESULTS&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EXTRA_VOICE_SEARCH_RESULT_HTML"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.speech.extras.VOICE_SEARCH_RESULT_HTML&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EXTRA_VOICE_SEARCH_RESULT_HTML_BASE_URLS"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.speech.extras.VOICE_SEARCH_RESULT_HTML_BASE_URLS&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EXTRA_VOICE_SEARCH_RESULT_HTTP_HEADERS"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.speech.extras.EXTRA_VOICE_SEARCH_RESULT_HTTP_HEADERS&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EXTRA_VOICE_SEARCH_RESULT_STRINGS"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.speech.extras.VOICE_SEARCH_RESULT_STRINGS&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EXTRA_VOICE_SEARCH_RESULT_URLS"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.speech.extras.VOICE_SEARCH_RESULT_URLS&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="URI_SCHEME_INLINE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;inline&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
 <class name="SpeechRecognizer"
  extends="java.lang.Object"
  abstract="false"
diff --git a/api/11.xml b/api/11.xml
index 6a672d1..16984b5 100644
--- a/api/11.xml
+++ b/api/11.xml
@@ -1885,6 +1885,28 @@
  visibility="public"
 >
 </field>
+<field name="actionMenuTextAppearance"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16843616"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="actionMenuTextColor"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16843617"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="actionModeBackground"
  type="int"
  transient="false"
@@ -11809,6 +11831,28 @@
  visibility="public"
 >
 </field>
+<field name="dialog_holo_dark_frame"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="17301682"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="dialog_holo_light_frame"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="17301683"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="divider_horizontal_bright"
  type="int"
  transient="false"
@@ -24777,6 +24821,28 @@
  visibility="public"
 >
 </method>
+<method name="getLauncherLargeIconDensity"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getLauncherLargeIconSize"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getMemoryClass"
  return="int"
  abstract="false"
@@ -26563,6 +26629,39 @@
 <parameter name="viewSpacingBottom" type="int">
 </parameter>
 </method>
+<field name="THEME_HOLO_DARK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="THEME_HOLO_LIGHT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="THEME_TRADITIONAL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 </class>
 <class name="AlertDialog.Builder"
  extends="java.lang.Object"
@@ -43664,19 +43763,6 @@
 <parameter name="data" type="D">
 </parameter>
 </method>
-<method name="onCancelled"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="deprecated"
- visibility="public"
->
-<parameter name="data" type="D">
-</parameter>
-</method>
 <method name="onLoadInBackground"
  return="D"
  abstract="false"
@@ -55510,6 +55596,17 @@
 <parameter name="context" type="android.content.Context">
 </parameter>
 </constructor>
+<method name="abandon"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="dataToString"
  return="java.lang.String"
  abstract="false"
@@ -55588,6 +55685,17 @@
  visibility="public"
 >
 </method>
+<method name="isAbandoned"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="isReset"
  return="boolean"
  abstract="false"
@@ -55610,6 +55718,17 @@
  visibility="public"
 >
 </method>
+<method name="onAbandon"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="protected"
+>
+</method>
 <method name="onContentChanged"
  return="void"
  abstract="false"
@@ -94202,6 +94321,17 @@
  visibility="public"
 >
 </constructor>
+<method name="getBackDisposition"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getCandidatesHiddenVisibility"
  return="int"
  abstract="false"
@@ -94927,6 +95057,19 @@
 <parameter name="charCode" type="char">
 </parameter>
 </method>
+<method name="setBackDisposition"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="disposition" type="int">
+</parameter>
+</method>
 <method name="setCandidatesView"
  return="void"
  abstract="false"
@@ -95053,6 +95196,39 @@
  visibility="public"
 >
 </method>
+<field name="BACK_DISPOSITION_DEFAULT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="BACK_DISPOSITION_WILL_DISMISS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="BACK_DISPOSITION_WILL_NOT_DISMISS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 </class>
 <class name="InputMethodService.InputMethodImpl"
  extends="android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodImpl"
@@ -118346,6 +118522,66 @@
  deprecated="not deprecated"
  visibility="public"
 >
+<method name="disableForegroundDispatch"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="activity" type="android.app.Activity">
+</parameter>
+</method>
+<method name="disableForegroundNdefPush"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="activity" type="android.app.Activity">
+</parameter>
+</method>
+<method name="enableForegroundDispatch"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="activity" type="android.app.Activity">
+</parameter>
+<parameter name="intent" type="android.app.PendingIntent">
+</parameter>
+<parameter name="filters" type="android.content.IntentFilter[]">
+</parameter>
+<parameter name="techLists" type="java.lang.String[][]">
+</parameter>
+</method>
+<method name="enableForegroundNdefPush"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="activity" type="android.app.Activity">
+</parameter>
+<parameter name="msg" type="android.nfc.NdefMessage">
+</parameter>
+</method>
 <method name="getDefaultAdapter"
  return="android.nfc.NfcAdapter"
  abstract="false"
@@ -118381,6 +118617,17 @@
  visibility="public"
 >
 </method>
+<field name="ACTION_NDEF_DISCOVERED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.nfc.action.NDEF_DISCOVERED&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="ACTION_TAG_DISCOVERED"
  type="java.lang.String"
  transient="false"
@@ -118392,6 +118639,17 @@
  visibility="public"
 >
 </field>
+<field name="ACTION_TECHNOLOGY_DISCOVERED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.nfc.action.TECH_DISCOVERED&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="EXTRA_ID"
  type="java.lang.String"
  transient="false"
@@ -118414,6 +118672,17 @@
  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="NfcManager"
  extends="java.lang.Object"
@@ -118435,6 +118704,1295 @@
 >
 </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="techList" type="int[]">
+</parameter>
+<parameter name="techListExtras" type="android.os.Bundle[]">
+</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="getId"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getTechList"
+ 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>
+</class>
+<class name="TagLostException"
+ extends="java.io.IOException"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="TagLostException"
+ type="android.nfc.TagLostException"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</constructor>
+<constructor name="TagLostException"
+ type="android.nfc.TagLostException"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="message" type="java.lang.String">
+</parameter>
+</constructor>
+</class>
+</package>
+<package name="android.nfc.tech"
+>
+<class name="BasicTagTechnology"
+ extends="java.lang.Object"
+ abstract="true"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility=""
+>
+<implements name="android.nfc.tech.TagTechnology">
+</implements>
+<method name="close"
+ 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="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="isConnected"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="reconnect"
+ 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>
+</class>
+<class name="IsoDep"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="get"
+ return="android.nfc.tech.IsoDep"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getHiLayerResponse"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getHistoricalBytes"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="setTimeout"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="timeout" type="int">
+</parameter>
+</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="MifareClassic"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="authenticateSectorWithKeyA"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="sectorIndex" type="int">
+</parameter>
+<parameter name="key" type="byte[]">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="authenticateSectorWithKeyB"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="sectorIndex" type="int">
+</parameter>
+<parameter name="key" type="byte[]">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="blockToSector"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="blockIndex" type="int">
+</parameter>
+</method>
+<method name="decrement"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="blockIndex" type="int">
+</parameter>
+<parameter name="value" type="int">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="get"
+ return="android.nfc.tech.MifareClassic"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getBlockCount"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getBlockCountInSector"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="sectorIndex" type="int">
+</parameter>
+</method>
+<method name="getSectorCount"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getSize"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getType"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="increment"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="blockIndex" type="int">
+</parameter>
+<parameter name="value" type="int">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="readBlock"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="blockIndex" type="int">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="restore"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="blockIndex" type="int">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="sectorToBlock"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="sectorIndex" type="int">
+</parameter>
+</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>
+<method name="transfer"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="blockIndex" type="int">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="writeBlock"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="blockIndex" type="int">
+</parameter>
+<parameter name="data" type="byte[]">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<field name="BLOCK_SIZE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEY_DEFAULT"
+ type="byte[]"
+ transient="false"
+ volatile="false"
+ value="null"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEY_MIFARE_APPLICATION_DIRECTORY"
+ type="byte[]"
+ transient="false"
+ volatile="false"
+ value="null"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEY_NFC_FORUM"
+ type="byte[]"
+ transient="false"
+ volatile="false"
+ value="null"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SIZE_1K"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1024"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SIZE_2K"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2048"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SIZE_4K"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4096"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SIZE_MINI"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="320"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_CLASSIC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_PLUS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_PRO"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_UNKNOWN"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="-1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="MifareUltralight"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="get"
+ return="android.nfc.tech.MifareUltralight"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getType"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="readPages"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pageOffset" type="int">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</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>
+<method name="writePage"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pageOffset" type="int">
+</parameter>
+<parameter name="data" type="byte[]">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<field name="PAGE_SIZE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_ULTRALIGHT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_ULTRALIGHT_C"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_UNKNOWN"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="-1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="Ndef"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="canMakeReadonly"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="get"
+ return="android.nfc.tech.Ndef"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getCachedNdefMessage"
+ return="android.nfc.NdefMessage"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getMaxSize"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getNdefMessage"
+ 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="getType"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="isWritable"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="makeReadonly"
+ return="boolean"
+ 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="writeNdefMessage"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="msg" type="android.nfc.NdefMessage">
+</parameter>
+<exception name="FormatException" type="android.nfc.FormatException">
+</exception>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<field name="MIFARE_CLASSIC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="101"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NFC_FORUM_TYPE_1"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NFC_FORUM_TYPE_2"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NFC_FORUM_TYPE_3"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NFC_FORUM_TYPE_4"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="OTHER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="-1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="NdefFormatable"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="format"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="firstMessage" type="android.nfc.NdefMessage">
+</parameter>
+<exception name="FormatException" type="android.nfc.FormatException">
+</exception>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="get"
+ return="android.nfc.tech.NdefFormatable"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+</class>
+<class name="NfcA"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="get"
+ return="android.nfc.tech.NfcA"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getAtqa"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getSak"
+ return="short"
+ 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="NfcB"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="get"
+ return="android.nfc.tech.NfcB"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getApplicationData"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getProtocolInfo"
+ return="byte[]"
+ 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="NfcF"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="get"
+ return="android.nfc.tech.NfcF"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getManufacturer"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getSystemCode"
+ return="byte[]"
+ 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="NfcV"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="get"
+ return="android.nfc.tech.NfcV"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getDsfId"
+ return="byte"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getResponseFlags"
+ return="byte"
+ 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>
+<interface name="TagTechnology"
+ abstract="true"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="java.io.Closeable">
+</implements>
+<method name="close"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="connect"
+ return="void"
+ abstract="true"
+ 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="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="reconnect"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+</interface>
 </package>
 <package name="android.opengl"
 >
@@ -225865,6 +227423,16 @@
  visibility="public"
 >
 </field>
+<field name="systemUiVisibility"
+ type="int"
+ transient="false"
+ volatile="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="token"
  type="android.os.IBinder"
  transient="false"
@@ -260439,7 +262007,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="t" type="T">
+<parameter name="arg0" type="T">
 </parameter>
 </method>
 </interface>
diff --git a/api/current.xml b/api/current.xml
index bd59694..16984b5 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -43763,19 +43763,6 @@
 <parameter name="data" type="D">
 </parameter>
 </method>
-<method name="onCancelled"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="deprecated"
- visibility="public"
->
-<parameter name="data" type="D">
-</parameter>
-</method>
 <method name="onLoadInBackground"
  return="D"
  abstract="false"
@@ -55609,6 +55596,17 @@
 <parameter name="context" type="android.content.Context">
 </parameter>
 </constructor>
+<method name="abandon"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="dataToString"
  return="java.lang.String"
  abstract="false"
@@ -55687,6 +55685,17 @@
  visibility="public"
 >
 </method>
+<method name="isAbandoned"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="isReset"
  return="boolean"
  abstract="false"
@@ -55709,6 +55718,17 @@
  visibility="public"
 >
 </method>
+<method name="onAbandon"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="protected"
+>
+</method>
 <method name="onContentChanged"
  return="void"
  abstract="false"
@@ -118502,6 +118522,66 @@
  deprecated="not deprecated"
  visibility="public"
 >
+<method name="disableForegroundDispatch"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="activity" type="android.app.Activity">
+</parameter>
+</method>
+<method name="disableForegroundNdefPush"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="activity" type="android.app.Activity">
+</parameter>
+</method>
+<method name="enableForegroundDispatch"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="activity" type="android.app.Activity">
+</parameter>
+<parameter name="intent" type="android.app.PendingIntent">
+</parameter>
+<parameter name="filters" type="android.content.IntentFilter[]">
+</parameter>
+<parameter name="techLists" type="java.lang.String[][]">
+</parameter>
+</method>
+<method name="enableForegroundNdefPush"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="activity" type="android.app.Activity">
+</parameter>
+<parameter name="msg" type="android.nfc.NdefMessage">
+</parameter>
+</method>
 <method name="getDefaultAdapter"
  return="android.nfc.NfcAdapter"
  abstract="false"
@@ -118537,6 +118617,17 @@
  visibility="public"
 >
 </method>
+<field name="ACTION_NDEF_DISCOVERED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.nfc.action.NDEF_DISCOVERED&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="ACTION_TAG_DISCOVERED"
  type="java.lang.String"
  transient="false"
@@ -118548,6 +118639,17 @@
  visibility="public"
 >
 </field>
+<field name="ACTION_TECHNOLOGY_DISCOVERED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.nfc.action.TECH_DISCOVERED&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="EXTRA_ID"
  type="java.lang.String"
  transient="false"
@@ -118570,6 +118672,17 @@
  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="NfcManager"
  extends="java.lang.Object"
@@ -118591,6 +118704,1295 @@
 >
 </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="techList" type="int[]">
+</parameter>
+<parameter name="techListExtras" type="android.os.Bundle[]">
+</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="getId"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getTechList"
+ 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>
+</class>
+<class name="TagLostException"
+ extends="java.io.IOException"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="TagLostException"
+ type="android.nfc.TagLostException"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</constructor>
+<constructor name="TagLostException"
+ type="android.nfc.TagLostException"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="message" type="java.lang.String">
+</parameter>
+</constructor>
+</class>
+</package>
+<package name="android.nfc.tech"
+>
+<class name="BasicTagTechnology"
+ extends="java.lang.Object"
+ abstract="true"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility=""
+>
+<implements name="android.nfc.tech.TagTechnology">
+</implements>
+<method name="close"
+ 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="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="isConnected"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="reconnect"
+ 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>
+</class>
+<class name="IsoDep"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="get"
+ return="android.nfc.tech.IsoDep"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getHiLayerResponse"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getHistoricalBytes"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="setTimeout"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="timeout" type="int">
+</parameter>
+</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="MifareClassic"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="authenticateSectorWithKeyA"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="sectorIndex" type="int">
+</parameter>
+<parameter name="key" type="byte[]">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="authenticateSectorWithKeyB"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="sectorIndex" type="int">
+</parameter>
+<parameter name="key" type="byte[]">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="blockToSector"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="blockIndex" type="int">
+</parameter>
+</method>
+<method name="decrement"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="blockIndex" type="int">
+</parameter>
+<parameter name="value" type="int">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="get"
+ return="android.nfc.tech.MifareClassic"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getBlockCount"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getBlockCountInSector"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="sectorIndex" type="int">
+</parameter>
+</method>
+<method name="getSectorCount"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getSize"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getType"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="increment"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="blockIndex" type="int">
+</parameter>
+<parameter name="value" type="int">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="readBlock"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="blockIndex" type="int">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="restore"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="blockIndex" type="int">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="sectorToBlock"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="sectorIndex" type="int">
+</parameter>
+</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>
+<method name="transfer"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="blockIndex" type="int">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="writeBlock"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="blockIndex" type="int">
+</parameter>
+<parameter name="data" type="byte[]">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<field name="BLOCK_SIZE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEY_DEFAULT"
+ type="byte[]"
+ transient="false"
+ volatile="false"
+ value="null"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEY_MIFARE_APPLICATION_DIRECTORY"
+ type="byte[]"
+ transient="false"
+ volatile="false"
+ value="null"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEY_NFC_FORUM"
+ type="byte[]"
+ transient="false"
+ volatile="false"
+ value="null"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SIZE_1K"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1024"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SIZE_2K"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2048"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SIZE_4K"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4096"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SIZE_MINI"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="320"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_CLASSIC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_PLUS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_PRO"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_UNKNOWN"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="-1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="MifareUltralight"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="get"
+ return="android.nfc.tech.MifareUltralight"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getType"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="readPages"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pageOffset" type="int">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</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>
+<method name="writePage"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pageOffset" type="int">
+</parameter>
+<parameter name="data" type="byte[]">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<field name="PAGE_SIZE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_ULTRALIGHT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_ULTRALIGHT_C"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_UNKNOWN"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="-1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="Ndef"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="canMakeReadonly"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="get"
+ return="android.nfc.tech.Ndef"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getCachedNdefMessage"
+ return="android.nfc.NdefMessage"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getMaxSize"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getNdefMessage"
+ 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="getType"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="isWritable"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="makeReadonly"
+ return="boolean"
+ 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="writeNdefMessage"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="msg" type="android.nfc.NdefMessage">
+</parameter>
+<exception name="FormatException" type="android.nfc.FormatException">
+</exception>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<field name="MIFARE_CLASSIC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="101"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NFC_FORUM_TYPE_1"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NFC_FORUM_TYPE_2"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NFC_FORUM_TYPE_3"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NFC_FORUM_TYPE_4"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="OTHER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="-1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="NdefFormatable"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="format"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="firstMessage" type="android.nfc.NdefMessage">
+</parameter>
+<exception name="FormatException" type="android.nfc.FormatException">
+</exception>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="get"
+ return="android.nfc.tech.NdefFormatable"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+</class>
+<class name="NfcA"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="get"
+ return="android.nfc.tech.NfcA"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getAtqa"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getSak"
+ return="short"
+ 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="NfcB"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="get"
+ return="android.nfc.tech.NfcB"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getApplicationData"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getProtocolInfo"
+ return="byte[]"
+ 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="NfcF"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="get"
+ return="android.nfc.tech.NfcF"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getManufacturer"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getSystemCode"
+ return="byte[]"
+ 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="NfcV"
+ extends="android.nfc.tech.BasicTagTechnology"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="get"
+ return="android.nfc.tech.NfcV"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="android.nfc.Tag">
+</parameter>
+</method>
+<method name="getDsfId"
+ return="byte"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getResponseFlags"
+ return="byte"
+ 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>
+<interface name="TagTechnology"
+ abstract="true"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="java.io.Closeable">
+</implements>
+<method name="close"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="connect"
+ return="void"
+ abstract="true"
+ 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="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="reconnect"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+</interface>
 </package>
 <package name="android.opengl"
 >
diff --git a/core/java/android/animation/LayoutTransition.java b/core/java/android/animation/LayoutTransition.java
index f13d940..d3e10f3 100644
--- a/core/java/android/animation/LayoutTransition.java
+++ b/core/java/android/animation/LayoutTransition.java
@@ -166,6 +166,7 @@
      * we cache all of the current animations in this map for possible cancellation on
      * another layout event.
      */
+    private final HashMap<View, Animator> pendingAnimations = new HashMap<View, Animator>();
     private final HashMap<View, Animator> currentChangingAnimations = new HashMap<View, Animator>();
     private final HashMap<View, Animator> currentVisibilityAnimations =
             new HashMap<View, Animator>();
@@ -542,6 +543,8 @@
 
         // reset the inter-animation delay, in case we use it later
         staggerDelay = 0;
+        final long duration = (changeReason == APPEARING) ?
+                mChangingAppearingDuration : mChangingDisappearingDuration;
 
         final ViewTreeObserver observer = parent.getViewTreeObserver(); // used for later cleanup
         if (!observer.isAlive()) {
@@ -556,12 +559,6 @@
             // only animate the views not being added or removed
             if (child != newView) {
 
-                // If there's an animation running on this view already, cancel it
-                Animator currentAnimation = currentChangingAnimations.get(child);
-                if (currentAnimation != null) {
-                    currentAnimation.cancel();
-                    currentChangingAnimations.remove(child);
-                }
 
                 // Make a copy of the appropriate animation
                 final Animator anim = baseAnimator.clone();
@@ -573,6 +570,30 @@
                 // its target object
                 anim.setupStartValues();
 
+                // If there's an animation running on this view already, cancel it
+                Animator currentAnimation = pendingAnimations.get(child);
+                if (currentAnimation != null) {
+                    currentAnimation.cancel();
+                    pendingAnimations.remove(child);
+                }
+                // Cache the animation in case we need to cancel it later
+                pendingAnimations.put(child, anim);
+
+                // For the animations which don't get started, we have to have a means of
+                // removing them from the cache, lest we leak them and their target objects.
+                // We run an animator for the default duration+100 (an arbitrary time, but one
+                // which should far surpass the delay between setting them up here and
+                // handling layout events which start them.
+                ValueAnimator pendingAnimRemover = ValueAnimator.ofFloat(0f, 1f).
+                        setDuration(duration+100);
+                pendingAnimRemover.addListener(new AnimatorListenerAdapter() {
+                    @Override
+                    public void onAnimationEnd(Animator animation) {
+                        pendingAnimations.remove(child);
+                    }
+                });
+                pendingAnimRemover.start();
+
                 // Add a listener to track layout changes on this view. If we don't get a callback,
                 // then there's nothing to animate.
                 final View.OnLayoutChangeListener listener = new View.OnLayoutChangeListener() {
@@ -583,19 +604,25 @@
                         anim.setupEndValues();
 
                         long startDelay;
-                        long duration;
                         if (changeReason == APPEARING) {
                             startDelay = mChangingAppearingDelay + staggerDelay;
                             staggerDelay += mChangingAppearingStagger;
-                            duration = mChangingAppearingDuration;
                         } else {
                             startDelay = mChangingDisappearingDelay + staggerDelay;
                             staggerDelay += mChangingDisappearingStagger;
-                            duration = mChangingDisappearingDuration;
                         }
                         anim.setStartDelay(startDelay);
                         anim.setDuration(duration);
 
+                        Animator prevAnimation = currentChangingAnimations.get(child);
+                        if (prevAnimation != null) {
+                            prevAnimation.cancel();
+                            currentChangingAnimations.remove(child);
+                        }
+                        Animator pendingAnimation = pendingAnimations.get(child);
+                        if (pendingAnimation != null) {
+                            pendingAnimations.remove(child);
+                        }
                         // Cache the animation in case we need to cancel it later
                         currentChangingAnimations.put(child, anim);
 
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 3c45080..8b6b819 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -655,7 +655,7 @@
     boolean mCalled;
     boolean mCheckedForLoaderManager;
     boolean mLoadersStarted;
-    private boolean mResumed;
+    /*package*/ boolean mResumed;
     private boolean mStopped;
     boolean mFinished;
     boolean mStartedActivity;
@@ -4363,9 +4363,8 @@
         
         mLastNonConfigurationInstances = null;
         
-        // First call onResume() -before- setting mResumed, so we don't
-        // send out any status bar / menu notifications the client makes.
         mCalled = false;
+        // mResumed is set by the instrumentation
         mInstrumentation.callActivityOnResume(this);
         if (!mCalled) {
             throw new SuperNotCalledException(
@@ -4374,7 +4373,6 @@
         }
 
         // Now really resume, and install the current status bar and menu.
-        mResumed = true;
         mCalled = false;
         
         mFragments.dispatchResume();
@@ -4399,6 +4397,7 @@
                     "Activity " + mComponent.toShortString() +
                     " did not call through to super.onPause()");
         }
+        mResumed = false;
     }
     
     final void performUserLeaving() {
@@ -4461,7 +4460,10 @@
         }
     }
     
-    final boolean isResumed() {
+    /**
+     * @hide
+     */
+    public final boolean isResumed() {
         return mResumed;
     }
 
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 960b943..8f9a76b 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -193,6 +193,9 @@
     final HashMap<IBinder, ProviderClientRecord> mLocalProviders
         = new HashMap<IBinder, ProviderClientRecord>();
 
+    final HashMap<Activity, ArrayList<OnActivityPausedListener>> mOnPauseListeners
+        = new HashMap<Activity, ArrayList<OnActivityPausedListener>>();
+
     final GcIdler mGcIdler = new GcIdler();
     boolean mGcIdlerScheduled = false;
 
@@ -1514,6 +1517,28 @@
         }
     }
 
+    public void registerOnActivityPausedListener(Activity activity,
+            OnActivityPausedListener listener) {
+        synchronized (mOnPauseListeners) {
+            ArrayList<OnActivityPausedListener> list = mOnPauseListeners.get(activity);
+            if (list == null) {
+                list = new ArrayList<OnActivityPausedListener>();
+                mOnPauseListeners.put(activity, list);
+            }
+            list.add(listener);
+        }
+    }
+
+    public void unregisterOnActivityPausedListener(Activity activity,
+            OnActivityPausedListener listener) {
+        synchronized (mOnPauseListeners) {
+            ArrayList<OnActivityPausedListener> list = mOnPauseListeners.get(activity);
+            if (list != null) {
+                list.remove(listener);
+            }
+        }
+    }
+
     public final ActivityInfo resolveActivityInfo(Intent intent) {
         ActivityInfo aInfo = intent.resolveActivityInfo(
                 mInitialApplication.getPackageManager(), PackageManager.GET_SHARED_LIBRARY_FILES);
@@ -2454,6 +2479,17 @@
             }
         }
         r.paused = true;
+
+        // Notify any outstanding on paused listeners
+        ArrayList<OnActivityPausedListener> listeners;
+        synchronized (mOnPauseListeners) {
+            listeners = mOnPauseListeners.remove(r.activity);
+        }
+        int size = (listeners != null ? listeners.size() : 0);
+        for (int i = 0; i < size; i++) {
+            listeners.get(i).onPaused(r.activity);
+        }
+
         return state;
     }
 
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java
index ad811d8..cd278be 100644
--- a/core/java/android/app/Instrumentation.java
+++ b/core/java/android/app/Instrumentation.java
@@ -1149,6 +1149,7 @@
      * @param activity The activity being resumed.
      */
     public void callActivityOnResume(Activity activity) {
+        activity.mResumed = true;
         activity.onResume();
         
         if (mActivityMonitors != null) {
diff --git a/core/java/android/app/LoaderManager.java b/core/java/android/app/LoaderManager.java
index 431be05..1ee386d 100644
--- a/core/java/android/app/LoaderManager.java
+++ b/core/java/android/app/LoaderManager.java
@@ -587,6 +587,7 @@
                     if (DEBUG) Log.v(TAG, "  Removing last inactive loader: " + info);
                     inactive.mDeliveredData = false;
                     inactive.destroy();
+                    info.mLoader.abandon();
                     mInactiveLoaders.put(id, info);
                 } else {
                     // We already have an inactive loader for this ID that we are
@@ -617,6 +618,7 @@
                 // Keep track of the previous instance of this loader so we can destroy
                 // it when the new one completes.
                 if (DEBUG) Log.v(TAG, "  Making last loader inactive: " + info);
+                info.mLoader.abandon();
                 mInactiveLoaders.put(id, info);
             }
         }
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index de84c56..5049e19 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -927,9 +927,8 @@
             if (mContentInfo != null) {
                 contentView.setTextViewText(R.id.info, mContentInfo);
             } else if (mNumber > 0) {
-                if (mNumber > 100) {
-                    contentView.setTextViewText(R.id.info, mContext.getString(
-                                R.string.status_bar_notification_info_overflow));
+                if (mNumber > 999) {
+                    contentView.setTextViewText(R.id.info, "999+");
                 } else {
                     NumberFormat f = NumberFormat.getIntegerInstance();
                     contentView.setTextViewText(R.id.info, f.format(mNumber));
diff --git a/core/java/android/app/OnActivityPausedListener.java b/core/java/android/app/OnActivityPausedListener.java
new file mode 100644
index 0000000..379f133
--- /dev/null
+++ b/core/java/android/app/OnActivityPausedListener.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2011 Google Inc.
+ *
+ * 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.app;
+
+/**
+ * A listener that is called when an Activity is paused. Since this is tracked client side
+ * it should not be trusted to represent the exact current state, but can be used as a hint
+ * for cleanup.
+ *
+ * @hide
+ */
+public interface OnActivityPausedListener {
+    /**
+     * Called when the given activity is paused.
+     */
+    public void onPaused(Activity activity);
+}
diff --git a/core/java/android/content/AsyncTaskLoader.java b/core/java/android/content/AsyncTaskLoader.java
index a7dd5fb..383cb6b 100644
--- a/core/java/android/content/AsyncTaskLoader.java
+++ b/core/java/android/content/AsyncTaskLoader.java
@@ -169,11 +169,6 @@
      * to properly dispose of the result.
      */
     public void onCanceled(D data) {
-        onCancelled(data);
-    }
-
-    @Deprecated
-    public void onCancelled(D data) {
     }
 
     void executePendingTask() {
@@ -214,10 +209,15 @@
             if (DEBUG) Slog.v(TAG, "Load complete of old task, trying to cancel");
             dispatchOnCancelled(task, data);
         } else {
-            mLastLoadCompleteTime = SystemClock.uptimeMillis();
-            mTask = null;
-            if (DEBUG) Slog.v(TAG, "Delivering result");
-            deliverResult(data);
+            if (isAbandoned()) {
+                // This cursor has been abandoned; just cancel the new data.
+                onCanceled(data);
+            } else {
+                mLastLoadCompleteTime = SystemClock.uptimeMillis();
+                mTask = null;
+                if (DEBUG) Slog.v(TAG, "Delivering result");
+                deliverResult(data);
+            }
         }
     }
 
diff --git a/core/java/android/content/Loader.java b/core/java/android/content/Loader.java
index d63fe69..a9d6117 100644
--- a/core/java/android/content/Loader.java
+++ b/core/java/android/content/Loader.java
@@ -45,6 +45,7 @@
     OnLoadCompleteListener<D> mListener;
     Context mContext;
     boolean mStarted = false;
+    boolean mAbandoned = false;
     boolean mReset = true;
     boolean mContentChanged = false;
 
@@ -151,6 +152,15 @@
     }
 
     /**
+     * Return whether this loader has been abandoned.  In this state, the
+     * loader <em>must not</em> report any new data, and <em>must</em> keep
+     * its last reported data valid until it is finally reset.
+     */
+    public boolean isAbandoned() {
+        return mAbandoned;
+    }
+
+    /**
      * Return whether this load has been reset.  That is, either the loader
      * has not yet been started for the first time, or its {@link #reset()}
      * has been called.
@@ -177,6 +187,7 @@
     public final void startLoading() {
         mStarted = true;
         mReset = false;
+        mAbandoned = false;
         onStartLoading();
     }
 
@@ -236,6 +247,28 @@
     }
 
     /**
+     * Tell the Loader that it is being abandoned.  This is called prior
+     * to {@link #reset} to have it retain its current data but not report
+     * any new data.
+     */
+    public void abandon() {
+        mAbandoned = true;
+        onAbandon();
+    }
+    
+    /**
+     * Subclasses implement this to take care of being abandoned.  This is
+     * an optional intermediate state prior to {@link #onReset()} -- it means that
+     * the client is no longer interested in any new data from the loader,
+     * so the loader must not report any further updates.  However, the
+     * loader <em>must</em> keep its last reported data valid until the final
+     * {@link #onReset()} happens.  You can retrieve the current abandoned
+     * state with {@link #isAbandoned}.
+     */
+    protected void onAbandon() {        
+    }
+    
+    /**
      * Resets the state of the Loader.  The Loader should at this point free
      * all of its resources, since it may never be called again; however, its
      * {@link #startLoading()} may later be called at which point it must be
@@ -251,6 +284,7 @@
         onReset();
         mReset = true;
         mStarted = false;
+        mAbandoned = false;
         mContentChanged = false;
     }
 
@@ -327,6 +361,7 @@
                 writer.print(" mListener="); writer.println(mListener);
         writer.print(prefix); writer.print("mStarted="); writer.print(mStarted);
                 writer.print(" mContentChanged="); writer.print(mContentChanged);
+                writer.print(" mAbandoned="); writer.print(mAbandoned);
                 writer.print(" mReset="); writer.println(mReset);
     }
 }
\ No newline at end of file
diff --git a/core/java/android/content/res/CompatibilityInfo.java b/core/java/android/content/res/CompatibilityInfo.java
index 6baf1c2..e403ac2 100644
--- a/core/java/android/content/res/CompatibilityInfo.java
+++ b/core/java/android/content/res/CompatibilityInfo.java
@@ -141,10 +141,16 @@
         appFlags = appInfo.flags;
         
         if ((appInfo.flags & ApplicationInfo.FLAG_SUPPORTS_LARGE_SCREENS) != 0) {
-            mCompatibilityFlags |= LARGE_SCREENS | CONFIGURED_LARGE_SCREENS;
+            // Saying you support large screens also implies you support xlarge
+            // screens; there is no compatibility mode for a large app on an
+            // xlarge screen.
+            mCompatibilityFlags |= LARGE_SCREENS | CONFIGURED_LARGE_SCREENS
+                    | XLARGE_SCREENS | CONFIGURED_XLARGE_SCREENS
+                    | EXPANDABLE | CONFIGURED_EXPANDABLE;
         }
         if ((appInfo.flags & ApplicationInfo.FLAG_SUPPORTS_XLARGE_SCREENS) != 0) {
-            mCompatibilityFlags |= XLARGE_SCREENS | CONFIGURED_XLARGE_SCREENS;
+            mCompatibilityFlags |= XLARGE_SCREENS | CONFIGURED_XLARGE_SCREENS
+                    | EXPANDABLE | CONFIGURED_EXPANDABLE;
         }
         if ((appInfo.flags & ApplicationInfo.FLAG_RESIZEABLE_FOR_SCREENS) != 0) {
             mCompatibilityFlags |= EXPANDABLE | CONFIGURED_EXPANDABLE;
diff --git a/core/java/android/hardware/SensorManager.java b/core/java/android/hardware/SensorManager.java
index 4a75514..f079e42 100644
--- a/core/java/android/hardware/SensorManager.java
+++ b/core/java/android/hardware/SensorManager.java
@@ -25,6 +25,7 @@
 import android.util.Log;
 import android.util.SparseArray;
 import android.util.SparseBooleanArray;
+import android.util.SparseIntArray;
 import android.view.IRotationWatcher;
 import android.view.IWindowManager;
 import android.view.Surface;
@@ -489,6 +490,8 @@
         private final Handler mHandler;
         private SensorEvent mValuesPool;
         public SparseBooleanArray mSensors = new SparseBooleanArray();
+        public SparseBooleanArray mFirstEvent = new SparseBooleanArray();
+        public SparseIntArray mSensorAccuracies = new SparseIntArray();
 
         ListenerDelegate(SensorEventListener listener, Sensor sensor, Handler handler) {
             mSensorEventListener = listener;
@@ -499,10 +502,30 @@
             mHandler = new Handler(looper) {
                 @Override
                 public void handleMessage(Message msg) {
-                    SensorEvent t = (SensorEvent)msg.obj;
-                    if (t.accuracy >= 0) {
-                        mSensorEventListener.onAccuracyChanged(t.sensor, t.accuracy);
+                    final SensorEvent t = (SensorEvent)msg.obj;
+                    final int handle = t.sensor.getHandle();
+
+                    switch (t.sensor.getType()) {
+                        // Only report accuracy for sensors that support it.
+                        case Sensor.TYPE_MAGNETIC_FIELD:
+                        case Sensor.TYPE_ORIENTATION:
+                            // call onAccuracyChanged() only if the value changes
+                            final int accuracy = mSensorAccuracies.get(handle);
+                            if ((t.accuracy >= 0) && (accuracy != t.accuracy)) {
+                                mSensorAccuracies.put(handle, t.accuracy);
+                                mSensorEventListener.onAccuracyChanged(t.sensor, t.accuracy);
+                            }
+                            break;
+                        default:
+                            // For other sensors, just report the accuracy once
+                            if (mFirstEvent.get(handle) == false) {
+                                mFirstEvent.put(handle, true);
+                                mSensorEventListener.onAccuracyChanged(
+                                        t.sensor, SENSOR_STATUS_ACCURACY_HIGH);
+                            }
+                            break;
                     }
+
                     mSensorEventListener.onSensorChanged(t);
                     returnToPool(t);
                 }
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java
index a99256f..feb246e 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -1065,7 +1065,7 @@
     public boolean onEvaluateInputViewShown() {
         Configuration config = getResources().getConfiguration();
         return config.keyboard == Configuration.KEYBOARD_NOKEYS
-                || config.hardKeyboardHidden == Configuration.KEYBOARDHIDDEN_YES;
+                || config.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES;
     }
     
     /**
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index 7e809f5..cab8ed2 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -221,6 +221,8 @@
 
     /** {@hide} */
     public static final int TYPE_DUMMY       = 8;
+    /** {@hide} */
+    public static final int TYPE_ETHERNET    = 9;
     /** {@hide} TODO: Need to adjust this for WiMAX. */
     public static final int MAX_RADIO_TYPE   = TYPE_DUMMY;
     /** {@hide} TODO: Need to adjust this for WiMAX. */
diff --git a/core/java/android/nfc/INfcAdapter.aidl b/core/java/android/nfc/INfcAdapter.aidl
index a663fb8..d439a48 100644
--- a/core/java/android/nfc/INfcAdapter.aidl
+++ b/core/java/android/nfc/INfcAdapter.aidl
@@ -16,8 +16,12 @@
 
 package android.nfc;
 
+import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.IntentFilter;
 import android.nfc.NdefMessage;
 import android.nfc.Tag;
+import android.nfc.TechListParcel;
 import android.nfc.ILlcpSocket;
 import android.nfc.ILlcpServiceSocket;
 import android.nfc.ILlcpConnectionlessSocket;
@@ -44,6 +48,11 @@
     NdefMessage localGet();
     void localSet(in NdefMessage message);
     void openTagConnection(in Tag tag);
+    void enableForegroundDispatch(in ComponentName activity, in PendingIntent intent,
+            in IntentFilter[] filters, in TechListParcel techLists);
+    void disableForegroundDispatch(in ComponentName activity);
+    void enableForegroundNdefPush(in ComponentName activity, in NdefMessage msg);
+    void disableForegroundNdefPush(in ComponentName activity);
 
     // Non-public methods
     // TODO: check and complete
diff --git a/core/java/android/nfc/INfcTag.aidl b/core/java/android/nfc/INfcTag.aidl
index 5d222d9..57dc38c 100644
--- a/core/java/android/nfc/INfcTag.aidl
+++ b/core/java/android/nfc/INfcTag.aidl
@@ -17,6 +17,7 @@
 package android.nfc;
 
 import android.nfc.NdefMessage;
+import android.nfc.TransceiveResult;
 
 /**
  * @hide
@@ -30,7 +31,7 @@
     byte[] getUid(int nativeHandle);
     boolean isNdef(int nativeHandle);
     boolean isPresent(int nativeHandle);
-    byte[] transceive(int nativeHandle, in byte[] data, boolean raw);
+    TransceiveResult transceive(int nativeHandle, in byte[] data, boolean raw);
 
     int getLastError(int nativeHandle);
 
@@ -39,4 +40,7 @@
     int ndefMakeReadOnly(int nativeHandle);
     boolean ndefIsWritable(int nativeHandle);
     int formatNdef(int nativeHandle, in byte[] key);
+
+    void setIsoDepTimeout(int timeout);
+    void resetIsoDepTimeout();
 }
diff --git a/core/java/android/nfc/NfcAdapter.java b/core/java/android/nfc/NfcAdapter.java
index 758c8a0..4808032 100644
--- a/core/java/android/nfc/NfcAdapter.java
+++ b/core/java/android/nfc/NfcAdapter.java
@@ -18,11 +18,16 @@
 
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
+import android.app.Activity;
 import android.app.ActivityThread;
+import android.app.OnActivityPausedListener;
+import android.app.PendingIntent;
 import android.content.Context;
+import android.content.IntentFilter;
 import android.content.pm.IPackageManager;
 import android.content.pm.PackageManager;
 import android.os.IBinder;
+import android.os.Parcel;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.util.Log;
@@ -43,7 +48,6 @@
      *
      * If any activities respond to this intent neither
      * {@link #ACTION_TECHNOLOGY_DISCOVERED} or {@link #ACTION_TAG_DISCOVERED} will be started.
-     * @hide
      */
     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
     public static final String ACTION_NDEF_DISCOVERED = "android.nfc.action.NDEF_DISCOVERED";
@@ -51,13 +55,12 @@
     /**
      * Intent to started when a tag is discovered. The data URI is formated as
      * {@code vnd.android.nfc://tag/} with the path having a directory entry for each technology
-     * in the {@link Tag#getTechnologyList()} is ascending order.
+     * in the {@link Tag#getTechList()} is sorted ascending order.
      *
      * This intent is started after {@link #ACTION_NDEF_DISCOVERED} and before
      * {@link #ACTION_TAG_DISCOVERED}
      *
      * If any activities respond to this intent {@link #ACTION_TAG_DISCOVERED} will not be started.
-     * @hide
      */
     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
     public static final String ACTION_TECHNOLOGY_DISCOVERED = "android.nfc.action.TECH_DISCOVERED";
@@ -76,7 +79,6 @@
 
     /**
      * Mandatory Tag extra for the ACTION_TAG intents.
-     * @hide
      */
     public static final String EXTRA_TAG = "android.nfc.extra.TAG";
 
@@ -102,6 +104,20 @@
             "android.nfc.action.TRANSACTION_DETECTED";
 
     /**
+     * Broadcast Action: an RF field ON has been detected.
+     * @hide
+     */
+    public static final String ACTION_RF_FIELD_ON_DETECTED =
+            "android.nfc.action.RF_FIELD_ON_DETECTED";
+
+    /**
+     * Broadcast Action: an RF Field OFF has been detected.
+     * @hide
+     */
+    public static final String ACTION_RF_FIELD_OFF_DETECTED =
+            "android.nfc.action.RF_FIELD_OFF_DETECTED";
+
+    /**
      * Broadcast Action: an adapter's state changed between enabled and disabled.
      *
      * The new value is stored in the extra EXTRA_NEW_BOOLEAN_STATE and just contains
@@ -197,8 +213,7 @@
     // attemptDeadServiceRecovery() when NFC crashes - we accept a best effort
     // recovery
     private static INfcAdapter sService;
-
-    private final Context mContext;
+    private static INfcTag sTagService;
 
     /**
      * Helper to check if this device has FEATURE_NFC, but without using
@@ -235,6 +250,12 @@
                 Log.e(TAG, "could not retrieve NFC service");
                 return null;
             }
+            try {
+                sTagService = sService.getNfcTagInterface();
+            } catch (RemoteException e) {
+                Log.e(TAG, "could not retrieve NFC Tag service");
+                return null;
+            }
         }
         return sService;
     }
@@ -289,7 +310,6 @@
         if (setupService() == null) {
             throw new UnsupportedOperationException();
         }
-        mContext = context;
     }
 
     /**
@@ -297,10 +317,20 @@
      * @hide
      */
     public INfcAdapter getService() {
+        isEnabled();  // NOP call to recover sService if it is stale
         return sService;
     }
 
     /**
+     * Returns the binder interface to the tag service.
+     * @hide
+     */
+    public INfcTag getTagService() {
+        isEnabled();  // NOP call to recover sTagService if it is stale
+        return sTagService;
+    }
+
+    /**
      * NFC service dead - attempt best effort recovery
      * @hide
      */
@@ -309,11 +339,21 @@
         INfcAdapter service = getServiceInterface();
         if (service == null) {
             Log.e(TAG, "could not retrieve NFC service during service recovery");
+            // nothing more can be done now, sService is still stale, we'll hit
+            // this recovery path again later
             return;
         }
-        /* assigning to sService is not thread-safe, but this is best-effort code
-         * and on a well-behaved system should never happen */
+        // assigning to sService is not thread-safe, but this is best-effort code
+        // and on a well-behaved system should never happen
         sService = service;
+        try {
+            sTagService = service.getNfcTagInterface();
+        } catch (RemoteException ee) {
+            Log.e(TAG, "could not retrieve NFC tag service during service recovery");
+            // nothing more can be done now, sService is still stale, we'll hit
+            // this recovery path again later
+        }
+
         return;
     }
 
@@ -374,6 +414,136 @@
     }
 
     /**
+     * Enables foreground dispatching to the given Activity. This will force all NFC Intents that
+     * match the given filters to be delivered to the activity bypassing the standard dispatch
+     * mechanism. If no IntentFilters are given all the PendingIntent will be invoked for every
+     * dispatch Intent.
+     *
+     * This method must be called from the main thread.
+     *
+     * @param activity the Activity to dispatch to
+     * @param intent the PendingIntent to start for the dispatch
+     * @param filters the IntentFilters to override dispatching for, or null to always dispatch
+     * @throws IllegalStateException
+     */
+    public void enableForegroundDispatch(Activity activity, PendingIntent intent,
+            IntentFilter[] filters, String[][] techLists) {
+        if (activity == null || intent == null) {
+            throw new NullPointerException();
+        }
+        if (!activity.isResumed()) {
+            throw new IllegalStateException("Foregorund dispatching can only be enabled " +
+                    "when your activity is resumed");
+        }
+        try {
+            TechListParcel parcel = null;
+            if (techLists != null && techLists.length > 0) {
+                parcel = new TechListParcel(techLists);
+            }
+            ActivityThread.currentActivityThread().registerOnActivityPausedListener(activity,
+                    mForegroundDispatchListener);
+            sService.enableForegroundDispatch(activity.getComponentName(), intent, filters,
+                    parcel);
+        } catch (RemoteException e) {
+            attemptDeadServiceRecovery(e);
+        }
+    }
+
+    /**
+     * Disables foreground activity dispatching setup with
+     * {@link #enableForegroundDispatch}.
+     *
+     * <p>This must be called before the Activity returns from
+     * it's <code>onPause()</code> or this method will throw an IllegalStateException.
+     *
+     * <p>This method must be called from the main thread.
+     */
+    public void disableForegroundDispatch(Activity activity) {
+        ActivityThread.currentActivityThread().unregisterOnActivityPausedListener(activity,
+                mForegroundDispatchListener);
+        disableForegroundDispatchInternal(activity, false);
+    }
+
+    OnActivityPausedListener mForegroundDispatchListener = new OnActivityPausedListener() {
+        @Override
+        public void onPaused(Activity activity) {
+            disableForegroundDispatchInternal(activity, true);
+        }
+    };
+
+    void disableForegroundDispatchInternal(Activity activity, boolean force) {
+        try {
+            sService.disableForegroundDispatch(activity.getComponentName());
+            if (!force && !activity.isResumed()) {
+                throw new IllegalStateException("You must disable forgeground dispatching " +
+                        "while your activity is still resumed");
+            }
+        } catch (RemoteException e) {
+            attemptDeadServiceRecovery(e);
+        }
+    }
+
+    /**
+     * Enable NDEF message push over P2P while this Activity is in the foreground. For this to
+     * function properly the other NFC device being scanned must support the "com.android.npp"
+     * NDEF push protocol.
+     *
+     * <p><em>NOTE</em> While foreground NDEF push is active standard tag dispatch is disabled.
+     * Only the foreground activity may receive tag discovered dispatches via
+     * {@link #enableForegroundDispatch}.
+     */
+    public void enableForegroundNdefPush(Activity activity, NdefMessage msg) {
+        if (activity == null || msg == null) {
+            throw new NullPointerException();
+        }
+        if (!activity.isResumed()) {
+            throw new IllegalStateException("Foregorund NDEF push can only be enabled " +
+                    "when your activity is resumed");
+        }
+        try {
+            ActivityThread.currentActivityThread().registerOnActivityPausedListener(activity,
+                    mForegroundNdefPushListener);
+            sService.enableForegroundNdefPush(activity.getComponentName(), msg);
+        } catch (RemoteException e) {
+            attemptDeadServiceRecovery(e);
+        }
+    }
+
+    /**
+     * Disables foreground NDEF push setup with
+     * {@link #enableForegroundNdefPush}.
+     *
+     * <p>This must be called before the Activity returns from
+     * it's <code>onPause()</code> or this method will throw an IllegalStateException.
+     *
+     * <p>This method must be called from the main thread.
+     */
+    public void disableForegroundNdefPush(Activity activity) {
+        ActivityThread.currentActivityThread().unregisterOnActivityPausedListener(activity,
+                mForegroundNdefPushListener);
+        disableForegroundNdefPushInternal(activity, false);
+    }
+
+    OnActivityPausedListener mForegroundNdefPushListener = new OnActivityPausedListener() {
+        @Override
+        public void onPaused(Activity activity) {
+            disableForegroundNdefPushInternal(activity, true);
+        }
+    };
+
+    void disableForegroundNdefPushInternal(Activity activity, boolean force) {
+        try {
+            sService.disableForegroundNdefPush(activity.getComponentName());
+            if (!force && !activity.isResumed()) {
+                throw new IllegalStateException("You must disable forgeground NDEF push " +
+                        "while your activity is still resumed");
+            }
+        } catch (RemoteException e) {
+            attemptDeadServiceRecovery(e);
+        }
+    }
+
+    /**
      * Set the NDEF Message that this NFC adapter should appear as to Tag
      * readers.
      * <p>
diff --git a/core/java/android/nfc/NfcSecureElement.java b/core/java/android/nfc/NfcSecureElement.java
index 5f4c066..ea2846e 100755
--- a/core/java/android/nfc/NfcSecureElement.java
+++ b/core/java/android/nfc/NfcSecureElement.java
@@ -16,7 +16,7 @@
 
 package android.nfc;
 
-import android.nfc.technology.TagTechnology;
+import android.nfc.tech.TagTechnology;
 import android.os.RemoteException;
 import android.util.Log;
 
diff --git a/core/java/android/nfc/Tag.java b/core/java/android/nfc/Tag.java
index 7404950..aae75c9 100644
--- a/core/java/android/nfc/Tag.java
+++ b/core/java/android/nfc/Tag.java
@@ -16,36 +16,35 @@
 
 package android.nfc;
 
-import android.nfc.technology.IsoDep;
-import android.nfc.technology.MifareClassic;
-import android.nfc.technology.MifareUltralight;
-import android.nfc.technology.NfcV;
-import android.nfc.technology.Ndef;
-import android.nfc.technology.NdefFormatable;
-import android.nfc.technology.NfcA;
-import android.nfc.technology.NfcB;
-import android.nfc.technology.NfcF;
-import android.nfc.technology.TagTechnology;
+import android.nfc.tech.IsoDep;
+import android.nfc.tech.MifareClassic;
+import android.nfc.tech.MifareUltralight;
+import android.nfc.tech.Ndef;
+import android.nfc.tech.NdefFormatable;
+import android.nfc.tech.NfcA;
+import android.nfc.tech.NfcB;
+import android.nfc.tech.NfcF;
+import android.nfc.tech.NfcV;
+import android.nfc.tech.TagTechnology;
 import android.os.Bundle;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.os.RemoteException;
 
 import java.util.Arrays;
 
 /**
  * Represents a (generic) discovered tag.
  * <p>
- * A tag is a passive NFC element, such as NFC Forum Tag's, Mifare class Tags,
- * Sony Felica Tags.
+ * A tag is a passive NFC element, such as NFC Forum Tag's, MIFARE class Tags,
+ * Sony FeliCa Tags, etc.
  * <p>
  * Tag's have a type and usually have a UID.
  * <p>
  * {@link Tag} objects are passed to applications via the {@link NfcAdapter#EXTRA_TAG} extra
  * in {@link NfcAdapter#ACTION_TAG_DISCOVERED} intents. A {@link Tag} object is immutable
  * and represents the state of the tag at the time of discovery. It can be
- * directly queried for its UID and Type, or used to create a {@link TagTechnology}
- * (with {@link Tag#getTechnology(int)}).
+ * directly queried for its UID and Type, or used to create a {@link TagTechnology} using the
+ * static <code>get()</code> methods on the varios tech classes.
  * <p>
  * A {@link Tag} can  be used to create a {@link TagTechnology} only while the tag is in
  * range. If it is removed and then returned to range, then the most recent
@@ -55,13 +54,14 @@
  * 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 Tag implements Parcelable {
     /*package*/ final byte[] mId;
     /*package*/ final int[] mTechList;
+    /*package*/ final String[] mTechStringList;
     /*package*/ final Bundle[] mTechExtras;
     /*package*/ final int mServiceHandle;  // for use by NFC service, 0 indicates a mock
+    /*package*/ final INfcTag mTagService;
 
     /*package*/ int mConnectedTechnology;
 
@@ -69,24 +69,26 @@
      * Hidden constructor to be used by NFC service and internal classes.
      * @hide
      */
-    public Tag(byte[] id, int[] techList, Bundle[] techListExtras, int serviceHandle) {
+    public Tag(byte[] id, int[] techList, Bundle[] techListExtras, int serviceHandle,
+            INfcTag tagService) {
         if (techList == null) {
             throw new IllegalArgumentException("rawTargets cannot be null");
         }
         mId = id;
         mTechList = Arrays.copyOf(techList, techList.length);
+        mTechStringList = generateTechStringList(techList);
         // Ensure mTechExtras is as long as mTechList
         mTechExtras = Arrays.copyOf(techListExtras, techList.length);
         mServiceHandle = serviceHandle;
+        mTagService = tagService;
 
         mConnectedTechnology = -1;
     }
 
     /**
      * Construct a mock Tag.
-     * <p>This is an application constructed tag, so NfcAdapter methods on this
-     * Tag such as {@link #getTechnology} may fail with
-     * {@link IllegalArgumentException} since it does not represent a physical Tag.
+     * <p>This is an application constructed tag, so NfcAdapter methods on this Tag may fail
+     * with {@link IllegalArgumentException} since it does not represent a physical Tag.
      * <p>This constructor might be useful for mock testing.
      * @param id The tag identifier, can be null
      * @param techList must not be null
@@ -94,7 +96,46 @@
      */
     public static Tag createMockTag(byte[] id, int[] techList, Bundle[] techListExtras) {
         // set serviceHandle to 0 to indicate mock tag
-        return new Tag(id, techList, techListExtras, 0);
+        return new Tag(id, techList, techListExtras, 0, null);
+    }
+
+    private String[] generateTechStringList(int[] techList) {
+        final int size = techList.length;
+        String[] strings = new String[size];
+        for (int i = 0; i < size; i++) {
+            switch (techList[i]) {
+                case TagTechnology.ISO_DEP:
+                    strings[i] = IsoDep.class.getName();
+                    break;
+                case TagTechnology.MIFARE_CLASSIC:
+                    strings[i] = MifareClassic.class.getName();
+                    break;
+                case TagTechnology.MIFARE_ULTRALIGHT:
+                    strings[i] = MifareUltralight.class.getName();
+                    break;
+                case TagTechnology.NDEF:
+                    strings[i] = Ndef.class.getName();
+                    break;
+                case TagTechnology.NDEF_FORMATABLE:
+                    strings[i] = NdefFormatable.class.getName();
+                    break;
+                case TagTechnology.NFC_A:
+                    strings[i] = NfcA.class.getName();
+                    break;
+                case TagTechnology.NFC_B:
+                    strings[i] = NfcB.class.getName();
+                    break;
+                case TagTechnology.NFC_F:
+                    strings[i] = NfcF.class.getName();
+                    break;
+                case TagTechnology.NFC_V:
+                    strings[i] = NfcV.class.getName();
+                    break;
+                default:
+                    throw new IllegalArgumentException("Unknown tech type " + techList[i]);
+            }
+        }
+        return strings;
     }
 
     /**
@@ -119,19 +160,24 @@
      * Returns technologies present in the tag that this implementation understands,
      * or a zero length array if there are no supported technologies on this tag.
      *
-     * The elements of the list are guaranteed be one of the constants defined in
-     * {@link TagTechnology}. 
+     * The elements of the list are the names of the classes implementing the technology. 
      *
      * The ordering of the returned array is undefined and should not be relied upon.
      */
-    public int[] getTechnologyList() { 
-        return Arrays.copyOf(mTechList, mTechList.length);
+    public String[] getTechList() {
+        return mTechStringList;
     }
 
-    /**
-     * Returns the technology, or null if not present
-     */
-    public TagTechnology getTechnology(NfcAdapter adapter, int tech) {
+    /** @hide */
+    public boolean hasTech(int techType) {
+        for (int tech : mTechList) {
+            if (tech == techType) return true;
+        }
+        return false;
+    }
+    
+    /** @hide */
+    public Bundle getTechExtras(int tech) {
         int pos = -1;
         for (int idx = 0; idx < mTechList.length; idx++) {
           if (mTechList[idx] == tech) {
@@ -143,44 +189,12 @@
             return null;
         }
 
-        Bundle extras = mTechExtras[pos];
-        try {
-            switch (tech) {
-                case TagTechnology.NFC_A: {
-                    return new NfcA(adapter, this, extras);
-                }
-                case TagTechnology.NFC_B: {
-                    return new NfcB(adapter, this, extras);
-                }
-                case TagTechnology.ISO_DEP: {
-                    return new IsoDep(adapter, this, extras);
-                }
-                case TagTechnology.NFC_V: {
-                    return new NfcV(adapter, this, extras);
-                }
-                case TagTechnology.NDEF: {
-                    return new Ndef(adapter, this, tech, extras);
-                }
-                case TagTechnology.NDEF_FORMATABLE: {
-                    return new NdefFormatable(adapter, this, tech, extras);
-                }
-                case TagTechnology.NFC_F: {
-                    return new NfcF(adapter, this, extras);
-                }
-                case TagTechnology.MIFARE_CLASSIC: {
-                    return new MifareClassic(adapter, this, extras);
-                }
-                case TagTechnology.MIFARE_ULTRALIGHT: {
-                    return new MifareUltralight(adapter, this, extras);
-                }
+        return mTechExtras[pos];
+    }
 
-                default: {
-                    throw new UnsupportedOperationException("Tech " + tech + " not supported");
-                }
-            }
-        } catch (RemoteException e) {
-            return null;
-        }
+    /** @hide */
+    public INfcTag getTagService() {
+        return mTagService;
     }
 
     @Override
@@ -222,25 +236,41 @@
 
     @Override
     public void writeToParcel(Parcel dest, int flags) {
+        // Null mTagService means this is a mock tag
+        int isMock = (mTagService == null)?1:0;
+
         writeBytesWithNull(dest, mId);
         dest.writeInt(mTechList.length);
         dest.writeIntArray(mTechList);
         dest.writeTypedArray(mTechExtras, 0);
         dest.writeInt(mServiceHandle);
+        dest.writeInt(isMock);
+        if (isMock == 0) {
+            dest.writeStrongBinder(mTagService.asBinder());
+        }
     }
 
     public static final Parcelable.Creator<Tag> CREATOR =
             new Parcelable.Creator<Tag>() {
         @Override
         public Tag createFromParcel(Parcel in) {
+            INfcTag tagService;
+
             // Tag fields
             byte[] id = Tag.readBytesWithNull(in);
             int[] techList = new int[in.readInt()];
             in.readIntArray(techList);
             Bundle[] techExtras = in.createTypedArray(Bundle.CREATOR);
             int serviceHandle = in.readInt();
+            int isMock = in.readInt();
+            if (isMock == 0) {
+                tagService = INfcTag.Stub.asInterface(in.readStrongBinder());
+            }
+            else {
+                tagService = null;
+            }
 
-            return new Tag(id, techList, techExtras, serviceHandle);
+            return new Tag(id, techList, techExtras, serviceHandle, tagService);
         }
 
         @Override
@@ -249,7 +279,9 @@
         }
     };
 
-    /*
+    /**
+     * For internal use only.
+     *
      * @hide
      */
     public synchronized void setConnectedTechnology(int technology) {
@@ -260,14 +292,18 @@
         }
     }
 
-    /*
+    /**
+     * For internal use only.
+     *
      * @hide
      */
     public int getConnectedTechnology() {
         return mConnectedTechnology;
     }
 
-    /*
+    /**
+     * For internal use only.
+     *
      * @hide
      */
     public void setTechnologyDisconnected() {
diff --git a/core/java/android/nfc/TagLostException.java b/core/java/android/nfc/TagLostException.java
new file mode 100644
index 0000000..1981d7c
--- /dev/null
+++ b/core/java/android/nfc/TagLostException.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 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.
+ * 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 java.io.IOException;
+
+public class TagLostException extends IOException {
+    public TagLostException() {
+        super();
+    }
+
+    public TagLostException(String message) {
+        super(message);
+    }
+}
diff --git a/core/java/android/nfc/TechListParcel.aidl b/core/java/android/nfc/TechListParcel.aidl
new file mode 100644
index 0000000..92e646f
--- /dev/null
+++ b/core/java/android/nfc/TechListParcel.aidl
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 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.
+ * 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;
+
+parcelable TechListParcel;
\ No newline at end of file
diff --git a/core/java/android/nfc/TechListParcel.java b/core/java/android/nfc/TechListParcel.java
new file mode 100644
index 0000000..396f0f1
--- /dev/null
+++ b/core/java/android/nfc/TechListParcel.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 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.
+ * 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;
+
+/** @hide */
+public class TechListParcel implements Parcelable {
+
+    private String[][] mTechLists;
+
+    public TechListParcel(String[]... strings) {
+        mTechLists = strings;
+    }
+
+    public String[][] getTechLists() {
+        return mTechLists;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        int count = mTechLists.length;
+        dest.writeInt(count);
+        for (int i = 0; i < count; i++) {
+            String[] techList = mTechLists[i];
+            dest.writeStringArray(techList);
+        }
+    }
+
+    public static final Creator<TechListParcel> CREATOR = new Creator<TechListParcel>() {
+        @Override
+        public TechListParcel createFromParcel(Parcel source) {
+            int count = source.readInt();
+            String[][] techLists = new String[count][];
+            for (int i = 0; i < count; i++) {
+                techLists[i] = source.readStringArray();
+            }
+            return new TechListParcel(techLists);
+        }
+
+        @Override
+        public TechListParcel[] newArray(int size) {
+            return new TechListParcel[size];
+        }
+    };
+}
diff --git a/core/java/android/nfc/TransceiveResult.aidl b/core/java/android/nfc/TransceiveResult.aidl
new file mode 100644
index 0000000..98f92ee
--- /dev/null
+++ b/core/java/android/nfc/TransceiveResult.aidl
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 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.
+ * 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;
+
+parcelable TransceiveResult;
diff --git a/core/java/android/nfc/TransceiveResult.java b/core/java/android/nfc/TransceiveResult.java
new file mode 100644
index 0000000..16244b8
--- /dev/null
+++ b/core/java/android/nfc/TransceiveResult.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 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.
+ * 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;
+
+/**
+ * Class used to pipe transceive result from the NFC service.
+ *
+ * @hide
+ */
+public final class TransceiveResult implements Parcelable {
+    private final boolean mTagLost;
+    private final boolean mSuccess;
+    private final byte[] mResponseData;
+
+    public TransceiveResult(final boolean success, final boolean tagIsLost,
+            final byte[] data) {
+        mSuccess = success;
+        mTagLost = tagIsLost;
+        mResponseData = data;
+    }
+
+    public boolean isSuccessful() {
+        return mSuccess;
+    }
+
+    public boolean isTagLost() {
+        return mTagLost;
+    }
+
+    public byte[] getResponseData() {
+        return mResponseData;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(mSuccess ? 1 : 0);
+        dest.writeInt(mTagLost ? 1 : 0);
+        if (mSuccess) {
+            dest.writeInt(mResponseData.length);
+            dest.writeByteArray(mResponseData);
+        }
+    }
+
+    public static final Parcelable.Creator<TransceiveResult> CREATOR =
+            new Parcelable.Creator<TransceiveResult>() {
+        @Override
+        public TransceiveResult createFromParcel(Parcel in) {
+            boolean success = (in.readInt() == 1) ? true : false;
+            boolean tagLost = (in.readInt() == 1) ? true : false;
+            byte[] responseData;
+
+            if (success) {
+                int responseLength = in.readInt();
+                responseData = new byte[responseLength];
+                in.readByteArray(responseData);
+            } else {
+                responseData = null;
+            }
+            return new TransceiveResult(success, tagLost, responseData);
+        }
+
+        @Override
+        public TransceiveResult[] newArray(int size) {
+            return new TransceiveResult[size];
+        }
+    };
+
+}
diff --git a/core/java/android/nfc/tech/BasicTagTechnology.java b/core/java/android/nfc/tech/BasicTagTechnology.java
new file mode 100644
index 0000000..32a850d
--- /dev/null
+++ b/core/java/android/nfc/tech/BasicTagTechnology.java
@@ -0,0 +1,160 @@
+/*
+ * 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.tech;
+
+import android.nfc.ErrorCodes;
+import android.nfc.Tag;
+import android.nfc.TagLostException;
+import android.nfc.TransceiveResult;
+import android.os.RemoteException;
+import android.util.Log;
+
+import java.io.IOException;
+
+/**
+ * A base class for tag technologies that are built on top of transceive().
+ */
+/* package */ abstract class BasicTagTechnology implements TagTechnology {
+    private static final String TAG = "NFC";
+
+    /*package*/ final Tag mTag;
+    /*package*/ boolean mIsConnected;
+    /*package*/ int mSelectedTechnology;
+
+    BasicTagTechnology(Tag tag, int tech) throws RemoteException {
+        mTag = tag;
+        mSelectedTechnology = tech;
+    }
+
+    @Override
+    public Tag getTag() {
+        return mTag;
+    }
+
+    /** Internal helper to throw IllegalStateException if the technology isn't connected */
+    void checkConnected() {
+       if ((mTag.getConnectedTechnology() != mSelectedTechnology) ||
+               (mTag.getConnectedTechnology() == -1)) {
+           throw new IllegalStateException("Call connect() first!");
+       }
+    }
+
+    /**
+     * Helper to indicate if {@link #connect} has succeeded.
+     * <p>
+     * Does not cause RF activity, and does not block.
+     * @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 methods that require a connection in case the connection is lost after this
+     * method returns.
+     */
+    public boolean isConnected() {
+        if (!mIsConnected) {
+            return false;
+        }
+
+        try {
+            return mTag.getTagService().isPresent(mTag.getServiceHandle());
+        } catch (RemoteException e) {
+            Log.e(TAG, "NFC service dead", e);
+            return false;
+        }
+    }
+
+    @Override
+    public void connect() throws IOException {
+        try {
+            int errorCode = mTag.getTagService().connect(mTag.getServiceHandle(),
+                    mSelectedTechnology);
+
+            if (errorCode == ErrorCodes.SUCCESS) {
+                // Store this in the tag object
+                mTag.setConnectedTechnology(mSelectedTechnology);
+                mIsConnected = true;
+            } else {
+                throw new IOException();
+            }
+        } catch (RemoteException e) {
+            Log.e(TAG, "NFC service dead", e);
+            throw new IOException("NFC service died");
+        }
+    }
+
+    @Override
+    public void reconnect() throws IOException {
+        if (!mIsConnected) {
+            throw new IllegalStateException("Technology not connected yet");
+        }
+
+        try {
+            int errorCode = mTag.getTagService().reconnect(mTag.getServiceHandle());
+
+            if (errorCode != ErrorCodes.SUCCESS) {
+                mIsConnected = false;
+                mTag.setTechnologyDisconnected();
+                throw new IOException();
+            }
+        } catch (RemoteException e) {
+            mIsConnected = false;
+            mTag.setTechnologyDisconnected();
+            Log.e(TAG, "NFC service dead", e);
+            throw new IOException("NFC service died");
+        }
+    }
+
+    @Override
+    public void close() throws IOException {
+        try {
+            /* Note that we don't want to physically disconnect the tag,
+             * but just reconnect to it to reset its state
+             */
+            mTag.getTagService().reconnect(mTag.getServiceHandle());
+        } catch (RemoteException e) {
+            Log.e(TAG, "NFC service dead", e);
+        } finally {
+            mIsConnected = false;
+            mTag.setTechnologyDisconnected();
+        }
+    }
+
+    /** Internal transceive */
+    /*package*/ byte[] transceive(byte[] data, boolean raw) throws IOException {
+        checkConnected();
+
+        try {
+            TransceiveResult result = mTag.getTagService().transceive(mTag.getServiceHandle(),
+                    data, raw);
+            if (result == null) {
+                throw new IOException("transceive failed");
+            } else {
+                if (result.isSuccessful()) {
+                    return result.getResponseData();
+                } else {
+                    if (result.isTagLost()) {
+                        throw new TagLostException("Tag was lost.");
+                    }
+                    else {
+                        throw new IOException("transceive failed");
+                    }
+                }
+            }
+        } catch (RemoteException e) {
+            Log.e(TAG, "NFC service dead", e);
+            throw new IOException("NFC service died");
+        }
+    }
+}
diff --git a/core/java/android/nfc/tech/IsoDep.java b/core/java/android/nfc/tech/IsoDep.java
new file mode 100644
index 0000000..774982e
--- /dev/null
+++ b/core/java/android/nfc/tech/IsoDep.java
@@ -0,0 +1,132 @@
+/*
+ * 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.tech;
+
+import android.nfc.Tag;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.util.Log;
+
+import java.io.IOException;
+
+/**
+ * A low-level connection to a {@link Tag} using the ISO-DEP technology, also known as
+ * ISO1443-4.
+ *
+ * <p>You can acquire this kind of connection with {@link #get}.
+ * Use this class to send and receive data with {@link #transceive transceive()}.
+ *
+ * <p>Applications must implement their own protocol stack on top of
+ * {@link #transceive transceive()}.
+ *
+ * <p class="note"><strong>Note:</strong>
+ * Use of this class requires the {@link android.Manifest.permission#NFC}
+ * permission.
+ */
+public final class IsoDep extends BasicTagTechnology {
+    private static final String TAG = "NFC";
+
+    /** @hide */
+    public static final String EXTRA_HI_LAYER_RESP = "hiresp";
+    /** @hide */
+    public static final String EXTRA_HIST_BYTES = "histbytes";
+
+    private byte[] mHiLayerResponse = null;
+    private byte[] mHistBytes = null;
+
+    /**
+     * Returns an instance of this tech for the given tag. If the tag doesn't support
+     * this tech type null is returned.
+     *
+     * @param tag The tag to get the tech from
+     */
+    public static IsoDep get(Tag tag) {
+        if (!tag.hasTech(TagTechnology.ISO_DEP)) return null;
+        try {
+            return new IsoDep(tag);
+        } catch (RemoteException e) {
+            return null;
+        }
+    }
+    
+    /** @hide */
+    public IsoDep(Tag tag)
+            throws RemoteException {
+        super(tag, TagTechnology.ISO_DEP);
+        Bundle extras = tag.getTechExtras(TagTechnology.ISO_DEP);
+        if (extras != null) {
+            mHiLayerResponse = extras.getByteArray(EXTRA_HI_LAYER_RESP);
+            mHistBytes = extras.getByteArray(EXTRA_HIST_BYTES);
+        }
+    }
+
+    /**
+     * Sets the timeout of an IsoDep transceive transaction in milliseconds.
+     * If the transaction has not completed before the timeout,
+     * any ongoing {@link #transceive} operation will be
+     * aborted and the connection to the tag is lost. This setting is applied
+     * only to the {@link Tag} object linked to this technology and will be
+     * reset when {@link IsoDep#close} is called.
+     * The default transaction timeout is 300 milliseconds.
+     */
+    public void setTimeout(int timeout) {
+        try {
+            mTag.getTagService().setIsoDepTimeout(timeout);
+        } catch (RemoteException e) {
+            Log.e(TAG, "NFC service dead", e);
+        }
+    }
+
+    @Override
+    public void close() throws IOException {
+        try {
+            mTag.getTagService().resetIsoDepTimeout();
+        } catch (RemoteException e) {
+            Log.e(TAG, "NFC service dead", e);
+        }
+        super.close();
+    }
+
+    /**
+     * Return the historical bytes if the tag is using {@link NfcA}, null otherwise.
+     */
+    public byte[] getHistoricalBytes() {
+        return mHistBytes;
+    }
+
+    /**
+     * Return the hi layer response bytes if the tag is using {@link NfcB}, null otherwise.
+     */
+    public byte[] getHiLayerResponse() {
+        return mHiLayerResponse;
+    }
+
+    /**
+     * Send data to a tag and receive the response.
+     * <p>
+     * This method will block until the response is received. It can be canceled
+     * with {@link #close}.
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
+     *
+     * @param data bytes to send
+     * @return bytes received in response
+     * @throws IOException if the target is lost or connection closed
+     */
+    public byte[] transceive(byte[] data) throws IOException {
+        return transceive(data, true);
+    }
+}
diff --git a/core/java/android/nfc/tech/MifareClassic.java b/core/java/android/nfc/tech/MifareClassic.java
new file mode 100644
index 0000000..d337ead
--- /dev/null
+++ b/core/java/android/nfc/tech/MifareClassic.java
@@ -0,0 +1,432 @@
+/*
+ * 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.tech;
+
+import android.nfc.Tag;
+import android.nfc.TagLostException;
+import android.os.RemoteException;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
+/**
+ * Technology class representing MIFARE Classic tags (also known as MIFARE Standard).
+ *
+ * <p>Support for this technology type is optional. If the NFC stack doesn't support this technology
+ * MIFARE Classic tags will still be scanned, but will only show the NfcA technology.
+ *
+ * <p>MIFARE Classic tags have sectors that each contain blocks. The block size is constant at
+ * 16 bytes, but the number of sectors and the sector size varies by product. MIFARE has encryption
+ * built in and each sector has two keys associated with it, as well as ACLs to determine what
+ * level acess each key grants. Before operating on a sector you must call either
+ * {@link #authenticateSectorWithKeyA(int, byte[])} or
+ * {@link #authenticateSectorWithKeyB(int, byte[])} to gain authorization for your request.
+ */
+public final class MifareClassic extends BasicTagTechnology {
+    /**
+     * The well-known default MIFARE read key. All keys are set to this at the factory.
+     * Using this key will effectively make the payload in the sector public.
+     */
+    public static final byte[] KEY_DEFAULT =
+            {(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF};
+    /**
+     * The well-known, default MIFARE Application Directory read key.
+     */
+    public static final byte[] KEY_MIFARE_APPLICATION_DIRECTORY =
+            {(byte)0xA0,(byte)0xA1,(byte)0xA2,(byte)0xA3,(byte)0xA4,(byte)0xA5};
+    /**
+     * The well-known, default read key for NDEF data on a MIFARE Classic
+     */
+    public static final byte[] KEY_NFC_FORUM =
+            {(byte)0xD3,(byte)0xF7,(byte)0xD3,(byte)0xF7,(byte)0xD3,(byte)0xF7};
+
+    /** A Mifare Classic compatible card of unknown type */
+    public static final int TYPE_UNKNOWN = -1;
+    /** A MIFARE Classic tag */
+    public static final int TYPE_CLASSIC = 0;
+    /** A MIFARE Plus tag */
+    public static final int TYPE_PLUS = 1;
+    /** A MIFARE Pro tag */
+    public static final int TYPE_PRO = 2;
+
+    /** The tag contains 16 sectors, each holding 4 blocks. */
+    public static final int SIZE_1K = 1024;
+    /** The tag contains 32 sectors, each holding 4 blocks. */
+    public static final int SIZE_2K = 2048;
+    /**
+     * The tag contains 40 sectors. The first 32 sectors contain 4 blocks and the last 8 sectors
+     * contain 16 blocks.
+     */
+    public static final int SIZE_4K = 4096;
+    /** The tag contains 5 sectors, each holding 4 blocks. */
+    public static final int SIZE_MINI = 320;
+
+    /** Size of a Mifare Classic block (in bytes) */
+    public static final int BLOCK_SIZE = 16;
+
+    private static final int MAX_BLOCK_COUNT = 256;
+    private static final int MAX_SECTOR_COUNT = 40;
+
+    private boolean mIsEmulated;
+    private int mType;
+    private int mSize;
+
+    /**
+     * Returns an instance of this tech for the given tag. If the tag doesn't support
+     * this tech type null is returned.
+     *
+     * @param tag The tag to get the tech from
+     */
+    public static MifareClassic get(Tag tag) {
+        if (!tag.hasTech(TagTechnology.MIFARE_CLASSIC)) return null;
+        try {
+            return new MifareClassic(tag);
+        } catch (RemoteException e) {
+            return null;
+        }
+    }
+
+    /** @hide */
+    public MifareClassic(Tag tag) throws RemoteException {
+        super(tag, TagTechnology.MIFARE_CLASSIC);
+
+        NfcA a = NfcA.get(tag);  // Mifare Classic is always based on NFC a
+
+        mIsEmulated = false;
+
+        switch (a.getSak()) {
+        case 0x08:
+            mType = TYPE_CLASSIC;
+            mSize = SIZE_1K;
+            break;
+        case 0x09:
+            mType = TYPE_CLASSIC;
+            mSize = SIZE_MINI;
+            break;
+        case 0x10:
+            mType = TYPE_PLUS;
+            mSize = SIZE_2K;
+            // SecLevel = SL2
+            break;
+        case 0x11:
+            mType = TYPE_PLUS;
+            mSize = SIZE_4K;
+            // Seclevel = SL2
+            break;
+        case 0x18:
+            mType = TYPE_CLASSIC;
+            mSize = SIZE_4K;
+            break;
+        case 0x28:
+            mType = TYPE_CLASSIC;
+            mSize = SIZE_1K;
+            mIsEmulated = true;
+            break;
+        case 0x38:
+            mType = TYPE_CLASSIC;
+            mSize = SIZE_4K;
+            mIsEmulated = true;
+            break;
+        case 0x88:
+            mType = TYPE_CLASSIC;
+            mSize = SIZE_1K;
+            // NXP-tag: false
+            break;
+        case 0x98:
+        case 0xB8:
+            mType = TYPE_PRO;
+            mSize = SIZE_4K;
+            break;
+        default:
+            // Stack incorrectly reported a MifareClassic. We cannot handle this
+            // gracefully - we have no idea of the memory layout. Bail.
+            throw new RuntimeException(
+                    "Tag incorrectly enumerated as Mifare Classic, SAK = " + a.getSak());
+        }
+    }
+
+    /** Returns the type of the tag, determined at discovery time */
+    public int getType() {
+        return mType;
+    }
+
+    /** Returns the size of the tag in bytes, determined at discovery time */
+    public int getSize() {
+        return mSize;
+    }
+
+    /** Returns true if the tag is emulated, determined at discovery time.
+     * These are actually smart-cards that emulate a Mifare Classic interface.
+     * They can be treated identically to a Mifare Classic tag.
+     * @hide
+     */
+    public boolean isEmulated() {
+        return mIsEmulated;
+    }
+
+    /** Returns the number of sectors on this tag, determined at discovery time */
+    public int getSectorCount() {
+        switch (mSize) {
+        case SIZE_1K:
+            return 16;
+        case SIZE_2K:
+            return 32;
+        case SIZE_4K:
+            return 40;
+        case SIZE_MINI:
+            return 5;
+        default:
+            return 0;
+        }
+    }
+
+    /** Returns the total block count, determined at discovery time */
+    public int getBlockCount() {
+        return mSize / BLOCK_SIZE;
+    }
+
+    /** Returns the block count for the given sector, determined at discovery time */
+    public int getBlockCountInSector(int sectorIndex) {
+        validateSector(sectorIndex);
+
+        if (sectorIndex < 32) {
+            return 4;
+        } else {
+            return 16;
+        }
+    }
+
+    /** Return the sector index of a given block */
+    public int blockToSector(int blockIndex) {
+        validateBlock(blockIndex);
+
+        if (blockIndex < 32 * 4) {
+            return blockIndex / 4;
+        } else {
+            return 32 + (blockIndex - 32 * 4) / 16;
+        }
+    }
+
+    /** Return the first block of a given sector */
+    public int sectorToBlock(int sectorIndex) {
+        if (sectorIndex < 32) {
+            return sectorIndex * 4;
+        } else {
+            return 32 * 4 + (sectorIndex - 32) * 16;
+        }
+    }
+
+    // Methods that require connect()
+    /**
+     * Authenticate a sector.
+     * <p>Every sector has an A and B key with different access privileges,
+     * this method attempts to authenticate against the A key.
+     * <p>This requires a that the tag be connected.
+     */
+    public boolean authenticateSectorWithKeyA(int sectorIndex, byte[] key) throws IOException {
+        return authenticate(sectorIndex, key, true);
+    }
+
+    /**
+     * Authenticate a sector.
+     * <p>Every sector has an A and B key with different access privileges,
+     * this method attempts to authenticate against the B key.
+     * <p>This requires a that the tag be connected.
+     */
+    public boolean authenticateSectorWithKeyB(int sectorIndex, byte[] key) throws IOException {
+        return authenticate(sectorIndex, key, false);
+    }
+
+    private boolean authenticate(int sector, byte[] key, boolean keyA) throws IOException {
+        validateSector(sector);
+        checkConnected();
+
+        byte[] cmd = new byte[12];
+
+        // First byte is the command
+        if (keyA) {
+            cmd[0] = 0x60; // phHal_eMifareAuthentA
+        } else {
+            cmd[0] = 0x61; // phHal_eMifareAuthentB
+        }
+
+        // Second byte is block address
+        // Authenticate command takes a block address. Authenticating a block
+        // of a sector will authenticate the entire sector.
+        cmd[1] = (byte) sectorToBlock(sector);
+
+        // Next 4 bytes are last 4 bytes of UID
+        byte[] uid = getTag().getId();
+        System.arraycopy(uid, uid.length - 4, cmd, 2, 4);
+
+        // Next 6 bytes are key
+        System.arraycopy(key, 0, cmd, 6, 6);
+
+        try {
+            if (transceive(cmd, false) != null) {
+                return true;
+            }
+        } catch (TagLostException e) {
+            throw e;
+        } catch (IOException e) {
+            // No need to deal with, will return false anyway
+        }
+        return false;
+    }
+
+    /**
+     * Read 16-byte block.
+     * <p>This requires a that the tag be connected.
+     * @throws IOException
+     */
+    public byte[] readBlock(int blockIndex) throws IOException {
+        validateBlock(blockIndex);
+        checkConnected();
+
+        byte[] cmd = { 0x30, (byte) blockIndex };
+        return transceive(cmd, false);
+    }
+
+    /**
+     * Write 16-byte block.
+     * <p>This requires a that the tag be connected.
+     * @throws IOException
+     */
+    public void writeBlock(int blockIndex, byte[] data) throws IOException {
+        validateBlock(blockIndex);
+        checkConnected();
+        if (data.length != 16) {
+            throw new IllegalArgumentException("must write 16-bytes");
+        }
+
+        byte[] cmd = new byte[data.length + 2];
+        cmd[0] = (byte) 0xA0; // MF write command
+        cmd[1] = (byte) blockIndex;
+        System.arraycopy(data, 0, cmd, 2, data.length);
+
+        transceive(cmd, false);
+    }
+
+    /**
+     * Increment a value block, and store the result in temporary memory.
+     * @param blockIndex
+     * @throws IOException
+     */
+    public void increment(int blockIndex, int value) throws IOException {
+        validateBlock(blockIndex);
+        validateValueOperand(value);
+        checkConnected();
+
+        ByteBuffer cmd = ByteBuffer.allocate(6);
+        cmd.order(ByteOrder.LITTLE_ENDIAN);
+        cmd.put( (byte) 0xC1 );
+        cmd.put( (byte) blockIndex );
+        cmd.putInt(value);
+
+        transceive(cmd.array(), false);
+    }
+
+    /**
+     * Decrement a value block, and store the result in temporary memory.
+     * @param blockIndex
+     * @throws IOException
+     */
+    public void decrement(int blockIndex, int value) throws IOException {
+        validateBlock(blockIndex);
+        validateValueOperand(value);
+        checkConnected();
+
+        ByteBuffer cmd = ByteBuffer.allocate(6);
+        cmd.order(ByteOrder.LITTLE_ENDIAN);
+        cmd.put( (byte) 0xC0 );
+        cmd.put( (byte) blockIndex );
+        cmd.putInt(value);
+
+        transceive(cmd.array(), false);
+    }
+
+    /**
+     * Copy from temporary memory to value block.
+     * @param blockIndex
+     * @throws IOException
+     */
+    public void transfer(int blockIndex) throws IOException {
+        validateBlock(blockIndex);
+        checkConnected();
+
+        byte[] cmd = { (byte) 0xB0, (byte) blockIndex };
+
+        transceive(cmd, false);
+    }
+
+    /**
+     * Copy from value block to temporary memory.
+     * @param blockIndex
+     * @throws IOException
+     */
+    public void restore(int blockIndex) throws IOException {
+        validateBlock(blockIndex);
+        checkConnected();
+
+        byte[] cmd = { (byte) 0xC2, (byte) blockIndex };
+
+        transceive(cmd, false);
+    }
+
+    /**
+     * Send raw NfcA data to a tag and receive the response.
+     * <p>
+     * This method will block until the response is received. It can be canceled
+     * with {@link #close}.
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
+     * <p>This requires a that the tag be connected.
+     *
+     * @param data bytes to send
+     * @return bytes received in response
+     * @throws IOException if the target is lost or connection closed
+     */
+    public byte[] transceive(byte[] data) throws IOException {
+        return transceive(data, true);
+    }
+
+    private static void validateSector(int sector) {
+        // Do not be too strict on upper bounds checking, since some cards
+        // have more addressable memory than they report. For example,
+        // Mifare Plus 2k cards will appear as Mifare Classic 1k cards when in
+        // Mifare Classic compatibility mode.
+        // Note that issuing a command to an out-of-bounds block is safe - the
+        // tag should report error causing IOException. This validation is a
+        // helper to guard against obvious programming mistakes.
+        if (sector < 0 || sector >= MAX_SECTOR_COUNT) {
+            throw new IndexOutOfBoundsException("sector out of bounds: " + sector);
+        }
+    }
+
+    private static void validateBlock(int block) {
+        // Just looking for obvious out of bounds...
+        if (block < 0 || block >= MAX_BLOCK_COUNT) {
+            throw new IndexOutOfBoundsException("block out of bounds: " + block);
+        }
+    }
+
+    private static void validateValueOperand(int value) {
+        if (value < 0) {
+            throw new IllegalArgumentException("value operand negative");
+        }
+    }
+}
diff --git a/core/java/android/nfc/tech/MifareUltralight.java b/core/java/android/nfc/tech/MifareUltralight.java
new file mode 100644
index 0000000..b514f1c
--- /dev/null
+++ b/core/java/android/nfc/tech/MifareUltralight.java
@@ -0,0 +1,174 @@
+/*
+ * 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.tech;
+
+import android.nfc.Tag;
+import android.os.RemoteException;
+
+import java.io.IOException;
+
+//TOOD: Ultralight C 3-DES authentication, one-way counter
+
+/**
+ * Technology class representing MIFARE Ultralight and MIFARE Ultralight C tags.
+ *
+ * <p>Support for this technology type is optional. If the NFC stack doesn't support this technology
+ * MIFARE Ultralight class tags will still be scanned, but will only show the NfcA technology.
+ *
+ * <p>MIFARE Ultralight compatible tags have 4 byte pages. The read command
+ * returns 4 pages (16 bytes) at a time, for speed. The write command operates
+ * on a single page (4 bytes) to minimize EEPROM write cycles.
+ *
+ * <p>The original MIFARE Ultralight consists of a 64 byte EEPROM. The first
+ * 4 pages are for the OTP area, manufacturer data, and locking bits. They are
+ * readable and some bits are writable. The final 12 pages are the user
+ * read/write area. For more information see the NXP data sheet MF0ICU1.
+ *
+ * <p>The MIFARE Ultralight C consists of a 192 byte EEPROM. The first 4 pages
+ * are for OTP, manufacturer data, and locking bits. The next 36 pages are the
+ * user read/write area. The next 4 pages are additional locking bits, counters
+ * and authentication configuration and are readable. The final 4 pages are for
+ * the authentication key and are not readable. For more information see the
+ * NXP data sheet MF0ICU2.
+ */
+public final class MifareUltralight extends BasicTagTechnology {
+    /** A MIFARE Ultralight compatible tag of unknown type */
+    public static final int TYPE_UNKNOWN = -1;
+    /** A MIFARE Ultralight tag */
+    public static final int TYPE_ULTRALIGHT = 1;
+    /** A MIFARE Ultralight C tag */
+    public static final int TYPE_ULTRALIGHT_C = 2;
+
+    /** Size of a MIFARE Ultralight page in bytes */
+    public static final int PAGE_SIZE = 4;
+
+    private static final int NXP_MANUFACTURER_ID = 0x04;
+    private static final int MAX_PAGE_COUNT = 256;
+
+    private int mType;
+
+    /**
+     * Returns an instance of this tech for the given tag. If the tag doesn't support
+     * this tech type null is returned.
+     *
+     * @param tag The tag to get the tech from
+     */
+    public static MifareUltralight get(Tag tag) {
+        if (!tag.hasTech(TagTechnology.MIFARE_ULTRALIGHT)) return null;
+        try {
+            return new MifareUltralight(tag);
+        } catch (RemoteException e) {
+            return null;
+        }
+    }
+
+    /** @hide */
+    public MifareUltralight(Tag tag) throws RemoteException {
+        super(tag, TagTechnology.MIFARE_ULTRALIGHT);
+
+        // Check if this could actually be a Mifare
+        NfcA a = NfcA.get(tag);
+
+        mType = TYPE_UNKNOWN;
+
+        if (a.getSak() == 0x00 && tag.getId()[0] == NXP_MANUFACTURER_ID) {
+            // could be UL or UL-C
+            //TODO: stack should use NXP AN1303 procedure to make a best guess
+            // attempt at classifying Ultralight vs Ultralight C.
+            mType = TYPE_ULTRALIGHT;
+        }
+    }
+
+    /** Returns the type of the tag.
+     * <p>It is very hard to always accurately classify a MIFARE Ultralight
+     * compatible tag as Ultralight original or Ultralight C. So consider
+     * {@link #getType} a hint. */
+    public int getType() {
+        return mType;
+    }
+
+    // Methods that require connect()
+    /**
+     * Read 4 pages (16 bytes).
+     * <p>The MIFARE Ultralight protocol always reads 4 pages at a time.
+     * <p>If the read spans past the last readable block, then the tag will
+     * return pages that have been wrapped back to the first blocks. MIFARE
+     * Ultralight tags have readable blocks 0x00 through 0x0F. So a read to
+     * block offset 0x0E would return blocks 0x0E, 0x0F, 0x00, 0x01. MIFARE
+     * Ultralight C tags have readable blocks 0x00 through 0x2B. So a read to
+     * block 0x2A would return blocks 0x2A, 0x2B, 0x00, 0x01.
+     * <p>This requires that the tag be connected.
+     *
+     * @return 4 pages (16 bytes)
+     * @throws IOException
+     */
+    public byte[] readPages(int pageOffset) throws IOException {
+        validatePageOffset(pageOffset);
+        checkConnected();
+
+        byte[] cmd = { 0x30, (byte) pageOffset};
+        return transceive(cmd, false);
+    }
+
+    /**
+     * Write 1 page (4 bytes).
+     * <p>The MIFARE Ultralight protocol always writes 1 page at a time.
+     * <p>This requires that the tag be connected.
+     *
+     * @param pageOffset The offset of the page to write
+     * @param data The data to write
+     * @throws IOException
+     */
+    public void writePage(int pageOffset, byte[] data) throws IOException {
+        validatePageOffset(pageOffset);
+        checkConnected();
+
+        byte[] cmd = new byte[data.length + 2];
+        cmd[0] = (byte) 0xA2;
+        cmd[1] = (byte) pageOffset;
+        System.arraycopy(data, 0, cmd, 2, data.length);
+
+        transceive(cmd, false);
+    }
+
+    /**
+     * Send raw NfcA data to a tag and receive the response.
+     * <p>
+     * This method will block until the response is received. It can be canceled
+     * with {@link #close}.
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
+     * <p>This requires a that the tag be connected.
+     *
+     * @param data bytes to send
+     * @return bytes received in response
+     * @throws IOException if the target is lost or connection closed
+     */
+    public byte[] transceive(byte[] data) throws IOException {
+        return transceive(data, true);
+    }
+
+    private static void validatePageOffset(int pageOffset) {
+        // Do not be too strict on upper bounds checking, since some cards
+        // may have more addressable memory than they report.
+        // Note that issuing a command to an out-of-bounds block is safe - the
+        // tag will wrap the read to an addressable area. This validation is a
+        // helper to guard against obvious programming mistakes.
+        if (pageOffset < 0 || pageOffset >= MAX_PAGE_COUNT) {
+            throw new IndexOutOfBoundsException("page out of bounds: " + pageOffset);
+        }
+    }
+}
diff --git a/core/java/android/nfc/technology/Ndef.java b/core/java/android/nfc/tech/Ndef.java
similarity index 69%
rename from core/java/android/nfc/technology/Ndef.java
rename to core/java/android/nfc/tech/Ndef.java
index 05872fe..c6804f9 100644
--- a/core/java/android/nfc/technology/Ndef.java
+++ b/core/java/android/nfc/tech/Ndef.java
@@ -14,30 +14,34 @@
  * limitations under the License.
  */
 
-package android.nfc.technology;
+package android.nfc.tech;
 
 import android.nfc.ErrorCodes;
 import android.nfc.FormatException;
+import android.nfc.INfcTag;
 import android.nfc.NdefMessage;
 import android.nfc.NfcAdapter;
 import android.nfc.Tag;
 import android.os.Bundle;
 import android.os.RemoteException;
+import android.util.Log;
 
 import java.io.IOException;
 
 /**
  * A high-level connection to a {@link Tag} using one of the NFC type 1, 2, 3, or 4 technologies
  * to interact with NDEF data. MiFare Classic cards that present NDEF data may also be used
- * via this class. To determine the exact technology being used call {@link #getTechnologyId()}
+ * via this class. To determine the exact technology being used call {@link #getType()}
  *
- * <p>You can acquire this kind of connection with {@link Tag#getTechnology(int)}.
+ * <p>You can acquire this kind of connection with {@link #get}.
  *
  * <p class="note"><strong>Note:</strong>
  * Use of this class requires the {@link android.Manifest.permission#NFC}
  * permission.
  */
 public final class Ndef extends BasicTagTechnology {
+    private static final String TAG = "NFC";
+
     /** @hide */
     public static final int NDEF_MODE_READ_ONLY = 1;
     /** @hide */
@@ -57,14 +61,12 @@
     /** @hide */
     public static final String EXTRA_NDEF_TYPE = "ndeftype";
 
-    //TODO: consider removing OTHER entirely - and not allowing Ndef to
-    // enumerate for tag types outside of (NFC Forum 1-4, MifareClassic)
     public static final int OTHER = -1;
     public static final int NFC_FORUM_TYPE_1 = 1;
     public static final int NFC_FORUM_TYPE_2 = 2;
     public static final int NFC_FORUM_TYPE_3 = 3;
     public static final int NFC_FORUM_TYPE_4 = 4;
-    public static final int MIFARE_CLASSIC = 105;
+    public static final int MIFARE_CLASSIC = 101;
 
     private final int mMaxNdefSize;
     private final int mCardState;
@@ -72,11 +74,27 @@
     private final int mNdefType;
 
     /**
+     * Returns an instance of this tech for the given tag. If the tag doesn't support
+     * this tech type null is returned.
+     *
+     * @param tag The tag to get the tech from
+     */
+    public static Ndef get(Tag tag) {
+        if (!tag.hasTech(TagTechnology.NDEF)) return null;
+        try {
+            return new Ndef(tag);
+        } catch (RemoteException e) {
+            return null;
+        }
+    }
+
+    /**
      * Internal constructor, to be used by NfcAdapter
      * @hide
      */
-    public Ndef(NfcAdapter adapter, Tag tag, int tech, Bundle extras) throws RemoteException {
-        super(adapter, tag, tech);
+    public Ndef(Tag tag) throws RemoteException {
+        super(tag, TagTechnology.NDEF);
+        Bundle extras = tag.getTechExtras(TagTechnology.NDEF);
         if (extras != null) {
             mMaxNdefSize = extras.getInt(EXTRA_NDEF_MAXLENGTH);
             mCardState = extras.getInt(EXTRA_NDEF_CARDSTATE);
@@ -97,15 +115,6 @@
     }
 
     /**
-     * Get optional extra NDEF messages.
-     * Some tags may contain extra NDEF messages, but not all
-     * implementations will be able to read them.
-     */
-    public NdefMessage[] getExtraNdefMessage() throws IOException, FormatException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
      * Get NDEF tag type.
      * <p>Returns one of {@link #NFC_FORUM_TYPE_1}, {@link #NFC_FORUM_TYPE_2},
      * {@link #NFC_FORUM_TYPE_3}, {@link #NFC_FORUM_TYPE_4},
@@ -148,11 +157,12 @@
         checkConnected();
 
         try {
+            INfcTag tagService = mTag.getTagService();
             int serviceHandle = mTag.getServiceHandle();
-            if (mTagService.isNdef(serviceHandle)) {
-                NdefMessage msg = mTagService.ndefRead(serviceHandle);
+            if (tagService.isNdef(serviceHandle)) {
+                NdefMessage msg = tagService.ndefRead(serviceHandle);
                 if (msg == null) {
-                    int errorCode = mTagService.getLastError(serviceHandle);
+                    int errorCode = tagService.getLastError(serviceHandle);
                     switch (errorCode) {
                         case ErrorCodes.ERROR_IO:
                             throw new IOException();
@@ -168,7 +178,7 @@
                 return null;
             }
         } catch (RemoteException e) {
-            attemptDeadServiceRecovery(e);
+            Log.e(TAG, "NFC service dead", e);
             return null;
         }
     }
@@ -181,9 +191,10 @@
         checkConnected();
 
         try {
+            INfcTag tagService = mTag.getTagService();
             int serviceHandle = mTag.getServiceHandle();
-            if (mTagService.isNdef(serviceHandle)) {
-                int errorCode = mTagService.ndefWrite(serviceHandle, msg);
+            if (tagService.isNdef(serviceHandle)) {
+                int errorCode = tagService.ndefWrite(serviceHandle, msg);
                 switch (errorCode) {
                     case ErrorCodes.SUCCESS:
                         break;
@@ -200,67 +211,54 @@
                 throw new IOException("Tag is not ndef");
             }
         } catch (RemoteException e) {
-            attemptDeadServiceRecovery(e);
+            Log.e(TAG, "NFC service dead", e);
         }
     }
 
     /**
-     * Attempt to write extra NDEF messages.
-     * Implementations may be able to write extra NDEF
-     * message after the first primary message, but it is not
-     * guaranteed. Even if it can be written, other implementations
-     * may not be able to read NDEF messages after the primary message.
-     * It is recommended to use additional NDEF records instead.
-     *
-     * @throws IOException
+     * Indicates whether a tag can be made read-only with
+     * {@link #makeReadonly()}
      */
-    public void writeExtraNdefMessage(int i, NdefMessage msg) throws IOException, FormatException {
-        checkConnected();
-
-        throw new UnsupportedOperationException();
+    public boolean canMakeReadonly() {
+        if (mNdefType == NFC_FORUM_TYPE_1 || mNdefType == NFC_FORUM_TYPE_2) {
+            return true;
+        } else {
+            return false;
+        }
     }
 
     /**
-     * Set the CC field to indicate this tag is read-only
+     * Sets the CC field to indicate this tag is read-only
+     * and permanently sets the lock bits to prevent any further NDEF
+     * modifications.
+     * This is a one-way process and can not be reverted!
      * @throws IOException
      */
     public boolean makeReadonly() throws IOException {
         checkConnected();
 
         try {
-            int errorCode = mTagService.ndefMakeReadOnly(mTag.getServiceHandle());
-            switch (errorCode) {
-                case ErrorCodes.SUCCESS:
-                    return true;
-                case ErrorCodes.ERROR_IO:
-                    throw new IOException();
-                case ErrorCodes.ERROR_INVALID_PARAM:
-                    return false;
-                default:
-                    // Should not happen
-                    throw new IOException();
-            }
+            INfcTag tagService = mTag.getTagService();
+            if (tagService.isNdef(mTag.getServiceHandle())) {
+                int errorCode = tagService.ndefMakeReadOnly(mTag.getServiceHandle());
+                switch (errorCode) {
+                    case ErrorCodes.SUCCESS:
+                        return true;
+                    case ErrorCodes.ERROR_IO:
+                        throw new IOException();
+                    case ErrorCodes.ERROR_INVALID_PARAM:
+                        return false;
+                    default:
+                        // Should not happen
+                        throw new IOException();
+                }
+           }
+           else {
+               throw new IOException("Tag is not ndef");
+           }
         } catch (RemoteException e) {
-            attemptDeadServiceRecovery(e);
+            Log.e(TAG, "NFC service dead", e);
             return false;
         }
     }
-
-    /**
-     * Attempt to use tag specific technology to really make
-     * the tag read-only
-     * For NFC Forum Type 1 and 2 only.
-     */
-    public void makeLowLevelReadonly() {
-        checkConnected();
-
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public byte[] transceive(byte[] data) {
-        checkConnected();
-
-        throw new UnsupportedOperationException();
-    }
 }
diff --git a/core/java/android/nfc/technology/NdefFormatable.java b/core/java/android/nfc/tech/NdefFormatable.java
similarity index 70%
rename from core/java/android/nfc/technology/NdefFormatable.java
rename to core/java/android/nfc/tech/NdefFormatable.java
index 222c558..2919c43 100644
--- a/core/java/android/nfc/technology/NdefFormatable.java
+++ b/core/java/android/nfc/tech/NdefFormatable.java
@@ -14,34 +14,52 @@
  * limitations under the License.
  */
 
-package android.nfc.technology;
+package android.nfc.tech;
 
 import android.nfc.ErrorCodes;
 import android.nfc.FormatException;
+import android.nfc.INfcTag;
 import android.nfc.NdefMessage;
 import android.nfc.NfcAdapter;
 import android.nfc.Tag;
-import android.os.Bundle;
 import android.os.RemoteException;
+import android.util.Log;
 
 import java.io.IOException;
 
 /**
  * An interface to a {@link Tag} allowing to format the tag as NDEF.
  *
- * <p>You can acquire this kind of interface with {@link Tag#getTechnology(int)}.
+ * <p>You can acquire this kind of connection with {@link #get}.
  *
  * <p class="note"><strong>Note:</strong>
  * Use of this class requires the {@link android.Manifest.permission#NFC}
  * permission.
  */
 public final class NdefFormatable extends BasicTagTechnology {
+    private static final String TAG = "NFC";
+
+    /**
+     * Returns an instance of this tech for the given tag. If the tag doesn't support
+     * this tech type null is returned.
+     *
+     * @param tag The tag to get the tech from
+     */
+    public static NdefFormatable get(Tag tag) {
+        if (!tag.hasTech(TagTechnology.NDEF_FORMATABLE)) return null;
+        try {
+            return new NdefFormatable(tag);
+        } catch (RemoteException e) {
+            return null;
+        }
+    }
+
     /**
      * Internal constructor, to be used by NfcAdapter
      * @hide
      */
-    public NdefFormatable(NfcAdapter adapter, Tag tag, int tech, Bundle extras) throws RemoteException {
-        super(adapter, tag, tech);
+    public NdefFormatable(Tag tag) throws RemoteException {
+        super(tag, TagTechnology.NDEF_FORMATABLE);
     }
 
     /**
@@ -52,10 +70,9 @@
         checkConnected();
 
         try {
-            byte[] DEFAULT_KEY = {(byte)0xFF,(byte)0xFF,(byte)0xFF,
-                                  (byte)0xFF,(byte)0xFF,(byte)0xFF};
             int serviceHandle = mTag.getServiceHandle();
-            int errorCode = mTagService.formatNdef(serviceHandle, DEFAULT_KEY);
+            INfcTag tagService = mTag.getTagService();
+            int errorCode = tagService.formatNdef(serviceHandle, MifareClassic.KEY_DEFAULT);
             switch (errorCode) {
                 case ErrorCodes.SUCCESS:
                     break;
@@ -68,8 +85,8 @@
                     throw new IOException();
             }
             // Now check and see if the format worked
-            if (mTagService.isNdef(serviceHandle)) {
-                errorCode = mTagService.ndefWrite(serviceHandle, firstMessage);
+            if (tagService.isNdef(serviceHandle)) {
+                errorCode = tagService.ndefWrite(serviceHandle, firstMessage);
                 switch (errorCode) {
                     case ErrorCodes.SUCCESS:
                         break;
@@ -85,14 +102,7 @@
                 throw new IOException();
             }
         } catch (RemoteException e) {
-            attemptDeadServiceRecovery(e);
+            Log.e(TAG, "NFC service dead", e);
         }
     }
-
-    @Override
-    public byte[] transceive(byte[] data) {
-        checkConnected();
-
-        throw new UnsupportedOperationException();
-    }
 }
diff --git a/core/java/android/nfc/tech/NfcA.java b/core/java/android/nfc/tech/NfcA.java
new file mode 100644
index 0000000..24badc4
--- /dev/null
+++ b/core/java/android/nfc/tech/NfcA.java
@@ -0,0 +1,99 @@
+/*
+ * 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.tech;
+
+import android.nfc.Tag;
+import android.os.Bundle;
+import android.os.RemoteException;
+
+import java.io.IOException;
+
+/**
+ * A low-level connection to a {@link Tag} using the NFC-A technology, also known as
+ * ISO1443-3A.
+ *
+ * <p>You can acquire this kind of connection with {@link #get}.
+ * Use this class to send and receive data with {@link #transceive transceive()}.
+ *
+ * <p>Applications must implement their own protocol stack on top of
+ * {@link #transceive transceive()}.
+ *
+ * <p class="note"><strong>Note:</strong>
+ * Use of this class requires the {@link android.Manifest.permission#NFC}
+ * permission.
+ */
+public final class NfcA extends BasicTagTechnology {
+    /** @hide */
+    public static final String EXTRA_SAK = "sak";
+    /** @hide */
+    public static final String EXTRA_ATQA = "atqa";
+
+    private short mSak;
+    private byte[] mAtqa;
+
+    /**
+     * Returns an instance of this tech for the given tag. If the tag doesn't support
+     * this tech type null is returned.
+     *
+     * @param tag The tag to get the tech from
+     */
+    public static NfcA get(Tag tag) {
+        if (!tag.hasTech(TagTechnology.NFC_A)) return null;
+        try {
+            return new NfcA(tag);
+        } catch (RemoteException e) {
+            return null;
+        }
+    }
+
+    /** @hide */
+    public NfcA(Tag tag) throws RemoteException {
+        super(tag, TagTechnology.NFC_A);
+        Bundle extras = tag.getTechExtras(TagTechnology.NFC_A);
+        mSak = extras.getShort(EXTRA_SAK);
+        mAtqa = extras.getByteArray(EXTRA_ATQA);
+    }
+
+    /**
+     * Returns the ATQA/SENS_RES bytes discovered at tag discovery.
+     */
+    public byte[] getAtqa() {
+        return mAtqa;
+    }
+
+    /**
+     * Returns the SAK/SEL_RES discovered at tag discovery.
+     */
+    public short getSak() {
+        return mSak;
+    }
+
+    /**
+     * Send data to a tag and receive the response.
+     * <p>
+     * This method will block until the response is received. It can be canceled
+     * with {@link #close}.
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
+     *
+     * @param data bytes to send
+     * @return bytes received in response
+     * @throws IOException if the target is lost or connection closed
+     */
+    public byte[] transceive(byte[] data) throws IOException {
+        return transceive(data, true);
+    }
+}
diff --git a/core/java/android/nfc/technology/NfcB.java b/core/java/android/nfc/tech/NfcB.java
similarity index 60%
rename from core/java/android/nfc/technology/NfcB.java
rename to core/java/android/nfc/tech/NfcB.java
index 267c94d..abeef32 100644
--- a/core/java/android/nfc/technology/NfcB.java
+++ b/core/java/android/nfc/tech/NfcB.java
@@ -14,18 +14,19 @@
  * limitations under the License.
  */
 
-package android.nfc.technology;
+package android.nfc.tech;
 
-import android.nfc.NfcAdapter;
 import android.nfc.Tag;
 import android.os.Bundle;
 import android.os.RemoteException;
 
+import java.io.IOException;
+
 /**
  * A low-level connection to a {@link Tag} using the NFC-B technology, also known as
  * ISO1443-3B.
  *
- * <p>You can acquire this kind of connection with {@link Tag#getTechnology(int)}.
+ * <p>You can acquire this kind of connection with {@link #get}.
  * Use this class to send and receive data with {@link #transceive transceive()}.
  *
  * <p>Applications must implement their own protocol stack on top of
@@ -44,9 +45,25 @@
     private byte[] mAppData;
     private byte[] mProtInfo;
 
-    public NfcB(NfcAdapter adapter, Tag tag, Bundle extras)
-            throws RemoteException {
-        super(adapter, tag, TagTechnology.NFC_B);
+    /**
+     * Returns an instance of this tech for the given tag. If the tag doesn't support
+     * this tech type null is returned.
+     *
+     * @param tag The tag to get the tech from
+     */
+    public static NfcB get(Tag tag) {
+        if (!tag.hasTech(TagTechnology.NFC_B)) return null;
+        try {
+            return new NfcB(tag);
+        } catch (RemoteException e) {
+            return null;
+        }
+    }
+
+    /** @hide */
+    public NfcB(Tag tag) throws RemoteException {
+        super(tag, TagTechnology.NFC_B);
+        Bundle extras = tag.getTechExtras(TagTechnology.NFC_B);
         mAppData = extras.getByteArray(EXTRA_APPDATA);
         mProtInfo = extras.getByteArray(EXTRA_PROTINFO);
     }
@@ -67,4 +84,18 @@
         return mProtInfo;
     }
 
+    /**
+     * Send data to a tag and receive the response.
+     * <p>
+     * This method will block until the response is received. It can be canceled
+     * with {@link #close}.
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
+     *
+     * @param data bytes to send
+     * @return bytes received in response
+     * @throws IOException if the target is lost or connection closed
+     */
+    public byte[] transceive(byte[] data) throws IOException {
+        return transceive(data, true);
+    }
 }
diff --git a/core/java/android/nfc/tech/NfcF.java b/core/java/android/nfc/tech/NfcF.java
new file mode 100644
index 0000000..f617739
--- /dev/null
+++ b/core/java/android/nfc/tech/NfcF.java
@@ -0,0 +1,95 @@
+/*
+ * 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.tech;
+
+import android.nfc.Tag;
+import android.os.Bundle;
+import android.os.RemoteException;
+
+import java.io.IOException;
+
+/**
+ * A low-level connection to a {@link Tag} using the NFC-F technology, also known as
+ * JIS6319-4.
+ *
+ * <p>You can acquire this kind of connection with {@link #get}.
+ * Use this class to send and receive data with {@link #transceive transceive()}.
+ *
+ * <p>Applications must implement their own protocol stack on top of
+ * {@link #transceive transceive()}.
+ *
+ * <p class="note"><strong>Note:</strong>
+ * Use of this class requires the {@link android.Manifest.permission#NFC}
+ * permission.
+ */
+public final class NfcF extends BasicTagTechnology {
+    /** @hide */
+    public static final String EXTRA_SC = "systemcode";
+    /** @hide */
+    public static final String EXTRA_PMM = "pmm";
+
+    private byte[] mSystemCode = null;
+    private byte[] mManufacturer = null;
+
+    /**
+     * Returns an instance of this tech for the given tag. If the tag doesn't support
+     * this tech type null is returned.
+     *
+     * @param tag The tag to get the tech from
+     */
+    public static NfcF get(Tag tag) {
+        if (!tag.hasTech(TagTechnology.NFC_F)) return null;
+        try {
+            return new NfcF(tag);
+        } catch (RemoteException e) {
+            return null;
+        }
+    }
+
+    /** @hide */
+    public NfcF(Tag tag) throws RemoteException {
+        super(tag, TagTechnology.NFC_F);
+        Bundle extras = tag.getTechExtras(TagTechnology.NFC_F);
+        if (extras != null) {
+            mSystemCode = extras.getByteArray(EXTRA_SC);
+            mManufacturer = extras.getByteArray(EXTRA_PMM);
+        }
+    }
+
+    public byte[] getSystemCode() {
+      return mSystemCode;
+    }
+
+    public byte[] getManufacturer() {
+      return mManufacturer;
+    }
+
+    /**
+     * Send data to a tag and receive the response.
+     * <p>
+     * This method will block until the response is received. It can be canceled
+     * with {@link #close}.
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
+     *
+     * @param data bytes to send
+     * @return bytes received in response
+     * @throws IOException if the target is lost or connection closed
+     */
+    public byte[] transceive(byte[] data) throws IOException {
+        return transceive(data, true);
+    }
+}
diff --git a/core/java/android/nfc/tech/NfcV.java b/core/java/android/nfc/tech/NfcV.java
new file mode 100644
index 0000000..8e1f066
--- /dev/null
+++ b/core/java/android/nfc/tech/NfcV.java
@@ -0,0 +1,94 @@
+/*
+ * 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.tech;
+
+import android.nfc.Tag;
+import android.os.Bundle;
+import android.os.RemoteException;
+
+import java.io.IOException;
+
+/**
+ * A low-level connection to a {@link Tag} using NFC vicinity technology, also known as
+ * ISO15693.
+ *
+ * <p>You can acquire this kind of connection with {@link #get}.
+ * Use this class to send and receive data with {@link #transceive transceive()}.
+ *
+ * <p>Applications must implement their own protocol stack on top of
+ * {@link #transceive transceive()}.
+ *
+ * <p class="note"><strong>Note:</strong>
+ * Use of this class requires the {@link android.Manifest.permission#NFC}
+ * permission.
+ */
+public final class NfcV extends BasicTagTechnology {
+    /** @hide */
+    public static final String EXTRA_RESP_FLAGS = "respflags";
+
+    /** @hide */
+    public static final String EXTRA_DSFID = "dsfid";
+
+    private byte mRespFlags;
+    private byte mDsfId;
+
+    /**
+     * Returns an instance of this tech for the given tag. If the tag doesn't support
+     * this tech type null is returned.
+     *
+     * @param tag The tag to get the tech from
+     */
+    public static NfcV get(Tag tag) {
+        if (!tag.hasTech(TagTechnology.NFC_V)) return null;
+        try {
+            return new NfcV(tag);
+        } catch (RemoteException e) {
+            return null;
+        }
+    }
+
+    /** @hide */
+    public NfcV(Tag tag) throws RemoteException {
+        super(tag, TagTechnology.NFC_V);
+        Bundle extras = tag.getTechExtras(TagTechnology.NFC_V);
+        mRespFlags = extras.getByte(EXTRA_RESP_FLAGS);
+        mDsfId = extras.getByte(EXTRA_DSFID);
+    }
+
+    public byte getResponseFlags() {
+        return mRespFlags;
+    }
+
+    public byte getDsfId() {
+        return mDsfId;
+    }
+
+    /**
+     * Send data to a tag and receive the response.
+     * <p>
+     * This method will block until the response is received. It can be canceled
+     * with {@link #close}.
+     * <p>Requires {@link android.Manifest.permission#NFC} permission.
+     *
+     * @param data bytes to send
+     * @return bytes received in response
+     * @throws IOException if the target is lost or connection closed
+     */
+    public byte[] transceive(byte[] data) throws IOException {
+        return transceive(data, true);
+    }
+}
diff --git a/core/java/android/nfc/tech/TagTechnology.java b/core/java/android/nfc/tech/TagTechnology.java
new file mode 100644
index 0000000..c8ccdcf
--- /dev/null
+++ b/core/java/android/nfc/tech/TagTechnology.java
@@ -0,0 +1,140 @@
+/*
+ * 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.tech;
+
+import android.nfc.Tag;
+
+import java.io.Closeable;
+import java.io.IOException;
+
+public interface TagTechnology extends Closeable {
+    /**
+     * This technology is an instance of {@link NfcA}.
+     * <p>Support for this technology type is mandatory.
+     * @hide
+     */
+    public static final int NFC_A = 1;
+
+    /**
+     * This technology is an instance of {@link NfcB}.
+     * <p>Support for this technology type is mandatory.
+     * @hide
+     */
+    public static final int NFC_B = 2;
+
+    /**
+     * This technology is an instance of {@link IsoDep}.
+     * <p>Support for this technology type is mandatory.
+     * @hide
+     */
+    public static final int ISO_DEP = 3;
+
+    /**
+     * This technology is an instance of {@link NfcF}.
+     * <p>Support for this technology type is mandatory.
+     * @hide
+     */
+    public static final int NFC_F = 4;
+
+    /**
+     * This technology is an instance of {@link NfcV}.
+     * <p>Support for this technology type is mandatory.
+     * @hide
+     */
+    public static final int NFC_V = 5;
+
+    /**
+     * This technology is an instance of {@link Ndef}.
+     * <p>Support for this technology type is mandatory.
+     * @hide
+     */
+    public static final int NDEF = 6;
+
+    /**
+     * This technology is an instance of {@link NdefFormatable}.
+     * <p>Support for this technology type is mandatory.
+     * @hide
+     */
+    public static final int NDEF_FORMATABLE = 7;
+
+    /**
+     * This technology is an instance of {@link MifareClassic}.
+     * <p>Support for this technology type is optional. If a stack doesn't support this technology
+     * type tags using it must still be discovered and present the lower level radio interface
+     * technologies in use.
+     * @hide
+     */
+    public static final int MIFARE_CLASSIC = 8;
+
+    /**
+     * This technology is an instance of {@link MifareUltralight}.
+     * <p>Support for this technology type is optional. If a stack doesn't support this technology
+     * type tags using it must still be discovered and present the lower level radio interface
+     * technologies in use.
+     * @hide
+     */
+    public static final int MIFARE_ULTRALIGHT = 9;
+
+    /**
+     * Get the {@link Tag} object this technology came from.
+     */
+    public Tag getTag();
+
+    /**
+     * Opens a connection to the {@link Tag} enabling interactive commands. The command set
+     * varies by the technology type.
+     *
+     * <p>This method blocks until the connection has been established.
+     *
+     * <p>A call to {@link #close} from another thread will cancel a blocked call and cause an
+     * IOException to be thrown on the thread that is blocked.
+     *
+     * @see #reconnect()
+     * @see #close()
+     * @throws IOException if the target is lost, or connect canceled
+     */
+    public void connect() throws IOException;
+
+    /**
+     * Re-connect to the {@link Tag} associated with this connection. Reconnecting to a tag can be
+     * used to reset the state of the tag itself.
+     *
+     * <p>This method blocks until the connection is re-established.
+     *
+     * <p>A call to {@link #close} from another thread will cancel a blocked call and cause an
+     * IOException to be thrown on the thread that is blocked.
+     *
+     * @see #connect()
+     * @see #close()
+     * @throws IOException
+     */
+    public void reconnect() throws IOException;
+
+    /**
+     * Closes the connection to the {@link Tag}. This call is non-blocking and causes all blocking
+     * operations such as {@link #connect} to be canceled and immediately throw
+     * {@link java.io.IOException} on the thread that is blocked.
+     *
+     * <p>
+     * Once this method is called, this object cannot be re-used and should be discarded. Further
+     * calls to {@link #connect} will fail.
+     *
+     * @see #connect()
+     * @see #reconnect()
+     */
+    public void close() throws IOException;
+}
diff --git a/core/java/android/nfc/technology/BasicTagTechnology.java b/core/java/android/nfc/technology/BasicTagTechnology.java
deleted file mode 100644
index 553f6ec..0000000
--- a/core/java/android/nfc/technology/BasicTagTechnology.java
+++ /dev/null
@@ -1,254 +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 android.nfc.technology;
-
-import java.io.IOException;
-
-import android.nfc.INfcAdapter;
-import android.nfc.INfcTag;
-import android.nfc.NfcAdapter;
-import android.nfc.Tag;
-import android.nfc.ErrorCodes;
-import android.os.RemoteException;
-import android.util.Log;
-
-/**
- * A base class for tag technologies that are built on top of transceive().
- */
-/* package */ abstract class BasicTagTechnology implements TagTechnology {
-
-    /*package*/ final Tag mTag;
-    /*package*/ boolean mIsConnected;
-    /*package*/ int mSelectedTechnology;
-    private final NfcAdapter mAdapter;
-
-    // Following fields are final after construction, except for
-    // during attemptDeadServiceRecovery() when NFC crashes.
-    // Not locked - we accept a best effort attempt when NFC crashes.
-    /*package*/ INfcAdapter mService;
-    /*package*/ INfcTag mTagService;
-
-    private static final String TAG = "NFC";
-
-    /**
-     * @hide
-     */
-    public BasicTagTechnology(NfcAdapter adapter, Tag tag, int tech) throws RemoteException {
-        int[] techList = tag.getTechnologyList();
-        int i;
-
-        // Check target validity
-        for (i = 0; i < techList.length; i++) {
-            if (tech == techList[i]) {
-                break;
-            }
-        }
-        if (i >= techList.length) {
-            // Technology not found
-            throw new IllegalArgumentException("Technology " + tech + " not present on tag " + tag);
-        }
-
-        mAdapter = adapter;
-        mService = mAdapter.getService();
-        try {
-          mTagService = mService.getNfcTagInterface();
-        } catch (RemoteException e) {
-            attemptDeadServiceRecovery(e);
-        }
-        mTag = tag;
-        mSelectedTechnology = tech;
-    }
-
-    /**
-     * @hide
-     */
-    public BasicTagTechnology(NfcAdapter adapter, Tag tag) throws RemoteException {
-        this(adapter, tag, tag.getTechnologyList()[0]);
-    }
-
-    /** NFC service dead - attempt best effort recovery */
-    /*package*/ void attemptDeadServiceRecovery(Exception e) {
-        mAdapter.attemptDeadServiceRecovery(e);
-        /* assigning to mService is not thread-safe, but this is best-effort code
-         * and on a well-behaved system should never happen */
-        mService = mAdapter.getService();
-        try {
-            mTagService = mService.getNfcTagInterface();
-        } catch (RemoteException e2) {
-            Log.e(TAG, "second RemoteException trying to recover from dead NFC service", e2);
-        }
-    }
-
-    /**
-     * Get the {@link Tag} this connection is associated with.
-     * <p>Requires {@link android.Manifest.permission#NFC} permission.
-     */
-    @Override
-    public Tag getTag() {
-        return mTag;
-    }
-
-    public void checkConnected() {
-       if ((mTag.getConnectedTechnology() != getTechnologyId()) ||
-               (mTag.getConnectedTechnology() == -1)) {
-           throw new IllegalStateException("Call connect() first!");
-       }
-    }
-
-    /**
-     * <p>Requires {@link android.Manifest.permission#NFC} permission.
-     */
-    @Override
-    public int getTechnologyId() {
-        return mSelectedTechnology;
-    }
-
-    /**
-     * Helper to indicate if {@link #transceive transceive()} calls might succeed.
-     * <p>
-     * Does not cause RF activity, and does not block.
-     * <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
-     * returns true.
-     */
-    public boolean isConnected() {
-        if (!mIsConnected) {
-            return false;
-        }
-
-        try {
-            return mTagService.isPresent(mTag.getServiceHandle());
-        } catch (RemoteException e) {
-            attemptDeadServiceRecovery(e);
-            return false;
-        }
-    }
-
-    /**
-     * Connect to the {@link Tag} associated with this connection.
-     * <p>
-     * This method blocks until the connection is established.
-     * <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
-     */
-    @Override
-    public void connect() throws IOException {
-        try {
-            int errorCode = mTagService.connect(mTag.getServiceHandle(), getTechnologyId());
-
-            if (errorCode == ErrorCodes.SUCCESS) {
-                // Store this in the tag object
-                mTag.setConnectedTechnology(getTechnologyId());
-                mIsConnected = true;
-            } else {
-                throw new IOException();
-            }
-        } catch (RemoteException e) {
-            attemptDeadServiceRecovery(e);
-            throw new IOException("NFC service died");
-        }
-    }
-
-    /**
-     * Re-connect to the {@link Tag} associated with this connection.
-     * <p>
-     * Reconnecting to a tag can be used to reset the state of the tag itself.
-     * This method blocks until the connection is re-established.
-     * <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
-     */
-    @Override
-    public void reconnect() throws IOException {
-        if (!mIsConnected) {
-            throw new IllegalStateException("Technology not connected yet");
-        } else {
-            try {
-                int errorCode = mTagService.reconnect(mTag.getServiceHandle());
-
-                if (errorCode != ErrorCodes.SUCCESS) {
-                    mIsConnected = false;
-                    mTag.setTechnologyDisconnected();
-                    throw new IOException();
-                }
-            } catch (RemoteException e) {
-                mIsConnected = false;
-                mTag.setTechnologyDisconnected();
-                attemptDeadServiceRecovery(e);
-                throw new IOException("NFC service died");
-            }
-        }
-    }
-
-    /**
-     * Close this connection.
-     * <p>
-     * Causes blocking operations such as {@link #transceive transceive()} or {@link #connect} to
-     * be canceled and immediately throw {@link java.io.IOException}.
-     * <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.
-     */
-    @Override
-    public void close() {
-        try {
-            /* Note that we don't want to physically disconnect the tag,
-             * but just reconnect to it to reset its state
-             */
-            mTagService.reconnect(mTag.getServiceHandle());
-        } catch (RemoteException e) {
-            attemptDeadServiceRecovery(e);
-        } finally {
-            mIsConnected = false;
-            mTag.setTechnologyDisconnected();
-        }
-    }
-
-    /**
-     * Send data to a tag and receive the response.
-     * <p>
-     * This method will block until the response is received. It can be canceled
-     * with {@link #close}.
-     * <p>Requires {@link android.Manifest.permission#NFC} permission.
-     *
-     * @param data bytes to send
-     * @return bytes received in response
-     * @throws IOException if the target is lost or connection closed
-     */
-    public byte[] transceive(byte[] data) throws IOException {
-        checkConnected();
-
-        try {
-            byte[] response = mTagService.transceive(mTag.getServiceHandle(), data, true);
-            if (response == null) {
-                throw new IOException("transceive failed");
-            }
-            return response;
-        } catch (RemoteException e) {
-            attemptDeadServiceRecovery(e);
-            throw new IOException("NFC service died");
-        }
-    }
-}
diff --git a/core/java/android/nfc/technology/IsoDep.java b/core/java/android/nfc/technology/IsoDep.java
deleted file mode 100644
index 32a7542..0000000
--- a/core/java/android/nfc/technology/IsoDep.java
+++ /dev/null
@@ -1,67 +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 android.nfc.technology;
-
-import android.nfc.NfcAdapter;
-import android.nfc.Tag;
-import android.os.Bundle;
-import android.os.RemoteException;
-
-import java.io.IOException;
-
-/**
- * A low-level connection to a {@link Tag} using the ISO-DEP technology, also known as
- * ISO1443-4.
- *
- * <p>You can acquire this kind of connection with {@link Tag#getTechnology(int)}.
- * Use this class to send and receive data with {@link #transceive transceive()}.
- *
- * <p>Applications must implement their own protocol stack on top of
- * {@link #transceive transceive()}.
- *
- * <p class="note"><strong>Note:</strong>
- * Use of this class requires the {@link android.Manifest.permission#NFC}
- * permission.
- */
-public final class IsoDep extends BasicTagTechnology {
-    /** @hide */
-    public static final String EXTRA_HI_LAYER_RESP = "hiresp";
-    /** @hide */
-    public static final String EXTRA_HIST_BYTES = "histbytes";
-
-    private byte[] mHiLayerResponse = null;
-    private byte[] mHistBytes = null;
-
-    public IsoDep(NfcAdapter adapter, Tag tag, Bundle extras)
-            throws RemoteException {
-        super(adapter, tag, TagTechnology.ISO_DEP);
-        if (extras != null) {
-            mHiLayerResponse = extras.getByteArray(EXTRA_HI_LAYER_RESP);
-            mHistBytes = extras.getByteArray(EXTRA_HIST_BYTES);
-        }
-    }
-
-    /**
-     * 3A only
-     */
-    public byte[] getHistoricalBytes() { return mHistBytes; }
-
-    /**
-     * 3B only
-     */
-    public byte[] getHiLayerResponse() { return mHiLayerResponse; }
-}
diff --git a/core/java/android/nfc/technology/MifareClassic.java b/core/java/android/nfc/technology/MifareClassic.java
deleted file mode 100644
index 799f0a78..0000000
--- a/core/java/android/nfc/technology/MifareClassic.java
+++ /dev/null
@@ -1,404 +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 android.nfc.technology;
-
-import android.nfc.NfcAdapter;
-import android.nfc.Tag;
-import android.os.Bundle;
-import android.os.RemoteException;
-
-import java.io.IOException;
-
-/**
- * Concrete class for TagTechnology.MIFARE_CLASSIC
- *
- * Mifare classic has n sectors, with varying sizes, although
- * they are at least the same pattern for any one mifare classic
- * product. Each sector has two keys. Authentication with the correct
- * key is needed before access to any sector.
- *
- * Each sector has k blocks.
- * Block size is constant across the whole mifare classic family.
- */
-public final class MifareClassic extends BasicTagTechnology {
-    /**
-     * The well-known, default MIFARE read key.
-     * Use this key to effectively make the payload in this sector
-     * public.
-     */
-    public static final byte[] KEY_DEFAULT =
-            {(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF};
-    /**
-     * The well-known, default Mifare Application Directory read key.
-     */
-    public static final byte[] KEY_MIFARE_APPLICATION_DIRECTORY =
-            {(byte)0xA0,(byte)0xA1,(byte)0xA2,(byte)0xA3,(byte)0xA4,(byte)0xA5};
-    /**
-     * The well-known, default read key for NDEF data on a Mifare Classic
-     */
-    public static final byte[] KEY_NFC_FORUM =
-            {(byte)0xD3,(byte)0xF7,(byte)0xD3,(byte)0xF7,(byte)0xD3,(byte)0xF7};
-
-    public static final int TYPE_CLASSIC = 0;
-    public static final int TYPE_PLUS = 1;
-    public static final int TYPE_PRO = 2;
-    public static final int TYPE_DESFIRE = 3;
-    public static final int TYPE_ULTRALIGHT = 4;
-    public static final int TYPE_UNKNOWN = 5;
-
-    public static final int SIZE_1K = 1024;
-    public static final int SIZE_2K = 2048;
-    public static final int SIZE_4K = 4096;
-    public static final int SIZE_MINI = 320;
-    public static final int SIZE_UNKNOWN = 0;
-
-    private boolean mIsEmulated;
-    private int mType;
-    private int mSize;
-
-    public MifareClassic(NfcAdapter adapter, Tag tag, Bundle extras) throws RemoteException {
-        super(adapter, tag, TagTechnology.MIFARE_CLASSIC);
-
-        // Check if this could actually be a Mifare
-        NfcA a = (NfcA) tag.getTechnology(adapter, TagTechnology.NFC_A);
-        //short[] ATQA = getATQA(tag);
-
-        mIsEmulated = false;
-        mType = TYPE_UNKNOWN;
-        mSize = SIZE_UNKNOWN;
-
-        switch (a.getSak()) {
-            case 0x00:
-                // could be UL or UL-C
-                mType = TYPE_ULTRALIGHT;
-                break;
-            case 0x08:
-                // Type == classic
-                // Size = 1K
-                mType = TYPE_CLASSIC;
-                mSize = SIZE_1K;
-                break;
-            case 0x09:
-                // Type == classic mini
-                // Size == ?
-                mType = TYPE_CLASSIC;
-                mSize = SIZE_MINI;
-                break;
-            case 0x10:
-                // Type == MF+
-                // Size == 2K
-                // SecLevel = SL2
-                mType = TYPE_PLUS;
-                mSize = SIZE_2K;
-                break;
-            case 0x11:
-                // Type == MF+
-                // Size == 4K
-                // Seclevel = SL2
-                mType = TYPE_PLUS;
-                mSize = SIZE_4K;
-                break;
-            case 0x18:
-                // Type == classic
-                // Size == 4k
-                mType = TYPE_CLASSIC;
-                mSize = SIZE_4K;
-                break;
-            case 0x20:
-                // TODO this really should be a short, not byte
-                if (a.getAtqa()[0] == 0x03) {
-                    // Type == DESFIRE
-                    mType = TYPE_DESFIRE;
-                } else {
-                    // Type == MF+
-                    // SL = SL3
-                    mType = TYPE_PLUS;
-                    mSize = SIZE_UNKNOWN;
-                }
-                break;
-            case 0x28:
-                // Type == MF Classic
-                // Size == 1K
-                // Emulated == true
-                mType = TYPE_CLASSIC;
-                mSize = SIZE_1K;
-                mIsEmulated = true;
-                break;
-            case 0x38:
-                // Type == MF Classic
-                // Size == 4K
-                // Emulated == true
-                mType = TYPE_CLASSIC;
-                mSize = SIZE_4K;
-                mIsEmulated = true;
-                break;
-            case 0x88:
-                // Type == MF Classic
-                // Size == 1K
-                // NXP-tag: false
-                mType = TYPE_CLASSIC;
-                mSize = SIZE_1K;
-                break;
-            case 0x98:
-            case 0xB8:
-                // Type == MF Pro
-                // Size == 4K
-                mType = TYPE_PRO;
-                mSize = SIZE_4K;
-                break;
-            default:
-                // Unknown mifare
-                mType = TYPE_UNKNOWN;
-                mSize = SIZE_UNKNOWN;
-                break;
-        }
-    }
-
-    // Immutable data known at discovery time
-    public int getSize() {
-        return mSize;
-    }
-
-    public int getType() {
-        return mType;
-    }
-
-    public boolean isEmulated() {
-        return mIsEmulated;
-    }
-
-    public int getSectorCount() {
-        switch (mSize) {
-            case SIZE_1K: {
-                return 16;
-            }
-            case SIZE_2K: {
-                return 32;
-            }
-            case SIZE_4K: {
-                return 40;
-            }
-            case SIZE_MINI: {
-                return 5;
-            }
-            default: {
-                return 0;
-            }
-        }
-    }
-
-    public int getSectorSize(int sector) {
-        return getBlockCount(sector) * 16;
-    }
-
-    public int getTotalBlockCount() {
-        int totalBlocks = 0;
-        for (int sec = 0; sec < getSectorCount(); sec++) {
-            totalBlocks += getSectorSize(sec);
-        }
-
-        return totalBlocks;
-    }
-
-    public int getBlockCount(int sector) {
-        if (sector >= getSectorCount()) {
-            throw new IllegalArgumentException("this card only has " + getSectorCount() +
-                    " sectors");
-        }
-
-        if (sector <= 32) {
-            return 4;
-        } else {
-            return 16;
-        }
-    }
-
-    private byte firstBlockInSector(int sector) {
-        if (sector < 32) {
-            return (byte) ((sector * 4) & 0xff);
-        } else {
-            return (byte) ((32 * 4 + ((sector - 32) * 16)) & 0xff);
-        }
-    }
-
-    // Methods that require connect()
-    /**
-     * Authenticate for a given block.
-     * Note that this will authenticate the entire sector the block belongs to.
-     */
-    public boolean authenticateBlock(int block, byte[] key, boolean keyA) {
-        checkConnected();
-
-        byte[] cmd = new byte[12];
-
-        // First byte is the command
-        if (keyA) {
-            cmd[0] = 0x60; // phHal_eMifareAuthentA
-        } else {
-            cmd[0] = 0x61; // phHal_eMifareAuthentB
-        }
-
-        // Second byte is block address
-        cmd[1] = (byte) block;
-
-        // Next 4 bytes are last 4 bytes of UID
-        byte[] uid = getTag().getId();
-        System.arraycopy(uid, uid.length - 4, cmd, 2, 4);
-
-        // Next 6 bytes are key
-        System.arraycopy(key, 0, cmd, 6, 6);
-
-        try {
-            if ((transceive(cmd) != null)) {
-                return true;
-            }
-        } catch (IOException e) {
-            // No need to deal with, will return false anyway
-        }
-        return false;
-    }
-
-    /**
-     * Authenticate for a given sector.
-     */
-    public boolean authenticateSector(int sector, byte[] key, boolean keyA) {
-        checkConnected();
-
-        byte addr = (byte) ((firstBlockInSector(sector)) & 0xff);
-
-        // Note that authenticating a block of a sector, will authenticate
-        // the entire sector.
-        return authenticateBlock(addr, key, keyA);
-    }
-
-    /**
-     * Sector indexing starts at 0.
-     * Block indexing starts at 0, and resets in each sector.
-     * @throws IOException
-     */
-    public byte[] readBlock(int sector, int block) throws IOException {
-        checkConnected();
-
-        byte addr = (byte) ((firstBlockInSector(sector) + block) & 0xff);
-        return readBlock(addr);
-
-    }
-
-    /**
-     * Reads absolute block index.
-     * @throws IOException
-     */
-    public byte[] readBlock(int block) throws IOException {
-        checkConnected();
-
-        byte addr = (byte) block;
-        byte[] blockread_cmd = { 0x30, addr };
-
-        return transceive(blockread_cmd);
-    }
-
-    /**
-     * Writes absolute block index.
-     * @throws IOException
-     */
-    public void writeBlock(int block, byte[] data) throws IOException {
-        checkConnected();
-
-        byte addr = (byte) block;
-        byte[] blockwrite_cmd = new byte[data.length + 2];
-        blockwrite_cmd[0] = (byte) 0xA0; // MF write command
-        blockwrite_cmd[1] = addr;
-        System.arraycopy(data, 0, blockwrite_cmd, 2, data.length);
-
-        transceive(blockwrite_cmd);
-    }
-
-    /**
-     * Writes relative block in sector.
-     * @throws IOException
-     */
-    public void writeBlock(int sector, int block, byte[] data) throws IOException {
-        checkConnected();
-
-        byte addr = (byte) ((firstBlockInSector(sector) + block) & 0xff);
-
-        writeBlock(addr, data);
-    }
-
-    public void increment(int block) throws IOException {
-        checkConnected();
-
-        byte addr = (byte) block;
-        byte[] incr_cmd = { (byte) 0xC1, (byte) block };
-
-        transceive(incr_cmd);
-    }
-
-    public void decrement(int block) throws IOException {
-        checkConnected();
-
-        byte addr = (byte) block;
-        byte[] decr_cmd = { (byte) 0xC0, (byte) block };
-
-        transceive(decr_cmd);
-    }
-
-    public void transfer(int block) throws IOException {
-        checkConnected();
-
-        byte addr = (byte) block;
-        byte[] trans_cmd = { (byte) 0xB0, (byte) block };
-
-        transceive(trans_cmd);
-    }
-
-    public void restore(int block) throws IOException {
-        checkConnected();
-
-        byte addr = (byte) block;
-        byte[] rest_cmd = { (byte) 0xC2, (byte) block };
-
-        transceive(rest_cmd);
-    }
-
-    /**
-     * Send data to a tag and receive the response.
-     * <p>
-     * This method will block until the response is received. It can be canceled
-     * with {@link #close}.
-     * <p>Requires {@link android.Manifest.permission#NFC} permission.
-     *
-     * @param data bytes to send
-     * @return bytes received in response
-     * @throws IOException if the target is lost or connection closed
-     */
-    @Override
-    public byte[] transceive(byte[] data) throws IOException {
-        checkConnected();
-
-        try {
-            byte[] response = mTagService.transceive(mTag.getServiceHandle(), data, false);
-            if (response == null) {
-                throw new IOException("transceive failed");
-            }
-            return response;
-        } catch (RemoteException e) {
-            attemptDeadServiceRecovery(e);
-            throw new IOException("NFC service died");
-        }
-    }
-}
diff --git a/core/java/android/nfc/technology/MifareUltralight.java b/core/java/android/nfc/technology/MifareUltralight.java
deleted file mode 100644
index 7103b4d..0000000
--- a/core/java/android/nfc/technology/MifareUltralight.java
+++ /dev/null
@@ -1,133 +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 android.nfc.technology;
-
-import java.io.IOException;
-
-import android.nfc.NfcAdapter;
-import android.nfc.Tag;
-import android.os.Bundle;
-import android.os.RemoteException;
-
-/**
- * Concrete class for TagTechnology.MIFARE_ULTRALIGHT
- *
- * Mifare classic has n sectors, with varying sizes, although
- * they are at least the same pattern for any one mifare classic
- * product. Each sector has two keys. Authentication with the correct
- * key is needed before access to any sector.
- *
- * Each sector has k blocks.
- * Block size is constant across the whole mifare classic family.
- */
-public final class MifareUltralight extends BasicTagTechnology {
-    public static final int TYPE_ULTRALIGHT = 1;
-    public static final int TYPE_ULTRALIGHT_C = 2;
-    public static final int TYPE_UNKNOWN = 10;
-
-    private static final int NXP_MANUFACTURER_ID = 0x04;
-
-    private int mType;
-
-    public MifareUltralight(NfcAdapter adapter, Tag tag, Bundle extras) throws RemoteException {
-        super(adapter, tag, TagTechnology.MIFARE_ULTRALIGHT);
-
-        // Check if this could actually be a Mifare
-        NfcA a = (NfcA) tag.getTechnology(adapter, TagTechnology.NFC_A);
-
-        mType = TYPE_UNKNOWN;
-
-        if( a.getSak() == 0x00 && tag.getId()[0] == NXP_MANUFACTURER_ID ) {
-            // could be UL or UL-C
-            mType = TYPE_ULTRALIGHT;
-        }
-    }
-
-    public int getType() {
-        return mType;
-    }
-
-    // Methods that require connect()
-    /**
-     * @throws IOException
-     */
-    public byte[] readBlock(int block) throws IOException {
-        checkConnected();
-
-        byte[] blockread_cmd = { 0x30, (byte)block }; // phHal_eMifareRead
-        return transceive(blockread_cmd);
-    }
-
-    /**
-     * @throws IOException
-     */
-    public byte[] readOTP() throws IOException {
-        checkConnected();
-
-        return readBlock(3); // OTP is at page 3
-    }
-
-    public void writePage(int block, byte[] data) throws IOException {
-        checkConnected();
-
-        byte[] pagewrite_cmd = new byte[data.length + 2];
-        pagewrite_cmd[0] = (byte) 0xA2;
-        pagewrite_cmd[1] = (byte) block;
-        System.arraycopy(data, 0, pagewrite_cmd, 2, data.length);
-
-        transceive(pagewrite_cmd);
-    }
-
-    public void writeBlock(int block, byte[] data) throws IOException {
-        checkConnected();
-
-        byte[] blockwrite_cmd = new byte[data.length + 2];
-        blockwrite_cmd[0] = (byte) 0xA0;
-        blockwrite_cmd[1] = (byte) block;
-        System.arraycopy(data, 0, blockwrite_cmd, 2, data.length);
-
-        transceive(blockwrite_cmd);
-    }
-
-    /**
-     * Send data to a tag and receive the response.
-     * <p>
-     * This method will block until the response is received. It can be canceled
-     * with {@link #close}.
-     * <p>Requires {@link android.Manifest.permission#NFC} permission.
-     *
-     * @param data bytes to send
-     * @return bytes received in response
-     * @throws IOException if the target is lost or connection closed
-     */
-    @Override
-    public byte[] transceive(byte[] data) throws IOException {
-        checkConnected();
-
-        try {
-            byte[] response = mTagService.transceive(mTag.getServiceHandle(), data, false);
-            if (response == null) {
-                throw new IOException("transceive failed");
-            }
-            return response;
-        } catch (RemoteException e) {
-            attemptDeadServiceRecovery(e);
-            throw new IOException("NFC service died");
-        }
-    }
-
-}
diff --git a/core/java/android/nfc/technology/NfcA.java b/core/java/android/nfc/technology/NfcA.java
deleted file mode 100644
index ef46762..0000000
--- a/core/java/android/nfc/technology/NfcA.java
+++ /dev/null
@@ -1,66 +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 android.nfc.technology;
-
-import android.nfc.NfcAdapter;
-import android.nfc.Tag;
-import android.os.Bundle;
-import android.os.RemoteException;
-
-/**
- * A low-level connection to a {@link Tag} using the NFC-A technology, also known as
- * ISO1443-3A.
- *
- * <p>You can acquire this kind of connection with {@link Tag#getTechnology(int)}.
- * Use this class to send and receive data with {@link #transceive transceive()}.
- *
- * <p>Applications must implement their own protocol stack on top of
- * {@link #transceive transceive()}.
- *
- * <p class="note"><strong>Note:</strong>
- * Use of this class requires the {@link android.Manifest.permission#NFC}
- * permission.
- */
-public final class NfcA extends BasicTagTechnology {
-    /** @hide */
-    public static final String EXTRA_SAK = "sak";
-    /** @hide */
-    public static final String EXTRA_ATQA = "atqa";
-
-    private short mSak;
-    private byte[] mAtqa;
-
-    public NfcA(NfcAdapter adapter, Tag tag, Bundle extras) throws RemoteException {
-        super(adapter, tag, TagTechnology.NFC_A);
-        mSak = extras.getShort(EXTRA_SAK);
-        mAtqa = extras.getByteArray(EXTRA_ATQA);
-    }
-
-    /**
-     * Returns the ATQA/SENS_RES bytes discovered at tag discovery.
-     */
-    public byte[] getAtqa() {
-        return mAtqa;
-    }
-
-    /**
-     * Returns the SAK/SEL_RES discovered at tag discovery.
-     */
-    public short getSak() {
-        return mSak;
-    }
-}
diff --git a/core/java/android/nfc/technology/NfcF.java b/core/java/android/nfc/technology/NfcF.java
deleted file mode 100644
index 6741ac8..0000000
--- a/core/java/android/nfc/technology/NfcF.java
+++ /dev/null
@@ -1,63 +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 android.nfc.technology;
-
-import android.nfc.NfcAdapter;
-import android.nfc.Tag;
-import android.os.Bundle;
-import android.os.RemoteException;
-
-/**
- * A low-level connection to a {@link Tag} using the NFC-F technology, also known as
- * JIS6319-4.
- *
- * <p>You can acquire this kind of connection with {@link Tag#getTechnology(int)}.
- * Use this class to send and receive data with {@link #transceive transceive()}.
- *
- * <p>Applications must implement their own protocol stack on top of
- * {@link #transceive transceive()}.
- *
- * <p class="note"><strong>Note:</strong>
- * Use of this class requires the {@link android.Manifest.permission#NFC}
- * permission.
- */
-public final class NfcF extends BasicTagTechnology {
-    /** @hide */
-    public static final String EXTRA_SC = "systemcode";
-    /** @hide */
-    public static final String EXTRA_PMM = "pmm";
-
-    private byte[] mSystemCode = null;
-    private byte[] mManufacturer = null;
-
-    public NfcF(NfcAdapter adapter, Tag tag, Bundle extras)
-            throws RemoteException {
-        super(adapter, tag, TagTechnology.NFC_F);
-        if (extras != null) {
-            mSystemCode = extras.getByteArray(EXTRA_SC);
-            mManufacturer = extras.getByteArray(EXTRA_PMM);
-        }
-    }
-
-    public byte[] getSystemCode() {
-      return mSystemCode;
-    }
-
-    public byte[] getManufacturer() {
-      return mManufacturer;
-    }
-}
diff --git a/core/java/android/nfc/technology/NfcV.java b/core/java/android/nfc/technology/NfcV.java
deleted file mode 100644
index 460de6a..0000000
--- a/core/java/android/nfc/technology/NfcV.java
+++ /dev/null
@@ -1,62 +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 android.nfc.technology;
-
-import android.nfc.NfcAdapter;
-import android.nfc.Tag;
-import android.os.Bundle;
-import android.os.RemoteException;
-
-/**
- * A low-level connection to a {@link Tag} using the NFC-V technology, also known as
- * ISO15693.
- *
- * <p>You can acquire this kind of connection with {@link Tag#getTechnology(int)}.
- * Use this class to send and receive data with {@link #transceive transceive()}.
- *
- * <p>Applications must implement their own protocol stack on top of
- * {@link #transceive transceive()}.
- *
- * <p class="note"><strong>Note:</strong>
- * Use of this class requires the {@link android.Manifest.permission#NFC}
- * permission.
- */
-public final class NfcV extends BasicTagTechnology {
-    /** @hide */
-    public static final String EXTRA_RESP_FLAGS = "respflags";
-
-    /** @hide */
-    public static final String EXTRA_DSFID = "dsfid";
-
-    private byte mRespFlags;
-    private byte mDsfId;
-
-    public NfcV(NfcAdapter adapter, Tag tag, Bundle extras)
-            throws RemoteException {
-        super(adapter, tag, TagTechnology.NFC_V);
-        mRespFlags = extras.getByte(EXTRA_RESP_FLAGS);
-        mDsfId = extras.getByte(EXTRA_DSFID);
-    }
-
-    public byte getResponseFlags() {
-        return mRespFlags;
-    }
-
-    public byte getDsfId() {
-        return mDsfId;
-    }
-}
diff --git a/core/java/android/nfc/technology/TagTechnology.java b/core/java/android/nfc/technology/TagTechnology.java
deleted file mode 100644
index 62216c1..0000000
--- a/core/java/android/nfc/technology/TagTechnology.java
+++ /dev/null
@@ -1,94 +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 android.nfc.technology;
-
-import android.nfc.Tag;
-
-import java.io.IOException;
-
-public interface TagTechnology {
-    /**
-     * This object is an instance of {@link NfcA}
-     */
-    public static final int NFC_A = 1;
-
-    /**
-     * This object is an instance of {@link NfcB}
-     */
-    public static final int NFC_B = 2;
-
-    /**
-     * This object is an instance of {@link IsoDep}
-     */
-    public static final int ISO_DEP = 3;
-
-    /**
-     * This object is an instance of {@link NfcF}
-     */
-    public static final int NFC_F = 4;
-
-    /**
-     * This object is an instance of {@link NfcV}
-     */
-    public static final int NFC_V = 5;
-
-    /**
-     * This object is an instance of {@link Ndef}
-     */
-    public static final int NDEF = 6;
-
-    /**
-     * This object is an instance of {@link NdefFormatable}
-     */
-    public static final int NDEF_FORMATABLE = 7;
-
-    /**
-     * This object is an instance of {@link MifareClassic}
-     */
-    public static final int MIFARE_CLASSIC = 8;
-
-    /**
-     * This object is an instance of {@link MifareUltralight}
-     */
-    public static final int MIFARE_ULTRALIGHT = 9;
-
-    /**
-     * Returns the technology type for this tag connection.
-     */
-    public int getTechnologyId();
-
-    /**
-     * Get the backing tag object.
-     */
-    public Tag getTag();
-
-    /**
-     * @throws IOException
-     */
-    public void connect() throws IOException;
-
-    /**
-     * @throws IOException
-     */
-    public void reconnect() throws IOException;
-
-    /**
-     * Non-blocking. Immediately causes all blocking calls
-     * to throw IOException.
-     */
-    public void close();
-}
diff --git a/core/java/android/nfc/technology/package.html b/core/java/android/nfc/technology/package.html
deleted file mode 100644
index 26b8a32..0000000
--- a/core/java/android/nfc/technology/package.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<HTML>
-<BODY>
-{@hide}
-</BODY>
-</HTML>
\ No newline at end of file
diff --git a/core/java/android/os/storage/IMountService.java b/core/java/android/os/storage/IMountService.java
index b9d4711..4c83515 100644
--- a/core/java/android/os/storage/IMountService.java
+++ b/core/java/android/os/storage/IMountService.java
@@ -26,7 +26,7 @@
  * WARNING! Update IMountService.h and IMountService.cpp if you change this
  * file. In particular, the ordering of the methods below must match the
  * _TRANSACTION enum in IMountService.cpp
- * 
+ *
  * @hide - Applications should use android.os.storage.StorageManager to access
  *       storage functions.
  */
@@ -620,6 +620,23 @@
                 }
                 return _result;
             }
+
+            public int changeEncryptionPassword(String password) throws RemoteException {
+                Parcel _data = Parcel.obtain();
+                Parcel _reply = Parcel.obtain();
+                int _result;
+                try {
+                    _data.writeInterfaceToken(DESCRIPTOR);
+                    _data.writeString(password);
+                    mRemote.transact(Stub.TRANSACTION_changeEncryptionPassword, _data, _reply, 0);
+                    _reply.readException();
+                    _result = _reply.readInt();
+                } finally {
+                    _reply.recycle();
+                    _data.recycle();
+                }
+                return _result;
+            }
         }
 
         private static final String DESCRIPTOR = "IMountService";
@@ -680,6 +697,8 @@
 
         static final int TRANSACTION_encryptStorage = IBinder.FIRST_CALL_TRANSACTION + 27;
 
+        static final int TRANSACTION_changeEncryptionPassword = IBinder.FIRST_CALL_TRANSACTION + 28;
+
         /**
          * Cast an IBinder object into an IMountService interface, generating a
          * proxy if needed.
@@ -977,6 +996,14 @@
                     reply.writeInt(result);
                     return true;
                 }
+                case TRANSACTION_changeEncryptionPassword: {
+                    data.enforceInterface(DESCRIPTOR);
+                    String password = data.readString();
+                    int result = changeEncryptionPassword(password);
+                    reply.writeNoException();
+                    reply.writeInt(result);
+                    return true;
+                }
             }
             return super.onTransact(code, data, reply, flags);
         }
@@ -1146,4 +1173,10 @@
      * Encrypts storage.
      */
     public int encryptStorage(String password) throws RemoteException;
+
+    /**
+     * Changes the encryption password.
+     */
+    public int changeEncryptionPassword(String password) throws RemoteException;
+
 }
diff --git a/core/java/android/speech/tts/TextToSpeech.java b/core/java/android/speech/tts/TextToSpeech.java
index c46d2c5..6d7b7ce 100755
--- a/core/java/android/speech/tts/TextToSpeech.java
+++ b/core/java/android/speech/tts/TextToSpeech.java
@@ -512,10 +512,17 @@
 
         Intent intent = new Intent("android.intent.action.START_TTS_SERVICE");
         intent.addCategory("android.intent.category.TTS");
-        mContext.bindService(intent, mServiceConnection,
-                Context.BIND_AUTO_CREATE);
-        // TODO handle case where the binding works (should always work) but
-        //      the plugin fails
+        boolean bound = mContext.bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);
+        if (!bound) {
+            Log.e("TextToSpeech.java", "initTts() failed to bind to service");
+            if (mInitListener != null) {
+                mInitListener.onInit(ERROR);
+            }
+        } else {
+            // initialization listener will be called inside ServiceConnection
+            Log.i("TextToSpeech.java", "initTts() successfully bound to service");
+        }
+        // TODO handle plugin failures
     }
 
 
@@ -765,8 +772,9 @@
     {
         synchronized (mStartLock) {
             int result = ERROR;
-            Log.i("TTS", "speak() queueMode=" + queueMode);
+            Log.i("TextToSpeech.java - speak", "speak text of length " + text.length());
             if (!mStarted) {
+                Log.e("TextToSpeech.java - speak", "service isn't started");
                 return result;
             }
             try {
@@ -1264,10 +1272,13 @@
      */
     public int synthesizeToFile(String text, HashMap<String,String> params,
             String filename) {
-        Log.i("TTS", "synthesizeToFile()");
+        Log.i("TextToSpeech.java", "synthesizeToFile()");
         synchronized (mStartLock) {
             int result = ERROR;
+            Log.i("TextToSpeech.java - synthesizeToFile", "synthesizeToFile text of length "
+                    + text.length());
             if (!mStarted) {
+                Log.e("TextToSpeech.java - synthesizeToFile", "service isn't started");
                 return result;
             }
             try {
diff --git a/core/java/android/view/DragEvent.java b/core/java/android/view/DragEvent.java
index 4d83891..8f491ef 100644
--- a/core/java/android/view/DragEvent.java
+++ b/core/java/android/view/DragEvent.java
@@ -21,7 +21,100 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 
-/** !!! TODO: real docs */
+//TODO: Improve Javadoc
+/**
+ * Represents an event that is sent out by the system at various times during a drag and drop
+ * operation. It is a complex data structure that contains several important pieces of data about
+ * the operation and the underlying data.
+ * <p>
+ *  View objects that receive a DragEvent call {@link #getAction()}, which returns
+ *  an action type that indicates the state of the drag and drop operation. This allows a View
+ *  object to react to a change in state by changing its appearance or performing other actions.
+ *  For example, a View can react to the {@link #ACTION_DRAG_ENTERED} action type by
+ *  by changing one or more colors in its displayed image.
+ * </p>
+ * <p>
+ *  During a drag and drop operation, the system displays an image that the user drags. This image
+ *  is called a drag shadow. Several action types reflect the position of the drag shadow relative
+ *  to the View receiving the event.
+ * </p>
+ * <p>
+ *  Most methods return valid data only for certain event actions. This is summarized in the
+ *  following table. Each possible {@link #getAction()} value is listed in the first column. The
+ *  other columns indicate which method or methods return valid data for that getAction() value:
+ * </p>
+ * <table>
+ *  <tr>
+ *      <th scope="col">getAction() Value</th>
+ *      <th scope="col">getClipDescription()</th>
+ *      <th scope="col">getLocalState()</th>
+ *      <th scope="col">getX()</th>
+ *      <th scope="col">getY()</th>
+ *      <th scope="col">getClipData()</th>
+ *      <th scope="col">getResult()</th>
+ *  </tr>
+ *  <tr>
+ *      <td>ACTION_DRAG_STARTED</td>
+ *      <td style="text-align: center;">X</td>
+ *      <td style="text-align: center;">X</td>
+ *      <td style="text-align: center;">X</td>
+ *      <td style="text-align: center;">X</td>
+ *      <td style="text-align: center;">&nbsp;</td>
+ *      <td style="text-align: center;">&nbsp;</td>
+ *  </tr>
+ *  <tr>
+ *      <td>ACTION_DRAG_ENTERED</td>
+ *      <td style="text-align: center;">X</td>
+ *      <td style="text-align: center;">X</td>
+ *      <td style="text-align: center;">&nbsp;</td>
+ *      <td style="text-align: center;">&nbsp;</td>
+ *      <td style="text-align: center;">&nbsp;</td>
+ *      <td style="text-align: center;">&nbsp;</td>
+ *  </tr>
+ *  <tr>
+ *      <td>ACTION_DRAG_LOCATION</td>
+ *      <td style="text-align: center;">X</td>
+ *      <td style="text-align: center;">X</td>
+ *      <td style="text-align: center;">X</td>
+ *      <td style="text-align: center;">X</td>
+ *      <td style="text-align: center;">&nbsp;</td>
+ *      <td style="text-align: center;">&nbsp;</td>
+ *  </tr>
+ *  <tr>
+ *      <td>ACTION_DRAG_EXITED</td>
+ *      <td style="text-align: center;">X</td>
+ *      <td style="text-align: center;">X</td>
+ *      <td style="text-align: center;">&nbsp;</td>
+ *      <td style="text-align: center;">&nbsp;</td>
+ *      <td style="text-align: center;">&nbsp;</td>
+ *      <td style="text-align: center;">&nbsp;</td>
+ *  </tr>
+ *  <tr>
+ *      <td>ACTION_DROP</td>
+ *      <td style="text-align: center;">X</td>
+ *      <td style="text-align: center;">X</td>
+ *      <td style="text-align: center;">X</td>
+ *      <td style="text-align: center;">X</td>
+ *      <td style="text-align: center;">X</td>
+ *      <td style="text-align: center;">&nbsp;</td>
+ *  </tr>
+ *  <tr>
+ *      <td>ACTION_DRAG_ENDED</td>
+ *      <td style="text-align: center;">X</td>
+ *      <td style="text-align: center;">X</td>
+ *      <td style="text-align: center;">&nbsp;</td>
+ *      <td style="text-align: center;">&nbsp;</td>
+ *      <td style="text-align: center;">&nbsp;</td>
+ *      <td style="text-align: center;">X</td>
+ *  </tr>
+ * </table>
+ * <p>
+ *  The {@link android.view.DragEvent#getAction()},
+ *  {@link android.view.DragEvent#describeContents()},
+ *  {@link android.view.DragEvent#writeToParcel(Parcel,int)}, and
+ *  {@link android.view.DragEvent#toString()} methods always return valid data.
+ * </p>
+ */
 public class DragEvent implements Parcelable {
     private static final boolean TRACK_RECYCLED_LOCATION = false;
 
@@ -42,89 +135,113 @@
     private static DragEvent gRecyclerTop = null;
 
     /**
-     * Action constant returned by {@link #getAction()}.  Delivery of a DragEvent whose
-     * action is ACTION_DRAG_STARTED means that a drag operation has been initiated.  The
-     * view receiving this DragEvent should inspect the metadata of the dragged content,
-     * available via {@link #getClipDescription()}, and return {@code true} from
-     * {@link View#onDragEvent(DragEvent)} if the view is prepared to accept a drop of
-     * that clip data.  If the view chooses to present a visual indication that it is
-     * a valid target of the ongoing drag, then it should draw that indication in response
-     * to this event.
+     * Action constant returned by {@link #getAction()}: Signals the start of a
+     * drag and drop operation. The View should return {@code true} from its
+     * {@link View#onDragEvent(DragEvent) onDragEvent()} handler method or
+     * {@link View.View.OnDragListener#onDrag(View,DragEvent) OnDragListener.onDrag()} listener
+     * if it can accept a drop. The onDragEvent() or onDrag() methods usually inspect the metadata
+     * from {@link #getClipDescription()} to determine if they can accept the data contained in
+     * this drag. For an operation that doesn't represent data transfer, these methods may
+     * perform other actions to determine whether or not the View should accept the drag.
+     * If the View wants to indicate that it is a valid drop target, it can also react by
+     * changing its appearance.
      * <p>
-     * A view will only receive ACTION_DRAG_ENTERED, ACTION_DRAG_LOCATION, ACTION_DRAG_EXITED,
-     * and ACTION_DRAG_LOCATION events if it returns {@code true} in response to the
-     * ACTION_DRAG_STARTED event.
+     * A View only receives further drag events if it returns {@code true} in response to
+     * ACTION_DRAG_STARTED.
+     * </p>
+     * @see #ACTION_DRAG_ENDED
      */
     public static final int ACTION_DRAG_STARTED = 1;
 
     /**
-     * Action constant returned by {@link #getAction()}.  Delivery of a DragEvent whose
-     * action is ACTION_DRAG_LOCATION means that the drag operation is currently hovering
-     * over the view.  The {@link #getX()} and {@link #getY()} methods supply the location
-     * of the drag point within the view's coordinate system.
+     * Action constant returned by {@link #getAction()}: Sent to a View after
+     * {@link #ACTION_DRAG_ENTERED} if the drag shadow is still within the View object's bounding
+     * box. The {@link #getX()} and {@link #getY()} methods supply
+     * the X and Y position of of the drag point within the View object's bounding box.
      * <p>
-     * A view will receive an ACTION_DRAG_ENTERED event before receiving any
-     * ACTION_DRAG_LOCATION events.  If the drag point leaves the view, then an
-     * ACTION_DRAG_EXITED event is delivered to the view, after which no more
-     * ACTION_DRAG_LOCATION events will be sent (unless the drag re-enters the view,
-     * of course).
+     * A View receives an {@link #ACTION_DRAG_ENTERED} event before receiving any
+     * ACTION_DRAG_LOCATION events.
+     * </p>
+     * <p>
+     * The system stops sending ACTION_DRAG_LOCATION events to a View once the user moves the
+     * drag shadow out of the View object's bounding box. If the user moves the drag shadow back
+     * into the View object's bounding box, the View receives an ACTION_DRAG_ENTERED again before
+     * receiving any more ACTION_DRAG_LOCATION events.
+     * </p>
+     * @see #ACTION_DRAG_ENTERED
+     * @see #getX()
+     * @see #getY()
      */
     public static final int ACTION_DRAG_LOCATION = 2;
 
     /**
-     * Action constant returned by {@link #getAction()}.  Delivery of a DragEvent whose
-     * action is ACTION_DROP means that the dragged content has been dropped on this view.
-     * The view should retrieve the content via {@link #getClipData()} and act on it
-     * appropriately.  The {@link #getX()} and {@link #getY()} methods supply the location
-     * of the drop point within the view's coordinate system.
+     * Action constant returned by {@link #getAction()}: Signals to a View that the user
+     * has released the drag shadow, and the drag point is within the bounding box of the View.
+     * The View should retrieve the data from the DragEvent by calling {@link #getClipData()}.
+     * The methods {@link #getX()} and {@link #getY()} return the X and Y position of the drop point
+     * within the View object's bounding box.
      * <p>
-     * The view should return {@code true} from its {@link View#onDragEvent(DragEvent)}
-     * method in response to this event if it accepted the content, and {@code false}
-     * if it ignored the drop.
+     * The View should return {@code true} from its {@link View#onDragEvent(DragEvent)}
+     * handler or {@link View.View.OnDragListener#onDrag(View,DragEvent) OnDragListener.onDrag()}
+     * listener if it accepted the drop, and {@code false} if it ignored the drop.
+     * </p>
+     * <p>
+     * The View can also react to this action by changing its appearance.
+     * </p>
+     * @see #getClipData()
+     * @see #getX()
+     * @see #getY()
      */
     public static final int ACTION_DROP = 3;
 
     /**
-     * Action constant returned by {@link #getAction()}.  Delivery of a DragEvent whose
-     * action is ACTION_DRAG_ENDED means that the drag operation has concluded.  A view
-     * that is drawing a visual indication of drag acceptance should return to its usual
-     * drawing state in response to this event.
+     * Action constant returned by {@link #getAction()}:  Signals to a View that the drag and drop
+     * operation has concluded.  A View that changed its appearance during the operation should
+     * return to its usual drawing state in response to this event.
      * <p>
      * All views that received an ACTION_DRAG_STARTED event will receive the
-     * ACTION_DRAG_ENDED event even if they are not currently visible when the drag
-     * ends.
+     * ACTION_DRAG_ENDED event even if they are not currently visible when the drag ends.
+     * </p>
+     * <p>
+     *  The View object can call {@link #getResult()} to see the result of the operation.
+     *  If a View returned {@code true} in response to {@link #ACTION_DROP}, then
+     *  getResult() returns {@code true}, otherwise it returns {@code false}.
+     * </p>
+     * @see #ACTION_DRAG_STARTED
+     * @see #getResult()
      */
     public static final int ACTION_DRAG_ENDED = 4;
 
     /**
-     * Action constant returned by {@link #getAction()}.  Delivery of a DragEvent whose
-     * action is ACTION_DRAG_ENTERED means that the drag point has entered the view's
-     * bounds.  If the view changed its visual state in response to the ACTION_DRAG_ENTERED
-     * event, it should return to its normal drag-in-progress visual state in response to
-     * this event.
+     * Action constant returned by {@link #getAction()}: Signals to a View that the drag point has
+     * entered the bounding box of the View.
      * <p>
-     * A view will receive an ACTION_DRAG_ENTERED event before receiving any
-     * ACTION_DRAG_LOCATION events.  If the drag point leaves the view, then an
-     * ACTION_DRAG_EXITED event is delivered to the view, after which no more
-     * ACTION_DRAG_LOCATION events will be sent (unless the drag re-enters the view,
-     * of course).
+     *  If the View can accept a drop, it can react to ACTION_DRAG_ENTERED
+     *  by changing its appearance in a way that tells the user that the View is the current
+     *  drop target.
+     * </p>
+     * The system stops sending ACTION_DRAG_LOCATION events to a View once the user moves the
+     * drag shadow out of the View object's bounding box. If the user moves the drag shadow back
+     * into the View object's bounding box, the View receives an ACTION_DRAG_ENTERED again before
+     * receiving any more ACTION_DRAG_LOCATION events.
+     * </p>
+     * @see #ACTION_DRAG_ENTERED
+     * @see #ACTION_DRAG_LOCATION
      */
     public static final int ACTION_DRAG_ENTERED = 5;
 
     /**
-     * Action constant returned by {@link #getAction()}.  Delivery of a DragEvent whose
-     * action is ACTION_DRAG_ENTERED means that the drag point has entered the view's
-     * bounds.  If the view chooses to present a visual indication that it will receive
-     * the drop if it occurs now, then it should draw that indication in response to
-     * this event.
+     * Action constant returned by {@link #getAction()}: Signals that the user has moved the
+     * drag shadow outside the bounding box of the View.
+     * The View can react by changing its appearance in a way that tells the user that
+     * View is no longer the immediate drop target.
      * <p>
-     * A view will receive an ACTION_DRAG_ENTERED event before receiving any
-     * ACTION_DRAG_LOCATION events.  If the drag point leaves the view, then an
-     * ACTION_DRAG_EXITED event is delivered to the view, after which no more
-     * ACTION_DRAG_LOCATION events will be sent (unless the drag re-enters the view,
-     * of course).
+     *  After the system sends an ACTION_DRAG_EXITED event to the View, the View receives no more
+     *  ACTION_DRAG_LOCATION events until the user drags the drag shadow back over the View.
+     * </p>
+     *
      */
-public static final int ACTION_DRAG_EXITED = 6;
+     public static final int ACTION_DRAG_EXITED = 6;
 
     private DragEvent() {
     }
@@ -175,64 +292,101 @@
 
     /**
      * Inspect the action value of this event.
-     * @return One of {@link #ACTION_DRAG_STARTED}, {@link #ACTION_DRAG_ENDED},
-     *         {@link #ACTION_DROP}, {@link #ACTION_DRAG_ENTERED}, {@link #ACTION_DRAG_EXITED},
-     *         or {@link #ACTION_DRAG_LOCATION}.
+     * @return One of the following action constants, in the order in which they usually occur
+     * during a drag and drop operation:
+     * <ul>
+     *  <li>{@link #ACTION_DRAG_STARTED}</li>
+     *  <li>{@link #ACTION_DRAG_ENTERED}</li>
+     *  <li>{@link #ACTION_DRAG_LOCATION}</li>
+     *  <li>{@link #ACTION_DROP}</li>
+     *  <li>{@link #ACTION_DRAG_EXITED}</li>
+     *  <li>{@link #ACTION_DRAG_ENDED}</li>
+     * </ul>
      */
     public int getAction() {
         return mAction;
     }
 
     /**
-     * For ACTION_DRAG_LOCATION and ACTION_DROP events, returns the x coordinate of the
-     * drag point.
-     * @return The current drag point's x coordinate, when relevant.
+     * Gets the X coordinate of the drag point. The value is only valid if the event action is
+     * {@link #ACTION_DRAG_LOCATION} or {@link #ACTION_DROP}.
+     * @return The current drag point's Y coordinate
      */
     public float getX() {
         return mX;
     }
 
     /**
-     * For ACTION_DRAG_LOCATION and ACTION_DROP events, returns the y coordinate of the
-     * drag point.
-     * @return The current drag point's y coordinate, when relevant.
+     * Gets the Y coordinate of the drag point. The value is valid if the
+     * event action is {@link #ACTION_DRAG_ENTERED}, {@link #ACTION_DRAG_LOCATION},
+     * {@link #ACTION_DROP}, or {@link #ACTION_DRAG_EXITED}.
+     * @return The current drag point's Y coordinate
      */
     public float getY() {
         return mY;
     }
 
     /**
-     * Provides the data payload of the drag operation.  This payload is only available
-     * for events whose action value is ACTION_DROP.
-     * @return The ClipData containing the data being dropped on the view.
+     * Returns the {@link android.content.ClipData} object sent to the system as part of the call
+     * to
+     * {@link android.view.View#startDrag(ClipData,View.DragShadowBuilder,Object,int) startDrag()}.
+     * This method only returns valid data if the event action is {@link #ACTION_DROP}.
+     * @return The ClipData sent to the system by startDrag().
      */
     public ClipData getClipData() {
         return mClipData;
     }
 
     /**
-     * Provides a description of the drag operation's data payload.  This payload is
-     * available for all DragEvents other than ACTION_DROP.
-     * @return A ClipDescription describing the contents of the data being dragged.
+     * Returns the {@link android.content.ClipDescription} object contained in the
+     * {@link android.content.ClipData} object sent to the system as part of the call to
+     * {@link android.view.View#startDrag(ClipData,View.DragShadowBuilder,Object,int) startDrag()}.
+     * The drag handler or listener for a View can use the metadata in this object to decide if the
+     * View can accept the dragged View object's data.
+     * <p>
+     * This method returns valid data for all event actions.
+     * @return The ClipDescription that was part of the ClipData sent to the system by startDrag().
      */
     public ClipDescription getClipDescription() {
         return mClipDescription;
     }
 
     /**
-     * Provides the local state object passed as the {@code myLocalState} parameter to
-     * View.startDrag(). The object will always be null here if the application receiving
-     * the DragEvent is not the one that started the drag.
+     * Returns the local state object sent to the system as part of the call to
+     * {@link android.view.View#startDrag(ClipData,View.DragShadowBuilder,Object,int) startDrag()}.
+     * The object is intended to provide local information about the drag and drop operation. For
+     * example, it can indicate whether the drag and drop operation is a copy or a move.
+     * <p>
+     *  This method returns valid data for all event actions.
+     * </p>
+     * @return The local state object sent to the system by startDrag().
      */
     public Object getLocalState() {
         return mLocalState;
     }
 
     /**
-     * Provides an indication of whether the drag operation concluded successfully.
-     * This method is only available on ACTION_DRAG_ENDED events.
-     * @return {@code true} if the drag operation ended with an accepted drop; {@code false}
-     *         otherwise.
+     * <p>
+     * Returns an indication of the result of the drag and drop operation.
+     * This method only returns valid data if the action type is {@link #ACTION_DRAG_ENDED}.
+     * The return value depends on what happens after the user releases the drag shadow.
+     * </p>
+     * <p>
+     * If the user releases the drag shadow on a View that can accept a drop, the system sends an
+     * {@link #ACTION_DROP} event to the View object's drag event listener. If the listener
+     * returns {@code true}, then getResult() will return {@code true}.
+     * If the listener returns {@code false}, then getResult() returns {@code false}.
+     * </p>
+     * <p>
+     * Notice that getResult() also returns {@code false} if no {@link #ACTION_DROP} is sent. This
+     * happens, for example, when the user releases the drag shadow over an area outside of the
+     * application. In this case, the system sends out {@link #ACTION_DRAG_ENDED} for the current
+     * operation, but never sends out {@link #ACTION_DROP}.
+     * </p>
+     * @return {@code true} if a drag event listener returned {@code true} in response to
+     * {@link #ACTION_DROP}. If the system did not send {@link #ACTION_DROP} before
+     * {@link #ACTION_DRAG_ENDED}, or if the listener returned {@code false} in response to
+     * {@link #ACTION_DROP}, then {@code false} is returned.
      */
     public boolean getResult() {
         return mDragResult;
@@ -271,6 +425,11 @@
         }
     }
 
+    /**
+     * Returns a string containing a concise, human-readable representation of this DragEvent
+     * object.
+     * @return A string representation of the DragEvent object.
+     */
     @Override
     public String toString() {
         return "DragEvent{" + Integer.toHexString(System.identityHashCode(this))
@@ -281,10 +440,20 @@
 
     /* Parcelable interface */
 
+    /**
+     * Returns information about the {@link android.os.Parcel} representation of this DragEvent
+     * object.
+     * @return Information about the {@link android.os.Parcel} representation.
+     */
     public int describeContents() {
         return 0;
     }
 
+    /**
+     * Creates a {@link android.os.Parcel} object from this DragEvent object.
+     * @param dest A {@link android.os.Parcel} object in which to put the DragEvent object.
+     * @param flags Flags to store in the Parcel.
+     */
     public void writeToParcel(Parcel dest, int flags) {
         dest.writeInt(mAction);
         dest.writeFloat(mX);
@@ -304,6 +473,9 @@
         }
     }
 
+    /**
+     * A container for creating a DragEvent from a Parcel.
+     */
     public static final Parcelable.Creator<DragEvent> CREATOR =
         new Parcelable.Creator<DragEvent>() {
         public DragEvent createFromParcel(Parcel in) {
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 142061b..f9629bd 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -521,7 +521,7 @@
  * The framework provides basic support for views that wish to internally
  * scroll their content. This includes keeping track of the X and Y scroll
  * offset as well as mechanisms for drawing scrollbars. See
- * {@link #scrollBy(int, int)}, {@link #scrollTo(int, int)}, and 
+ * {@link #scrollBy(int, int)}, {@link #scrollTo(int, int)}, and
  * {@link #awakenScrollBars()} for more details.
  * </p>
  *
@@ -1645,27 +1645,27 @@
      * @hide
      */
     static final int OPAQUE_MASK                    = 0x01800000;
-    
+
     /**
      * Indicates a prepressed state;
      * the short time between ACTION_DOWN and recognizing
      * a 'real' press. Prepressed is used to recognize quick taps
      * even when they are shorter than ViewConfiguration.getTapTimeout().
-     * 
+     *
      * @hide
      */
     private static final int PREPRESSED             = 0x02000000;
-    
+
     /**
      * Indicates whether the view is temporarily detached.
      *
      * @hide
      */
     static final int CANCEL_NEXT_UP_EVENT = 0x04000000;
-    
+
     /**
      * Indicates that we should awaken scroll bars once attached
-     * 
+     *
      * @hide
      */
     private static final int AWAKEN_SCROLL_BARS_ON_ATTACH = 0x08000000;
@@ -1720,14 +1720,14 @@
     /**
      * View has requested the status bar to be visible (the default).
      *
-     * @see #setSystemUiVisibility(int) 
+     * @see #setSystemUiVisibility(int)
      */
     public static final int STATUS_BAR_VISIBLE = 0;
 
     /**
      * View has requested the status bar to be visible (the default).
      *
-     * @see #setSystemUiVisibility(int) 
+     * @see #setSystemUiVisibility(int)
      */
     public static final int STATUS_BAR_HIDDEN = 0x00000001;
 
@@ -1869,6 +1869,7 @@
      * This view's request for the visibility of the status bar.
      * @hide
      */
+    @ViewDebug.ExportedProperty()
     int mSystemUiVisibility;
 
     /**
@@ -1950,8 +1951,8 @@
     private int mPrevWidth = -1;
     private int mPrevHeight = -1;
 
-    private boolean mLastIsOpaque;    
-    
+    private boolean mLastIsOpaque;
+
     /**
      * Convenience value to check for float values that are close enough to zero to be considered
      * zero.
@@ -2225,7 +2226,7 @@
     private CheckForLongPress mPendingCheckForLongPress;
     private CheckForTap mPendingCheckForTap = null;
     private PerformClick mPerformClick;
-    
+
     private UnsetPressedState mUnsetPressedState;
 
     /**
@@ -2266,7 +2267,7 @@
      * Special tree observer used when mAttachInfo is null.
      */
     private ViewTreeObserver mFloatingTreeObserver;
-    
+
     /**
      * Cache the touch slop from the context that created the view.
      */
@@ -2306,11 +2307,11 @@
 
     /**
      * Indicates that the view does not have a layer.
-     * 
-     * @see #getLayerType() 
-     * @see #setLayerType(int, android.graphics.Paint) 
+     *
+     * @see #getLayerType()
+     * @see #setLayerType(int, android.graphics.Paint)
      * @see #LAYER_TYPE_SOFTWARE
-     * @see #LAYER_TYPE_HARDWARE 
+     * @see #LAYER_TYPE_HARDWARE
      */
     public static final int LAYER_TYPE_NONE = 0;
 
@@ -2318,7 +2319,7 @@
      * <p>Indicates that the view has a software layer. A software layer is backed
      * by a bitmap and causes the view to be rendered using Android's software
      * rendering pipeline, even if hardware acceleration is enabled.</p>
-     * 
+     *
      * <p>Software layers have various usages:</p>
      * <p>When the application is not using hardware acceleration, a software layer
      * is useful to apply a specific color filter and/or blending mode and/or
@@ -2334,11 +2335,11 @@
      * potentially be slow (particularly when hardware acceleration is turned on
      * since the layer will have to be uploaded into a hardware texture after every
      * update.)</p>
-     * 
-     * @see #getLayerType() 
-     * @see #setLayerType(int, android.graphics.Paint) 
+     *
+     * @see #getLayerType()
+     * @see #setLayerType(int, android.graphics.Paint)
      * @see #LAYER_TYPE_NONE
-     * @see #LAYER_TYPE_HARDWARE 
+     * @see #LAYER_TYPE_HARDWARE
      */
     public static final int LAYER_TYPE_SOFTWARE = 1;
 
@@ -2349,7 +2350,7 @@
      * rendering pipeline, but only if hardware acceleration is turned on for the
      * view hierarchy. When hardware acceleration is turned off, hardware layers
      * behave exactly as {@link #LAYER_TYPE_SOFTWARE software layers}.</p>
-     * 
+     *
      * <p>A hardware layer is useful to apply a specific color filter and/or
      * blending mode and/or translucency to a view and all its children.</p>
      * <p>A hardware layer can be used to cache a complex view tree into a
@@ -2359,14 +2360,14 @@
      * <p>A hardware layer can also be used to increase the rendering quality when
      * rotation transformations are applied on a view. It can also be used to
      * prevent potential clipping issues when applying 3D transforms on a view.</p>
-     * 
-     * @see #getLayerType() 
+     *
+     * @see #getLayerType()
      * @see #setLayerType(int, android.graphics.Paint)
      * @see #LAYER_TYPE_NONE
      * @see #LAYER_TYPE_SOFTWARE
      */
     public static final int LAYER_TYPE_HARDWARE = 2;
-    
+
     @ViewDebug.ExportedProperty(category = "drawing", mapping = {
             @ViewDebug.IntToString(from = LAYER_TYPE_NONE, to = "NONE"),
             @ViewDebug.IntToString(from = LAYER_TYPE_SOFTWARE, to = "SOFTWARE"),
@@ -2668,7 +2669,7 @@
                     break;
                 case R.styleable.View_onClick:
                     if (context.isRestricted()) {
-                        throw new IllegalStateException("The android:onClick attribute cannot " 
+                        throw new IllegalStateException("The android:onClick attribute cannot "
                                 + "be used within a restricted context");
                     }
 
@@ -2907,19 +2908,19 @@
         initScrollCache();
 
         final ScrollabilityCache scrollabilityCache = mScrollCache;
-        
+
         if (scrollabilityCache.scrollBar == null) {
             scrollabilityCache.scrollBar = new ScrollBarDrawable();
         }
-        
+
         final boolean fadeScrollbars = a.getBoolean(R.styleable.View_fadeScrollbars, true);
 
         if (!fadeScrollbars) {
             scrollabilityCache.state = ScrollabilityCache.ON;
         }
         scrollabilityCache.fadeScrollBars = fadeScrollbars;
-        
-        
+
+
         scrollabilityCache.scrollBarFadeDuration = a.getInt(
                 R.styleable.View_scrollbarFadeDuration, ViewConfiguration
                         .getScrollBarFadeDuration());
@@ -2927,7 +2928,7 @@
                 R.styleable.View_scrollbarDefaultDelayBeforeFade,
                 ViewConfiguration.getScrollDefaultDelay());
 
-                
+
         scrollabilityCache.scrollBarSize = a.getDimensionPixelSize(
                 com.android.internal.R.styleable.View_scrollbarSize,
                 ViewConfiguration.get(mContext).getScaledScrollBarSize());
@@ -3163,8 +3164,11 @@
     }
 
     /**
-     * Register a callback to be invoked when a drag event is sent to this view.
-     * @param l The drag listener to attach to this view
+     * Register a drag event listener callback object for this View. The parameter is
+     * an implementation of {@link android.view.View.OnDragListener}. To send a drag event to a
+     * View, the system calls the
+     * {@link android.view.View.OnDragListener#onDrag(View,DragEvent)} method.
+     * @param l An implementation of {@link android.view.View.OnDragListener}.
      */
     public void setOnDragListener(OnDragListener l) {
         mOnDragListener = l;
@@ -3375,7 +3379,7 @@
         if (mOnFocusChangeListener != null) {
             mOnFocusChangeListener.onFocusChange(this, gainFocus);
         }
-        
+
         if (mAttachInfo != null) {
             mAttachInfo.mKeyDispatchState.reset(this);
         }
@@ -4523,7 +4527,7 @@
     public KeyEvent.DispatcherState getKeyDispatcherState() {
         return mAttachInfo != null ? mAttachInfo.mKeyDispatchState : null;
     }
-    
+
     /**
      * Dispatch a key event before it is processed by any input method
      * associated with the view hierarchy.  This can be used to intercept
@@ -4601,7 +4605,7 @@
      *
      * @param event The motion event to be filtered.
      * @return True if the event should be dispatched, false if the event should be dropped.
-     * 
+     *
      * @see #getFilterTouchesWhenObscured
      */
     public boolean onFilterTouchEventForSecurity(MotionEvent event) {
@@ -4708,7 +4712,7 @@
      * a View moves out of the screen, it might receives a display hint indicating
      * the view is not displayed. Applications should not <em>rely</em> on this hint
      * as there is no guarantee that they will receive one.
-     * 
+     *
      * @param hint A hint about whether or not this view is displayed:
      * {@link #VISIBLE} or {@link #INVISIBLE}.
      */
@@ -4721,7 +4725,7 @@
      * a View moves out of the screen, it might receives a display hint indicating
      * the view is not displayed. Applications should not <em>rely</em> on this hint
      * as there is no guarantee that they will receive one.
-     * 
+     *
      * @param hint A hint about whether or not this view is displayed:
      * {@link #VISIBLE} or {@link #INVISIBLE}.
      */
@@ -5174,7 +5178,7 @@
                             mPrivateFlags |= PRESSED;
                             refreshDrawableState();
                        }
-                        
+
                         if (!mHasPerformedLongPress) {
                             // This is a tap, so remove the longpress check
                             removeLongPressCallback();
@@ -5677,7 +5681,7 @@
     /**
      * Returns true if the transform matrix is the identity matrix.
      * Recomputes the matrix if necessary.
-     * 
+     *
      * @return True if the transform matrix is the identity matrix, false otherwise.
      */
     final boolean hasIdentityMatrix() {
@@ -6018,16 +6022,16 @@
     /**
      * <p>Sets the opacity of the view. This is a value from 0 to 1, where 0 means the view is
      * completely transparent and 1 means the view is completely opaque.</p>
-     * 
+     *
      * <p>If this view overrides {@link #onSetAlpha(int)} to return true, then this view is
      * responsible for applying the opacity itself. Otherwise, calling this method is
      * equivalent to calling {@link #setLayerType(int, android.graphics.Paint)} and
-     * setting a hardware layer.</p> 
+     * setting a hardware layer.</p>
      *
      * @param alpha The opacity of the view.
      *
-     * @see #setLayerType(int, android.graphics.Paint) 
-     * 
+     * @see #setLayerType(int, android.graphics.Paint)
+     *
      * @attr ref android.R.styleable#View_alpha
      */
     public void setAlpha(float alpha) {
@@ -6293,7 +6297,7 @@
     /**
      * The visual x position of this view, in pixels. This is equivalent to the
      * {@link #setTranslationX(float) translationX} property plus the current
-     * {@link #getLeft() left} property. 
+     * {@link #getLeft() left} property.
      *
      * @return The visual x position of this view, in pixels.
      */
@@ -6690,7 +6694,7 @@
      * provides animated scrolling, the start delay should equal the duration of
      * the scrolling animation.
      * </p>
-     * 
+     *
      * <p>
      * The animation starts only if at least one of the scrollbars is enabled,
      * as specified by {@link #isHorizontalScrollBarEnabled()} and
@@ -6699,17 +6703,17 @@
      * started, this method calls {@link #invalidate()}; in that case the caller
      * should not call {@link #invalidate()}.
      * </p>
-     * 
+     *
      * <p>
      * This method should be invoked everytime a subclass directly updates the
      * scroll parameters.
      * </p>
-     * 
+     *
      * @param startDelay the delay, in milliseconds, after which the animation
      *        should start; when the delay is 0, the animation starts
      *        immediately
      * @return true if the animation is played, false otherwise
-     * 
+     *
      * @see #scrollBy(int, int)
      * @see #scrollTo(int, int)
      * @see #isHorizontalScrollBarEnabled()
@@ -6720,7 +6724,7 @@
     protected boolean awakenScrollBars(int startDelay) {
         return awakenScrollBars(startDelay, true);
     }
-        
+
     /**
      * <p>
      * Trigger the scrollbars to draw. When invoked this method starts an
@@ -6728,30 +6732,30 @@
      * provides animated scrolling, the start delay should equal the duration of
      * the scrolling animation.
      * </p>
-     * 
+     *
      * <p>
      * The animation starts only if at least one of the scrollbars is enabled,
      * as specified by {@link #isHorizontalScrollBarEnabled()} and
      * {@link #isVerticalScrollBarEnabled()}. When the animation is started,
      * this method returns true, and false otherwise. If the animation is
-     * started, this method calls {@link #invalidate()} if the invalidate parameter 
+     * started, this method calls {@link #invalidate()} if the invalidate parameter
      * is set to true; in that case the caller
      * should not call {@link #invalidate()}.
      * </p>
-     * 
+     *
      * <p>
      * This method should be invoked everytime a subclass directly updates the
      * scroll parameters.
      * </p>
-     * 
+     *
      * @param startDelay the delay, in milliseconds, after which the animation
      *        should start; when the delay is 0, the animation starts
      *        immediately
-     * 
+     *
      * @param invalidate Wheter this method should call invalidate
-     * 
+     *
      * @return true if the animation is played, false otherwise
-     * 
+     *
      * @see #scrollBy(int, int)
      * @see #scrollTo(int, int)
      * @see #isHorizontalScrollBarEnabled()
@@ -6761,7 +6765,7 @@
      */
     protected boolean awakenScrollBars(int startDelay, boolean invalidate) {
         final ScrollabilityCache scrollCache = mScrollCache;
-        
+
         if (scrollCache == null || !scrollCache.fadeScrollBars) {
             return false;
         }
@@ -6894,7 +6898,7 @@
     public void invalidate() {
         invalidate(true);
     }
-    
+
     /**
      * This is where the invalidate() work actually happens. A full invalidate()
      * causes the drawing cache to be invalidated, but this function can be called with
@@ -6956,7 +6960,7 @@
             ((View) mParent).mPrivateFlags |= INVALIDATED;
         }
     }
-    
+
     /**
      * Used to indicate that the parent of this view should be invalidated. This functionality
      * is used to force the parent to rebuild its display list (when hardware-accelerated),
@@ -7385,12 +7389,12 @@
     protected void recomputePadding() {
         setPadding(mUserPaddingLeft, mPaddingTop, mUserPaddingRight, mUserPaddingBottom);
     }
-    
+
     /**
      * Define whether scrollbars will fade when the view is not scrolling.
-     * 
+     *
      * @param fadeScrollbars wheter to enable fading
-     * 
+     *
      */
     public void setScrollbarFadingEnabled(boolean fadeScrollbars) {
         initScrollCache();
@@ -7402,17 +7406,17 @@
             scrollabilityCache.state = ScrollabilityCache.ON;
         }
     }
-    
+
     /**
-     * 
+     *
      * Returns true if scrollbars will fade when this view is not scrolling
-     * 
+     *
      * @return true if scrollbar fading is enabled
      */
     public boolean isScrollbarFadingEnabled() {
-        return mScrollCache != null && mScrollCache.fadeScrollBars; 
+        return mScrollCache != null && mScrollCache.fadeScrollBars;
     }
-    
+
     /**
      * <p>Specify the style of the scrollbars. The scrollbars can be overlaid or
      * inset. When inset, they add to the padding of the view. And the scrollbars
@@ -7579,30 +7583,30 @@
      * scrollbars are painted only if they have been awakened first.</p>
      *
      * @param canvas the canvas on which to draw the scrollbars
-     * 
+     *
      * @see #awakenScrollBars(int)
      */
     protected final void onDrawScrollBars(Canvas canvas) {
         // scrollbars are drawn only when the animation is running
         final ScrollabilityCache cache = mScrollCache;
         if (cache != null) {
-            
+
             int state = cache.state;
-            
+
             if (state == ScrollabilityCache.OFF) {
                 return;
             }
-            
+
             boolean invalidate = false;
-            
+
             if (state == ScrollabilityCache.FADING) {
                 // We're fading -- get our fade interpolation
                 if (cache.interpolatorValues == null) {
                     cache.interpolatorValues = new float[1];
                 }
-                
+
                 float[] values = cache.interpolatorValues;
-                
+
                 // Stops the animation if we're done
                 if (cache.scrollBarInterpolator.timeToValues(values) ==
                         Interpolator.Result.FREEZE_END) {
@@ -7610,8 +7614,8 @@
                 } else {
                     cache.scrollBar.setAlpha(Math.round(values[0]));
                 }
-                
-                // This will make the scroll bars inval themselves after 
+
+                // This will make the scroll bars inval themselves after
                 // drawing. We only want this when we're fading so that
                 // we prevent excessive redraws
                 invalidate = true;
@@ -7621,7 +7625,7 @@
                 cache.scrollBar.setAlpha(255);
             }
 
-            
+
             final int viewFlags = mViewFlags;
 
             final boolean drawHorizontalScrollBar =
@@ -7641,7 +7645,7 @@
                 final int inside = (viewFlags & SCROLLBARS_OUTSIDE_MASK) == 0 ? ~0 : 0;
 
                 int left, top, right, bottom;
-                
+
                 if (drawHorizontalScrollBar) {
                     int size = scrollBar.getSize(false);
                     if (size <= 0) {
@@ -7653,7 +7657,7 @@
                                             computeHorizontalScrollExtent(), false);
                     final int verticalScrollBarGap = drawVerticalScrollBar ?
                             getVerticalScrollbarWidth() : 0;
-                    top = scrollY + height - size - (mUserPaddingBottom & inside);                         
+                    top = scrollY + height - size - (mUserPaddingBottom & inside);
                     left = scrollX + (mPaddingLeft & inside);
                     right = scrollX + width - (mUserPaddingRight & inside) - verticalScrollBarGap;
                     bottom = top + size;
@@ -8038,8 +8042,8 @@
         if (state != BaseSavedState.EMPTY_STATE && state != null) {
             throw new IllegalArgumentException("Wrong state class, expecting View State but "
                     + "received " + state.getClass().toString() + " instead. This usually happens "
-                    + "when two views of different type have the same id in the same hierarchy. " 
-                    + "This view's id is " + ViewDebug.resolveId(mContext, getId()) + ". Make sure " 
+                    + "when two views of different type have the same id in the same hierarchy. "
+                    + "This view's id is " + ViewDebug.resolveId(mContext, getId()) + ". Make sure "
                     + "other views do not use the same id.");
         }
     }
@@ -8064,7 +8068,7 @@
      *
      * <p>Note: if this view's parent addStateFromChildren property is enabled and this
      * property is enabled, an exception will be thrown.</p>
-     * 
+     *
      * <p>Note: if the child view uses and updates additionnal states which are unknown to the
      * parent, these states should not be affected by this method.</p>
      *
@@ -8095,7 +8099,7 @@
      * <p>Specifies the type of layer backing this view. The layer can be
      * {@link #LAYER_TYPE_NONE disabled}, {@link #LAYER_TYPE_SOFTWARE software} or
      * {@link #LAYER_TYPE_HARDWARE hardware}.</p>
-     * 
+     *
      * <p>A layer is associated with an optional {@link android.graphics.Paint}
      * instance that controls how the layer is composed on screen. The following
      * properties of the paint are taken into account when composing the layer:</p>
@@ -8104,35 +8108,35 @@
      * <li>{@link android.graphics.Paint#getXfermode() Blending mode}</li>
      * <li>{@link android.graphics.Paint#getColorFilter() Color filter}</li>
      * </ul>
-     * 
+     *
      * <p>If this view has an alpha value set to < 1.0 by calling
      * {@link #setAlpha(float)}, the alpha value of the layer's paint is replaced by
      * this view's alpha value. Calling {@link #setAlpha(float)} is therefore
      * equivalent to setting a hardware layer on this view and providing a paint with
      * the desired alpha value.<p>
-     * 
+     *
      * <p>Refer to the documentation of {@link #LAYER_TYPE_NONE disabled},
      * {@link #LAYER_TYPE_SOFTWARE software} and {@link #LAYER_TYPE_HARDWARE hardware}
      * for more information on when and how to use layers.</p>
-     * 
+     *
      * @param layerType The ype of layer to use with this view, must be one of
      *        {@link #LAYER_TYPE_NONE}, {@link #LAYER_TYPE_SOFTWARE} or
      *        {@link #LAYER_TYPE_HARDWARE}
      * @param paint The paint used to compose the layer. This argument is optional
      *        and can be null. It is ignored when the layer type is
      *        {@link #LAYER_TYPE_NONE}
-     * 
-     * @see #getLayerType() 
+     *
+     * @see #getLayerType()
      * @see #LAYER_TYPE_NONE
      * @see #LAYER_TYPE_SOFTWARE
      * @see #LAYER_TYPE_HARDWARE
-     * @see #setAlpha(float) 
-     * 
+     * @see #setAlpha(float)
+     *
      * @attr ref android.R.styleable#View_layerType
      */
     public void setLayerType(int layerType, Paint paint) {
         if (layerType < LAYER_TYPE_NONE || layerType > LAYER_TYPE_HARDWARE) {
-            throw new IllegalArgumentException("Layer type can only be one of: LAYER_TYPE_NONE, " 
+            throw new IllegalArgumentException("Layer type can only be one of: LAYER_TYPE_NONE, "
                     + "LAYER_TYPE_SOFTWARE or LAYER_TYPE_HARDWARE");
         }
 
@@ -8152,7 +8156,7 @@
                     mDrawingCache.recycle();
                     mDrawingCache = null;
                 }
-    
+
                 if (mUnscaledDrawingCache != null) {
                     mUnscaledDrawingCache.recycle();
                     mUnscaledDrawingCache = null;
@@ -8180,11 +8184,11 @@
      * a view does not have a layer, and the layer type is {@link #LAYER_TYPE_NONE}.
      * Refer to the documentation of {@link #setLayerType(int, android.graphics.Paint)}
      * for more information on the different types of layers.
-     * 
+     *
      * @return {@link #LAYER_TYPE_NONE}, {@link #LAYER_TYPE_SOFTWARE} or
      *         {@link #LAYER_TYPE_HARDWARE}
-     * 
-     * @see #setLayerType(int, android.graphics.Paint) 
+     *
+     * @see #setLayerType(int, android.graphics.Paint)
      * @see #LAYER_TYPE_NONE
      * @see #LAYER_TYPE_SOFTWARE
      * @see #LAYER_TYPE_HARDWARE
@@ -8192,7 +8196,7 @@
     public int getLayerType() {
         return mLayerType;
     }
-    
+
     /**
      * <p>Returns a hardware layer that can be used to draw this view again
      * without executing its draw method.</p>
@@ -8206,7 +8210,7 @@
 
         final int width = mRight - mLeft;
         final int height = mBottom - mTop;
-        
+
         if (width == 0 || height == 0) {
             return null;
         }
@@ -8233,7 +8237,7 @@
                 canvas.translate(-mScrollX, -mScrollY);
 
                 mPrivateFlags |= DRAWN | DRAWING_CACHE_VALID;
-    
+
                 // Fast path for layouts with no backgrounds
                 if ((mPrivateFlags & SKIP_DRAW) == SKIP_DRAW) {
                     mPrivateFlags &= ~DIRTY_MASK;
@@ -8241,7 +8245,7 @@
                 } else {
                     draw(canvas);
                 }
-    
+
                 canvas.restoreToCount(restoreCount);
             } finally {
                 canvas.onPostDraw();
@@ -8260,7 +8264,7 @@
      * the cache is enabled. To benefit from the cache, you must request the drawing cache by
      * calling {@link #getDrawingCache()} and draw it on screen if the returned bitmap is not
      * null.</p>
-     * 
+     *
      * <p>Enabling the drawing cache is similar to
      * {@link #setLayerType(int, android.graphics.Paint) setting a layer} when hardware
      * acceleration is turned off. When hardware acceleration is turned on, enabling the
@@ -8278,7 +8282,7 @@
      * @see #isDrawingCacheEnabled()
      * @see #getDrawingCache()
      * @see #buildDrawingCache()
-     * @see #setLayerType(int, android.graphics.Paint) 
+     * @see #setLayerType(int, android.graphics.Paint)
      */
     public void setDrawingCacheEnabled(boolean enabled) {
         setFlags(enabled ? DRAWING_CACHE_ENABLED : 0, DRAWING_CACHE_ENABLED);
@@ -8300,7 +8304,7 @@
     /**
      * Debugging utility which recursively outputs the dirty state of a view and its
      * descendants.
-     * 
+     *
      * @hide
      */
     public void outputDirtyFlags(String indent, boolean clear, int clearMask) {
@@ -8345,11 +8349,11 @@
         }
         return true;
     }
-    
+
     /**
      * <p>Returns a display list that can be used to draw this view again
      * without executing its draw method.</p>
-     * 
+     *
      * @return A DisplayList ready to replay, or null if caching is not enabled.
      *
      * @hide
@@ -8398,7 +8402,7 @@
                 computeScroll();
                 canvas.translate(-mScrollX, -mScrollY);
                 mPrivateFlags |= DRAWN | DRAWING_CACHE_VALID;
-    
+
                 // Fast path for layouts with no backgrounds
                 if ((mPrivateFlags & SKIP_DRAW) == SKIP_DRAW) {
                     mPrivateFlags &= ~DIRTY_MASK;
@@ -8406,7 +8410,7 @@
                 } else {
                     draw(canvas);
                 }
-    
+
                 canvas.restoreToCount(restoreCount);
             } finally {
                 canvas.onPostDraw();
@@ -8423,9 +8427,9 @@
 
     /**
      * <p>Calling this method is equivalent to calling <code>getDrawingCache(false)</code>.</p>
-     * 
+     *
      * @return A non-scaled bitmap representing this view or null if cache is disabled.
-     * 
+     *
      * @see #getDrawingCache(boolean)
      */
     public Bitmap getDrawingCache() {
@@ -8439,7 +8443,7 @@
      * draw from the cache when the cache is enabled. To benefit from the cache, you must
      * request the drawing cache by calling this method and draw it on screen if the
      * returned bitmap is not null.</p>
-     * 
+     *
      * <p>Note about auto scaling in compatibility mode: When auto scaling is not enabled,
      * this method will create a bitmap of the same size as this view. Because this bitmap
      * will be drawn scaled by the parent ViewGroup, the result on screen might show
@@ -8447,13 +8451,13 @@
      * the auto scaling to true. Doing so, however, will generate a bitmap of a different
      * size than the view. This implies that your application must be able to handle this
      * size.</p>
-     * 
+     *
      * @param autoScale Indicates whether the generated bitmap should be scaled based on
      *        the current density of the screen when the application is in compatibility
      *        mode.
      *
      * @return A bitmap representing this view or null if cache is disabled.
-     * 
+     *
      * @see #setDrawingCacheEnabled(boolean)
      * @see #isDrawingCacheEnabled()
      * @see #buildDrawingCache(boolean)
@@ -8519,7 +8523,7 @@
 
     /**
      * <p>Calling this method is equivalent to calling <code>buildDrawingCache(false)</code>.</p>
-     * 
+     *
      * @see #buildDrawingCache(boolean)
      */
     public void buildDrawingCache() {
@@ -8532,7 +8536,7 @@
      * <p>If you call {@link #buildDrawingCache()} manually without calling
      * {@link #setDrawingCacheEnabled(boolean) setDrawingCacheEnabled(true)}, you
      * should cleanup the cache by calling {@link #destroyDrawingCache()} afterwards.</p>
-     * 
+     *
      * <p>Note about auto scaling in compatibility mode: When auto scaling is not enabled,
      * this method will create a bitmap of the same size as this view. Because this bitmap
      * will be drawn scaled by the parent ViewGroup, the result on screen might show
@@ -8540,10 +8544,10 @@
      * the auto scaling to true. Doing so, however, will generate a bitmap of a different
      * size than the view. This implies that your application must be able to handle this
      * size.</p>
-     * 
+     *
      * <p>You should avoid calling this method when hardware acceleration is enabled. If
      * you do not need the drawing cache bitmap, calling this method will increase memory
-     * usage and cause the view to be rendered in software once, thus negatively impacting 
+     * usage and cause the view to be rendered in software once, thus negatively impacting
      * performance.</p>
      *
      * @see #getDrawingCache()
@@ -8656,12 +8660,12 @@
 
             computeScroll();
             final int restoreCount = canvas.save();
-            
+
             if (autoScale && scalingRequired) {
                 final float scale = attachInfo.mApplicationScale;
                 canvas.scale(scale, scale);
             }
-            
+
             canvas.translate(-mScrollX, -mScrollY);
 
             mPrivateFlags |= DRAWN;
@@ -8702,14 +8706,14 @@
         final float scale = attachInfo != null ? attachInfo.mApplicationScale : 1.0f;
         width = (int) ((width * scale) + 0.5f);
         height = (int) ((height * scale) + 0.5f);
-        
+
         Bitmap bitmap = Bitmap.createBitmap(width > 0 ? width : 1, height > 0 ? height : 1, quality);
         if (bitmap == null) {
             throw new OutOfMemoryError();
         }
 
         bitmap.setDensity(getResources().getDisplayMetrics().densityDpi);
-        
+
         Canvas canvas;
         if (attachInfo != null) {
             canvas = attachInfo.mCanvas;
@@ -8859,7 +8863,7 @@
     /**
      * <p>Indicates whether this view is attached to an hardware accelerated
      * window or not.</p>
-     * 
+     *
      * <p>Even if this method returns true, it does not mean that every call
      * to {@link #draw(android.graphics.Canvas)} will be made with an hardware
      * accelerated {@link android.graphics.Canvas}. For instance, if this view
@@ -8867,14 +8871,14 @@
      * window is hardware accelerated,
      * {@link android.graphics.Canvas#isHardwareAccelerated()} will likely
      * return false, and this method will return true.</p>
-     * 
+     *
      * @return True if the view is attached to a window and the window is
      *         hardware accelerated; false in any other case.
      */
     public boolean isHardwareAccelerated() {
         return mAttachInfo != null && mAttachInfo.mHardwareAccelerated;
     }
-    
+
     /**
      * Manually render this view (and all of its children) to the given Canvas.
      * The view must have already done a full layout before this function is
@@ -10934,29 +10938,42 @@
     /**
      */
     public void dispatchSystemUiVisibilityChanged(int visibility) {
-        mSystemUiVisibility = visibility;
         if (mOnSystemUiVisibilityChangeListener != null) {
             mOnSystemUiVisibilityChangeListener.onSystemUiVisibilityChange(
-                    visibility & ~PUBLIC_STATUS_BAR_VISIBILITY_MASK);
+                    visibility & PUBLIC_STATUS_BAR_VISIBILITY_MASK);
         }
     }
 
     /**
-     * !!! TODO: real docs
-     *
-     * The base class implementation makes the shadow the same size and appearance
-     * as the view itself, and positions it with its center at the touch point.
+     * Creates an image that the system displays during the drag and drop
+     * operation. This is called a &quot;drag shadow&quot;. The default implementation
+     * for a DragShadowBuilder based on a View returns an image that has exactly the same
+     * appearance as the given View. The default also positions the center of the drag shadow
+     * directly under the touch point. If no View is provided (the constructor with no parameters
+     * is used), and {@link #onProvideShadowMetrics(Point,Point) onProvideShadowMetrics()} and
+     * {@link #onDrawShadow(Canvas) onDrawShadow()} are not overriden, then the
+     * default is an invisible drag shadow.
+     * <p>
+     * You are not required to use the View you provide to the constructor as the basis of the
+     * drag shadow. The {@link #onDrawShadow(Canvas) onDrawShadow()} method allows you to draw
+     * anything you want as the drag shadow.
+     * </p>
+     * <p>
+     *  You pass a DragShadowBuilder object to the system when you start the drag. The system
+     *  calls {@link #onProvideShadowMetrics(Point,Point) onProvideShadowMetrics()} to get the
+     *  size and position of the drag shadow. It uses this data to construct a
+     *  {@link android.graphics.Canvas} object, then it calls {@link #onDrawShadow(Canvas) onDrawShadow()}
+     *  so that your application can draw the shadow image in the Canvas.
+     * </p>
      */
     public static class DragShadowBuilder {
         private final WeakReference<View> mView;
 
         /**
-         * Construct a shadow builder object for use with the given View object.  The
-         * default implementation will construct a drag shadow the same size and
-         * appearance as the supplied View.
-         *
-         * @param view A view within the application's layout whose appearance
-         *        should be replicated as the drag shadow.
+         * Constructs a shadow image builder based on a View. By default, the resulting drag
+         * shadow will have the same appearance and dimensions as the View, with the touch point
+         * over the center of the View.
+         * @param view A View. Any View in scope can be used.
          */
         public DragShadowBuilder(View view) {
             mView = new WeakReference<View>(view);
@@ -10967,7 +10984,8 @@
          * constructor variant is only useful when the {@link #onProvideShadowMetrics(Point, Point)}
          * and {@link #onDrawShadow(Canvas)} methods are also overridden in order
          * to supply the drag shadow's dimensions and appearance without
-         * reference to any View object.
+         * reference to any View object. If they are not overridden, then the result is an
+         * invisible drag shadow.
          */
         public DragShadowBuilder() {
             mView = new WeakReference<View>(null);
@@ -10988,22 +11006,24 @@
         }
 
         /**
-         * Provide the draggable-shadow metrics for the operation: the dimensions of
-         * the shadow image itself, and the point within that shadow that should
+         * Provides the metrics for the shadow image. These include the dimensions of
+         * the shadow image, and the point within that shadow that should
          * be centered under the touch location while dragging.
          * <p>
          * The default implementation sets the dimensions of the shadow to be the
-         * same as the dimensions of the View object that had been supplied to the
-         * {@link #View.DragShadowBuilder(View)} constructor
-         * when the builder object was instantiated, and centers the shadow under the touch
-         * point.
+         * same as the dimensions of the View itself and centers the shadow under
+         * the touch point.
+         * </p>
          *
-         * @param shadowSize The application should set the {@code x} member of this
-         *        parameter to the desired shadow width, and the {@code y} member to
-         *        the desired height.
-         * @param shadowTouchPoint The application should set this point to be the
-         *        location within the shadow that should track directly underneath
-         *        the touch point on the screen during a drag.
+         * @param shadowSize A {@link android.graphics.Point} containing the width and height
+         * of the shadow image. Your application must set {@link android.graphics.Point#x} to the
+         * desired width and must set {@link android.graphics.Point#y} to the desired height of the
+         * image.
+         *
+         * @param shadowTouchPoint A {@link android.graphics.Point} for the position within the
+         * shadow image that should be underneath the touch point during the drag and drop
+         * operation. Your application must set {@link android.graphics.Point#x} to the
+         * X coordinate and {@link android.graphics.Point#y} to the Y coordinate of this position.
          */
         public void onProvideShadowMetrics(Point shadowSize, Point shadowTouchPoint) {
             final View view = mView.get();
@@ -11016,16 +11036,11 @@
         }
 
         /**
-         * Draw the shadow image for the upcoming drag.  The shadow canvas was
-         * created with the dimensions supplied by the
+         * Draws the shadow image. The system creates the {@link android.graphics.Canvas} object
+         * based on the dimensions it received from the
          * {@link #onProvideShadowMetrics(Point, Point)} callback.
-         * <p>
-         * The default implementation replicates the appearance of the View object
-         * that had been supplied to the
-         * {@link #View.DragShadowBuilder(View)}
-         * constructor when the builder object was instantiated.
          *
-         * @param canvas
+         * @param canvas A {@link android.graphics.Canvas} object in which to draw the shadow image.
          */
         public void onDrawShadow(Canvas canvas) {
             final View view = mView.get();
@@ -11038,24 +11053,43 @@
     }
 
     /**
-     * Drag and drop.  App calls startDrag(), then callbacks to the shadow builder's
-     * {@link DragShadowBuilder#onProvideShadowMetrics(Point, Point)} and
-     * {@link DragShadowBuilder#onDrawShadow(Canvas)} methods happen, then the drag
-     * operation is handed over to the OS.
-     * !!! TODO: real docs
-     *
-     * @param data !!! TODO
-     * @param shadowBuilder !!! TODO
-     * @param myLocalState An arbitrary object that will be passed as part of every DragEvent
-     *     delivered to the calling application during the course of the current drag operation.
-     *     This object is private to the application that called startDrag(), and is not
-     *     visible to other applications. It provides a lightweight way for the application to
-     *     propagate information from the initiator to the recipient of a drag within its own
-     *     application; for example, to help disambiguate between 'copy' and 'move' semantics.
-     * @param flags Flags affecting the drag operation.  At present no flags are defined;
-     *     pass 0 for this parameter.
-     * @return {@code true} if the drag operation was initiated successfully; {@code false} if
-     *     an error prevented the drag from taking place.
+     * Starts a drag and drop operation. When your application calls this method, it passes a
+     * {@link android.view.View.DragShadowBuilder} object to the system. The
+     * system calls this object's {@link DragShadowBuilder#onProvideShadowMetrics(Point, Point)}
+     * to get metrics for the drag shadow, and then calls the object's
+     * {@link DragShadowBuilder#onDrawShadow(Canvas)} to draw the drag shadow itself.
+     * <p>
+     *  Once the system has the drag shadow, it begins the drag and drop operation by sending
+     *  drag events to all the View objects in your application that are currently visible. It does
+     *  this either by calling the View object's drag listener (an implementation of
+     *  {@link android.view.View.OnDragListener#onDrag(View,DragEvent) onDrag()} or by calling the
+     *  View object's {@link android.view.View#onDragEvent(DragEvent) onDragEvent()} method.
+     *  Both are passed a {@link android.view.DragEvent} object that has a
+     *  {@link android.view.DragEvent#getAction()} value of
+     *  {@link android.view.DragEvent#ACTION_DRAG_STARTED}.
+     * </p>
+     * <p>
+     * Your application can invoke startDrag() on any attached View object. The View object does not
+     * need to be the one used in {@link android.view.View.DragShadowBuilder}, nor does it need to
+     * be related to the View the user selected for dragging.
+     * </p>
+     * @param data A {@link android.content.ClipData} object pointing to the data to be
+     * transferred by the drag and drop operation.
+     * @param shadowBuilder A {@link android.view.View.DragShadowBuilder} object for building the
+     * drag shadow.
+     * @param myLocalState An {@link java.lang.Object} containing local data about the drag and
+     * drop operation. This Object is put into every DragEvent object sent by the system during the
+     * current drag.
+     * <p>
+     * myLocalState is a lightweight mechanism for the sending information from the dragged View
+     * to the target Views. For example, it can contain flags that differentiate between a
+     * a copy operation and a move operation.
+     * </p>
+     * @param flags Flags that control the drag and drop operation. No flags are currently defined,
+     * so the parameter should be set to 0.
+     * @return {@code true} if the method completes successfully, or
+     * {@code false} if it fails anywhere. Returning {@code false} means the system was unable to
+     * do a drag, and so no drag operation is in progress.
      */
     public final boolean startDrag(ClipData data, DragShadowBuilder shadowBuilder,
             Object myLocalState, int flags) {
@@ -11114,42 +11148,48 @@
     }
 
     /**
-     * Drag-and-drop event dispatch.  The event.getAction() verb is one of the DragEvent
-     * constants DRAG_STARTED_EVENT, DRAG_EVENT, DROP_EVENT, and DRAG_ENDED_EVENT.
-     *
-     * For DRAG_STARTED_EVENT, event.getClipDescription() describes the content
-     * being dragged.  onDragEvent() should return 'true' if the view can handle
-     * a drop of that content.  A view that returns 'false' here will receive no
-     * further calls to onDragEvent() about the drag/drop operation.
-     *
-     * For DRAG_ENTERED, event.getClipDescription() describes the content being
-     * dragged.  This will be the same content description passed in the
-     * DRAG_STARTED_EVENT invocation.
-     *
-     * For DRAG_EXITED, event.getClipDescription() describes the content being
-     * dragged.  This will be the same content description passed in the
-     * DRAG_STARTED_EVENT invocation.  The view should return to its approriate
-     * drag-acceptance visual state.
-     *
-     * For DRAG_LOCATION_EVENT, event.getX() and event.getY() give the location in View
-     * coordinates of the current drag point.  The view must return 'true' if it
-     * can accept a drop of the current drag content, false otherwise.
-     *
-     * For DROP_EVENT, event.getX() and event.getY() give the location of the drop
-     * within the view; also, event.getClipData() returns the full data payload
-     * being dropped.  The view should return 'true' if it consumed the dropped
-     * content, 'false' if it did not.
-     *
-     * For DRAG_ENDED_EVENT, the 'event' argument may be null.  The view should return
-     * to its normal visual state.
+     * Handles drag events sent by the system following a call to
+     * {@link android.view.View#startDrag(ClipData,DragShadowBuilder,Object,int) startDrag()}.
+     *<p>
+     * When the system calls this method, it passes a
+     * {@link android.view.DragEvent} object. A call to
+     * {@link android.view.DragEvent#getAction()} returns one of the action type constants defined
+     * in DragEvent. The method uses these to determine what is happening in the drag and drop
+     * operation.
+     * @param event The {@link android.view.DragEvent} sent by the system.
+     * The {@link android.view.DragEvent#getAction()} method returns an action type constant defined
+     * in DragEvent, indicating the type of drag event represented by this object.
+     * @return {@code true} if the method was successful, otherwise {@code false}.
+     * <p>
+     *  The method should return {@code true} in response to an action type of
+     *  {@link android.view.DragEvent#ACTION_DRAG_STARTED} to receive drag events for the current
+     *  operation.
+     * </p>
+     * <p>
+     *  The method should also return {@code true} in response to an action type of
+     *  {@link android.view.DragEvent#ACTION_DROP} if it consumed the drop, or
+     *  {@code false} if it didn't.
+     * </p>
      */
     public boolean onDragEvent(DragEvent event) {
         return false;
     }
 
     /**
-     * Views typically don't need to override dispatchDragEvent(); it just calls
-     * onDragEvent(event) and passes the result up appropriately.
+     * Detects if this View is enabled and has a drag event listener.
+     * If both are true, then it calls the drag event listener with the
+     * {@link android.view.DragEvent} it received. If the drag event listener returns
+     * {@code true}, then dispatchDragEvent() returns {@code true}.
+     * <p>
+     * For all other cases, the method calls the
+     * {@link android.view.View#onDragEvent(DragEvent) onDragEvent()} drag event handler
+     * method and returns its result.
+     * </p>
+     * <p>
+     * This ensures that a drag event is always consumed, even if the View does not have a drag
+     * event listener. However, if the View has a listener and the listener returns true, then
+     * onDragEvent() is not called.
+     * </p>
      */
     public boolean dispatchDragEvent(DragEvent event) {
         if (mOnDragListener != null && (mViewFlags & ENABLED_MASK) == ENABLED
@@ -11166,7 +11206,7 @@
      */
     public void onCloseSystemDialogs(String reason) {
     }
-    
+
     /**
      * Given a Drawable whose bounds have been set to draw into this view,
      * update a Region being computed for {@link #gatherTransparentRegion} so
@@ -11498,7 +11538,7 @@
             mOriginalWindowAttachCount = mWindowAttachCount;
         }
     }
-    
+
     private final class CheckForTap implements Runnable {
         public void run() {
             mPrivateFlags &= ~PREPRESSED;
@@ -11520,7 +11560,7 @@
     public void hackTurnOffWindowResizeAnim(boolean off) {
         mAttachInfo.mTurnOffWindowResizeAnim = off;
     }
-    
+
     /**
      * Interface definition for a callback to be invoked when a key event is
      * dispatched to this view. The callback will be invoked before the key
@@ -11583,11 +11623,11 @@
          * Called when a drag event is dispatched to a view. This allows listeners
          * to get a chance to override base View behavior.
          *
-         * @param v The view the drag has been dispatched to.
-         * @param event The DragEvent object containing full information
-         *        about the event.
-         * @return true if the listener consumed the DragEvent, false in order to fall
-         *         back to the view's default handling.
+         * @param v The View that received the drag event.
+         * @param event The {@link android.view.DragEvent} object for the drag event.
+         * @return {@code true} if the drag event was handled successfully, or {@code false}
+         * if the drag event was not handled. Note that {@code false} will trigger the View
+         * to call its {@link #onDragEvent(DragEvent) onDragEvent()} handler.
          */
         boolean onDrag(View v, DragEvent event);
     }
@@ -11775,7 +11815,7 @@
         boolean mHardwareAccelerated;
         boolean mHardwareAccelerationRequested;
         HardwareRenderer mHardwareRenderer;
-        
+
         /**
          * Scale factor used by the compatibility mode
          */
@@ -11790,7 +11830,7 @@
          * If set, ViewRoot doesn't use its lame animation for when the window resizes.
          */
         boolean mTurnOffWindowResizeAnim;
-        
+
         /**
          * Left position of this view's window
          */
@@ -11983,7 +12023,7 @@
      * instances of View.</p>
      */
     private static class ScrollabilityCache implements Runnable {
-                
+
         /**
          * Scrollbars are not visible
          */
@@ -12000,7 +12040,7 @@
         public static final int FADING = 2;
 
         public boolean fadeScrollBars;
-        
+
         public int fadingEdgeLength;
         public int scrollBarDefaultDelayBeforeFade;
         public int scrollBarFadeDuration;
@@ -12018,7 +12058,7 @@
 
         private static final float[] OPAQUE = { 255 };
         private static final float[] TRANSPARENT = { 0.0f };
-        
+
         /**
          * When fading should start. This time moves into the future every time
          * a new scroll happens. Measured based on SystemClock.uptimeMillis()
@@ -12063,7 +12103,7 @@
                 paint.setXfermode(null);
             }
         }
-        
+
         public void run() {
             long now = AnimationUtils.currentAnimationTimeMillis();
             if (now >= fadeStartTime) {
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 790a040..fcfcc03 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -2506,6 +2506,7 @@
         // Rect.equals() checks for null input.
         if (!rect.equals(mLastVisibleRectSent)) {
             Point pos = new Point(rect.left, rect.top);
+            mWebViewCore.removeMessages(EventHub.SET_SCROLL_OFFSET);
             mWebViewCore.sendMessage(EventHub.SET_SCROLL_OFFSET,
                     nativeMoveGeneration(), mUserScroll ? 1 : 0, pos);
             mLastVisibleRectSent = rect;
@@ -6624,15 +6625,10 @@
      * @param y New y position of the WebTextView in view coordinates
      */
     /* package */ void scrollFocusedTextInputY(int y) {
-        if (!inEditingMode()) {
+        if (!inEditingMode() || mWebViewCore == null) {
             return;
         }
-        int xPos = viewToContentX((mWebTextView.getLeft() + mWebTextView.getRight()) / 2);
-        int yPos = viewToContentY((mWebTextView.getTop() + mWebTextView.getBottom()) / 2);
-        int layer = nativeScrollableLayer(xPos, yPos, null, null);
-        if (layer != 0) {
-            nativeScrollLayer(layer, 0, viewToContentDimension(y));
-        }
+        mWebViewCore.sendMessage(EventHub.SCROLL_TEXT_INPUT, 0, viewToContentDimension(y));
     }
 
     /**
@@ -7979,18 +7975,15 @@
      * @param node Pointer to the node touched.
      * @param x x-position of the touch.
      * @param y y-position of the touch.
-     * @param scrollY Only used when touching on a textarea.  Otherwise, use -1.
-     *      Tells how much the textarea is scrolled.
      */
     private void sendMotionUp(int touchGeneration,
-            int frame, int node, int x, int y, int scrollY) {
+            int frame, int node, int x, int y) {
         WebViewCore.TouchUpData touchUpData = new WebViewCore.TouchUpData();
         touchUpData.mMoveGeneration = touchGeneration;
         touchUpData.mFrame = frame;
         touchUpData.mNode = node;
         touchUpData.mX = x;
         touchUpData.mY = y;
-        touchUpData.mScrollY = scrollY;
         mWebViewCore.sendMessage(EventHub.TOUCH_UP, touchUpData);
     }
 
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index 3bde000..b949a41 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -559,7 +559,7 @@
     private native String nativeRetrieveImageSource(int x, int y);
 
     private native void nativeTouchUp(int touchGeneration,
-            int framePtr, int nodePtr, int x, int y, int scrollY);
+            int framePtr, int nodePtr, int x, int y);
 
     private native boolean nativeHandleTouchEvent(int action, int[] idArray,
             int[] xArray, int[] yArray, int count, int metaState);
@@ -777,8 +777,6 @@
         int mNode;
         int mX;
         int mY;
-        // Used in the case of a scrolled textarea
-        int mScrollY;
     }
 
     static class TouchHighlightData {
@@ -1086,8 +1084,13 @@
                             break;
 
                         case SCROLL_TEXT_INPUT:
-                            nativeScrollFocusedTextInput(
-                                    ((Float) msg.obj).floatValue(), msg.arg1);
+                            float xPercent;
+                            if (msg.obj == null) {
+                                xPercent = 0f;
+                            } else {
+                                xPercent = ((Float) msg.obj).floatValue();
+                            }
+                            nativeScrollFocusedTextInput(xPercent, msg.arg2);
                             break;
 
                         case LOAD_URL: {
@@ -1307,8 +1310,7 @@
                             TouchUpData touchUpData = (TouchUpData) msg.obj;
                             nativeTouchUp(touchUpData.mMoveGeneration,
                                     touchUpData.mFrame, touchUpData.mNode,
-                                    touchUpData.mX, touchUpData.mY,
-                                    touchUpData.mScrollY);
+                                    touchUpData.mX, touchUpData.mY);
                             break;
 
                         case TOUCH_EVENT: {
diff --git a/core/java/android/widget/TabWidget.java b/core/java/android/widget/TabWidget.java
index 51ece33..22f6f4e 100644
--- a/core/java/android/widget/TabWidget.java
+++ b/core/java/android/widget/TabWidget.java
@@ -66,6 +66,10 @@
 
     private final Rect mBounds = new Rect();
 
+    // When positive, the widths and heights of tabs will be imposed so that they fit in parent
+    private int mImposedTabsHeight = -1;
+    private int[] mImposedTabWidths;
+
     public TabWidget(Context context) {
         this(context, null);
     }
@@ -132,7 +136,17 @@
                 mRightStrip = resources.getDrawable(
                         com.android.internal.R.drawable.tab_bottom_right_v4);
             }
-        }
+        } else {
+            // Use modern color scheme for Eclair and beyond
+            if (mLeftStrip == null) {
+                mLeftStrip = resources.getDrawable(
+                        com.android.internal.R.drawable.tab_bottom_left);
+            }
+            if (mRightStrip == null) {
+                mRightStrip = resources.getDrawable(
+                        com.android.internal.R.drawable.tab_bottom_right);
+            }
+         }
 
         // Deal with focus, as we don't want the focus to go by default
         // to a tab other than the current tab
@@ -140,52 +154,62 @@
         setOnFocusChangeListener(this);
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
-    void measureHorizontal(int widthMeasureSpec, int heightMeasureSpec) {
-        // First measure with no constraint
-        final int unspecifiedWidth = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
-        super.measureHorizontal(unspecifiedWidth, heightMeasureSpec);
+    void measureChildBeforeLayout(View child, int childIndex,
+            int widthMeasureSpec, int totalWidth,
+            int heightMeasureSpec, int totalHeight) {
 
-        final int count = getChildCount();
-        int totalWidth = 0;
-        int totalCount = 0;
-        for (int i = 0; i < count; i++) {
-            final View child = getChildAt(i);
-            if (child.getVisibility() == GONE) {
-                continue;
-            }
-            final int childWidth = child.getMeasuredWidth();
-            totalWidth += childWidth;
-            totalCount++;
+        if (mImposedTabsHeight >= 0) {
+            widthMeasureSpec = MeasureSpec.makeMeasureSpec(
+                    totalWidth + mImposedTabWidths[childIndex], MeasureSpec.EXACTLY);
+            heightMeasureSpec = MeasureSpec.makeMeasureSpec(mImposedTabsHeight,
+                    MeasureSpec.EXACTLY);
         }
 
-        final int width = MeasureSpec.getSize(widthMeasureSpec);
-        if (totalWidth > width && totalCount > 0) {
-            int extraWidth = totalWidth - width;
+        super.measureChildBeforeLayout(child, childIndex,
+                widthMeasureSpec, totalWidth, heightMeasureSpec, totalHeight);
+    }
+
+    @Override
+    void measureHorizontal(int widthMeasureSpec, int heightMeasureSpec) {
+        // First, measure with no constraint
+        final int unspecifiedWidth = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
+        super.measureHorizontal(unspecifiedWidth, heightMeasureSpec);
+        mImposedTabsHeight = -1;
+
+        int extraWidth = getMeasuredWidth() - MeasureSpec.getSize(widthMeasureSpec);
+        if (extraWidth > 0) {
+            final int count = getChildCount();
+
+            int childCount = 0;
             for (int i = 0; i < count; i++) {
                 final View child = getChildAt(i);
-                if (child.getVisibility() == GONE) {
-                    continue;
-                }
-                final int childWidth = child.getMeasuredWidth();
-                final int delta = extraWidth / totalCount;
-                final int tabWidth = Math.max(0, childWidth - delta);
-
-                final int tabWidthMeasureSpec = MeasureSpec.makeMeasureSpec(
-                        tabWidth, MeasureSpec.EXACTLY);
-                final int tabHeightMeasureSpec = MeasureSpec.makeMeasureSpec(
-                        child.getMeasuredHeight(), MeasureSpec.EXACTLY);
-
-                child.measure(tabWidthMeasureSpec, tabHeightMeasureSpec);
-
-                // Make sure the extra width is evenly distributed, avoiding int division remainder
-                extraWidth -= delta;
-                totalCount--;
+                if (child.getVisibility() == GONE) continue;
+                childCount++;
             }
-            setMeasuredDimension(width, getMeasuredHeight());
+
+            if (childCount > 0) {
+                if (mImposedTabWidths == null || mImposedTabWidths.length != count) {
+                    mImposedTabWidths = new int[count];
+                }
+                for (int i = 0; i < count; i++) {
+                    final View child = getChildAt(i);
+                    if (child.getVisibility() == GONE) continue;
+                    final int childWidth = child.getMeasuredWidth();
+                    final int delta = extraWidth / childCount;
+                    final int newWidth = Math.max(0, childWidth - delta);
+                    mImposedTabWidths[i] = newWidth;
+                    // Make sure the extra width is evenly distributed, no int division remainder
+                    extraWidth -= childWidth - newWidth; // delta may have been clamped
+                    childCount--;
+                    mImposedTabsHeight = Math.max(mImposedTabsHeight, child.getMeasuredHeight());
+                }
+            }
+        }
+
+        // Measure again, this time with imposed tab widths and respecting initial spec request
+        if (mImposedTabsHeight >= 0 || unspecifiedWidth != widthMeasureSpec) {
+            super.measureHorizontal(widthMeasureSpec, heightMeasureSpec);
         }
     }
 
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 10ec6ca..e7c33ab 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -3489,8 +3489,7 @@
                     com.android.internal.R.layout.textview_hint, null);
 
             final float scale = getResources().getDisplayMetrics().density;
-            mPopup = new ErrorPopup(err, (int) (200 * scale + 0.5f),
-                    (int) (50 * scale + 0.5f));
+            mPopup = new ErrorPopup(err, (int) (200 * scale + 0.5f), (int) (50 * scale + 0.5f));
             mPopup.setFocusable(false);
             // The user is entering text, so the input method is needed.  We
             // don't want the popup to be displayed on top of it.
@@ -3514,6 +3513,12 @@
         ErrorPopup(TextView v, int width, int height) {
             super(v, width, height);
             mView = v;
+            // Make sure the TextView has a background set as it will be used the first time it is
+            // shown and positionned. Initialized with below background, which should have
+            // dimensions identical to the above version for this to work (and is more likely).
+            mPopupInlineErrorBackgroundId = getResourceId(mPopupInlineErrorBackgroundId,
+                    com.android.internal.R.styleable.Theme_errorMessageBackground);
+            mView.setBackgroundResource(mPopupInlineErrorBackgroundId);
         }
 
         void fixDirection(boolean above) {
@@ -3521,18 +3526,21 @@
 
             if (above) {
                 mPopupInlineErrorAboveBackgroundId =
-                    getResourceId(mPopupInlineErrorAboveBackgroundId, com.android.internal.R.styleable.Theme_errorMessageAboveBackground);
+                    getResourceId(mPopupInlineErrorAboveBackgroundId,
+                            com.android.internal.R.styleable.Theme_errorMessageAboveBackground);
             } else {
-                mPopupInlineErrorBackgroundId =
-                    getResourceId(mPopupInlineErrorBackgroundId, com.android.internal.R.styleable.Theme_errorMessageBackground);
+                mPopupInlineErrorBackgroundId = getResourceId(mPopupInlineErrorBackgroundId,
+                        com.android.internal.R.styleable.Theme_errorMessageBackground);
             }
 
-            mView.setBackgroundResource(above ? mPopupInlineErrorAboveBackgroundId : mPopupInlineErrorBackgroundId);
+            mView.setBackgroundResource(above ? mPopupInlineErrorAboveBackgroundId :
+                mPopupInlineErrorBackgroundId);
         }
 
         private int getResourceId(int currentId, int index) {
             if (currentId == 0) {
-                TypedArray styledAttributes = mView.getContext().obtainStyledAttributes(R.styleable.Theme);
+                TypedArray styledAttributes = mView.getContext().obtainStyledAttributes(
+                        R.styleable.Theme);
                 currentId = styledAttributes.getResourceId(index, 0);
                 styledAttributes.recycle();
             }
@@ -3562,9 +3570,8 @@
         final float scale = getResources().getDisplayMetrics().density;
 
         final Drawables dr = mDrawables;
-        return getWidth() - mPopup.getWidth()
-                - getPaddingRight()
-                - (dr != null ? dr.mDrawableSizeRight : 0) / 2 + (int) (25 * scale + 0.5f);
+        return getWidth() - mPopup.getWidth() - getPaddingRight() -
+                (dr != null ? dr.mDrawableSizeRight : 0) / 2 + (int) (25 * scale + 0.5f);
     }
 
     /**
@@ -3576,20 +3583,20 @@
          * Compound, not extended, because the icon is not clipped
          * if the text height is smaller.
          */
-        int vspace = mBottom - mTop -
-                     getCompoundPaddingBottom() - getCompoundPaddingTop();
+        final int compoundPaddingTop = getCompoundPaddingTop();
+        int vspace = mBottom - mTop - getCompoundPaddingBottom() - compoundPaddingTop;
 
         final Drawables dr = mDrawables;
-        int icontop = getCompoundPaddingTop()
-                + (vspace - (dr != null ? dr.mDrawableHeightRight : 0)) / 2;
+        int icontop = compoundPaddingTop +
+                (vspace - (dr != null ? dr.mDrawableHeightRight : 0)) / 2;
 
         /*
          * The "2" is the distance between the point and the top edge
          * of the background.
          */
-
-        return icontop + (dr != null ? dr.mDrawableHeightRight : 0)
-                - getHeight() - 2;
+        final float scale = getResources().getDisplayMetrics().density;
+        return icontop + (dr != null ? dr.mDrawableHeightRight : 0) - getHeight() -
+                (int) (2 * scale + 0.5f);
     }
 
     private void hideError() {
@@ -4735,8 +4742,7 @@
             if (otherEvent != null) {
                 try {
                     beginBatchEdit();
-                    boolean handled = mInput.onKeyOther(this, (Editable) mText,
-                            otherEvent);
+                    final boolean handled = mInput.onKeyOther(this, (Editable) mText, otherEvent);
                     hideErrorIfUnchanged();
                     doDown = false;
                     if (handled) {
@@ -4752,12 +4758,10 @@
             
             if (doDown) {
                 beginBatchEdit();
-                if (mInput.onKeyDown(this, (Editable) mText, keyCode, event)) {
-                    endBatchEdit();
-                    hideErrorIfUnchanged();
-                    return 1;
-                }
+                final boolean handled = mInput.onKeyDown(this, (Editable) mText, keyCode, event);
                 endBatchEdit();
+                hideErrorIfUnchanged();
+                if (handled) return 1;
             }
         }
 
@@ -7391,12 +7395,18 @@
 
         if (!mInsertionControllerEnabled) {
             hideInsertionPointCursorController();
-            mInsertionPointCursorController = null;
+            if (mInsertionPointCursorController != null) {
+                mInsertionPointCursorController.onDetached();
+                mInsertionPointCursorController = null;
+            }
         }
 
         if (!mSelectionControllerEnabled) {
             stopSelectionActionMode();
-            mSelectionModifierCursorController = null;
+            if (mSelectionModifierCursorController != null) {
+                mSelectionModifierCursorController.onDetached();
+                mSelectionModifierCursorController = null;
+            }
         }
     }
 
diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java
index 38ac37d..70f90d3 100644
--- a/core/java/com/android/internal/app/ChooserActivity.java
+++ b/core/java/com/android/internal/app/ChooserActivity.java
@@ -50,6 +50,6 @@
                 initialIntents[i] = (Intent)pa[i];
             }
         }
-        super.onCreate(savedInstanceState, target, title, initialIntents, false);
+        super.onCreate(savedInstanceState, target, title, initialIntents, null, false);
     }
 }
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index 215e9ae..841de06 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -63,11 +63,12 @@
     protected void onCreate(Bundle savedInstanceState) {
         onCreate(savedInstanceState, new Intent(getIntent()),
                 getResources().getText(com.android.internal.R.string.whichApplication),
-                null, true);
+                null, null, true);
     }
 
     protected void onCreate(Bundle savedInstanceState, Intent intent,
-            CharSequence title, Intent[] initialIntents, boolean alwaysUseOption) {
+            CharSequence title, Intent[] initialIntents, List<ResolveInfo> rList,
+            boolean alwaysUseOption) {
         super.onCreate(savedInstanceState);
         mPm = getPackageManager();
         intent.setComponent(null);
@@ -88,7 +89,7 @@
                                                         com.android.internal.R.id.clearDefaultHint);
             mClearDefaultHint.setVisibility(View.GONE);
         }
-        mAdapter = new ResolveListAdapter(this, intent, initialIntents);
+        mAdapter = new ResolveListAdapter(this, intent, initialIntents, rList);
         if (mAdapter.getCount() > 1) {
             ap.mAdapter = mAdapter;
         } else if (mAdapter.getCount() == 1) {
@@ -215,14 +216,16 @@
         private List<DisplayResolveInfo> mList;
 
         public ResolveListAdapter(Context context, Intent intent,
-                Intent[] initialIntents) {
+                Intent[] initialIntents, List<ResolveInfo> rList) {
             mIntent = new Intent(intent);
             mIntent.setComponent(null);
             mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 
-            List<ResolveInfo> rList = mPm.queryIntentActivities(
-                    intent, PackageManager.MATCH_DEFAULT_ONLY
-                    | (mAlwaysCheck != null ? PackageManager.GET_RESOLVED_FILTER : 0));
+            if (rList == null) {
+                rList = mPm.queryIntentActivities(
+                        intent, PackageManager.MATCH_DEFAULT_ONLY
+                        | (mAlwaysCheck != null ? PackageManager.GET_RESOLVED_FILTER : 0));
+            }
             int N;
             if ((rList != null) && ((N = rList.size()) > 0)) {
                 // Only display the first matches that are either of equal
diff --git a/core/java/com/android/internal/nfc/LlcpSocket.java b/core/java/com/android/internal/nfc/LlcpSocket.java
index 73c09259..63888ae 100644
--- a/core/java/com/android/internal/nfc/LlcpSocket.java
+++ b/core/java/com/android/internal/nfc/LlcpSocket.java
@@ -193,7 +193,7 @@
 				throw new IOException();
 			}
 		} catch (RemoteException e) {
-			Log.e(TAG, "RemoteException in send(): ", e);
+			Log.e(TAG, "RemoteException in receive(): ", e);
 		}
 
 		return receivedLength;
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index b682947..b3b80f6 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -4087,7 +4087,7 @@
                 // we have gone through a significant charge (from a very low
                 // level to a now very high level).
                 if (oldStatus == BatteryManager.BATTERY_STATUS_FULL
-                        || level >= 95
+                        || level >= 90
                         || (mDischargeCurrentLevel < 20 && level >= 80)) {
                     doWrite = true;
                     resetAllStatsLocked();
diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl
index 5fcd0c2..7f23ed5 100644
--- a/core/java/com/android/internal/statusbar/IStatusBar.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl
@@ -33,5 +33,6 @@
     void setLightsOn(boolean on);
     void setMenuKeyVisible(boolean visible);
     void setImeWindowStatus(in IBinder token, int vis, int backDisposition);
+    void setHardKeyboardStatus(boolean available, boolean enabled);
 }
 
diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
index c62aeb0..d6ca426 100644
--- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
@@ -45,4 +45,5 @@
     void onClearAllNotifications();
     void onNotificationClear(String pkg, String tag, int id);
     void setSystemUiVisibility(int vis);
+    void setHardKeyboardEnabled(boolean enabled);
 }
diff --git a/core/java/com/android/internal/widget/DigitalClock.java b/core/java/com/android/internal/widget/DigitalClock.java
index bc749d8..0885b6e 100644
--- a/core/java/com/android/internal/widget/DigitalClock.java
+++ b/core/java/com/android/internal/widget/DigitalClock.java
@@ -34,6 +34,7 @@
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 
+import java.lang.ref.WeakReference;
 import java.text.DateFormatSymbols;
 import java.util.Calendar;
 
@@ -54,26 +55,45 @@
     private TextView mTimeDisplayForeground;
     private AmPm mAmPm;
     private ContentObserver mFormatChangeObserver;
-    private boolean mLive = true;
-    private boolean mAttached;
+    private int mAttached = 0; // for debugging - tells us whether attach/detach is unbalanced
 
     /* called by system on minute ticks */
     private final Handler mHandler = new Handler();
-    private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
-            @Override
-            public void onReceive(Context context, Intent intent) {
-                if (mLive && intent.getAction().equals(
-                            Intent.ACTION_TIMEZONE_CHANGED)) {
-                    mCalendar = Calendar.getInstance();
-                }
-                // Post a runnable to avoid blocking the broadcast.
-                mHandler.post(new Runnable() {
-                        public void run() {
-                            updateTime();
+    private BroadcastReceiver mIntentReceiver;
+
+    private static class TimeChangedReceiver extends BroadcastReceiver {
+        private WeakReference<DigitalClock> mClock;
+        private Context mContext;
+
+        public TimeChangedReceiver(DigitalClock clock) {
+            mClock = new WeakReference<DigitalClock>(clock);
+            mContext = clock.getContext();
+        }
+
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            // Post a runnable to avoid blocking the broadcast.
+            final boolean timezoneChanged =
+                    intent.getAction().equals(Intent.ACTION_TIMEZONE_CHANGED);
+            final DigitalClock clock = mClock.get();
+            if (clock != null) {
+                clock.mHandler.post(new Runnable() {
+                    public void run() {
+                        if (timezoneChanged) {
+                            clock.mCalendar = Calendar.getInstance();
                         }
+                        clock.updateTime();
+                    }
                 });
+            } else {
+                try {
+                    mContext.unregisterReceiver(this);
+                } catch (RuntimeException e) {
+                    // Shouldn't happen
+                }
             }
-        };
+        }
+    };
 
     static class AmPm {
         private TextView mAmPm;
@@ -99,14 +119,27 @@
         }
     }
 
-    private class FormatChangeObserver extends ContentObserver {
-        public FormatChangeObserver() {
+    private static class FormatChangeObserver extends ContentObserver {
+        private WeakReference<DigitalClock> mClock;
+        private Context mContext;
+        public FormatChangeObserver(DigitalClock clock) {
             super(new Handler());
+            mClock = new WeakReference<DigitalClock>(clock);
+            mContext = clock.getContext();
         }
         @Override
         public void onChange(boolean selfChange) {
-            setDateFormat();
-            updateTime();
+            DigitalClock digitalClock = mClock.get();
+            if (digitalClock != null) {
+                digitalClock.setDateFormat();
+                digitalClock.updateTime();
+            } else {
+                try {
+                    mContext.getContentResolver().unregisterContentObserver(this);
+                } catch (RuntimeException e) {
+                    // Shouldn't happen
+                }
+            }
         }
     }
 
@@ -139,11 +172,11 @@
     protected void onAttachedToWindow() {
         super.onAttachedToWindow();
 
-        if (mAttached) return;
-        mAttached = true;
+        mAttached++;
 
-        if (mLive) {
-            /* monitor time ticks, time changed, timezone */
+        /* monitor time ticks, time changed, timezone */
+        if (mIntentReceiver == null) {
+            mIntentReceiver = new TimeChangedReceiver(this);
             IntentFilter filter = new IntentFilter();
             filter.addAction(Intent.ACTION_TIME_TICK);
             filter.addAction(Intent.ACTION_TIME_CHANGED);
@@ -152,9 +185,11 @@
         }
 
         /* monitor 12/24-hour display preference */
-        mFormatChangeObserver = new FormatChangeObserver();
-        mContext.getContentResolver().registerContentObserver(
-                Settings.System.CONTENT_URI, true, mFormatChangeObserver);
+        if (mFormatChangeObserver == null) {
+            mFormatChangeObserver = new FormatChangeObserver(this);
+            mContext.getContentResolver().registerContentObserver(
+                    Settings.System.CONTENT_URI, true, mFormatChangeObserver);
+        }
 
         updateTime();
     }
@@ -163,16 +198,19 @@
     protected void onDetachedFromWindow() {
         super.onDetachedFromWindow();
 
-        if (!mAttached) return;
-        mAttached = false;
+        mAttached--;
 
-        if (mLive) {
+        if (mIntentReceiver != null) {
             mContext.unregisterReceiver(mIntentReceiver);
         }
-        mContext.getContentResolver().unregisterContentObserver(
-                mFormatChangeObserver);
-    }
+        if (mFormatChangeObserver != null) {
+            mContext.getContentResolver().unregisterContentObserver(
+                    mFormatChangeObserver);
+        }
 
+        mFormatChangeObserver = null;
+        mIntentReceiver = null;
+    }
 
     void updateTime(Calendar c) {
         mCalendar = c;
@@ -180,9 +218,7 @@
     }
 
     private void updateTime() {
-        if (mLive) {
-            mCalendar.setTimeInMillis(System.currentTimeMillis());
-        }
+        mCalendar.setTimeInMillis(System.currentTimeMillis());
 
         CharSequence newTime = DateFormat.format(mFormat, mCalendar);
         mTimeDisplayBackground.setText(newTime);
@@ -195,8 +231,4 @@
             ? M24 : M12;
         mAmPm.setShowAmPm(mFormat.equals(M12));
     }
-
-    void setLive(boolean live) {
-        mLive = live;
-    }
 }
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index bf59753..2621dd0 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -16,13 +16,19 @@
 
 package com.android.internal.widget;
 
+import com.android.internal.R;
+import com.android.internal.telephony.ITelephony;
+import com.google.android.collect.Lists;
+
 import android.app.admin.DevicePolicyManager;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.os.FileObserver;
+import android.os.IBinder;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.SystemClock;
+import android.os.storage.IMountService;
 import android.provider.Settings;
 import android.security.MessageDigest;
 import android.telephony.TelephonyManager;
@@ -30,10 +36,6 @@
 import android.util.Log;
 import android.widget.Button;
 
-import com.android.internal.R;
-import com.android.internal.telephony.ITelephony;
-import com.google.android.collect.Lists;
-
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -139,6 +141,7 @@
             int fileObserverMask = FileObserver.CLOSE_WRITE | FileObserver.DELETE |
                     FileObserver.MOVED_TO | FileObserver.CREATE;
             sPasswordObserver = new FileObserver(dataSystemDirectory, fileObserverMask) {
+                    @Override
                     public void onEvent(int event, String path) {
                         if (LOCK_PATTERN_FILE.equals(path)) {
                             Log.d(TAG, "lock pattern file changed");
@@ -439,6 +442,27 @@
         return DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
     }
 
+    /** Update the encryption password if it is enabled **/
+    private void updateEncryptionPassword(String password) {
+        DevicePolicyManager dpm = getDevicePolicyManager();
+        if (dpm.getStorageEncryptionStatus() != DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE) {
+            return;
+        }
+
+        IBinder service = ServiceManager.getService("mount");
+        if (service == null) {
+            Log.e(TAG, "Could not find the mount service to update the encryption password");
+            return;
+        }
+
+        IMountService mountService = IMountService.Stub.asInterface(service);
+        try {
+            mountService.changeEncryptionPassword(password);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Error changing encryption password", e);
+        }
+    }
+
     /**
      * Save a lock password.  Does not ensure that the password is as good
      * as the requested mode, but will adjust the mode to be as good as the
@@ -461,6 +485,9 @@
             raf.close();
             DevicePolicyManager dpm = getDevicePolicyManager();
             if (password != null) {
+                // Update the encryption password.
+                updateEncryptionPassword(password);
+
                 int computedQuality = computePasswordQuality(password);
                 setLong(PASSWORD_TYPE_KEY, Math.max(quality, computedQuality));
                 if (computedQuality != DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
diff --git a/core/res/res/drawable-hdpi/ic_menu_account_list.png b/core/res/res/drawable-hdpi/ic_menu_account_list.png
index f858d2c..0f17170 100644
--- a/core/res/res/drawable-hdpi/ic_menu_account_list.png
+++ b/core/res/res/drawable-hdpi/ic_menu_account_list.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_add.png b/core/res/res/drawable-hdpi/ic_menu_add.png
index 65cc01e..444e8a5 100644
--- a/core/res/res/drawable-hdpi/ic_menu_add.png
+++ b/core/res/res/drawable-hdpi/ic_menu_add.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_agenda.png b/core/res/res/drawable-hdpi/ic_menu_agenda.png
index 6bb5cc8..9e08c29 100644
--- a/core/res/res/drawable-hdpi/ic_menu_agenda.png
+++ b/core/res/res/drawable-hdpi/ic_menu_agenda.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_allfriends.png b/core/res/res/drawable-hdpi/ic_menu_allfriends.png
index 8d11ca1..c42e96e 100644
--- a/core/res/res/drawable-hdpi/ic_menu_allfriends.png
+++ b/core/res/res/drawable-hdpi/ic_menu_allfriends.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_always_landscape_portrait.png b/core/res/res/drawable-hdpi/ic_menu_always_landscape_portrait.png
index 7ae1760a..be3d314 100644
--- a/core/res/res/drawable-hdpi/ic_menu_always_landscape_portrait.png
+++ b/core/res/res/drawable-hdpi/ic_menu_always_landscape_portrait.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_archive.png b/core/res/res/drawable-hdpi/ic_menu_archive.png
index 9ca5c62..e2d9bc1 100644
--- a/core/res/res/drawable-hdpi/ic_menu_archive.png
+++ b/core/res/res/drawable-hdpi/ic_menu_archive.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_attachment.png b/core/res/res/drawable-hdpi/ic_menu_attachment.png
index 8f11153..4a37115 100644
--- a/core/res/res/drawable-hdpi/ic_menu_attachment.png
+++ b/core/res/res/drawable-hdpi/ic_menu_attachment.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_back.png b/core/res/res/drawable-hdpi/ic_menu_back.png
index a6cd712..661a4ae 100644
--- a/core/res/res/drawable-hdpi/ic_menu_back.png
+++ b/core/res/res/drawable-hdpi/ic_menu_back.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_block.png b/core/res/res/drawable-hdpi/ic_menu_block.png
index e1f9c2c..826c094 100644
--- a/core/res/res/drawable-hdpi/ic_menu_block.png
+++ b/core/res/res/drawable-hdpi/ic_menu_block.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_blocked_user.png b/core/res/res/drawable-hdpi/ic_menu_blocked_user.png
index 3dd9a4a..7ca5c6f 100644
--- a/core/res/res/drawable-hdpi/ic_menu_blocked_user.png
+++ b/core/res/res/drawable-hdpi/ic_menu_blocked_user.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_btn_add.png b/core/res/res/drawable-hdpi/ic_menu_btn_add.png
new file mode 100644
index 0000000..444e8a5
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_menu_btn_add.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_call.png b/core/res/res/drawable-hdpi/ic_menu_call.png
index 2ccc087..f28c53935 100644
--- a/core/res/res/drawable-hdpi/ic_menu_call.png
+++ b/core/res/res/drawable-hdpi/ic_menu_call.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_camera.png b/core/res/res/drawable-hdpi/ic_menu_camera.png
index 5a3850f..4936d15 100644
--- a/core/res/res/drawable-hdpi/ic_menu_camera.png
+++ b/core/res/res/drawable-hdpi/ic_menu_camera.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_cc.png b/core/res/res/drawable-hdpi/ic_menu_cc.png
index 47905a5..18b2004 100644
--- a/core/res/res/drawable-hdpi/ic_menu_cc.png
+++ b/core/res/res/drawable-hdpi/ic_menu_cc.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_chat_dashboard.png b/core/res/res/drawable-hdpi/ic_menu_chat_dashboard.png
index dde6741..1f26180 100644
--- a/core/res/res/drawable-hdpi/ic_menu_chat_dashboard.png
+++ b/core/res/res/drawable-hdpi/ic_menu_chat_dashboard.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_clear_playlist.png b/core/res/res/drawable-hdpi/ic_menu_clear_playlist.png
index e6be48b..84a4a5b 100644
--- a/core/res/res/drawable-hdpi/ic_menu_clear_playlist.png
+++ b/core/res/res/drawable-hdpi/ic_menu_clear_playlist.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_close_clear_cancel.png b/core/res/res/drawable-hdpi/ic_menu_close_clear_cancel.png
index a54ea9d..60301d9 100644
--- a/core/res/res/drawable-hdpi/ic_menu_close_clear_cancel.png
+++ b/core/res/res/drawable-hdpi/ic_menu_close_clear_cancel.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_compass.png b/core/res/res/drawable-hdpi/ic_menu_compass.png
index 104270f..39760f8 100644
--- a/core/res/res/drawable-hdpi/ic_menu_compass.png
+++ b/core/res/res/drawable-hdpi/ic_menu_compass.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_compose.png b/core/res/res/drawable-hdpi/ic_menu_compose.png
index 6ad379e..1286a28 100644
--- a/core/res/res/drawable-hdpi/ic_menu_compose.png
+++ b/core/res/res/drawable-hdpi/ic_menu_compose.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_crop.png b/core/res/res/drawable-hdpi/ic_menu_crop.png
index 0d4c9fe..c2fc70d 100644
--- a/core/res/res/drawable-hdpi/ic_menu_crop.png
+++ b/core/res/res/drawable-hdpi/ic_menu_crop.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_day.png b/core/res/res/drawable-hdpi/ic_menu_day.png
index 84429aa..966de8b 100644
--- a/core/res/res/drawable-hdpi/ic_menu_day.png
+++ b/core/res/res/drawable-hdpi/ic_menu_day.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_delete.png b/core/res/res/drawable-hdpi/ic_menu_delete.png
index 2aed26a..24d8f6a 100644
--- a/core/res/res/drawable-hdpi/ic_menu_delete.png
+++ b/core/res/res/drawable-hdpi/ic_menu_delete.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_directions.png b/core/res/res/drawable-hdpi/ic_menu_directions.png
index 23f6eb3..358b249 100644
--- a/core/res/res/drawable-hdpi/ic_menu_directions.png
+++ b/core/res/res/drawable-hdpi/ic_menu_directions.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_edit.png b/core/res/res/drawable-hdpi/ic_menu_edit.png
index 602dd10..9bdba1b 100644
--- a/core/res/res/drawable-hdpi/ic_menu_edit.png
+++ b/core/res/res/drawable-hdpi/ic_menu_edit.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_emoticons.png b/core/res/res/drawable-hdpi/ic_menu_emoticons.png
index 2fab515..16ec4e4 100644
--- a/core/res/res/drawable-hdpi/ic_menu_emoticons.png
+++ b/core/res/res/drawable-hdpi/ic_menu_emoticons.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_end_conversation.png b/core/res/res/drawable-hdpi/ic_menu_end_conversation.png
index c05a207..c46b757 100644
--- a/core/res/res/drawable-hdpi/ic_menu_end_conversation.png
+++ b/core/res/res/drawable-hdpi/ic_menu_end_conversation.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_forward.png b/core/res/res/drawable-hdpi/ic_menu_forward.png
index 606e6aa..b1b0c89 100644
--- a/core/res/res/drawable-hdpi/ic_menu_forward.png
+++ b/core/res/res/drawable-hdpi/ic_menu_forward.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_friendslist.png b/core/res/res/drawable-hdpi/ic_menu_friendslist.png
index a90e573..02b4341 100644
--- a/core/res/res/drawable-hdpi/ic_menu_friendslist.png
+++ b/core/res/res/drawable-hdpi/ic_menu_friendslist.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_gallery.png b/core/res/res/drawable-hdpi/ic_menu_gallery.png
index 7c528fa..1f83b9a 100644
--- a/core/res/res/drawable-hdpi/ic_menu_gallery.png
+++ b/core/res/res/drawable-hdpi/ic_menu_gallery.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_goto.png b/core/res/res/drawable-hdpi/ic_menu_goto.png
index a1acecb..ca6e835 100644
--- a/core/res/res/drawable-hdpi/ic_menu_goto.png
+++ b/core/res/res/drawable-hdpi/ic_menu_goto.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_help.png b/core/res/res/drawable-hdpi/ic_menu_help.png
index 01a77da..a39eff3 100644
--- a/core/res/res/drawable-hdpi/ic_menu_help.png
+++ b/core/res/res/drawable-hdpi/ic_menu_help.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_help_holo_light.png b/core/res/res/drawable-hdpi/ic_menu_help_holo_light.png
new file mode 100644
index 0000000..a39eff3
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_menu_help_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_home.png b/core/res/res/drawable-hdpi/ic_menu_home.png
index 35cb52a..3baf1ca 100644
--- a/core/res/res/drawable-hdpi/ic_menu_home.png
+++ b/core/res/res/drawable-hdpi/ic_menu_home.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_info_details.png b/core/res/res/drawable-hdpi/ic_menu_info_details.png
index 7696ceb..6a7a1e9 100644
--- a/core/res/res/drawable-hdpi/ic_menu_info_details.png
+++ b/core/res/res/drawable-hdpi/ic_menu_info_details.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_invite.png b/core/res/res/drawable-hdpi/ic_menu_invite.png
index 3cb129f..ec88b99 100644
--- a/core/res/res/drawable-hdpi/ic_menu_invite.png
+++ b/core/res/res/drawable-hdpi/ic_menu_invite.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_login.png b/core/res/res/drawable-hdpi/ic_menu_login.png
index d23ebf0..afa152b 100644
--- a/core/res/res/drawable-hdpi/ic_menu_login.png
+++ b/core/res/res/drawable-hdpi/ic_menu_login.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_manage.png b/core/res/res/drawable-hdpi/ic_menu_manage.png
index c7c4cbce..5b7080a 100644
--- a/core/res/res/drawable-hdpi/ic_menu_manage.png
+++ b/core/res/res/drawable-hdpi/ic_menu_manage.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_mapmode.png b/core/res/res/drawable-hdpi/ic_menu_mapmode.png
index c895ccb..5ac4a02 100644
--- a/core/res/res/drawable-hdpi/ic_menu_mapmode.png
+++ b/core/res/res/drawable-hdpi/ic_menu_mapmode.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_mark.png b/core/res/res/drawable-hdpi/ic_menu_mark.png
index 724d787..95a3217 100644
--- a/core/res/res/drawable-hdpi/ic_menu_mark.png
+++ b/core/res/res/drawable-hdpi/ic_menu_mark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_month.png b/core/res/res/drawable-hdpi/ic_menu_month.png
index 3e55ae6..99fe5c0 100644
--- a/core/res/res/drawable-hdpi/ic_menu_month.png
+++ b/core/res/res/drawable-hdpi/ic_menu_month.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_more.png b/core/res/res/drawable-hdpi/ic_menu_more.png
index ccecc1d..ede8a54 100644
--- a/core/res/res/drawable-hdpi/ic_menu_more.png
+++ b/core/res/res/drawable-hdpi/ic_menu_more.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_moreoverflow_focused_holo_dark.png b/core/res/res/drawable-hdpi/ic_menu_moreoverflow_focused_holo_dark.png
new file mode 100644
index 0000000..061f80a
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_menu_moreoverflow_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_moreoverflow_focused_holo_light.png b/core/res/res/drawable-hdpi/ic_menu_moreoverflow_focused_holo_light.png
new file mode 100644
index 0000000..d818806
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_menu_moreoverflow_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_moreoverflow_normal_holo_dark.png b/core/res/res/drawable-hdpi/ic_menu_moreoverflow_normal_holo_dark.png
index e21f534..8563c1a8d 100644
--- a/core/res/res/drawable-hdpi/ic_menu_moreoverflow_normal_holo_dark.png
+++ b/core/res/res/drawable-hdpi/ic_menu_moreoverflow_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_moreoverflow_normal_holo_light.png b/core/res/res/drawable-hdpi/ic_menu_moreoverflow_normal_holo_light.png
index 9108fa1..1cd2384 100644
--- a/core/res/res/drawable-hdpi/ic_menu_moreoverflow_normal_holo_light.png
+++ b/core/res/res/drawable-hdpi/ic_menu_moreoverflow_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_my_calendar.png b/core/res/res/drawable-hdpi/ic_menu_my_calendar.png
index 3d6ea1f3..360a915 100644
--- a/core/res/res/drawable-hdpi/ic_menu_my_calendar.png
+++ b/core/res/res/drawable-hdpi/ic_menu_my_calendar.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_mylocation.png b/core/res/res/drawable-hdpi/ic_menu_mylocation.png
index 1bcb0cd..ba82ee0 100644
--- a/core/res/res/drawable-hdpi/ic_menu_mylocation.png
+++ b/core/res/res/drawable-hdpi/ic_menu_mylocation.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_myplaces.png b/core/res/res/drawable-hdpi/ic_menu_myplaces.png
index 5f726d8..ade7532 100644
--- a/core/res/res/drawable-hdpi/ic_menu_myplaces.png
+++ b/core/res/res/drawable-hdpi/ic_menu_myplaces.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_notifications.png b/core/res/res/drawable-hdpi/ic_menu_notifications.png
index fb63937..ded4323 100644
--- a/core/res/res/drawable-hdpi/ic_menu_notifications.png
+++ b/core/res/res/drawable-hdpi/ic_menu_notifications.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_play_clip.png b/core/res/res/drawable-hdpi/ic_menu_play_clip.png
index ddde03a..2d0d2e2 100644
--- a/core/res/res/drawable-hdpi/ic_menu_play_clip.png
+++ b/core/res/res/drawable-hdpi/ic_menu_play_clip.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_preferences.png b/core/res/res/drawable-hdpi/ic_menu_preferences.png
index 81bca4a..5321f82 100644
--- a/core/res/res/drawable-hdpi/ic_menu_preferences.png
+++ b/core/res/res/drawable-hdpi/ic_menu_preferences.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_recent_history.png b/core/res/res/drawable-hdpi/ic_menu_recent_history.png
index 0dd1627..4101434 100644
--- a/core/res/res/drawable-hdpi/ic_menu_recent_history.png
+++ b/core/res/res/drawable-hdpi/ic_menu_recent_history.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_refresh.png b/core/res/res/drawable-hdpi/ic_menu_refresh.png
index 53caccac..e13315f 100644
--- a/core/res/res/drawable-hdpi/ic_menu_refresh.png
+++ b/core/res/res/drawable-hdpi/ic_menu_refresh.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_report_image.png b/core/res/res/drawable-hdpi/ic_menu_report_image.png
index b6aa5d6..7847b7b 100644
--- a/core/res/res/drawable-hdpi/ic_menu_report_image.png
+++ b/core/res/res/drawable-hdpi/ic_menu_report_image.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_revert.png b/core/res/res/drawable-hdpi/ic_menu_revert.png
index 11860a4..0b9cf2a 100644
--- a/core/res/res/drawable-hdpi/ic_menu_revert.png
+++ b/core/res/res/drawable-hdpi/ic_menu_revert.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_rotate.png b/core/res/res/drawable-hdpi/ic_menu_rotate.png
index 85115af..09efba4 100644
--- a/core/res/res/drawable-hdpi/ic_menu_rotate.png
+++ b/core/res/res/drawable-hdpi/ic_menu_rotate.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_save.png b/core/res/res/drawable-hdpi/ic_menu_save.png
index fc26c5d..36fc7f4 100644
--- a/core/res/res/drawable-hdpi/ic_menu_save.png
+++ b/core/res/res/drawable-hdpi/ic_menu_save.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_search.png b/core/res/res/drawable-hdpi/ic_menu_search.png
index f78234e..a7f9bbe 100644
--- a/core/res/res/drawable-hdpi/ic_menu_search.png
+++ b/core/res/res/drawable-hdpi/ic_menu_search.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_search_holo_light.png b/core/res/res/drawable-hdpi/ic_menu_search_holo_light.png
new file mode 100644
index 0000000..1cb61fa
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_menu_search_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_send.png b/core/res/res/drawable-hdpi/ic_menu_send.png
index 2567b58..d94e692 100644
--- a/core/res/res/drawable-hdpi/ic_menu_send.png
+++ b/core/res/res/drawable-hdpi/ic_menu_send.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_set_as.png b/core/res/res/drawable-hdpi/ic_menu_set_as.png
index 7e79c15..41f931b 100644
--- a/core/res/res/drawable-hdpi/ic_menu_set_as.png
+++ b/core/res/res/drawable-hdpi/ic_menu_set_as.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_settings_holo_light.png b/core/res/res/drawable-hdpi/ic_menu_settings_holo_light.png
new file mode 100644
index 0000000..577e055
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_menu_settings_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_share.png b/core/res/res/drawable-hdpi/ic_menu_share.png
index b41b348..2837615 100644
--- a/core/res/res/drawable-hdpi/ic_menu_share.png
+++ b/core/res/res/drawable-hdpi/ic_menu_share.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_slideshow.png b/core/res/res/drawable-hdpi/ic_menu_slideshow.png
index 925f4eb1..b2e65b4 100644
--- a/core/res/res/drawable-hdpi/ic_menu_slideshow.png
+++ b/core/res/res/drawable-hdpi/ic_menu_slideshow.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_sort_alphabetically.png b/core/res/res/drawable-hdpi/ic_menu_sort_alphabetically.png
index 5d68998..0f351a7 100644
--- a/core/res/res/drawable-hdpi/ic_menu_sort_alphabetically.png
+++ b/core/res/res/drawable-hdpi/ic_menu_sort_alphabetically.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_sort_by_size.png b/core/res/res/drawable-hdpi/ic_menu_sort_by_size.png
index c9388fd..39472a6 100644
--- a/core/res/res/drawable-hdpi/ic_menu_sort_by_size.png
+++ b/core/res/res/drawable-hdpi/ic_menu_sort_by_size.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_star.png b/core/res/res/drawable-hdpi/ic_menu_star.png
index 21a2c4b..4f667a4 100644
--- a/core/res/res/drawable-hdpi/ic_menu_star.png
+++ b/core/res/res/drawable-hdpi/ic_menu_star.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_start_conversation.png b/core/res/res/drawable-hdpi/ic_menu_start_conversation.png
index d63d3a7..395a5ec 100644
--- a/core/res/res/drawable-hdpi/ic_menu_start_conversation.png
+++ b/core/res/res/drawable-hdpi/ic_menu_start_conversation.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_stop.png b/core/res/res/drawable-hdpi/ic_menu_stop.png
index 7c99ed4..cf53a08 100644
--- a/core/res/res/drawable-hdpi/ic_menu_stop.png
+++ b/core/res/res/drawable-hdpi/ic_menu_stop.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_today.png b/core/res/res/drawable-hdpi/ic_menu_today.png
index 4a9352d..b0a7a48 100644
--- a/core/res/res/drawable-hdpi/ic_menu_today.png
+++ b/core/res/res/drawable-hdpi/ic_menu_today.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_upload.png b/core/res/res/drawable-hdpi/ic_menu_upload.png
index d845112..a81ad20 100644
--- a/core/res/res/drawable-hdpi/ic_menu_upload.png
+++ b/core/res/res/drawable-hdpi/ic_menu_upload.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_upload_you_tube.png b/core/res/res/drawable-hdpi/ic_menu_upload_you_tube.png
index df5fa7f..ce8d1b6 100644
--- a/core/res/res/drawable-hdpi/ic_menu_upload_you_tube.png
+++ b/core/res/res/drawable-hdpi/ic_menu_upload_you_tube.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_view.png b/core/res/res/drawable-hdpi/ic_menu_view.png
index 75155d4..25c2ff3 100644
--- a/core/res/res/drawable-hdpi/ic_menu_view.png
+++ b/core/res/res/drawable-hdpi/ic_menu_view.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_week.png b/core/res/res/drawable-hdpi/ic_menu_week.png
index c216eca..69dc015 100644
--- a/core/res/res/drawable-hdpi/ic_menu_week.png
+++ b/core/res/res/drawable-hdpi/ic_menu_week.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_zoom.png b/core/res/res/drawable-hdpi/ic_menu_zoom.png
index 9fa4d7e..e2f56f0 100644
--- a/core/res/res/drawable-hdpi/ic_menu_zoom.png
+++ b/core/res/res/drawable-hdpi/ic_menu_zoom.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/indicator_input_error.png b/core/res/res/drawable-hdpi/indicator_input_error.png
index 213976c..8785376 100644
--- a/core/res/res/drawable-hdpi/indicator_input_error.png
+++ b/core/res/res/drawable-hdpi/indicator_input_error.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/popup_inline_error_above_holo_dark.9.png b/core/res/res/drawable-hdpi/popup_inline_error_above_holo_dark.9.png
new file mode 100644
index 0000000..61ea2b0
--- /dev/null
+++ b/core/res/res/drawable-hdpi/popup_inline_error_above_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/popup_inline_error_above_holo_light.9.png b/core/res/res/drawable-hdpi/popup_inline_error_above_holo_light.9.png
new file mode 100644
index 0000000..83b2bce
--- /dev/null
+++ b/core/res/res/drawable-hdpi/popup_inline_error_above_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/popup_inline_error_holo_dark.9.png b/core/res/res/drawable-hdpi/popup_inline_error_holo_dark.9.png
new file mode 100644
index 0000000..daa47b7
--- /dev/null
+++ b/core/res/res/drawable-hdpi/popup_inline_error_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/popup_inline_error_holo_light.9.png b/core/res/res/drawable-hdpi/popup_inline_error_holo_light.9.png
new file mode 100644
index 0000000..6c45935
--- /dev/null
+++ b/core/res/res/drawable-hdpi/popup_inline_error_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_account_list.png b/core/res/res/drawable-mdpi/ic_menu_account_list.png
index f0945b2..e4e717e 100644
--- a/core/res/res/drawable-mdpi/ic_menu_account_list.png
+++ b/core/res/res/drawable-mdpi/ic_menu_account_list.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_add.png b/core/res/res/drawable-mdpi/ic_menu_add.png
index 6752bfd..361c7c4 100755
--- a/core/res/res/drawable-mdpi/ic_menu_add.png
+++ b/core/res/res/drawable-mdpi/ic_menu_add.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_agenda.png b/core/res/res/drawable-mdpi/ic_menu_agenda.png
index 9f2c1dc..c63a12bf 100755
--- a/core/res/res/drawable-mdpi/ic_menu_agenda.png
+++ b/core/res/res/drawable-mdpi/ic_menu_agenda.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_allfriends.png b/core/res/res/drawable-mdpi/ic_menu_allfriends.png
index a5bd331..45256d1 100755
--- a/core/res/res/drawable-mdpi/ic_menu_allfriends.png
+++ b/core/res/res/drawable-mdpi/ic_menu_allfriends.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_always_landscape_portrait.png b/core/res/res/drawable-mdpi/ic_menu_always_landscape_portrait.png
index 68911c4..f9f475a 100644
--- a/core/res/res/drawable-mdpi/ic_menu_always_landscape_portrait.png
+++ b/core/res/res/drawable-mdpi/ic_menu_always_landscape_portrait.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_archive.png b/core/res/res/drawable-mdpi/ic_menu_archive.png
index a4599e3..49ac569 100644
--- a/core/res/res/drawable-mdpi/ic_menu_archive.png
+++ b/core/res/res/drawable-mdpi/ic_menu_archive.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_attachment.png b/core/res/res/drawable-mdpi/ic_menu_attachment.png
index 89d626f..d3d4812 100644
--- a/core/res/res/drawable-mdpi/ic_menu_attachment.png
+++ b/core/res/res/drawable-mdpi/ic_menu_attachment.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_back.png b/core/res/res/drawable-mdpi/ic_menu_back.png
index 5ce50eb..bb69245 100644
--- a/core/res/res/drawable-mdpi/ic_menu_back.png
+++ b/core/res/res/drawable-mdpi/ic_menu_back.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_block.png b/core/res/res/drawable-mdpi/ic_menu_block.png
index 422eeb1..63f952d 100644
--- a/core/res/res/drawable-mdpi/ic_menu_block.png
+++ b/core/res/res/drawable-mdpi/ic_menu_block.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_blocked_user.png b/core/res/res/drawable-mdpi/ic_menu_blocked_user.png
index 5a5619b..ac8cc10 100644
--- a/core/res/res/drawable-mdpi/ic_menu_blocked_user.png
+++ b/core/res/res/drawable-mdpi/ic_menu_blocked_user.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_btn_add.png b/core/res/res/drawable-mdpi/ic_menu_btn_add.png
new file mode 100644
index 0000000..361c7c4
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_menu_btn_add.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_call.png b/core/res/res/drawable-mdpi/ic_menu_call.png
index a63f86b..b7ee91a 100644
--- a/core/res/res/drawable-mdpi/ic_menu_call.png
+++ b/core/res/res/drawable-mdpi/ic_menu_call.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_camera.png b/core/res/res/drawable-mdpi/ic_menu_camera.png
index cdf7ca3..f8cf93c 100755
--- a/core/res/res/drawable-mdpi/ic_menu_camera.png
+++ b/core/res/res/drawable-mdpi/ic_menu_camera.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_cc.png b/core/res/res/drawable-mdpi/ic_menu_cc.png
index 4876021..8e2ba09 100644
--- a/core/res/res/drawable-mdpi/ic_menu_cc.png
+++ b/core/res/res/drawable-mdpi/ic_menu_cc.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_chat_dashboard.png b/core/res/res/drawable-mdpi/ic_menu_chat_dashboard.png
index 37fd3cbd..14b7482 100644
--- a/core/res/res/drawable-mdpi/ic_menu_chat_dashboard.png
+++ b/core/res/res/drawable-mdpi/ic_menu_chat_dashboard.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_clear_playlist.png b/core/res/res/drawable-mdpi/ic_menu_clear_playlist.png
index 750db62..9100a69 100644
--- a/core/res/res/drawable-mdpi/ic_menu_clear_playlist.png
+++ b/core/res/res/drawable-mdpi/ic_menu_clear_playlist.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_close_clear_cancel.png b/core/res/res/drawable-mdpi/ic_menu_close_clear_cancel.png
index 78222ea..5b385aa 100644
--- a/core/res/res/drawable-mdpi/ic_menu_close_clear_cancel.png
+++ b/core/res/res/drawable-mdpi/ic_menu_close_clear_cancel.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_compass.png b/core/res/res/drawable-mdpi/ic_menu_compass.png
index 7717dde..25235cc 100644
--- a/core/res/res/drawable-mdpi/ic_menu_compass.png
+++ b/core/res/res/drawable-mdpi/ic_menu_compass.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_compose.png b/core/res/res/drawable-mdpi/ic_menu_compose.png
index 1b4733e..a911141 100644
--- a/core/res/res/drawable-mdpi/ic_menu_compose.png
+++ b/core/res/res/drawable-mdpi/ic_menu_compose.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_crop.png b/core/res/res/drawable-mdpi/ic_menu_crop.png
index c0df996..30e40cf 100755
--- a/core/res/res/drawable-mdpi/ic_menu_crop.png
+++ b/core/res/res/drawable-mdpi/ic_menu_crop.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_day.png b/core/res/res/drawable-mdpi/ic_menu_day.png
index db5d3a4..88bc348 100755
--- a/core/res/res/drawable-mdpi/ic_menu_day.png
+++ b/core/res/res/drawable-mdpi/ic_menu_day.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_delete.png b/core/res/res/drawable-mdpi/ic_menu_delete.png
index 7d95494..e2c8700 100755
--- a/core/res/res/drawable-mdpi/ic_menu_delete.png
+++ b/core/res/res/drawable-mdpi/ic_menu_delete.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_directions.png b/core/res/res/drawable-mdpi/ic_menu_directions.png
index 00a288f..d10e0b1 100755
--- a/core/res/res/drawable-mdpi/ic_menu_directions.png
+++ b/core/res/res/drawable-mdpi/ic_menu_directions.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_edit.png b/core/res/res/drawable-mdpi/ic_menu_edit.png
index 41a9c2e..d0314e98 100755
--- a/core/res/res/drawable-mdpi/ic_menu_edit.png
+++ b/core/res/res/drawable-mdpi/ic_menu_edit.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_emoticons.png b/core/res/res/drawable-mdpi/ic_menu_emoticons.png
index e8c4e47..8d1780f 100644
--- a/core/res/res/drawable-mdpi/ic_menu_emoticons.png
+++ b/core/res/res/drawable-mdpi/ic_menu_emoticons.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_end_conversation.png b/core/res/res/drawable-mdpi/ic_menu_end_conversation.png
index 0ea0fcb..fb9f153 100644
--- a/core/res/res/drawable-mdpi/ic_menu_end_conversation.png
+++ b/core/res/res/drawable-mdpi/ic_menu_end_conversation.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_forward.png b/core/res/res/drawable-mdpi/ic_menu_forward.png
index 0936fac..4a0b6ef 100644
--- a/core/res/res/drawable-mdpi/ic_menu_forward.png
+++ b/core/res/res/drawable-mdpi/ic_menu_forward.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_friendslist.png b/core/res/res/drawable-mdpi/ic_menu_friendslist.png
index 8ec6b1a..8a29be3b 100644
--- a/core/res/res/drawable-mdpi/ic_menu_friendslist.png
+++ b/core/res/res/drawable-mdpi/ic_menu_friendslist.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_gallery.png b/core/res/res/drawable-mdpi/ic_menu_gallery.png
index a3deef1..d3a0200 100755
--- a/core/res/res/drawable-mdpi/ic_menu_gallery.png
+++ b/core/res/res/drawable-mdpi/ic_menu_gallery.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_goto.png b/core/res/res/drawable-mdpi/ic_menu_goto.png
index 40183eb..5471f5b 100644
--- a/core/res/res/drawable-mdpi/ic_menu_goto.png
+++ b/core/res/res/drawable-mdpi/ic_menu_goto.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_help.png b/core/res/res/drawable-mdpi/ic_menu_help.png
index 12ca235..010577f 100644
--- a/core/res/res/drawable-mdpi/ic_menu_help.png
+++ b/core/res/res/drawable-mdpi/ic_menu_help.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_help_holo_light.png b/core/res/res/drawable-mdpi/ic_menu_help_holo_light.png
new file mode 100644
index 0000000..010577f
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_menu_help_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_home.png b/core/res/res/drawable-mdpi/ic_menu_home.png
index 34943f6..f19f58d 100644
--- a/core/res/res/drawable-mdpi/ic_menu_home.png
+++ b/core/res/res/drawable-mdpi/ic_menu_home.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_info_details.png b/core/res/res/drawable-mdpi/ic_menu_info_details.png
index 1786d1e..18b15b5a 100755
--- a/core/res/res/drawable-mdpi/ic_menu_info_details.png
+++ b/core/res/res/drawable-mdpi/ic_menu_info_details.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_invite.png b/core/res/res/drawable-mdpi/ic_menu_invite.png
index 7577e6d..aa1898d 100644
--- a/core/res/res/drawable-mdpi/ic_menu_invite.png
+++ b/core/res/res/drawable-mdpi/ic_menu_invite.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_login.png b/core/res/res/drawable-mdpi/ic_menu_login.png
index 2b856bc..122ba33 100644
--- a/core/res/res/drawable-mdpi/ic_menu_login.png
+++ b/core/res/res/drawable-mdpi/ic_menu_login.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_manage.png b/core/res/res/drawable-mdpi/ic_menu_manage.png
index f155bbc..8d3a9fa 100755
--- a/core/res/res/drawable-mdpi/ic_menu_manage.png
+++ b/core/res/res/drawable-mdpi/ic_menu_manage.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_mapmode.png b/core/res/res/drawable-mdpi/ic_menu_mapmode.png
index d85cab5..1b50b5a 100644
--- a/core/res/res/drawable-mdpi/ic_menu_mapmode.png
+++ b/core/res/res/drawable-mdpi/ic_menu_mapmode.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_mark.png b/core/res/res/drawable-mdpi/ic_menu_mark.png
index 5e95da7..0c55506 100644
--- a/core/res/res/drawable-mdpi/ic_menu_mark.png
+++ b/core/res/res/drawable-mdpi/ic_menu_mark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_month.png b/core/res/res/drawable-mdpi/ic_menu_month.png
index bf6cb89..ff201df 100755
--- a/core/res/res/drawable-mdpi/ic_menu_month.png
+++ b/core/res/res/drawable-mdpi/ic_menu_month.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_more.png b/core/res/res/drawable-mdpi/ic_menu_more.png
index b9fc5fa..263fef8 100644
--- a/core/res/res/drawable-mdpi/ic_menu_more.png
+++ b/core/res/res/drawable-mdpi/ic_menu_more.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_moreoverflow_focused_holo_dark.png b/core/res/res/drawable-mdpi/ic_menu_moreoverflow_focused_holo_dark.png
new file mode 100644
index 0000000..c369e6f
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_menu_moreoverflow_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_moreoverflow_focused_holo_light.png b/core/res/res/drawable-mdpi/ic_menu_moreoverflow_focused_holo_light.png
new file mode 100644
index 0000000..a4df2bf
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_menu_moreoverflow_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_my_calendar.png b/core/res/res/drawable-mdpi/ic_menu_my_calendar.png
index 0c88fd3..991dfb0 100755
--- a/core/res/res/drawable-mdpi/ic_menu_my_calendar.png
+++ b/core/res/res/drawable-mdpi/ic_menu_my_calendar.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_mylocation.png b/core/res/res/drawable-mdpi/ic_menu_mylocation.png
index fdbd5ca..2a61a97 100755
--- a/core/res/res/drawable-mdpi/ic_menu_mylocation.png
+++ b/core/res/res/drawable-mdpi/ic_menu_mylocation.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_myplaces.png b/core/res/res/drawable-mdpi/ic_menu_myplaces.png
index 06f11ba..75f2c9b 100644
--- a/core/res/res/drawable-mdpi/ic_menu_myplaces.png
+++ b/core/res/res/drawable-mdpi/ic_menu_myplaces.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_notifications.png b/core/res/res/drawable-mdpi/ic_menu_notifications.png
index 866d4e0..2474d56 100644
--- a/core/res/res/drawable-mdpi/ic_menu_notifications.png
+++ b/core/res/res/drawable-mdpi/ic_menu_notifications.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_play_clip.png b/core/res/res/drawable-mdpi/ic_menu_play_clip.png
index 4669947..5983c22 100644
--- a/core/res/res/drawable-mdpi/ic_menu_play_clip.png
+++ b/core/res/res/drawable-mdpi/ic_menu_play_clip.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_preferences.png b/core/res/res/drawable-mdpi/ic_menu_preferences.png
index 60dbff6..ccc50e6 100644
--- a/core/res/res/drawable-mdpi/ic_menu_preferences.png
+++ b/core/res/res/drawable-mdpi/ic_menu_preferences.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_recent_history.png b/core/res/res/drawable-mdpi/ic_menu_recent_history.png
index 4ccae5d..e5f8e2d 100644
--- a/core/res/res/drawable-mdpi/ic_menu_recent_history.png
+++ b/core/res/res/drawable-mdpi/ic_menu_recent_history.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_refresh.png b/core/res/res/drawable-mdpi/ic_menu_refresh.png
index 77d70dd..30b660f 100644
--- a/core/res/res/drawable-mdpi/ic_menu_refresh.png
+++ b/core/res/res/drawable-mdpi/ic_menu_refresh.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_report_image.png b/core/res/res/drawable-mdpi/ic_menu_report_image.png
index 393d727..414b0ae 100644
--- a/core/res/res/drawable-mdpi/ic_menu_report_image.png
+++ b/core/res/res/drawable-mdpi/ic_menu_report_image.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_revert.png b/core/res/res/drawable-mdpi/ic_menu_revert.png
index e7e04f5..7a45163 100644
--- a/core/res/res/drawable-mdpi/ic_menu_revert.png
+++ b/core/res/res/drawable-mdpi/ic_menu_revert.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_rotate.png b/core/res/res/drawable-mdpi/ic_menu_rotate.png
index 27368b2..35fa56d 100755
--- a/core/res/res/drawable-mdpi/ic_menu_rotate.png
+++ b/core/res/res/drawable-mdpi/ic_menu_rotate.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_save.png b/core/res/res/drawable-mdpi/ic_menu_save.png
index 36d50b3..5f66864 100644
--- a/core/res/res/drawable-mdpi/ic_menu_save.png
+++ b/core/res/res/drawable-mdpi/ic_menu_save.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_search.png b/core/res/res/drawable-mdpi/ic_menu_search.png
index 94446db..5d3155e 100755
--- a/core/res/res/drawable-mdpi/ic_menu_search.png
+++ b/core/res/res/drawable-mdpi/ic_menu_search.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_search_holo_light.png b/core/res/res/drawable-mdpi/ic_menu_search_holo_light.png
new file mode 100644
index 0000000..2369d03
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_menu_search_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_send.png b/core/res/res/drawable-mdpi/ic_menu_send.png
index 74c096d..06b4717 100755
--- a/core/res/res/drawable-mdpi/ic_menu_send.png
+++ b/core/res/res/drawable-mdpi/ic_menu_send.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_set_as.png b/core/res/res/drawable-mdpi/ic_menu_set_as.png
index cb9dc49..98cc305 100755
--- a/core/res/res/drawable-mdpi/ic_menu_set_as.png
+++ b/core/res/res/drawable-mdpi/ic_menu_set_as.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_settings_holo_light.png b/core/res/res/drawable-mdpi/ic_menu_settings_holo_light.png
new file mode 100644
index 0000000..f32a37e
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_menu_settings_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_share.png b/core/res/res/drawable-mdpi/ic_menu_share.png
index 44db9b1..d89ca5f 100755
--- a/core/res/res/drawable-mdpi/ic_menu_share.png
+++ b/core/res/res/drawable-mdpi/ic_menu_share.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_slideshow.png b/core/res/res/drawable-mdpi/ic_menu_slideshow.png
index 04fda7f..72bfcd9 100644
--- a/core/res/res/drawable-mdpi/ic_menu_slideshow.png
+++ b/core/res/res/drawable-mdpi/ic_menu_slideshow.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_sort_alphabetically.png b/core/res/res/drawable-mdpi/ic_menu_sort_alphabetically.png
index 2583eb8..452de5d 100755
--- a/core/res/res/drawable-mdpi/ic_menu_sort_alphabetically.png
+++ b/core/res/res/drawable-mdpi/ic_menu_sort_alphabetically.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_sort_by_size.png b/core/res/res/drawable-mdpi/ic_menu_sort_by_size.png
index 65e2786..19e8d1b 100755
--- a/core/res/res/drawable-mdpi/ic_menu_sort_by_size.png
+++ b/core/res/res/drawable-mdpi/ic_menu_sort_by_size.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_star.png b/core/res/res/drawable-mdpi/ic_menu_star.png
index 527d74a..0c22fe8 100755
--- a/core/res/res/drawable-mdpi/ic_menu_star.png
+++ b/core/res/res/drawable-mdpi/ic_menu_star.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_start_conversation.png b/core/res/res/drawable-mdpi/ic_menu_start_conversation.png
index aadcc2f..24b6540 100644
--- a/core/res/res/drawable-mdpi/ic_menu_start_conversation.png
+++ b/core/res/res/drawable-mdpi/ic_menu_start_conversation.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_stop.png b/core/res/res/drawable-mdpi/ic_menu_stop.png
index 4fc825c..efb4036 100644
--- a/core/res/res/drawable-mdpi/ic_menu_stop.png
+++ b/core/res/res/drawable-mdpi/ic_menu_stop.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_today.png b/core/res/res/drawable-mdpi/ic_menu_today.png
index c63b6af..8c248ae 100755
--- a/core/res/res/drawable-mdpi/ic_menu_today.png
+++ b/core/res/res/drawable-mdpi/ic_menu_today.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_upload.png b/core/res/res/drawable-mdpi/ic_menu_upload.png
index 1c0dd3f..9e8459a 100755
--- a/core/res/res/drawable-mdpi/ic_menu_upload.png
+++ b/core/res/res/drawable-mdpi/ic_menu_upload.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_upload_you_tube.png b/core/res/res/drawable-mdpi/ic_menu_upload_you_tube.png
index 0095564..a67c409 100755
--- a/core/res/res/drawable-mdpi/ic_menu_upload_you_tube.png
+++ b/core/res/res/drawable-mdpi/ic_menu_upload_you_tube.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_view.png b/core/res/res/drawable-mdpi/ic_menu_view.png
index 69828a9..082810d 100755
--- a/core/res/res/drawable-mdpi/ic_menu_view.png
+++ b/core/res/res/drawable-mdpi/ic_menu_view.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_week.png b/core/res/res/drawable-mdpi/ic_menu_week.png
index 62cd65e..e11e5f1 100755
--- a/core/res/res/drawable-mdpi/ic_menu_week.png
+++ b/core/res/res/drawable-mdpi/ic_menu_week.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_zoom.png b/core/res/res/drawable-mdpi/ic_menu_zoom.png
index 0b8c4e8..062d6f3 100644
--- a/core/res/res/drawable-mdpi/ic_menu_zoom.png
+++ b/core/res/res/drawable-mdpi/ic_menu_zoom.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/indicator_input_error.png b/core/res/res/drawable-mdpi/indicator_input_error.png
index ee60165..775e417 100755
--- a/core/res/res/drawable-mdpi/indicator_input_error.png
+++ b/core/res/res/drawable-mdpi/indicator_input_error.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/popup_inline_error_above_holo_dark.9.png b/core/res/res/drawable-mdpi/popup_inline_error_above_holo_dark.9.png
index dd4af6d..c03e658 100644
--- a/core/res/res/drawable-mdpi/popup_inline_error_above_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/popup_inline_error_above_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/popup_inline_error_above_holo_light.9.png b/core/res/res/drawable-mdpi/popup_inline_error_above_holo_light.9.png
index 8925112..19b153b 100644
--- a/core/res/res/drawable-mdpi/popup_inline_error_above_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/popup_inline_error_above_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/popup_inline_error_holo_dark.9.png b/core/res/res/drawable-mdpi/popup_inline_error_holo_dark.9.png
index 66c2c09..4092728 100755
--- a/core/res/res/drawable-mdpi/popup_inline_error_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/popup_inline_error_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/popup_inline_error_holo_light.9.png b/core/res/res/drawable-mdpi/popup_inline_error_holo_light.9.png
index c5113f2..67a2cd4 100755
--- a/core/res/res/drawable-mdpi/popup_inline_error_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/popup_inline_error_holo_light.9.png
Binary files differ
diff --git a/core/res/res/layout/textview_hint.xml b/core/res/res/layout/textview_hint.xml
index f9c4406..b94dfc9 100644
--- a/core/res/res/layout/textview_hint.xml
+++ b/core/res/res/layout/textview_hint.xml
@@ -18,5 +18,5 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:textAppearance="?android:attr/textAppearanceSmall"
-    android:textColor="@color/primary_text_light"
+    android:textColor="?android:attr/textColorPrimaryInverse"
 />
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 02b42d0..aaf071b 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -1282,365 +1282,362 @@
      Resources added in version 11 of the platform (Honeycomb / 3.0).
      =============================================================== -->
   <eat-comment />
-  <public type="attr" name="allContactsName" />
-  <public type="attr" name="windowActionBar" />
-  <public type="attr" name="actionBarStyle" />
-  <public type="attr" name="navigationMode" />
-  <public type="attr" name="displayOptions" />
-  <public type="attr" name="subtitle" />
-  <public type="attr" name="customNavigationLayout" />
-  <public type="attr" name="hardwareAccelerated" />
-  <public type="attr" name="measureWithLargestChild" />
-  <public type="attr" name="animateFirstView" />
-  <public type="attr" name="dropDownSpinnerStyle" />
-  <public type="attr" name="actionDropDownStyle" />
-  <public type="attr" name="actionButtonStyle" />
-  <public type="attr" name="showAsAction" />
-  <public type="attr" name="previewImage" />
-  <public type="attr" name="actionModeBackground" />
-  <public type="attr" name="actionModeCloseDrawable" />
-  <public type="attr" name="windowActionModeOverlay" />
-  <public type="attr" name="valueFrom" />
-  <public type="attr" name="valueTo" />
-  <public type="attr" name="valueType" />
-  <public type="attr" name="propertyName" />
-  <public type="attr" name="ordering" />
-  <public type="attr" name="fragment" />
-  <public type="attr" name="windowActionBarOverlay" />
-  <public type="attr" name="fragmentOpenEnterAnimation" />
-  <public type="attr" name="fragmentOpenExitAnimation" />
-  <public type="attr" name="fragmentCloseEnterAnimation" />
-  <public type="attr" name="fragmentCloseExitAnimation" />
-  <public type="attr" name="fragmentFadeEnterAnimation" />
-  <public type="attr" name="fragmentFadeExitAnimation" />
-  <public type="attr" name="actionBarSize" />
-  <public type="attr" name="imeSubtypeLocale" />
-  <public type="attr" name="imeSubtypeMode" />
-  <public type="attr" name="imeSubtypeExtraValue" />
-  <public type="attr" name="splitMotionEvents" />
-  <public type="attr" name="listChoiceBackgroundIndicator" />
-  <public type="attr" name="spinnerMode" />
-  <public type="attr" name="animateLayoutChanges" />
-  <public type="attr" name="actionBarTabStyle" />
-  <public type="attr" name="actionBarTabBarStyle" />
-  <public type="attr" name="actionBarTabTextStyle" />
-  <public type="attr" name="actionOverflowButtonStyle" />
-  <public type="attr" name="actionModeCloseButtonStyle" />
-  <public type="attr" name="titleTextStyle" />
-  <public type="attr" name="subtitleTextStyle" />
-  <public type="attr" name="iconifiedByDefault" />
-  <public type="attr" name="actionLayout" />
-  <public type="attr" name="actionViewClass" />
-  <public type="attr" name="activatedBackgroundIndicator" />
-  <public type="attr" name="state_activated" />
-  <public type="attr" name="listPopupWindowStyle" />
-  <public type="attr" name="popupMenuStyle" />
-  <public type="attr" name="textAppearanceLargePopupMenu" />
-  <public type="attr" name="textAppearanceSmallPopupMenu" />
-  <public type="attr" name="breadCrumbTitle" />
-  <public type="attr" name="breadCrumbShortTitle" />
-  <public type="attr" name="listDividerAlertDialog" />
-  <public type="attr" name="textColorAlertDialogListItem" />
-  <public type="attr" name="loopViews" />
-  <public type="attr" name="dialogTheme" />
-  <public type="attr" name="alertDialogTheme" />
-  <public type="attr" name="dividerVertical" />
-  <public type="attr" name="homeAsUpIndicator" />
-  <public type="attr" name="enterFadeDuration" />
-  <public type="attr" name="exitFadeDuration" />
-  <public type="attr" name="selectableItemBackground" />
-  <public type="attr" name="autoAdvanceViewId" />
-  <public type="attr" name="useIntrinsicSizeAsMinimum" />
-  <public type="attr" name="actionModeCutDrawable" />
-  <public type="attr" name="actionModeCopyDrawable" />
-  <public type="attr" name="actionModePasteDrawable" />
-  <public type="attr" name="textEditPasteWindowLayout" />
-  <public type="attr" name="textEditNoPasteWindowLayout" />
-  <public type="attr" name="textIsSelectable" />
-  <public type="attr" name="windowEnableSplitTouch" />
-  <public type="attr" name="indeterminateProgressStyle" />
-  <public type="attr" name="progressBarPadding" />
-  <public type="attr" name="animationResolution" />
-  <public type="attr" name="state_accelerated" />
-  <public type="attr" name="baseline" />
-  <public type="attr" name="homeLayout" />
-  <public type="attr" name="opacity" />
-  <public type="attr" name="alpha"/>
-  <public type="attr" name="transformPivotX"/>
-  <public type="attr" name="transformPivotY"/>
-  <public type="attr" name="translationX"/>
-  <public type="attr" name="translationY"/>
-  <public type="attr" name="scaleX"/>
-  <public type="attr" name="scaleY"/>
-  <public type="attr" name="rotation"/>
-  <public type="attr" name="rotationX"/>
-  <public type="attr" name="rotationY"/>
-  <public type="attr" name="showDividers" />
-  <public type="attr" name="dividerPadding" />
-  <public type="attr" name="borderlessButtonStyle" />
-  <public type="attr" name="dividerHorizontal" />
-  <public type="attr" name="itemPadding" />
-  <public type="attr" name="buttonBarStyle" />
-  <public type="attr" name="buttonBarButtonStyle" />
-  <public type="attr" name="segmentedButtonStyle" />
-  <public type="attr" name="staticWallpaperPreview" />
-  <public type="attr" name="allowParallelSyncs" />
-  <public type="attr" name="isAlwaysSyncable" />
-  <public type="attr" name="verticalScrollbarPosition" />
-  <public type="attr" name="fastScrollAlwaysVisible" />
-  <public type="attr" name="fastScrollThumbDrawable" />
-  <public type="attr" name="fastScrollPreviewBackgroundLeft" />
-  <public type="attr" name="fastScrollPreviewBackgroundRight" />
-  <public type="attr" name="fastScrollTrackDrawable" />
-  <public type="attr" name="fastScrollOverlayPosition" />
-  <public type="attr" name="customTokens" />
-  <public type="attr" name="nextFocusForward" />
-  <public type="attr" name="firstDayOfWeek" />
-  <public type="attr" name="showWeekNumber" />
-  <public type="attr" name="minDate" />
-  <public type="attr" name="maxDate" />
-  <public type="attr" name="shownWeekCount" />
-  <public type="attr" name="selectedWeekBackgroundColor" />
-  <public type="attr" name="focusedMonthDateColor" />
-  <public type="attr" name="unfocusedMonthDateColor" />
-  <public type="attr" name="weekNumberColor" />
-  <public type="attr" name="weekSeparatorLineColor" />
-  <public type="attr" name="selectedDateVerticalBar" />
-  <public type="attr" name="weekDayTextAppearance" />
-  <public type="attr" name="dateTextAppearance" />
-  <public type="attr" name="solidColor" />
-  <public type="attr" name="spinnersShown" />
-  <public type="attr" name="calendarViewShown" />
-  <public type="attr" name="state_multiline" />
-  <public type="attr" name="detailsElementBackground" />
-  <public type="attr" name="textColorHighlightInverse" />
-  <public type="attr" name="textColorLinkInverse" />
-  <public type="attr" name="editTextColor" />
-  <public type="attr" name="editTextBackground" />
-  <public type="attr" name="horizontalScrollViewStyle" />
-  <public type="attr" name="layerType" />
-  <public type="attr" name="alertDialogIcon" />
-  <public type="attr" name="windowMinWidthMajor" />
-  <public type="attr" name="windowMinWidthMinor" />
-  <public type="attr" name="queryHint" />
-  <public type="attr" name="fastScrollTextColor" />
-  <public type="attr" name="largeHeap" />
-  <public type="attr" name="windowCloseOnTouchOutside" />
-  <public type="attr" name="datePickerStyle" />
-  <public type="attr" name="calendarViewStyle" />
-  <public type="attr" name="textEditSidePasteWindowLayout" />
-  <public type="attr" name="textEditSideNoPasteWindowLayout" />
-  <public type="attr" name="actionMenuTextAppearance" />
-  <public type="attr" name="actionMenuTextColor" />
+  <public type="attr" name="allContactsName" id="0x010102cc" />
+  <public type="attr" name="windowActionBar" id="0x010102cd" />
+  <public type="attr" name="actionBarStyle" id="0x010102ce" />
+  <public type="attr" name="navigationMode" id="0x010102cf" />
+  <public type="attr" name="displayOptions" id="0x010102d0" />
+  <public type="attr" name="subtitle" id="0x010102d1" />
+  <public type="attr" name="customNavigationLayout" id="0x010102d2" />
+  <public type="attr" name="hardwareAccelerated" id="0x010102d3" />
+  <public type="attr" name="measureWithLargestChild" id="0x010102d4" />
+  <public type="attr" name="animateFirstView" id="0x010102d5" />
+  <public type="attr" name="dropDownSpinnerStyle" id="0x010102d6" />
+  <public type="attr" name="actionDropDownStyle" id="0x010102d7" />
+  <public type="attr" name="actionButtonStyle" id="0x010102d8" />
+  <public type="attr" name="showAsAction" id="0x010102d9" />
+  <public type="attr" name="previewImage" id="0x010102da" />
+  <public type="attr" name="actionModeBackground" id="0x010102db" />
+  <public type="attr" name="actionModeCloseDrawable" id="0x010102dc" />
+  <public type="attr" name="windowActionModeOverlay" id="0x010102dd" />
+  <public type="attr" name="valueFrom" id="0x010102de" />
+  <public type="attr" name="valueTo" id="0x010102df" />
+  <public type="attr" name="valueType" id="0x010102e0" />
+  <public type="attr" name="propertyName" id="0x010102e1" />
+  <public type="attr" name="ordering" id="0x010102e2" />
+  <public type="attr" name="fragment" id="0x010102e3" />
+  <public type="attr" name="windowActionBarOverlay" id="0x010102e4" />
+  <public type="attr" name="fragmentOpenEnterAnimation" id="0x010102e5" />
+  <public type="attr" name="fragmentOpenExitAnimation" id="0x010102e6" />
+  <public type="attr" name="fragmentCloseEnterAnimation" id="0x010102e7" />
+  <public type="attr" name="fragmentCloseExitAnimation" id="0x010102e8" />
+  <public type="attr" name="fragmentFadeEnterAnimation" id="0x010102e9" />
+  <public type="attr" name="fragmentFadeExitAnimation" id="0x010102ea" />
+  <public type="attr" name="actionBarSize" id="0x010102eb" />
+  <public type="attr" name="imeSubtypeLocale" id="0x010102ec" />
+  <public type="attr" name="imeSubtypeMode" id="0x010102ed" />
+  <public type="attr" name="imeSubtypeExtraValue" id="0x010102ee" />
+  <public type="attr" name="splitMotionEvents" id="0x010102ef" />
+  <public type="attr" name="listChoiceBackgroundIndicator" id="0x010102f0" />
+  <public type="attr" name="spinnerMode" id="0x010102f1" />
+  <public type="attr" name="animateLayoutChanges" id="0x010102f2" />
+  <public type="attr" name="actionBarTabStyle" id="0x010102f3" />
+  <public type="attr" name="actionBarTabBarStyle" id="0x010102f4" />
+  <public type="attr" name="actionBarTabTextStyle" id="0x010102f5" />
+  <public type="attr" name="actionOverflowButtonStyle" id="0x010102f6" />
+  <public type="attr" name="actionModeCloseButtonStyle" id="0x010102f7" />
+  <public type="attr" name="titleTextStyle" id="0x010102f8" />
+  <public type="attr" name="subtitleTextStyle" id="0x010102f9" />
+  <public type="attr" name="iconifiedByDefault" id="0x010102fa" />
+  <public type="attr" name="actionLayout" id="0x010102fb" />
+  <public type="attr" name="actionViewClass" id="0x010102fc" />
+  <public type="attr" name="activatedBackgroundIndicator" id="0x010102fd" />
+  <public type="attr" name="state_activated" id="0x010102fe" />
+  <public type="attr" name="listPopupWindowStyle" id="0x010102ff" />
+  <public type="attr" name="popupMenuStyle" id="0x01010300" />
+  <public type="attr" name="textAppearanceLargePopupMenu" id="0x01010301" />
+  <public type="attr" name="textAppearanceSmallPopupMenu" id="0x01010302" />
+  <public type="attr" name="breadCrumbTitle" id="0x01010303" />
+  <public type="attr" name="breadCrumbShortTitle" id="0x01010304" />
+  <public type="attr" name="listDividerAlertDialog" id="0x01010305" />
+  <public type="attr" name="textColorAlertDialogListItem" id="0x01010306" />
+  <public type="attr" name="loopViews" id="0x01010307" />
+  <public type="attr" name="dialogTheme" id="0x01010308" />
+  <public type="attr" name="alertDialogTheme" id="0x01010309" />
+  <public type="attr" name="dividerVertical" id="0x0101030a" />
+  <public type="attr" name="homeAsUpIndicator" id="0x0101030b" />
+  <public type="attr" name="enterFadeDuration" id="0x0101030c" />
+  <public type="attr" name="exitFadeDuration" id="0x0101030d" />
+  <public type="attr" name="selectableItemBackground" id="0x0101030e" />
+  <public type="attr" name="autoAdvanceViewId" id="0x0101030f" />
+  <public type="attr" name="useIntrinsicSizeAsMinimum" id="0x01010310" />
+  <public type="attr" name="actionModeCutDrawable" id="0x01010311" />
+  <public type="attr" name="actionModeCopyDrawable" id="0x01010312" />
+  <public type="attr" name="actionModePasteDrawable" id="0x01010313" />
+  <public type="attr" name="textEditPasteWindowLayout" id="0x01010314" />
+  <public type="attr" name="textEditNoPasteWindowLayout" id="0x01010315" />
+  <public type="attr" name="textIsSelectable" id="0x01010316" />
+  <public type="attr" name="windowEnableSplitTouch" id="0x01010317" />
+  <public type="attr" name="indeterminateProgressStyle" id="0x01010318" />
+  <public type="attr" name="progressBarPadding" id="0x01010319" />
+  <public type="attr" name="animationResolution" id="0x0101031a" />
+  <public type="attr" name="state_accelerated" id="0x0101031b" />
+  <public type="attr" name="baseline" id="0x0101031c" />
+  <public type="attr" name="homeLayout" id="0x0101031d" />
+  <public type="attr" name="opacity" id="0x0101031e" />
+  <public type="attr" name="alpha" id="0x0101031f" />
+  <public type="attr" name="transformPivotX" id="0x01010320" />
+  <public type="attr" name="transformPivotY" id="0x01010321" />
+  <public type="attr" name="translationX" id="0x01010322" />
+  <public type="attr" name="translationY" id="0x01010323" />
+  <public type="attr" name="scaleX" id="0x01010324" />
+  <public type="attr" name="scaleY" id="0x01010325" />
+  <public type="attr" name="rotation" id="0x01010326" />
+  <public type="attr" name="rotationX" id="0x01010327" />
+  <public type="attr" name="rotationY" id="0x01010328" />
+  <public type="attr" name="showDividers" id="0x01010329" />
+  <public type="attr" name="dividerPadding" id="0x0101032a" />
+  <public type="attr" name="borderlessButtonStyle" id="0x0101032b" />
+  <public type="attr" name="dividerHorizontal" id="0x0101032c" />
+  <public type="attr" name="itemPadding" id="0x0101032d" />
+  <public type="attr" name="buttonBarStyle" id="0x0101032e" />
+  <public type="attr" name="buttonBarButtonStyle" id="0x0101032f" />
+  <public type="attr" name="segmentedButtonStyle" id="0x01010330" />
+  <public type="attr" name="staticWallpaperPreview" id="0x01010331" />
+  <public type="attr" name="allowParallelSyncs" id="0x01010332" />
+  <public type="attr" name="isAlwaysSyncable" id="0x01010333" />
+  <public type="attr" name="verticalScrollbarPosition" id="0x01010334" />
+  <public type="attr" name="fastScrollAlwaysVisible" id="0x01010335" />
+  <public type="attr" name="fastScrollThumbDrawable" id="0x01010336" />
+  <public type="attr" name="fastScrollPreviewBackgroundLeft" id="0x01010337" />
+  <public type="attr" name="fastScrollPreviewBackgroundRight" id="0x01010338" />
+  <public type="attr" name="fastScrollTrackDrawable" id="0x01010339" />
+  <public type="attr" name="fastScrollOverlayPosition" id="0x0101033a" />
+  <public type="attr" name="customTokens" id="0x0101033b" />
+  <public type="attr" name="nextFocusForward" id="0x0101033c" />
+  <public type="attr" name="firstDayOfWeek" id="0x0101033d" />
+  <public type="attr" name="showWeekNumber" id="0x0101033e" />
+  <public type="attr" name="minDate" id="0x0101033f" />
+  <public type="attr" name="maxDate" id="0x01010340" />
+  <public type="attr" name="shownWeekCount" id="0x01010341" />
+  <public type="attr" name="selectedWeekBackgroundColor" id="0x01010342" />
+  <public type="attr" name="focusedMonthDateColor" id="0x01010343" />
+  <public type="attr" name="unfocusedMonthDateColor" id="0x01010344" />
+  <public type="attr" name="weekNumberColor" id="0x01010345" />
+  <public type="attr" name="weekSeparatorLineColor" id="0x01010346" />
+  <public type="attr" name="selectedDateVerticalBar" id="0x01010347" />
+  <public type="attr" name="weekDayTextAppearance" id="0x01010348" />
+  <public type="attr" name="dateTextAppearance" id="0x01010349" />
+  <public type="attr" name="solidColor" id="0x0101034a" />
+  <public type="attr" name="spinnersShown" id="0x0101034b" />
+  <public type="attr" name="calendarViewShown" id="0x0101034c" />
+  <public type="attr" name="state_multiline" id="0x0101034d" />
+  <public type="attr" name="detailsElementBackground" id="0x0101034e" />
+  <public type="attr" name="textColorHighlightInverse" id="0x0101034f" />
+  <public type="attr" name="textColorLinkInverse" id="0x01010350" />
+  <public type="attr" name="editTextColor" id="0x01010351" />
+  <public type="attr" name="editTextBackground" id="0x01010352" />
+  <public type="attr" name="horizontalScrollViewStyle" id="0x01010353" />
+  <public type="attr" name="layerType" id="0x01010354" />
+  <public type="attr" name="alertDialogIcon" id="0x01010355" />
+  <public type="attr" name="windowMinWidthMajor" id="0x01010356" />
+  <public type="attr" name="windowMinWidthMinor" id="0x01010357" />
+  <public type="attr" name="queryHint" id="0x01010358" />
+  <public type="attr" name="fastScrollTextColor" id="0x01010359" />
+  <public type="attr" name="largeHeap" id="0x0101035a" />
+  <public type="attr" name="windowCloseOnTouchOutside" id="0x0101035b" />
+  <public type="attr" name="datePickerStyle" id="0x0101035c" />
+  <public type="attr" name="calendarViewStyle" id="0x0101035d" />
+  <public type="attr" name="textEditSidePasteWindowLayout" id="0x0101035e" />
+  <public type="attr" name="textEditSideNoPasteWindowLayout" id="0x0101035f" />
+  <public type="attr" name="actionMenuTextAppearance" id="0x01010360" />
+  <public type="attr" name="actionMenuTextColor" id="0x01010361" />
 
   <!-- A simple fade-in animation. -->
   <public type="animator" name="fade_in" id="0x010b0000" />
   <!-- A simple fade-out animation. -->
-  <public type="animator" name="fade_out" />
+  <public type="animator" name="fade_out" id="0x010b0001" />
 
   <!-- Acceleration curve matching a quadtratic ease out function. -->
   <public type="interpolator" name="accelerate_quad" id="0x010c0000" />
   <!-- Acceleration curve matching a quadtratic ease in function. -->
-  <public type="interpolator" name="decelerate_quad" />
+  <public type="interpolator" name="decelerate_quad" id="0x010c0001" />
   <!-- Acceleration curve matching a cubic ease out function. -->
-  <public type="interpolator" name="accelerate_cubic" />
+  <public type="interpolator" name="accelerate_cubic" id="0x010c0002" />
   <!-- Acceleration curve matching a cubic ease in function. -->
-  <public type="interpolator" name="decelerate_cubic" />
+  <public type="interpolator" name="decelerate_cubic" id="0x010c0003" />
   <!-- Acceleration curve matching a quint ease out function. -->
-  <public type="interpolator" name="accelerate_quint" />
+  <public type="interpolator" name="accelerate_quint" id="0x010c0004" />
   <!-- Acceleration curve matching a quint ease in function. -->
-  <public type="interpolator" name="decelerate_quint" />
+  <public type="interpolator" name="decelerate_quint" id="0x010c0005" />
   <!-- Acceleration curve matching an ease in + ease out function -->
-  <public type="interpolator" name="accelerate_decelerate" />
+  <public type="interpolator" name="accelerate_decelerate" id="0x010c0006" />
   <!-- An interpolator where the change starts backward then flings forward. -->
-  <public type="interpolator" name="anticipate" />
+  <public type="interpolator" name="anticipate" id="0x010c0007" />
   <!-- An interpolator where the change flings forward and overshoots the last
        value then comes back. -->
-  <public type="interpolator" name="overshoot" />
+  <public type="interpolator" name="overshoot" id="0x010c0008" />
   <!-- An interpolator where the change starts backward then flings forward and
        overshoots the target value and finally goes back to the final value. -->
-  <public type="interpolator" name="anticipate_overshoot" />
+  <public type="interpolator" name="anticipate_overshoot" id="0x010c0009" />
   <!-- An interpolator where the change bounces at the end. -->
-  <public type="interpolator" name="bounce" />
+  <public type="interpolator" name="bounce" id="0x010c000a" />
   <!-- An interpolator where the rate of change is constant. -->
-  <public type="interpolator" name="linear" />
+  <public type="interpolator" name="linear" id="0x010c000b" />
   <!-- Repeats the animation for one cycle. The rate of change follows a
        sinusoidal pattern. -->
-  <public type="interpolator" name="cycle" />
+  <public type="interpolator" name="cycle" id="0x010c000c" />
 
-  <public type="id" name="home" />
+  <public type="id" name="home" id="0x0102002c" />
   <!-- Context menu ID for the "Select text..." menu item to switch to text
        selection context mode in text views. -->
-  <public type="id" name="selectTextMode" />
+  <public type="id" name="selectTextMode" id="0x0102002d" />
 
-  <public type="dimen" name="dialog_min_width_major" />
-  <public type="dimen" name="dialog_min_width_minor" />
-  <public type="dimen" name="notification_large_icon_width" />
-  <public type="dimen" name="notification_large_icon_height" />
+  <public type="dimen" name="dialog_min_width_major" id="0x01050003" />
+  <public type="dimen" name="dialog_min_width_minor" id="0x01050004" />
+  <public type="dimen" name="notification_large_icon_width" id="0x01050005" />
+  <public type="dimen" name="notification_large_icon_height" id="0x01050006" />
 
   <!-- Standard content view for a {@link android.app.ListFragment}.
        If you are implementing a subclass of ListFragment with your
        own customized content, you can include this layout in that
        content to still retain all of the standard functionality of
        the base class. -->
-  <public type="layout" name="list_content" />
+  <public type="layout" name="list_content" id="0x01090014" />
 
   <!-- A simple ListView item layout which can contain text and support (single or multiple) item selection. -->
-  <public type="layout" name="simple_selectable_list_item" />
+  <public type="layout" name="simple_selectable_list_item" id="0x01090015" />
 
   <!-- A version of {@link #simple_list_item_1} that is able to change its
        background state to indicate when it is activated (that is checked by
        a ListView). -->
-  <public type="layout" name="simple_list_item_activated_1" />
+  <public type="layout" name="simple_list_item_activated_1" id="0x01090016" />
 
   <!-- A version of {@link #simple_list_item_2} that is able to change its
        background state to indicate when it is activated (that is checked by
        a ListView). -->
-  <public type="layout" name="simple_list_item_activated_2" />
+  <public type="layout" name="simple_list_item_activated_2" id="0x01090017" />
 
-  <public type="drawable" name="dialog_holo_dark_frame" />
-  <public type="drawable" name="dialog_holo_light_frame" />
+  <public type="drawable" name="dialog_holo_dark_frame" id="0x010800b2" />
+  <public type="drawable" name="dialog_holo_light_frame" id="0x010800b3" />
 
-  <public type="style" name="Theme.WithActionBar" />
-  <public type="style" name="Theme.NoTitleBar.OverlayActionModes" />
+  <public type="style" name="Theme.WithActionBar" id="0x01030069" />
+  <public type="style" name="Theme.NoTitleBar.OverlayActionModes" id="0x0103006a" />
+  <public type="style" name="Theme.Holo" id="0x0103006b" />
+  <public type="style" name="Theme.Holo.NoActionBar" id="0x0103006c" />
+  <public type="style" name="Theme.Holo.NoActionBar.Fullscreen" id="0x0103006d" />
+  <public type="style" name="Theme.Holo.Light" id="0x0103006e" />
+  <public type="style" name="Theme.Holo.Dialog" id="0x0103006f" />
+  <public type="style" name="Theme.Holo.Dialog.MinWidth" id="0x01030070" />
+  <public type="style" name="Theme.Holo.Dialog.NoActionBar" id="0x01030071" />
+  <public type="style" name="Theme.Holo.Dialog.NoActionBar.MinWidth" id="0x01030072" />
+  <public type="style" name="Theme.Holo.Light.Dialog" id="0x01030073" />
+  <public type="style" name="Theme.Holo.Light.Dialog.MinWidth" id="0x01030074" />
+  <public type="style" name="Theme.Holo.Light.Dialog.NoActionBar" id="0x01030075" />
+  <public type="style" name="Theme.Holo.Light.Dialog.NoActionBar.MinWidth" id="0x01030076" />
+  <public type="style" name="Theme.Holo.DialogWhenLarge" id="0x01030077" />
+  <public type="style" name="Theme.Holo.DialogWhenLarge.NoActionBar" id="0x01030078" />
+  <public type="style" name="Theme.Holo.Light.DialogWhenLarge" id="0x01030079" />
+  <public type="style" name="Theme.Holo.Light.DialogWhenLarge.NoActionBar" id="0x0103007a" />
+  <public type="style" name="Theme.Holo.Panel" id="0x0103007b" />
+  <public type="style" name="Theme.Holo.Light.Panel" id="0x0103007c" />
+  <public type="style" name="Theme.Holo.Wallpaper" id="0x0103007d" />
+  <public type="style" name="Theme.Holo.Wallpaper.NoTitleBar" id="0x0103007e" />
+  <public type="style" name="Theme.Holo.InputMethod" id="0x0103007f" />
+  <public type="style" name="TextAppearance.Widget.PopupMenu.Large" id="0x01030080" />
+  <public type="style" name="TextAppearance.Widget.PopupMenu.Small" id="0x01030081" />
+  <public type="style" name="Widget.ActionBar" id="0x01030082" />
+  <public type="style" name="Widget.Spinner.DropDown" id="0x01030083" />
+  <public type="style" name="Widget.ActionButton" id="0x01030084" />
+  <public type="style" name="Widget.ListPopupWindow" id="0x01030085" />
+  <public type="style" name="Widget.PopupMenu" id="0x01030086" />
+  <public type="style" name="Widget.ActionButton.Overflow" id="0x01030087" />
+  <public type="style" name="Widget.ActionButton.CloseMode" id="0x01030088" />
+  <public type="style" name="Widget.FragmentBreadCrumbs" id="0x01030089" />
+  <public type="style" name="Widget.Holo" id="0x0103008a" />
+  <public type="style" name="Widget.Holo.Button" id="0x0103008b" />
+  <public type="style" name="Widget.Holo.Button.Small" id="0x0103008c" />
+  <public type="style" name="Widget.Holo.Button.Inset" id="0x0103008d" />
+  <public type="style" name="Widget.Holo.Button.Toggle" id="0x0103008e" />
+  <public type="style" name="Widget.Holo.TextView" id="0x0103008f" />
+  <public type="style" name="Widget.Holo.AutoCompleteTextView" id="0x01030090" />
+  <public type="style" name="Widget.Holo.CompoundButton.CheckBox" id="0x01030091" />
+  <public type="style" name="Widget.Holo.ListView.DropDown" id="0x01030092" />
+  <public type="style" name="Widget.Holo.EditText" id="0x01030093" />
+  <public type="style" name="Widget.Holo.ExpandableListView" id="0x01030094" />
+  <public type="style" name="Widget.Holo.GridView" id="0x01030095" />
+  <public type="style" name="Widget.Holo.ImageButton" id="0x01030096" />
+  <public type="style" name="Widget.Holo.ListView" id="0x01030097" />
+  <public type="style" name="Widget.Holo.PopupWindow" id="0x01030098" />
+  <public type="style" name="Widget.Holo.ProgressBar" id="0x01030099" />
+  <public type="style" name="Widget.Holo.ProgressBar.Horizontal" id="0x0103009a" />
+  <public type="style" name="Widget.Holo.ProgressBar.Small" id="0x0103009b" />
+  <public type="style" name="Widget.Holo.ProgressBar.Small.Title" id="0x0103009c" />
+  <public type="style" name="Widget.Holo.ProgressBar.Large" id="0x0103009d" />
+  <public type="style" name="Widget.Holo.SeekBar" id="0x0103009e" />
+  <public type="style" name="Widget.Holo.RatingBar" id="0x0103009f" />
+  <public type="style" name="Widget.Holo.RatingBar.Indicator" id="0x010300a0" />
+  <public type="style" name="Widget.Holo.RatingBar.Small" id="0x010300a1" />
+  <public type="style" name="Widget.Holo.CompoundButton.RadioButton" id="0x010300a2" />
+  <public type="style" name="Widget.Holo.ScrollView" id="0x010300a3" />
+  <public type="style" name="Widget.Holo.HorizontalScrollView" id="0x010300a4" />
+  <public type="style" name="Widget.Holo.Spinner" id="0x010300a5" />
+  <public type="style" name="Widget.Holo.CompoundButton.Star" id="0x010300a6" />
+  <public type="style" name="Widget.Holo.TabWidget" id="0x010300a7" />
+  <public type="style" name="Widget.Holo.WebTextView" id="0x010300a8" />
+  <public type="style" name="Widget.Holo.WebView" id="0x010300a9" />
+  <public type="style" name="Widget.Holo.DropDownItem" id="0x010300aa" />
+  <public type="style" name="Widget.Holo.DropDownItem.Spinner" id="0x010300ab" />
+  <public type="style" name="Widget.Holo.TextView.SpinnerItem" id="0x010300ac" />
+  <public type="style" name="Widget.Holo.ListPopupWindow" id="0x010300ad" />
+  <public type="style" name="Widget.Holo.PopupMenu" id="0x010300ae" />
+  <public type="style" name="Widget.Holo.ActionButton" id="0x010300af" />
+  <public type="style" name="Widget.Holo.ActionButton.Overflow" id="0x010300b0" />
+  <public type="style" name="Widget.Holo.ActionButton.TextButton" id="0x010300b1" />
+  <public type="style" name="Widget.Holo.ActionMode" id="0x010300b2" />
+  <public type="style" name="Widget.Holo.ActionButton.CloseMode" id="0x010300b3" />
+  <public type="style" name="Widget.Holo.ActionBar" id="0x010300b4" />
+  <public type="style" name="Widget.Holo.Light" id="0x010300b5" />
+  <public type="style" name="Widget.Holo.Light.Button" id="0x010300b6" />
+  <public type="style" name="Widget.Holo.Light.Button.Small" id="0x010300b7" />
+  <public type="style" name="Widget.Holo.Light.Button.Inset" id="0x010300b8" />
+  <public type="style" name="Widget.Holo.Light.Button.Toggle" id="0x010300b9" />
+  <public type="style" name="Widget.Holo.Light.TextView" id="0x010300ba" />
+  <public type="style" name="Widget.Holo.Light.AutoCompleteTextView" id="0x010300bb" />
+  <public type="style" name="Widget.Holo.Light.CompoundButton.CheckBox" id="0x010300bc" />
+  <public type="style" name="Widget.Holo.Light.ListView.DropDown" id="0x010300bd" />
+  <public type="style" name="Widget.Holo.Light.EditText" id="0x010300be" />
+  <public type="style" name="Widget.Holo.Light.ExpandableListView" id="0x010300bf" />
+  <public type="style" name="Widget.Holo.Light.GridView" id="0x010300c0" />
+  <public type="style" name="Widget.Holo.Light.ImageButton" id="0x010300c1" />
+  <public type="style" name="Widget.Holo.Light.ListView" id="0x010300c2" />
+  <public type="style" name="Widget.Holo.Light.PopupWindow" id="0x010300c3" />
+  <public type="style" name="Widget.Holo.Light.ProgressBar" id="0x010300c4" />
+  <public type="style" name="Widget.Holo.Light.ProgressBar.Horizontal" id="0x010300c5" />
+  <public type="style" name="Widget.Holo.Light.ProgressBar.Small" id="0x010300c6" />
+  <public type="style" name="Widget.Holo.Light.ProgressBar.Small.Title" id="0x010300c7" />
+  <public type="style" name="Widget.Holo.Light.ProgressBar.Large" id="0x010300c8" />
+  <public type="style" name="Widget.Holo.Light.ProgressBar.Inverse" id="0x010300c9" />
+  <public type="style" name="Widget.Holo.Light.ProgressBar.Small.Inverse" id="0x010300ca" />
+  <public type="style" name="Widget.Holo.Light.ProgressBar.Large.Inverse" id="0x010300cb" />
+  <public type="style" name="Widget.Holo.Light.SeekBar" id="0x010300cc" />
+  <public type="style" name="Widget.Holo.Light.RatingBar" id="0x010300cd" />
+  <public type="style" name="Widget.Holo.Light.RatingBar.Indicator" id="0x010300ce" />
+  <public type="style" name="Widget.Holo.Light.RatingBar.Small" id="0x010300cf" />
+  <public type="style" name="Widget.Holo.Light.CompoundButton.RadioButton" id="0x010300d0" />
+  <public type="style" name="Widget.Holo.Light.ScrollView" id="0x010300d1" />
+  <public type="style" name="Widget.Holo.Light.HorizontalScrollView" id="0x010300d2" />
+  <public type="style" name="Widget.Holo.Light.Spinner" id="0x010300d3" />
+  <public type="style" name="Widget.Holo.Light.CompoundButton.Star" id="0x010300d4" />
+  <public type="style" name="Widget.Holo.Light.TabWidget" id="0x010300d5" />
+  <public type="style" name="Widget.Holo.Light.WebTextView" id="0x010300d6" />
+  <public type="style" name="Widget.Holo.Light.WebView" id="0x010300d7" />
+  <public type="style" name="Widget.Holo.Light.DropDownItem" id="0x010300d8" />
+  <public type="style" name="Widget.Holo.Light.DropDownItem.Spinner" id="0x010300d9" />
+  <public type="style" name="Widget.Holo.Light.TextView.SpinnerItem" id="0x010300da" />
+  <public type="style" name="Widget.Holo.Light.ListPopupWindow" id="0x010300db" />
+  <public type="style" name="Widget.Holo.Light.PopupMenu" id="0x010300dc" />
+  <public type="style" name="Widget.Holo.Light.ActionButton" id="0x010300dd" />
+  <public type="style" name="Widget.Holo.Light.ActionButton.Overflow" id="0x010300de" />
+  <public type="style" name="Widget.Holo.Light.ActionMode" id="0x010300df" />
+  <public type="style" name="Widget.Holo.Light.ActionButton.CloseMode" id="0x010300e0" />
+  <public type="style" name="Widget.Holo.Light.ActionBar" id="0x010300e1" />
+  <public type="style" name="Widget.Holo.Button.Borderless" id="0x010300e2" />
+  <public type="style" name="Widget.Holo.Tab" id="0x010300e3" />
+  <public type="style" name="Widget.Holo.Light.Tab" id="0x010300e4" />
+  <public type="style" name="Holo.ButtonBar" id="0x010300e5" />
+  <public type="style" name="Holo.Light.ButtonBar" id="0x010300e6" />
+  <public type="style" name="Holo.ButtonBar.AlertDialog" id="0x010300e7" />
+  <public type="style" name="Holo.Light.ButtonBar.AlertDialog" id="0x010300e8" />
+  <public type="style" name="Holo.SegmentedButton" id="0x010300e9" />
+  <public type="style" name="Holo.Light.SegmentedButton" id="0x010300ea" />
+  <public type="style" name="Widget.CalendarView" id="0x010300eb" />
+  <public type="style" name="Widget.Holo.CalendarView" id="0x010300ec" />
+  <public type="style" name="Widget.Holo.Light.CalendarView" id="0x010300ed" />
+  <public type="style" name="Widget.DatePicker" id="0x010300ee" />
+  <public type="style" name="Widget.Holo.DatePicker" id="0x010300ef" />
 
-  <public type="style" name="Theme.Holo" />
-  <public type="style" name="Theme.Holo.NoActionBar" />
-  <public type="style" name="Theme.Holo.NoActionBar.Fullscreen" />
-  <public type="style" name="Theme.Holo.Light" />
-  <public type="style" name="Theme.Holo.Dialog" />
-  <public type="style" name="Theme.Holo.Dialog.MinWidth" />
-  <public type="style" name="Theme.Holo.Dialog.NoActionBar" />
-  <public type="style" name="Theme.Holo.Dialog.NoActionBar.MinWidth" />
-  <public type="style" name="Theme.Holo.Light.Dialog" />
-  <public type="style" name="Theme.Holo.Light.Dialog.MinWidth" />
-  <public type="style" name="Theme.Holo.Light.Dialog.NoActionBar" />
-  <public type="style" name="Theme.Holo.Light.Dialog.NoActionBar.MinWidth" />
-  <public type="style" name="Theme.Holo.DialogWhenLarge" />
-  <public type="style" name="Theme.Holo.DialogWhenLarge.NoActionBar" />
-  <public type="style" name="Theme.Holo.Light.DialogWhenLarge" />
-  <public type="style" name="Theme.Holo.Light.DialogWhenLarge.NoActionBar" />
-  <public type="style" name="Theme.Holo.Panel" />
-  <public type="style" name="Theme.Holo.Light.Panel" />
-  <public type="style" name="Theme.Holo.Wallpaper" />
-  <public type="style" name="Theme.Holo.Wallpaper.NoTitleBar" />
-  <public type="style" name="Theme.Holo.InputMethod" />
-
-  <public type="style" name="TextAppearance.Widget.PopupMenu.Large" />
-  <public type="style" name="TextAppearance.Widget.PopupMenu.Small" />
-
-  <public type="style" name="Widget.ActionBar" />
-  <public type="style" name="Widget.Spinner.DropDown" />
-  <public type="style" name="Widget.ActionButton" />
-  <public type="style" name="Widget.ListPopupWindow" />
-  <public type="style" name="Widget.PopupMenu" />
-  <public type="style" name="Widget.ActionButton.Overflow" />
-  <public type="style" name="Widget.ActionButton.CloseMode" />
-  <public type="style" name="Widget.FragmentBreadCrumbs" />
-  <public type="style" name="Widget.Holo" />
-  <public type="style" name="Widget.Holo.Button" />
-  <public type="style" name="Widget.Holo.Button.Small" />
-  <public type="style" name="Widget.Holo.Button.Inset" />
-  <public type="style" name="Widget.Holo.Button.Toggle" />
-  <public type="style" name="Widget.Holo.TextView" />
-  <public type="style" name="Widget.Holo.AutoCompleteTextView" />
-  <public type="style" name="Widget.Holo.CompoundButton.CheckBox" />
-  <public type="style" name="Widget.Holo.ListView.DropDown" />
-  <public type="style" name="Widget.Holo.EditText" />
-  <public type="style" name="Widget.Holo.ExpandableListView" />
-  <public type="style" name="Widget.Holo.GridView" />
-  <public type="style" name="Widget.Holo.ImageButton" />
-  <public type="style" name="Widget.Holo.ListView" />
-  <public type="style" name="Widget.Holo.PopupWindow" />
-  <public type="style" name="Widget.Holo.ProgressBar" />
-  <public type="style" name="Widget.Holo.ProgressBar.Horizontal" />
-  <public type="style" name="Widget.Holo.ProgressBar.Small" />
-  <public type="style" name="Widget.Holo.ProgressBar.Small.Title" />
-  <public type="style" name="Widget.Holo.ProgressBar.Large" />
-  <public type="style" name="Widget.Holo.SeekBar" />
-  <public type="style" name="Widget.Holo.RatingBar" />
-  <public type="style" name="Widget.Holo.RatingBar.Indicator" />
-  <public type="style" name="Widget.Holo.RatingBar.Small" />
-  <public type="style" name="Widget.Holo.CompoundButton.RadioButton" />
-  <public type="style" name="Widget.Holo.ScrollView" />
-  <public type="style" name="Widget.Holo.HorizontalScrollView" />
-  <public type="style" name="Widget.Holo.Spinner" />
-  <public type="style" name="Widget.Holo.CompoundButton.Star" />
-  <public type="style" name="Widget.Holo.TabWidget" />
-  <public type="style" name="Widget.Holo.WebTextView" />
-  <public type="style" name="Widget.Holo.WebView" />
-  <public type="style" name="Widget.Holo.DropDownItem" />
-  <public type="style" name="Widget.Holo.DropDownItem.Spinner" />
-  <public type="style" name="Widget.Holo.TextView.SpinnerItem" />
-  <public type="style" name="Widget.Holo.ListPopupWindow" />
-  <public type="style" name="Widget.Holo.PopupMenu" />
-  <public type="style" name="Widget.Holo.ActionButton" />
-  <public type="style" name="Widget.Holo.ActionButton.Overflow" />
-  <public type="style" name="Widget.Holo.ActionButton.TextButton" />
-  <public type="style" name="Widget.Holo.ActionMode" />
-  <public type="style" name="Widget.Holo.ActionButton.CloseMode" />
-  <public type="style" name="Widget.Holo.ActionBar" />
-  <public type="style" name="Widget.Holo.Light" />
-  <public type="style" name="Widget.Holo.Light.Button" />
-  <public type="style" name="Widget.Holo.Light.Button.Small" />
-  <public type="style" name="Widget.Holo.Light.Button.Inset" />
-  <public type="style" name="Widget.Holo.Light.Button.Toggle" />
-  <public type="style" name="Widget.Holo.Light.TextView" />
-  <public type="style" name="Widget.Holo.Light.AutoCompleteTextView" />
-  <public type="style" name="Widget.Holo.Light.CompoundButton.CheckBox" />
-  <public type="style" name="Widget.Holo.Light.ListView.DropDown" />
-  <public type="style" name="Widget.Holo.Light.EditText" />
-  <public type="style" name="Widget.Holo.Light.ExpandableListView" />
-  <public type="style" name="Widget.Holo.Light.GridView" />
-  <public type="style" name="Widget.Holo.Light.ImageButton" />
-  <public type="style" name="Widget.Holo.Light.ListView" />
-  <public type="style" name="Widget.Holo.Light.PopupWindow" />
-  <public type="style" name="Widget.Holo.Light.ProgressBar" />
-  <public type="style" name="Widget.Holo.Light.ProgressBar.Horizontal" />
-  <public type="style" name="Widget.Holo.Light.ProgressBar.Small" />
-  <public type="style" name="Widget.Holo.Light.ProgressBar.Small.Title" />
-  <public type="style" name="Widget.Holo.Light.ProgressBar.Large" />
-  <public type="style" name="Widget.Holo.Light.ProgressBar.Inverse" />
-  <public type="style" name="Widget.Holo.Light.ProgressBar.Small.Inverse" />
-  <public type="style" name="Widget.Holo.Light.ProgressBar.Large.Inverse" />
-  <public type="style" name="Widget.Holo.Light.SeekBar" />
-  <public type="style" name="Widget.Holo.Light.RatingBar" />
-  <public type="style" name="Widget.Holo.Light.RatingBar.Indicator" />
-  <public type="style" name="Widget.Holo.Light.RatingBar.Small" />
-  <public type="style" name="Widget.Holo.Light.CompoundButton.RadioButton" />
-  <public type="style" name="Widget.Holo.Light.ScrollView" />
-  <public type="style" name="Widget.Holo.Light.HorizontalScrollView" />
-  <public type="style" name="Widget.Holo.Light.Spinner" />
-  <public type="style" name="Widget.Holo.Light.CompoundButton.Star" />
-  <public type="style" name="Widget.Holo.Light.TabWidget" />
-  <public type="style" name="Widget.Holo.Light.WebTextView" />
-  <public type="style" name="Widget.Holo.Light.WebView" />
-  <public type="style" name="Widget.Holo.Light.DropDownItem" />
-  <public type="style" name="Widget.Holo.Light.DropDownItem.Spinner" />
-  <public type="style" name="Widget.Holo.Light.TextView.SpinnerItem" />
-  <public type="style" name="Widget.Holo.Light.ListPopupWindow" />
-  <public type="style" name="Widget.Holo.Light.PopupMenu" />
-  <public type="style" name="Widget.Holo.Light.ActionButton" />
-  <public type="style" name="Widget.Holo.Light.ActionButton.Overflow" />
-  <public type="style" name="Widget.Holo.Light.ActionMode" />
-  <public type="style" name="Widget.Holo.Light.ActionButton.CloseMode" />
-  <public type="style" name="Widget.Holo.Light.ActionBar" />
-  <public type="style" name="Widget.Holo.Button.Borderless" />
-  <public type="style" name="Widget.Holo.Tab" />
-  <public type="style" name="Widget.Holo.Light.Tab" />
-  <public type="style" name="Holo.ButtonBar" />
-  <public type="style" name="Holo.Light.ButtonBar" />
-  <public type="style" name="Holo.ButtonBar.AlertDialog" />
-  <public type="style" name="Holo.Light.ButtonBar.AlertDialog" />
-  <public type="style" name="Holo.SegmentedButton" />
-  <public type="style" name="Holo.Light.SegmentedButton" />
-  <public type="style" name="Widget.CalendarView" />
-  <public type="style" name="Widget.Holo.CalendarView" />
-  <public type="style" name="Widget.Holo.Light.CalendarView" />
-  <public type="style" name="Widget.DatePicker" />
-  <public type="style" name="Widget.Holo.DatePicker" />
-
-  <public type="string" name="selectTextMode" />
+  <public type="string" name="selectTextMode" id="0x01040016" />
 
   <!-- Default icon for applications that don't specify an icon. -->
   <public type="mipmap" name="sym_def_app_icon" id="0x010d0000" />
diff --git a/data/fonts/DroidSansFallback.ttf b/data/fonts/DroidSansFallback.ttf
index 206621f..8c6fabe 100644
--- a/data/fonts/DroidSansFallback.ttf
+++ b/data/fonts/DroidSansFallback.ttf
Binary files differ
diff --git a/data/sounds/AudioPackage6.mk b/data/sounds/AudioPackage6.mk
index e39a02e..92bf416 100755
--- a/data/sounds/AudioPackage6.mk
+++ b/data/sounds/AudioPackage6.mk
@@ -8,35 +8,39 @@
 LOCAL_PATH:= frameworks/base/data/sounds
 
 PRODUCT_COPY_FILES += \
-	$(LOCAL_PATH)/Alarm_Buzzer.ogg:system/media/audio/alarms/Alarm_Buzzer.ogg \
-	$(LOCAL_PATH)/Alarm_Beep_01.ogg:system/media/audio/alarms/Alarm_Beep_01.ogg \
-	$(LOCAL_PATH)/Alarm_Beep_02.ogg:system/media/audio/alarms/Alarm_Beep_02.ogg \
-	$(LOCAL_PATH)/Alarm_Classic.ogg:system/media/audio/alarms/Alarm_Classic.ogg \
-	$(LOCAL_PATH)/Alarm_Beep_03.ogg:system/media/audio/alarms/Alarm_Beep_03.ogg \
-	$(LOCAL_PATH)/effects/Effect_Tick.ogg:system/media/audio/ui/Effect_Tick.ogg \
-	$(LOCAL_PATH)/effects/KeypressStandard.ogg:system/media/audio/ui/KeypressStandard.ogg \
-	$(LOCAL_PATH)/effects/KeypressSpacebar.ogg:system/media/audio/ui/KeypressSpacebar.ogg \
-	$(LOCAL_PATH)/effects/KeypressDelete.ogg:system/media/audio/ui/KeypressDelete.ogg \
-	$(LOCAL_PATH)/effects/KeypressReturn.ogg:system/media/audio/ui/KeypressReturn.ogg \
-	$(LOCAL_PATH)/effects/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \
-	$(LOCAL_PATH)/effects/camera_click.ogg:system/media/audio/ui/camera_click.ogg \
-	$(LOCAL_PATH)/effects/LowBattery.ogg:system/media/audio/ui/LowBattery.ogg \
-	$(LOCAL_PATH)/effects/Dock.ogg:system/media/audio/ui/Dock.ogg \
-	$(LOCAL_PATH)/effects/Undock.ogg:system/media/audio/ui/Undock.ogg \
-	$(LOCAL_PATH)/effects/Lock.ogg:system/media/audio/ui/Lock.ogg \
-	$(LOCAL_PATH)/effects/Unlock.ogg:system/media/audio/ui/Unlock.ogg \
-	$(LOCAL_PATH)/notifications/aidos.ogg:system/media/audio/notifications/aidos.ogg \
-	$(LOCAL_PATH)/notifications/nomos1.ogg:system/media/audio/notifications/nomos1.ogg \
-	$(LOCAL_PATH)/notifications/hypnos1.ogg:system/media/audio/notifications/hypnos1.ogg \
-	$(LOCAL_PATH)/notifications/thrasos1.ogg:system/media/audio/notifications/thrasos1.ogg \
-	$(LOCAL_PATH)/notifications/nomos2.ogg:system/media/audio/notifications/nomos2.ogg \
-	$(LOCAL_PATH)/notifications/horkos.ogg:system/media/audio/notifications/horkos.ogg \
-	$(LOCAL_PATH)/notifications/kratos1.ogg:system/media/audio/notifications/kratos1.ogg \
-	$(LOCAL_PATH)/notifications/circios.ogg:system/media/audio/notifications/circios.ogg \
-	$(LOCAL_PATH)/notifications/ouranos.ogg:system/media/audio/notifications/ouranos.ogg \
-	$(LOCAL_PATH)/notifications/poros.ogg:system/media/audio/notifications/poros.ogg \
-	$(LOCAL_PATH)/notifications/phantasos.ogg:system/media/audio/notifications/phantasos.ogg \
-	$(LOCAL_PATH)/notifications/kratos2.ogg:system/media/audio/notifications/kratos2.ogg \
+	$(LOCAL_PATH)/alarms/ogg/Analysis.ogg:system/media/audio/alarms/Analysis.ogg \
+	$(LOCAL_PATH)/alarms/ogg/Departure.ogg:system/media/audio/alarms/Departure.ogg \
+	$(LOCAL_PATH)/alarms/ogg/FireDrill.ogg:system/media/audio/alarms/FireDrill.ogg \
+	$(LOCAL_PATH)/alarms/ogg/Timing.ogg:system/media/audio/alarms/Timing.ogg \
+	$(LOCAL_PATH)/effects/ogg/Effect_Tick.ogg:system/media/audio/ui/Effect_Tick.ogg \
+	$(LOCAL_PATH)/effects/ogg/KeypressStandard.ogg:system/media/audio/ui/KeypressStandard.ogg \
+	$(LOCAL_PATH)/effects/ogg/KeypressSpacebar.ogg:system/media/audio/ui/KeypressSpacebar.ogg \
+	$(LOCAL_PATH)/effects/ogg/KeypressDelete.ogg:system/media/audio/ui/KeypressDelete.ogg \
+	$(LOCAL_PATH)/effects/ogg/KeypressReturn.ogg:system/media/audio/ui/KeypressReturn.ogg \
+	$(LOCAL_PATH)/effects/ogg/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \
+	$(LOCAL_PATH)/effects/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \
+	$(LOCAL_PATH)/effects/ogg/LowBattery.ogg:system/media/audio/ui/LowBattery.ogg \
+	$(LOCAL_PATH)/effects/ogg/Dock.ogg:system/media/audio/ui/Dock.ogg \
+	$(LOCAL_PATH)/effects/ogg/Undock.ogg:system/media/audio/ui/Undock.ogg \
+	$(LOCAL_PATH)/effects/ogg/Lock.ogg:system/media/audio/ui/Lock.ogg \
+	$(LOCAL_PATH)/effects/ogg/Unlock.ogg:system/media/audio/ui/Unlock.ogg \
+	$(LOCAL_PATH)/notifications/ogg/Antimony.ogg:system/media/audio/notifications/Antimony.ogg \
+	$(LOCAL_PATH)/notifications/ogg/Argon.ogg:system/media/audio/notifications/Argon.ogg \
+	$(LOCAL_PATH)/notifications/ogg/Beryllium.ogg:system/media/audio/notifications/Beryllium.ogg \
+	$(LOCAL_PATH)/notifications/ogg/Cobalt.ogg:system/media/audio/notifications/Cobalt.ogg \
+	$(LOCAL_PATH)/notifications/ogg/Fluorine.ogg:system/media/audio/notifications/Fluorine.ogg \
+	$(LOCAL_PATH)/notifications/ogg/Gallium.ogg:system/media/audio/notifications/Gallium.ogg \
+	$(LOCAL_PATH)/notifications/ogg/Helium.ogg:system/media/audio/notifications/Helium.ogg \
+	$(LOCAL_PATH)/notifications/ogg/Iridium.ogg:system/media/audio/notifications/Iridium.ogg \
+	$(LOCAL_PATH)/notifications/ogg/Krypton.ogg:system/media/audio/notifications/Krypton.ogg \
+	$(LOCAL_PATH)/notifications/ogg/Palladium.ogg:system/media/audio/notifications/Palladium.ogg \
+	$(LOCAL_PATH)/notifications/ogg/Radon.ogg:system/media/audio/notifications/Radon.ogg \
+	$(LOCAL_PATH)/notifications/ogg/Rubidium.ogg:system/media/audio/notifications/Rubidium.ogg \
+	$(LOCAL_PATH)/notifications/ogg/Selenium.ogg:system/media/audio/notifications/Selenium.ogg \
+	$(LOCAL_PATH)/notifications/ogg/Strontium.ogg:system/media/audio/notifications/Strontium.ogg \
+	$(LOCAL_PATH)/notifications/ogg/Thallium.ogg:system/media/audio/notifications/Thallium.ogg \
+	$(LOCAL_PATH)/notifications/ogg/Xenon.ogg:system/media/audio/notifications/Xenon.ogg \
+	$(LOCAL_PATH)/notifications/ogg/Zirconium.ogg:system/media/audio/notifications/Zirconium.ogg \
 	$(LOCAL_PATH)/ringtones/ANDROMEDA.ogg:system/media/audio/ringtones/ANDROMEDA.ogg \
 	$(LOCAL_PATH)/ringtones/Aquila.ogg:system/media/audio/ringtones/Aquila.ogg \
 	$(LOCAL_PATH)/ringtones/ArgoNavis.ogg:system/media/audio/ringtones/ArgoNavis.ogg \
@@ -61,25 +65,4 @@
 	$(LOCAL_PATH)/ringtones/Solarium.ogg:system/media/audio/ringtones/Solarium.ogg \
 	$(LOCAL_PATH)/ringtones/Testudo.ogg:system/media/audio/ringtones/Testudo.ogg \
 	$(LOCAL_PATH)/ringtones/URSAMINOR.ogg:system/media/audio/ringtones/URSAMINOR.ogg \
-	$(LOCAL_PATH)/ringtones/Vespa.ogg:system/media/audio/ringtones/Vespa.ogg \
-	$(LOCAL_PATH)/ringtones/ringtone18.ogg:system/media/audio/ringtones/ringtone18.ogg \
-	$(LOCAL_PATH)/ringtones/ringtone19.ogg:system/media/audio/ringtones/ringtone19.ogg \
-	$(LOCAL_PATH)/ringtones/ringtone20.ogg:system/media/audio/ringtones/ringtone20.ogg \
-	$(LOCAL_PATH)/ringtones/ringtone21.ogg:system/media/audio/ringtones/ringtone21.ogg \
-	$(LOCAL_PATH)/ringtones/ringtone22.ogg:system/media/audio/ringtones/ringtone22.ogg \
-	$(LOCAL_PATH)/ringtones/ringtone23.ogg:system/media/audio/ringtones/ringtone23.ogg \
-	$(LOCAL_PATH)/ringtones/ringtone24.ogg:system/media/audio/ringtones/ringtone24.ogg \
-	$(LOCAL_PATH)/ringtones/ringtone25.ogg:system/media/audio/ringtones/ringtone25.ogg \
-	$(LOCAL_PATH)/ringtones/ringtone26.ogg:system/media/audio/ringtones/ringtone26.ogg \
-	$(LOCAL_PATH)/ringtones/ringtone27.ogg:system/media/audio/ringtones/ringtone27.ogg \
-	$(LOCAL_PATH)/ringtones/ringtone28.ogg:system/media/audio/ringtones/ringtone28.ogg \
-	$(LOCAL_PATH)/ringtones/ringtone29.ogg:system/media/audio/ringtones/ringtone29.ogg \
-	$(LOCAL_PATH)/ringtones/ringtone30.ogg:system/media/audio/ringtones/ringtone30.ogg \
-	$(LOCAL_PATH)/ringtones/ringtone31.ogg:system/media/audio/ringtones/ringtone31.ogg \
-	$(LOCAL_PATH)/ringtones/ringtone32.ogg:system/media/audio/ringtones/ringtone32.ogg \
-	$(LOCAL_PATH)/ringtones/ringtone33.ogg:system/media/audio/ringtones/ringtone33.ogg \
-	$(LOCAL_PATH)/ringtones/ringtone34.ogg:system/media/audio/ringtones/ringtone34.ogg \
-	$(LOCAL_PATH)/ringtones/ringtone35.ogg:system/media/audio/ringtones/ringtone35.ogg \
-	$(LOCAL_PATH)/ringtones/ringtone36.ogg:system/media/audio/ringtones/ringtone36.ogg \
-	$(LOCAL_PATH)/ringtones/ringtone37.ogg:system/media/audio/ringtones/ringtone37.ogg \
-	$(LOCAL_PATH)/ringtones/ringtone38.ogg:system/media/audio/ringtones/ringtone38.ogg
+	$(LOCAL_PATH)/ringtones/Vespa.ogg:system/media/audio/ringtones/Vespa.ogg
diff --git a/data/sounds/alarms/ogg/Analysis.ogg b/data/sounds/alarms/ogg/Analysis.ogg
new file mode 100644
index 0000000..cef9bd8
--- /dev/null
+++ b/data/sounds/alarms/ogg/Analysis.ogg
Binary files differ
diff --git a/data/sounds/alarms/ogg/Departure.ogg b/data/sounds/alarms/ogg/Departure.ogg
new file mode 100644
index 0000000..fe83899
--- /dev/null
+++ b/data/sounds/alarms/ogg/Departure.ogg
Binary files differ
diff --git a/data/sounds/alarms/ogg/FireDrill.ogg b/data/sounds/alarms/ogg/FireDrill.ogg
new file mode 100644
index 0000000..038353c
--- /dev/null
+++ b/data/sounds/alarms/ogg/FireDrill.ogg
Binary files differ
diff --git a/data/sounds/alarms/ogg/Timing.ogg b/data/sounds/alarms/ogg/Timing.ogg
new file mode 100644
index 0000000..45a213b
--- /dev/null
+++ b/data/sounds/alarms/ogg/Timing.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/Dock.ogg b/data/sounds/effects/ogg/Dock.ogg
new file mode 100644
index 0000000..1462813d
--- /dev/null
+++ b/data/sounds/effects/ogg/Dock.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/Effect_Tick.ogg b/data/sounds/effects/ogg/Effect_Tick.ogg
new file mode 100644
index 0000000..27fe79f
--- /dev/null
+++ b/data/sounds/effects/ogg/Effect_Tick.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/KeypressDelete.ogg b/data/sounds/effects/ogg/KeypressDelete.ogg
new file mode 100644
index 0000000..5cc7f3c
--- /dev/null
+++ b/data/sounds/effects/ogg/KeypressDelete.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/KeypressReturn.ogg b/data/sounds/effects/ogg/KeypressReturn.ogg
new file mode 100644
index 0000000..260cbf5
--- /dev/null
+++ b/data/sounds/effects/ogg/KeypressReturn.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/KeypressSpacebar.ogg b/data/sounds/effects/ogg/KeypressSpacebar.ogg
new file mode 100644
index 0000000..6229330
--- /dev/null
+++ b/data/sounds/effects/ogg/KeypressSpacebar.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/KeypressStandard.ogg b/data/sounds/effects/ogg/KeypressStandard.ogg
new file mode 100644
index 0000000..947b169
--- /dev/null
+++ b/data/sounds/effects/ogg/KeypressStandard.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/Lock.ogg b/data/sounds/effects/ogg/Lock.ogg
new file mode 100644
index 0000000..cf70d01
--- /dev/null
+++ b/data/sounds/effects/ogg/Lock.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/LowBattery.ogg b/data/sounds/effects/ogg/LowBattery.ogg
new file mode 100644
index 0000000..f1cf1996
--- /dev/null
+++ b/data/sounds/effects/ogg/LowBattery.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/Undock.ogg b/data/sounds/effects/ogg/Undock.ogg
new file mode 100644
index 0000000..0053066
--- /dev/null
+++ b/data/sounds/effects/ogg/Undock.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/Unlock.ogg b/data/sounds/effects/ogg/Unlock.ogg
new file mode 100644
index 0000000..3639dba
--- /dev/null
+++ b/data/sounds/effects/ogg/Unlock.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/VideoRecord.ogg b/data/sounds/effects/ogg/VideoRecord.ogg
new file mode 100644
index 0000000..a6f3d34
--- /dev/null
+++ b/data/sounds/effects/ogg/VideoRecord.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/camera_click.ogg b/data/sounds/effects/ogg/camera_click.ogg
new file mode 100644
index 0000000..1b0ee9e
--- /dev/null
+++ b/data/sounds/effects/ogg/camera_click.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Antimony.ogg b/data/sounds/notifications/ogg/Antimony.ogg
new file mode 100755
index 0000000..6f83fe4
--- /dev/null
+++ b/data/sounds/notifications/ogg/Antimony.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Argon.ogg b/data/sounds/notifications/ogg/Argon.ogg
new file mode 100755
index 0000000..f160562
--- /dev/null
+++ b/data/sounds/notifications/ogg/Argon.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Beryllium.ogg b/data/sounds/notifications/ogg/Beryllium.ogg
new file mode 100755
index 0000000..5f7bd3c
--- /dev/null
+++ b/data/sounds/notifications/ogg/Beryllium.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Cobalt.ogg b/data/sounds/notifications/ogg/Cobalt.ogg
new file mode 100755
index 0000000..a9adeb8
--- /dev/null
+++ b/data/sounds/notifications/ogg/Cobalt.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Fluorine.ogg b/data/sounds/notifications/ogg/Fluorine.ogg
new file mode 100755
index 0000000..6340cf3
--- /dev/null
+++ b/data/sounds/notifications/ogg/Fluorine.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Gallium.ogg b/data/sounds/notifications/ogg/Gallium.ogg
new file mode 100755
index 0000000..61dd85c
--- /dev/null
+++ b/data/sounds/notifications/ogg/Gallium.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Helium.ogg b/data/sounds/notifications/ogg/Helium.ogg
new file mode 100755
index 0000000..33b4702
--- /dev/null
+++ b/data/sounds/notifications/ogg/Helium.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Iridium.ogg b/data/sounds/notifications/ogg/Iridium.ogg
new file mode 100755
index 0000000..fabda89
--- /dev/null
+++ b/data/sounds/notifications/ogg/Iridium.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Krypton.ogg b/data/sounds/notifications/ogg/Krypton.ogg
new file mode 100755
index 0000000..44f9175
--- /dev/null
+++ b/data/sounds/notifications/ogg/Krypton.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Palladium.ogg b/data/sounds/notifications/ogg/Palladium.ogg
new file mode 100755
index 0000000..2fd2b76
--- /dev/null
+++ b/data/sounds/notifications/ogg/Palladium.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Radon.ogg b/data/sounds/notifications/ogg/Radon.ogg
new file mode 100755
index 0000000..246403d
--- /dev/null
+++ b/data/sounds/notifications/ogg/Radon.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Rubidium.ogg b/data/sounds/notifications/ogg/Rubidium.ogg
new file mode 100755
index 0000000..18f8d7d
--- /dev/null
+++ b/data/sounds/notifications/ogg/Rubidium.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Selenium.ogg b/data/sounds/notifications/ogg/Selenium.ogg
new file mode 100755
index 0000000..7918ba8
--- /dev/null
+++ b/data/sounds/notifications/ogg/Selenium.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Strontium.ogg b/data/sounds/notifications/ogg/Strontium.ogg
new file mode 100755
index 0000000..daf4826
--- /dev/null
+++ b/data/sounds/notifications/ogg/Strontium.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Thallium.ogg b/data/sounds/notifications/ogg/Thallium.ogg
new file mode 100755
index 0000000..721915c
--- /dev/null
+++ b/data/sounds/notifications/ogg/Thallium.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Xenon.ogg b/data/sounds/notifications/ogg/Xenon.ogg
new file mode 100755
index 0000000..22fae9f
--- /dev/null
+++ b/data/sounds/notifications/ogg/Xenon.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Zirconium.ogg b/data/sounds/notifications/ogg/Zirconium.ogg
new file mode 100755
index 0000000..afbd8d7
--- /dev/null
+++ b/data/sounds/notifications/ogg/Zirconium.ogg
Binary files differ
diff --git a/docs/html/sdk/android-3.0-highlights.jd b/docs/html/sdk/android-3.0-highlights.jd
new file mode 100644
index 0000000..ed49307
--- /dev/null
+++ b/docs/html/sdk/android-3.0-highlights.jd
@@ -0,0 +1,266 @@
+page.title=Android 3.0 Platform Highlights
+
+@jd:body
+
+
+<style type="text/css">
+#jd-content {
+  max-width:1200px;
+}
+#jd-content div.screenshot {
+  float:left;
+  clear:left;
+  padding:15px 30px 15px 0;
+}
+#jd-content div.video {
+  float:right;
+  padding:0 60px 40px;
+  margin-top:-15px;
+}
+#jd-content table.columns {
+  margin:0 0 1em 0;
+}
+#jd-content table.columns td {
+  padding:0;
+}
+#jd-content table.columns td+td {
+  padding:0 2em;
+}
+#jd-content table.columns td img {
+  margin:0;
+}
+#jd-content table.columns td+td>*:first-child {
+  margin-top:-2em;
+}
+.green {
+  color:#8db529;
+  font-weight:bold;
+}
+</style>
+
+
+
+
+
+
+<p>Welcome to Android 3.0!</p>
+
+<p>The Android 3.0 platform introduces many new and exciting features for users and developers. 
+This document provides a glimpse of some of the new features and technologies, as delivered in the Android 3.0 Preview SDK. For more information about the SDK or how to download it, please see the <a href="{@docRoot}sdk/preview/index.html">Preview SDK</a> document.</p>
+
+<ul>
+  <li><a href="#UserFeatures">New User Features</a></li>
+  <li><a href="#DeveloperApis">New Developer Features</a></li>
+</ul>
+
+<h2 id="UserFeatures" style="clear:right">New User Features</h2>
+
+<div  style="padding-top:0em;">
+<div style="margin-right:1em;margin-left:1em;float:right;padding-top:2em;"><a href="images/3.0/home_hero1_full.png" target="_android"><img src="images/3.0/home_hero1.png" alt="" height="280" /></a></div>
+
+<h3>New UI designed from the ground up for tablets</h3>
+
+<p>Android 3.0 is a new version of the Android platform that is specifically optimized for devices with larger screen sizes, particularly tablets. It introduces a brand new, truly virtual and “holographic” UI design, as well as an elegant, content-focused interaction model.</p>
+
+<p>Android 3.0 builds on the things people love most about Android &mdash; refined multitasking, rich notifications, Home screen customization, widgets, and more &mdash; and transforms them with a vibrant, 3D experience and deeper interactivity, making them familiar but even better than before.</p> 
+
+<p>The new UI brings fresh paradigms for interaction, navigation, and customization and makes them available to all applications &mdash; even those built for earlier versions of the platform. Applications written for Android 3.0 are able to use an extended set of UI objects, powerful graphics, and media capabilities to engage users in new ways.</p>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>System Bar, for global status and notifications</strong></p>
+
+<p>Across the system and in all applications, users have quick access to notifications, system status, and soft navigation buttons in a System Bar, available at the bottom of the screen. The System Bar is always present and is a key touchpoint for users, but in a new "lights out mode" can also be dimmed for full-screen viewing, such as for videos.</p>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Action Bar, for application control</strong></p>
+
+<p>In every application, users have access to contextual options, navigation, widgets, or other types of content in an Action Bar, displayed at the top of the screen. The Action Bar is always present when an application is in use, although its content, theme, and other properties are managed by the application rather than the system. The Action Bar is another key touchpoint for users, especially with action items and an overflow dropdown menu, which users frequently access in a similar manner in most applications. </p>
+
+</div>
+
+<div  style="padding-top:0em;">
+<div style="margin-right:1em;float:right;margin-left:1em;"><a href="images/3.0/homescreen_cust_port_full.png" target="_android"><img src="images/3.0/homescreen_cust_port.png" alt="" height="280" /></a></div>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Customizable Home screens</strong></p>
+
+<p>Five customizable Home screens give users instant access to all parts of the system from any context. Each screen offers a large grid that maintains spatial arrangement in all orientations. Users can select and manipulate Home screen widgets, app shortcuts, and wallpapers using a dedicated visual layout mode. Visual cues and drop shadows improve visibility when adjusting the layout of shortcuts and widgets. Each Home screen also offers a familiar launcher for access to all installed applications, as well as a Search box for universal search of apps, contacts, media files, web content, and more.</p>
+
+</div>
+
+<div  style="padding-top:0em;">
+<div style="margin-right:1.5em;float:left;"><a href="images/3.0/tasks_full.png" target="_android"><img src="images/3.0/tasks.png" alt="" height="280" /></a>
+
+<!--<p style="font-size:90%">Figure</p> --></div>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Recent Apps, for easy visual multitasking</strong></p>
+
+<p>Multitasking is a key strength of Android and it is central to the Android 3.0 experience. As users launch applications to handle various tasks, they can use the Recent Apps list in the System Bar to see the tasks underway and quickly jump from one application context to another. To help users rapidly identify the task associated with each app, the list shows a snapshot of its actual state when the user last viewed it.</p>
+
+</div>
+
+
+<h3>Redesigned keyboard</h3>
+
+<p>The Android soft keyboard is redesigned to make entering text fast and accurate on larger screen sizes. The keys are reshaped and repositioned for improved targeting, and new keys have been added, such as a Tab key, to provide richer and more efficient text input. Users can touch-hold keys to access menus of special characters and switch text/voice input modes from a button in the System Bar.</p>
+
+<div  style="padding-top:1em;">
+<div style="margin-right:1em;float:right;"><a href="images/3.0/copy_full.png" target="_android"><img src="images/3.0/copy.png" alt="" height="180" /></a></div>
+
+
+<h3>Improved text selection, copy and paste</h3>
+
+<p>When entering or viewing text, a new UI lets users quickly select a word by press-hold and then adjust the selection area as needed by dragging a set of bounding arrows to new positions. Users can then select an action from the Action Bar, such as copy to the clipboard, share, paste, web search, or find. </p>
+
+
+<h3>New connectivity options</h3>
+
+<p>Android 3.0 includes new connectivity features that add versatility and convenience for users. Built-in support for Media/Photo Transfer Protocol lets users instantly sync media files with a USB-connected camera or desktop computer, without needing to mount a USB mass-storage device. Users can also connect full keyboards over either USB or Bluetooth, for a familiar text-input environment. For improved wi-fi connectivity, a new combo scan reduces scan times across bands and filters. New support for Bluetooth tethering means that more types of devices can share the network connection of an Android-powered device.</p>
+
+
+<h3>Updated set of standard apps</h3>
+
+<div  style="padding-top:0em;">
+<div style="margin-right:1em;float:right;;padding-top:0em;margin-left:1em;"><a href="images/3.0/browser_full.png" target="_android"><img src="images/3.0/browser.png" alt="" height="200" /></a><br>
+<a href="images/3.0/camera_full.png" target="_android"><img src="images/3.0/camera_full.png" alt="" height="200" /></a></div>
+
+<p>The Android 3.0 platform includes an updated set of standard applications that are designed for use on larger screen devices. The sections below highlight some of the new features. </p>
+
+<strong>Browser</strong></p>
+
+<p>The browser includes new features that let users navigate and organize more efficiently. Multiple tabs replace browser windows and a new “incognito” mode allows anonymous browsing. Bookmarks and history are presented and managed in a single unified view. Users can now choose to automatically sign into Google sites on the browser with a supplied account and sync bookmarks with Google Chrome. New multitouch support is now available to JavaScript and plugins. Users can enjoy a better browsing experience at non-mobile sites through an improved zoom and viewport model, overflow scrolling, support for fixed positioning, and more.</p>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Camera and Gallery</strong></p>
+
+<p>The Camera application has been redesigned to take advantage of a larger screen for quick access to exposure, focus, flash, zoom, front-facing camera, and more. To let users capture scenes in new ways, it adds built-in support for time-lapse video recording.  Gallery application lets users view albums and other collections in full-screen mode, with easy access to thumbnails for other photos in the collection. </p>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Contacts</strong></p>
+
+<p>The Contacts app uses a new two-pane UI and Fast Scroll to let users easily organize and locate contacts. The application offers improved formatting of international phone numbers as user types, based on home country and an international  number parsing library. Contact information is presented in a card-like UI, making it easier for users to read and edit contacts.</p>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Email</strong></p>
+
+<p>The Email application uses a new two-pane UI to make viewing and organizing messages more efficient. The app lets users select one or more messages, then select an action from the Action Bar, such as moving them to a folder. Users can sync attachments for later viewing and keep track of email using a home screen Widget.</p>
+
+</div>
+
+
+<h2 id="DeveloperApis" style="clear:both">New Developer Features</h2>
+
+<p>The Android 3.0 platform is designed specially to meet the unique needs of applications on devices with larger screen sizes. It offers all of the tools developers need to create incredible visual and interaction experiences on these devices.</p>
+
+ <ul>
+<li><a href="#ui">New UI framework for creating great tablet apps</a></li>
+<li><a href="#graphics">High-performance 2D and 3D graphics</a></li>
+<li><a href="#multicore">Support for multicore processor architectures</a></li>
+<li><a href="#multimedia">Rich multimedia and connectivity</a></li>
+<li><a href="#enterprise">Enhancements for enterprise</a></li>
+<li><a href="#compatibility">Compatibility with existing apps</a></li>
+</ul>
+
+<h3 id="ui">New UI Framework for creating great tablet apps</h3>
+
+<div  style="padding-top:0em;">
+<div style="margin-right:1em;float:right;margin-left:1em;"><a href="images/3.0/contacts_full.png" target="_android"><img src="images/3.0/contacts.png" alt="" height="200" /></a></div>
+
+
+<p style="margin-top:.75em;margin-bottom:.75em;"><strong>Activity fragments, for greater control of content and design flexibility</strong></p>
+
+<p>Starting with Android 3.0, developers can break the Activities of their applications into subcomponents called Fragments, then combine them in a variety of ways to create a richer, more interactive experience. For example, an application can use a set of Fragments to create a true multipane UI, with the user being able to interact with each pane independently. Fragments can be added, removed, replaced, and animated inside an Activity dynamically, and they are modular and reusable across multiple Activities. Because they are modular, Fragments also offer an efficient way for developers to write applications that can run properly on both larger screen as well as smaller screen devices.</p>
+
+</div>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Redesigned UI widgets</strong></p>
+
+<p>Android 3.0 offers an updated set of UI widgets that developers can use to quickly add new types of content to their applications. The new UI widgets are redesigned for use on larger screens such as tablets and incorporate the new holographic UI theme. Several new widget types are available, including a 3D stack, search box, a date/time picker, number picker, calendar, popup menu, and others. Most of the redesigned UI widgets can now be used as remote views in application widgets displayed on the home screen. Applications written for earlier versions can inherit the new Widget designs and themes.</p>
+
+
+<div  style="padding-top:0em;">
+<div style="margin-right:1.5em;float:left;margin-left:0em;"><a href="images/3.0/widgets.png" target="_android"><img src="images/3.0/widgets.png" alt="" height="200"  target="_android" /></a></div>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Expanded Home screen widgets</strong></p>
+
+<p>Home screen widgets are popular with users because they offer fast access to application-specific data directly from the home screen. Android 3.0 lets developers take home screen widgets to the next level, offering more types of content and new modes of interaction with users. Developers can now use more standard UI widget types  home screen widgets, including widgets that let users flip through collections of content as 3D stacks, grids, or lists. Users can interact with the home screen widgets in new ways, such as by using touch gestures to scroll and flip the content displayed in a widget.  </p>
+
+</div>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Persistent Action Bar</strong></p>
+
+<p>The platform provides each application with its own instance of the Action Bar at the top of the screen, which the application can use to give the user quick access to contextual options, widgets, status, navigation, and more. The application can also customize the display theme of its Action Bar instance. The Action Bar lets developers expose more features of their applications to users in a familiar location, while also unifying the experience of using an application that spans multiple Activities or states.</p>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Richer notifications</strong></p>
+
+<p>Notifications are a key part of the Android user experience because they let applications show key updates and status information to users in real time. Android 3.0 extends this capability, letting developers include richer content and control more properties. A new builder class lets developers quickly create notifications that include large and small icons, a title, a priority flag, and any properties already available in previous versions. Notifications can offer more types of content by building on the expanded set of UI Widgets that are now available as remote Views.</p>
+
+<div  style="padding-top:0em;">
+<div style="margin-right:1em;float:right;margin-left:1em;"><a href="images/3.0/mail_drag_full.png" target="_android"><img src="images/3.0/mail_drag.png" alt="" height="200" style="padding-top:1em;"/></a></div>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Multiselect, clipboard, and drag-and-drop</strong></p>
+
+<p>The platform offers convenient new interaction modes that developers can use. For managing collections of items in lists or grids, developers can offer a new multiselect mode that lets users choose multiple items for an action. Developers can also use a new system-wide Clipboard to let users easily copy any type of data into and out of their applications. To make it easier for users to manage and organize files, developers can now add drag-and-drop interaction through a DragEvent framework.</p>
+
+</div>
+
+
+<h3 id="graphics">High-performance 2D and 3D graphics</h3>
+
+<p style="margin-top:.75em;margin-bottom:.75em;"><strong>New animation framework</strong></p>
+
+<p>The platform includes a flexible new animation framework that lets developers easily animate the properties of UI elements such as Views, Widgets, Fragments, Drawables, or any arbitrary object. Animations can create fades or movement between states, loop an animated image or an existing animation, change colors, and much more. Adding animation to UI elements can add visual interest to an application and refine the user experience, to keep users engaged.</p>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Hardware-accelerated 2D graphics</strong></p>
+
+<p>Android 3.0 offers a new hardware-accelerated OpenGL renderer that gives a performance boost to many common graphics operations for applications running in the Android framework. When the renderer is enabled, most operations in Canvas, Paint, Xfermode, ColorFilter, Shader, and Camera are accelerated. Developers can control how hardware-acceleration is applied at every level, from enabling it globally in an application to enabling it in specific Activities and Views inside the application.</p>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Renderscript 3D graphics engine</strong></p>
+
+<p>Renderscript is a runtime 3D framework that provides both an API for building 3D scenes as well as a special, platform-independent shader language for maximum performance. Using Renderscript, you can accelerate graphics operations and data processing. Renderscript is an ideal way to create high-performance 3D effects for applications, wallpapers, carousels, and more.</p>
+
+
+<h3 id="multicore">Support for multicore processor architectures</h3>
+
+<p>Android 3.0 is the first version of the platform designed to run on either single or multicore processor architectures. A variety of changes in the Dalvik VM, Bionic library, and elsewhere add support for symmetric multiprocessing in multicore environments. These optimizations can benefit all applications, even those that are single-threaded. For example, with two active cores, a single-threaded application might still see a performance boost if the Dalvik garbage collector runs on the second core. The system will arrange for this automatically.</p>
+
+
+<h3 id="multimedia">Rich multimedia and connectivity</h3>
+
+<p style="margin-top:.75em;margin-bottom:.75em;"><strong>HTTP Live streaming</strong></p>
+
+<p>Applications can now pass an M3U playlist URL to the media framework to begin an HTTP Live streaming session. The media framework supports most of the HTTP Live streaming specification, including adaptive bit rate.</p>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Pluggable DRM framework</strong></p>
+
+<p>Android 3.0 includes an extensible DRM framework that lets applications manage protected content according to a variety of DRM mechanisms that may be available on the device. For application developers, the framework API offers an consistent, unified API that simplifies the management of protected content, regardless of the underlying DRM engines. </p>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Digital media file transfer</strong></p>
+
+<p>The platform includes built-in support for Media/Picture Transfer Protocol (MTP/PTP) over USB, which lets users easily transfer any type of media files between devices and to a host computer. Developers can build on this support, creating applications that let users create or manage media files that they may want to transfer or share across devices. </p>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>More types of connectivity</strong></p>
+
+<p>The platform offers new connectivity that developers can build on. API support for Bluetooth A2DP and HSP profiles lets applications query Bluetooth profiles for connected devices, audio state, and more, then notify the user. For example, a music application can check connectivity and status and let the user know that music is playing through a stereo headset. Applications can also register to receive system broadcasts of pre-defined vendor-specific AT commands, such as Platronics Xevent. For example, an application could receive broadcasts that indicate a connected device's battery level and could notify the user or take other action as needed. Applications can also take advantage of the platform's new support for full keyboards connected by USB or Bluetooth. </p>
+
+
+<h3 id="enterprise">Enhancements for enterprise</h3>
+
+<p>In Android 3.0, developers of device administration applications can support new types of policies, including policies for encrypted storage, password expiration, password history, and password complex characters required. </p>
+
+<h3 id="compatibility">Compatibility with existing apps</h3>
+
+<p>Android 3.0 brings a new UI designed for tablets and other larger screen devices, but it also is fully compatible with applications developed for earlier versions of the platform, or for smaller screen sizes. Existing applications can seamlessly participate in the new holographic UI theme without code changes, by adding a single attribute in their manifest files. The platform emulates the Menu key, which is replaced by the overflow menu in the Action Bar in the new UI. Developers wanting to take fuller advantage of larger screen sizes can also create dedicated layouts and assets for larger screens and add them to their existing applications.</p>
+
+
+<h2>More information</h2>
+
+<div class="video">
+<object width="278" height="180">
+<param name="movie" value="http://www.youtube.com/v/hPUGNCIozp0?hl=en&fs=1"></param>
+<param name="allowFullScreen" value="true"></param><param name="allowscriptaccess"
+value="always"></param>
+<embed src="http://www.youtube.com/v/hPUGNCIozp0?hl=en&fs=1" type="application/x-shockwave-flash"
+allowscriptaccess="always" allowfullscreen="true" width="278" height="180"></embed>
+</object>
+</div>
+
+<p>For more information about the new developer APIs, see the Android 3.0 Platform notes in the SDK Preview documentation, available by download through the Android SDK Manager.</p>
+
+<p>For a video overview of platform features, see the Android 3.0 Sneak Peek. </p>
+
+
diff --git a/docs/html/sdk/eclipse-adt.jd b/docs/html/sdk/eclipse-adt.jd
index a83ca8e..0bb830c 100644
--- a/docs/html/sdk/eclipse-adt.jd
+++ b/docs/html/sdk/eclipse-adt.jd
@@ -1,9 +1,8 @@
 page.title=ADT Plugin for Eclipse
-sdk.preview=0
-adt.zip.version=8.0.1
-adt.zip.download=ADT-8.0.1.zip
-adt.zip.bytes=8724909
-adt.zip.checksum=0e62185279083ddc01f18098ce7ba2d1
+adt.zip.version=9.0.0
+adt.zip.download=ADT_9.0.0.zip
+adt.zip.bytes=4433536
+adt.zip.checksum=bc2757f2a5a11d131390ce547bae154b
 
 @jd:body
 
diff --git a/docs/html/sdk/images/3.0/browser.png b/docs/html/sdk/images/3.0/browser.png
new file mode 100644
index 0000000..5d3ba31
--- /dev/null
+++ b/docs/html/sdk/images/3.0/browser.png
Binary files differ
diff --git a/docs/html/sdk/images/3.0/browser_full.png b/docs/html/sdk/images/3.0/browser_full.png
new file mode 100644
index 0000000..495a23d
--- /dev/null
+++ b/docs/html/sdk/images/3.0/browser_full.png
Binary files differ
diff --git a/docs/html/sdk/images/3.0/camera.png b/docs/html/sdk/images/3.0/camera.png
new file mode 100644
index 0000000..a549182
--- /dev/null
+++ b/docs/html/sdk/images/3.0/camera.png
Binary files differ
diff --git a/docs/html/sdk/images/3.0/camera_full.png b/docs/html/sdk/images/3.0/camera_full.png
new file mode 100644
index 0000000..a549182
--- /dev/null
+++ b/docs/html/sdk/images/3.0/camera_full.png
Binary files differ
diff --git a/docs/html/sdk/images/3.0/contacts.png b/docs/html/sdk/images/3.0/contacts.png
new file mode 100644
index 0000000..0dcd164
--- /dev/null
+++ b/docs/html/sdk/images/3.0/contacts.png
Binary files differ
diff --git a/docs/html/sdk/images/3.0/contacts_full.png b/docs/html/sdk/images/3.0/contacts_full.png
new file mode 100644
index 0000000..829ad11
--- /dev/null
+++ b/docs/html/sdk/images/3.0/contacts_full.png
Binary files differ
diff --git a/docs/html/sdk/images/3.0/copy.png b/docs/html/sdk/images/3.0/copy.png
new file mode 100644
index 0000000..363aa8e
--- /dev/null
+++ b/docs/html/sdk/images/3.0/copy.png
Binary files differ
diff --git a/docs/html/sdk/images/3.0/copy_full.png b/docs/html/sdk/images/3.0/copy_full.png
new file mode 100644
index 0000000..a8db8a2
--- /dev/null
+++ b/docs/html/sdk/images/3.0/copy_full.png
Binary files differ
diff --git a/docs/html/sdk/images/3.0/home_hero1.png b/docs/html/sdk/images/3.0/home_hero1.png
new file mode 100644
index 0000000..c81e7ef
--- /dev/null
+++ b/docs/html/sdk/images/3.0/home_hero1.png
Binary files differ
diff --git a/docs/html/sdk/images/3.0/home_hero1_full.png b/docs/html/sdk/images/3.0/home_hero1_full.png
new file mode 100644
index 0000000..e280b81
--- /dev/null
+++ b/docs/html/sdk/images/3.0/home_hero1_full.png
Binary files differ
diff --git a/docs/html/sdk/images/3.0/homescreen_cust_port.png b/docs/html/sdk/images/3.0/homescreen_cust_port.png
new file mode 100644
index 0000000..ef7f5ab
--- /dev/null
+++ b/docs/html/sdk/images/3.0/homescreen_cust_port.png
Binary files differ
diff --git a/docs/html/sdk/images/3.0/homescreen_cust_port_full.png b/docs/html/sdk/images/3.0/homescreen_cust_port_full.png
new file mode 100644
index 0000000..22433a3e
--- /dev/null
+++ b/docs/html/sdk/images/3.0/homescreen_cust_port_full.png
Binary files differ
diff --git a/docs/html/sdk/images/3.0/mail_drag.png b/docs/html/sdk/images/3.0/mail_drag.png
new file mode 100644
index 0000000..6084caa
--- /dev/null
+++ b/docs/html/sdk/images/3.0/mail_drag.png
Binary files differ
diff --git a/docs/html/sdk/images/3.0/mail_drag_full.png b/docs/html/sdk/images/3.0/mail_drag_full.png
new file mode 100644
index 0000000..f99c612
--- /dev/null
+++ b/docs/html/sdk/images/3.0/mail_drag_full.png
Binary files differ
diff --git a/docs/html/sdk/images/3.0/tasks.png b/docs/html/sdk/images/3.0/tasks.png
new file mode 100644
index 0000000..9e82dcb
--- /dev/null
+++ b/docs/html/sdk/images/3.0/tasks.png
Binary files differ
diff --git a/docs/html/sdk/images/3.0/tasks_full.png b/docs/html/sdk/images/3.0/tasks_full.png
new file mode 100644
index 0000000..d2a2241
--- /dev/null
+++ b/docs/html/sdk/images/3.0/tasks_full.png
Binary files differ
diff --git a/docs/html/sdk/images/3.0/widgets.png b/docs/html/sdk/images/3.0/widgets.png
new file mode 100644
index 0000000..d847666
--- /dev/null
+++ b/docs/html/sdk/images/3.0/widgets.png
Binary files differ
diff --git a/docs/html/sdk/index.jd b/docs/html/sdk/index.jd
index 4113463..499b31f 100644
--- a/docs/html/sdk/index.jd
+++ b/docs/html/sdk/index.jd
@@ -1,21 +1,21 @@
 page.title=Android SDK
 sdk.redirect=0
 
-sdk.win_installer=installer_r08-windows.exe
-sdk.win_installer_bytes=32746192
-sdk.win_installer_checksum=04ce87b10a8361a1f63cf2238bbc1ee3
+sdk.win_installer=installer_r09-windows.exe
+sdk.win_installer_bytes=32828818
+sdk.win_installer_checksum=a0185701ac0d635a4fbf8169ac949a3c5b3d31e0 
 
-sdk.win_download=android-sdk_r08-windows.zip
-sdk.win_bytes=32696391
-sdk.win_checksum=3e0b08ade5bfa9624bce9ddc164a48cb
+sdk.win_download=android-sdk_r09-windows.zip
+sdk.win_bytes=32779808
+sdk.win_checksum=1a1bb8fad80bcc2dfbd00443b9a13e6b
 
-sdk.mac_download=android-sdk_r08-mac_86.zip
-sdk.mac_bytes=28797617
-sdk.mac_checksum=d2e392c4e4680cbf2dfd6dbf82b662c7
+sdk.mac_download=android-sdk_r09-mac_x86.zip
+sdk.mac_bytes=28829553
+sdk.mac_checksum=ef3102fdbbbbd9bf4d9b572624aa9dc1
 
-sdk.linux_download=android-sdk_r08-linux_86.tgz
-sdk.linux_bytes=26817291
-sdk.linux_checksum=3b626645b223d137d27beefbda0c94bc
+sdk.linux_download=android-sdk_r09-linux_x86.tgz
+sdk.linux_bytes=26917824
+sdk.linux_checksum=9fefac5ff85d329836439f6e77a78cae
 
 @jd:body
 
diff --git a/docs/html/sdk/installing.jd b/docs/html/sdk/installing.jd
index e8d97e7..53d5515 100644
--- a/docs/html/sdk/installing.jd
+++ b/docs/html/sdk/installing.jd
@@ -1,5 +1,4 @@
 page.title=Installing the SDK
-sdk.preview=0
 
 @jd:body
 
diff --git a/docs/html/sdk/preview/index.jd b/docs/html/sdk/preview/index.jd
index 81b4ff6..edfa02b 100644
--- a/docs/html/sdk/preview/index.jd
+++ b/docs/html/sdk/preview/index.jd
@@ -1,4 +1,183 @@
-sdk.redirect=true
-
+page.title=Android 3.0 Preview SDK
 @jd:body
 
+<p>Android 3.0 is the next major release of the Android platform and is optimized for tablet
+devices. We're offering a Preview SDK so you can get a head-start developing
+applications for it or simply optimize your existing application for upcoming
+tablets.</p>
+
+
+<h3>What is the Preview SDK?</h3>
+
+<p>The Android 3.0 Preview SDK is an early look at the upcoming version of Android 3.0, for
+developers only. </p>
+
+<p>The Preview SDK includes:</p>
+<ul>
+  <li>An early Android 3.0 system image for use in the Android emulator</li>
+  <li>An Android 3.0 library with non-final APIs</li>
+  <li>A new WXGA emulator skin for an extra large Android Virtual Device</li>
+  <li>New documentation for Android 3.0, including a complete API reference, new developer guides,
+and an API differences report between Android 3.0 and 2.3.</li>
+</ul>
+
+<div class="note">
+<p><strong>Be aware that:</strong></p>
+<ul>
+  <li>The APIs in the Preview SDK are <strong>not final</strong>. Some APIs may change in behavior
+or availability when the final SDK is made available.</li>
+  <li>You <strong>cannot</strong> publish an application that's built against the Preview
+SDK&mdash;you can only run an application built against the Preview SDK on the Android
+emulator.</li>
+  <li>The documentation on <a href="http://developer.android.com">developer.android.com</a>
+does <strong>not</strong> include the Android 3.0 documentation&mdash;to read the API reference and
+developer guides for Android 3.0, you must install the Android 3.0 Preview documentation from
+the AVD and SDK Manager.</li>
+</ul>
+</div>
+
+
+<p><b>About emulator performance</b></p>
+
+<p>Because the Android emulator must simulate the ARM instruction set architecture on your
+computer and the WXGA screen is significantly larger than what the emulator
+normally handles, emulator performance is much slower than usual. </p>
+
+<p>In particular, initializing the emulator can be slow and can take several
+minutes, depending on your hardware. When the emulator is booting there is
+limited user feedback, so please be patient and continue waiting until you see
+the home screen appear. </p>
+
+<p>We're working hard to resolve the performance issues in the emulator and it will improve in
+future releases. In the meantime, we wanted to give developers access to new APIs and an basic test
+environment as early as possible. </p>
+
+<p>Keeping in mind that performance on the emulator does not reflect the speed or performance of
+apps on actual devices running Android 3.0, developing and testing on the emulator is still an
+important tool in evaluating your application's appearance and functionality on the new platform. 
+</p>
+
+
+
+
+
+<h3>What can I do with the preview?</h3>
+
+<p>The Preview SDK is intended for testing existing applications on the new platform and
+developing new applications with new Android 3.0 APIs.</p>
+
+<p>If you have an existing Android application, you don't <em>have to</em> do anything. Android
+applications are always forward-compatible. If your application is a good citizen of the Android
+APIs, your app should work fine on devices running Android 3.0 without any additional work. However,
+in order to ensure proper performance and provide users a better experience when running your
+application on an Android 3.0 tablet, we recommend that you perform the following:</p>
+
+<ol>
+  <li><b>Test your application on Android 3.0</b>
+    <p>Simply install the Android 3.0 preview in your Android SDK, create an AVD using the
+Android 3.0 system image, install your application, and run some tests.</p>
+    <p>As mentioned above, your application should perform as expected. You might, however,
+discover that your activity layouts are less than ideal on a large screen or some other aspects
+of your application don't behave the way you expect.</p>
+  </li>
+  <li><b>Inherit the new "Holographic" theme</b>
+    <p>Android 3.0 offers an updated set of UI widgets that are redesigned for use on larger screens
+such as tablets and incorporate the new holographic theme. Your existing application can inherit
+the new design simply by setting the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code &lt;uses-sdk&gt;}</a>
+element's {@code android:targetSdkVersion} attribute to {@code "Honeycomb"}.</p>
+    <p>If you do not update the {@code android:targetSdkVersion} attribute and the {@code
+android:minSdkVersion} is set to "9" or lower, then your application uses the widget designs
+from Android 2.3 and does <em>not</em> inherit the holographic theme.</p>
+    <p>In order for your application to match the rest of the system UI, we highly recommend you
+make this change to inherit the new widget styles and system theme. However, beware that doing so
+might conflict with color or text designs you applied to your application based on the previous
+system theme, so you should be sure to inspect your application UI when using the holographic
+theme.</p>
+  </li>
+  <li><b>Provide alternative layouts for extra large screens</b>
+    <p>As discussed in the guide to <a
+href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>, Android
+2.3 and above support the <code>xlarge</code> resource qualifier, which you should use to supply
+alternative layouts for extra large screens.</p>
+    <p>By providing alternative layouts for some of your activities when running on extra large
+screens, you can improve the user experience of your application on a tablet without using any
+new APIs.</p>
+    <p>For example, here are some things to consider when creating a new layout for tables:</p>
+    <ul>
+      <li>Landscape layout: The "normal" orientation for tablets is usually landscape (wide), so
+you should be sure that your activities offer an appropriate layout for such a wide viewing
+area.</li>
+      <li>Button position: Consider whether the position of the most common buttons in your UI are
+easily accessible while holding a tablet with two hands.</li>
+    </ul>
+    <p class="note"><strong>Note:</strong> You can add alternative resources for <em>xlarge</em>
+screens without changing your {@code minSdkVersion}. For example, if you add alternative layouts in
+<code>res/layout-xlarge/</code> and your application is compatible with older versions, such
+as Android 1.5&mdash;which doesn't support <em>xlarge</em> screens&mdash;this layout directory is
+simply ignored by those devices.</p>
+  </li>
+</ol>
+
+
+<p>Otherwise, if you want to develop a new application or upgrade your existing application to
+use APIs added in Android 3.0, we encourage you to get started by developing against the Android
+3.0 preview platform. You can get started the same way as you would for any other version of
+Android.</p>
+
+
+<p>To get started&mdash;whether testing an existing application or creating a new one&mdash;follow
+the procedure in the following section to install the Preview SDK.</p>
+
+
+
+<h3 id="Setup">How do I get it?</h3>
+
+<p>To get the Preview SDK, you can download it using the Android SDK and AVD Manager.</p>
+
+<p>If you're new to Android development, start by <a href="{@docRoot}sdk/index.html">downloading the
+Android SDK starter package</a>.</p>
+
+<p><a href="{@docRoot}sdk/adding-components.html#launching">Launch the Android SDK and AVD
+Manager</a> and install the following:</p>
+<ul>
+  <li>SDK Platform Android Honeycomb Preview</li>
+  <li>Android SDK Tools, revision 9</li>
+  <li>Android SDK Platform-tools, revision 2</li>
+  <li>Documentation for Android 'Honeycomb' Preview</li>
+  <li>Samples for SDK API Honeycomb Preview</li>
+</ul>
+
+<p class="note"><strong>Note:</strong> Be sure to install the documentation component for the
+Honeycomb Preview SDK. The API reference for the Android 3.0 API is <strong>not</strong> available
+online.</p>
+
+<p>Once you have installed these components, open your SDK directory and navigate to {@code
+docs/sdk/} and open {@code index.html} in your browser. </p>
+
+
+
+<h3 id="Issues">Known issues</h3>
+
+<p>The following known issues occur for Android 3.0 AVDs that are loaded in the emulator:</p>
+
+<ul>
+  <li>The emulator displays a rotated portrait screen while in landscape
+orientation. To view the screen correctly in landscape orientation, turn off the auto-rotate setting
+in <strong>Settings > Screen > Auto-rotate screen</strong>. Then use Ctrl-F11 to rotate the
+emulator.</li>
+  <li>You cannot take screenshots of an emulator screen. The Device Screen Capture window displays
+<strong>Screen not available</strong>.</li>
+  <li>GPS emulation is currently not supported.</li>
+  <li>When rotating the emulator screen by pressing Ctrl-F11, the screen turns green momentarily,
+then displays the normal interface.</li>
+  <li>The Dev Tools application sometimes crashes when trying to use the Package Browser
+feature.</li>
+</ul>
+
+
+<div class="special">
+ <p>For an overview of new features in Android 3.0, read the <a
+href="{@docRoot}sdk/android-3.0-highlights.html">Platform Highlights</a>.</p>
+</div>
+
diff --git a/docs/html/sdk/sdk_toc.cs b/docs/html/sdk/sdk_toc.cs
index 7cf7b07..9b67fee 100644
--- a/docs/html/sdk/sdk_toc.cs
+++ b/docs/html/sdk/sdk_toc.cs
@@ -52,6 +52,16 @@
     </ul>
   </li><?cs
   /if ?>
+  <?cs
+  if:sdk.preview ?>
+  <li><h2>Android 3.0 Preview</h2>
+    <ul>
+      <li><a href="<?cs var:toroot ?>sdk/android-3.0-highlights.html">Platform Highlights</a> <span
+class="new">new!</span></li>
+      <li><a href="<?cs var:toroot ?>sdk/preview/index.html">SDK</a> <span class="new">new!</span></li>
+    </ul>
+  </li><?cs
+  /if ?>
   <li>
     <h2>
       <span class="en">Downloadable SDK Components</span>
@@ -158,10 +168,7 @@
         <span class="en">OEM USB Drivers</span>
       </a></li>
       <li><a href="<?cs var:toroot ?>sdk/requirements.html">SDK System Requirements</a></li>
-      <!-- <li><a href="<?cs var:toroot ?>sdk/RELEASENOTES.html">SDK Release
-            Notes</a></li> -->
-      <li><a href="<?cs var:toroot ?>sdk/older_releases.html">SDK
-            Archives</a></li>
+      <li><a href="<?cs var:toroot ?>sdk/older_releases.html">SDK Archives</a></li>
 
     </ul>
   </li>
diff --git a/docs/html/sdk/tools-notes.jd b/docs/html/sdk/tools-notes.jd
index 212d3c0..97ca8ab0 100644
--- a/docs/html/sdk/tools-notes.jd
+++ b/docs/html/sdk/tools-notes.jd
@@ -103,8 +103,10 @@
     <li>The LogCat view in DDMS now properly displays UTF-8 characters.</li>
     <li>The SDK Manager is more reliable on Windows. For details on the improvements, see the
     <a href="http://tools.android.com/recent/sdkmanagerfixes">Android Tools Project Site</a>. </li>
-    <li>If you enabled snapshots for an AVD, they are automatically captured. The emulator also now restores to the state when
-     it last closed almost instantly.</li>
+    <li>Early look at the new snapshot feature: To improve startup time for the emulator, you can
+enable snapshots for the system state. The emulator will then restore to the state when it last
+closed almost instantly. <strong>Note:</strong> The snapshot feature is still under active
+development and might not always perform as expected.</li>
     <li>Fixed the missing JAR file error that prevented <code>draw9patch</code> from running.</li>
     <li>Fixed the Windows launch scripts <code>hierarchyviewer</code> and <code>ddms</code> to support
     the new location of <code>adb</code>.</li>
diff --git a/include/ui/egl/android_natives.h b/include/ui/egl/android_natives.h
index 654d0f3..fdc8105 100644
--- a/include/ui/egl/android_natives.h
+++ b/include/ui/egl/android_natives.h
@@ -315,6 +315,8 @@
  * If all parameters are 0, the normal behavior is restored. That is,
  * dequeued buffers following this call will be sized to the window's size.
  *
+ * Calling this function will reset the window crop to a NULL value, which
+ * disables cropping of the buffers.
  */
 static inline int native_window_set_buffers_geometry(
         ANativeWindow* window,
diff --git a/libs/gui/SurfaceTextureClient.cpp b/libs/gui/SurfaceTextureClient.cpp
index c0e4e0f..50cbdb8 100644
--- a/libs/gui/SurfaceTextureClient.cpp
+++ b/libs/gui/SurfaceTextureClient.cpp
@@ -238,13 +238,15 @@
     LOGV("SurfaceTextureClient::setCrop");
     Mutex::Autolock lock(mMutex);
 
-    // empty/invalid rects are not allowed
-    if (rect->isEmpty())
-        return BAD_VALUE;
+    Rect realRect;
+    if (rect == NULL || rect->isEmpty()) {
+        realRect = Rect(0, 0);
+    } else {
+        realRect = *rect;
+    }
 
     status_t err = mSurfaceTexture->setCrop(*rect);
-    LOGE_IF(err, "ISurfaceTexture::setCrop(...) returned %s",
-            strerror(-err));
+    LOGE_IF(err, "ISurfaceTexture::setCrop(...) returned %s", strerror(-err));
 
     return err;
 }
@@ -280,7 +282,10 @@
     mReqHeight = h;
     mReqFormat = format;
 
-    return NO_ERROR;
+    status_t err = mSurfaceTexture->setCrop(Rect(0, 0));
+    LOGE_IF(err, "ISurfaceTexture::setCrop(...) returned %s", strerror(-err));
+
+    return err;
 }
 
 int SurfaceTextureClient::setBuffersTransform(int transform)
diff --git a/libs/rs/java/ModelViewer/src/com/android/modelviewer/scenegraph.rs b/libs/rs/java/ModelViewer/src/com/android/modelviewer/scenegraph.rs
index 3bee8d6..3679068 100644
--- a/libs/rs/java/ModelViewer/src/com/android/modelviewer/scenegraph.rs
+++ b/libs/rs/java/ModelViewer/src/com/android/modelviewer/scenegraph.rs
@@ -81,7 +81,7 @@
     rsgProgramVertexLoadModelMatrix(&robot2Ptr->globalMat);
     rsgDrawMesh(gTestMesh);
 
-    color(0.3f, 0.3f, 0.3f, 1.0f);
+    //color(0.3f, 0.3f, 0.3f, 1.0f);
     rsgDrawText("Renderscript transform test", 30, 695);
 
     rsgBindFont(gItalic);
diff --git a/libs/rs/java/Samples/src/com/android/samples/rslist.rs b/libs/rs/java/Samples/src/com/android/samples/rslist.rs
index 0baccb8..b79f4fc 100644
--- a/libs/rs/java/Samples/src/com/android/samples/rslist.rs
+++ b/libs/rs/java/Samples/src/com/android/samples/rslist.rs
@@ -44,7 +44,6 @@
 
     rsgFontColor(0.9f, 0.9f, 0.9f, 1.0f);
     rsgBindFont(gItalic);
-    color(0.2, 0.2, 0.2, 0);
 
     rs_allocation listAlloc;
     rsSetObject(&listAlloc, rsGetAllocation(gList));
diff --git a/libs/rs/java/Samples/src/com/android/samples/rsrenderstates.rs b/libs/rs/java/Samples/src/com/android/samples/rsrenderstates.rs
index a973167..42be4d8 100644
--- a/libs/rs/java/Samples/src/com/android/samples/rsrenderstates.rs
+++ b/libs/rs/java/Samples/src/com/android/samples/rsrenderstates.rs
@@ -407,7 +407,7 @@
     gVSConstants->light1_Diffuse = 1.0f;
     gVSConstants->light1_Specular = 0.7f;
     gVSConstants->light1_CosinePower = 25.0f;
-    rsAllocationMarkDirty(rsGetAllocation(gVSConstants));
+    rsgAllocationSyncAll(rsGetAllocation(gVSConstants));
 
     gVSConstants2->light_Posision[0] = light0Pos;
     gVSConstants2->light_Diffuse[0] = 1.0f;
@@ -417,7 +417,7 @@
     gVSConstants2->light_Diffuse[1] = 1.0f;
     gVSConstants2->light_Specular[1] = 0.7f;
     gVSConstants2->light_CosinePower[1] = 25.0f;
-    rsAllocationMarkDirty(rsGetAllocation(gVSConstants2));
+    rsgAllocationSyncAll(rsGetAllocation(gVSConstants2));
 
     // Update fragmetn shader constants
     // Set light 0 colors
@@ -426,14 +426,14 @@
     // Set light 1 colors
     gFSConstants->light1_DiffuseColor = light1DiffCol;
     gFSConstants->light1_SpecularColor = light1SpecCol;
-    rsAllocationMarkDirty(rsGetAllocation(gFSConstants));
+    rsgAllocationSyncAll(rsGetAllocation(gFSConstants));
 
     gFSConstants2->light_DiffuseColor[0] = light0DiffCol;
     gFSConstants2->light_SpecularColor[0] = light0SpecCol;
     // Set light 1 colors
     gFSConstants2->light_DiffuseColor[1] = light1DiffCol;
     gFSConstants2->light_SpecularColor[1] = light1SpecCol;
-    rsAllocationMarkDirty(rsGetAllocation(gFSConstants2));
+    rsgAllocationSyncAll(rsGetAllocation(gFSConstants2));
 }
 
 static void displayCustomShaderSamples() {
diff --git a/libs/rs/java/tests/src/com/android/rs/test/rslist.rs b/libs/rs/java/tests/src/com/android/rs/test/rslist.rs
index f354a72..67c2b86 100644
--- a/libs/rs/java/tests/src/com/android/rs/test/rslist.rs
+++ b/libs/rs/java/tests/src/com/android/rs/test/rslist.rs
@@ -45,7 +45,6 @@
 
     rsgFontColor(0.9f, 0.9f, 0.9f, 1.0f);
     rsgBindFont(gFont);
-    color(0.2, 0.2, 0.2, 0);
 
     rs_allocation listAlloc;
     rsSetObject(&listAlloc, rsGetAllocation(gList));
diff --git a/libs/rs/rsAllocation.cpp b/libs/rs/rsAllocation.cpp
index 41c9fe2..c598f03 100644
--- a/libs/rs/rsAllocation.cpp
+++ b/libs/rs/rsAllocation.cpp
@@ -679,6 +679,7 @@
 void rsi_AllocationSyncAll(Context *rsc, RsAllocation va, RsAllocationUsageType src) {
     Allocation *a = static_cast<Allocation *>(va);
     a->syncAll(rsc, src);
+    a->sendDirty();
 }
 
 void rsi_AllocationGenerateMipmaps(Context *rsc, RsAllocation va) {
diff --git a/libs/rs/scriptc/rs_core.rsh b/libs/rs/scriptc/rs_core.rsh
index e32d4351..464e1d9 100644
--- a/libs/rs/scriptc/rs_core.rsh
+++ b/libs/rs/scriptc/rs_core.rsh
@@ -3,93 +3,227 @@
 
 #define _RS_RUNTIME extern
 
-// Debugging, print to the LOG a description string and a value.
+/**
+ * Debug function.  Prints a string and value to the log.
+ */
 extern void __attribute__((overloadable))
     rsDebug(const char *, float);
+/**
+ * Debug function.  Prints a string and value to the log.
+ */
 extern void __attribute__((overloadable))
     rsDebug(const char *, float, float);
+/**
+ * Debug function.  Prints a string and value to the log.
+ */
 extern void __attribute__((overloadable))
     rsDebug(const char *, float, float, float);
+/**
+ * Debug function.  Prints a string and value to the log.
+ */
 extern void __attribute__((overloadable))
     rsDebug(const char *, float, float, float, float);
+/**
+ * Debug function.  Prints a string and value to the log.
+ */
 extern void __attribute__((overloadable))
     rsDebug(const char *, double);
+/**
+ * Debug function.  Prints a string and value to the log.
+ */
 extern void __attribute__((overloadable))
     rsDebug(const char *, const rs_matrix4x4 *);
+/**
+ * Debug function.  Prints a string and value to the log.
+ */
 extern void __attribute__((overloadable))
     rsDebug(const char *, const rs_matrix3x3 *);
+/**
+ * Debug function.  Prints a string and value to the log.
+ */
 extern void __attribute__((overloadable))
     rsDebug(const char *, const rs_matrix2x2 *);
+/**
+ * Debug function.  Prints a string and value to the log.
+ */
 extern void __attribute__((overloadable))
     rsDebug(const char *, int);
+/**
+ * Debug function.  Prints a string and value to the log.
+ */
 extern void __attribute__((overloadable))
     rsDebug(const char *, uint);
+/**
+ * Debug function.  Prints a string and value to the log.
+ */
 extern void __attribute__((overloadable))
     rsDebug(const char *, long);
+/**
+ * Debug function.  Prints a string and value to the log.
+ */
 extern void __attribute__((overloadable))
     rsDebug(const char *, unsigned long);
+/**
+ * Debug function.  Prints a string and value to the log.
+ */
 extern void __attribute__((overloadable))
     rsDebug(const char *, long long);
+/**
+ * Debug function.  Prints a string and value to the log.
+ */
 extern void __attribute__((overloadable))
     rsDebug(const char *, unsigned long long);
+/**
+ * Debug function.  Prints a string and value to the log.
+ */
 extern void __attribute__((overloadable))
     rsDebug(const char *, const void *);
 #define RS_DEBUG(a) rsDebug(#a, a)
 #define RS_DEBUG_MARKER rsDebug(__FILE__, __LINE__)
 
+
+/**
+ * Debug function.  Prints a string and value to the log.
+ */
 _RS_RUNTIME void __attribute__((overloadable)) rsDebug(const char *s, float2 v);
+/**
+ * Debug function.  Prints a string and value to the log.
+ */
 _RS_RUNTIME void __attribute__((overloadable)) rsDebug(const char *s, float3 v);
+/**
+ * Debug function.  Prints a string and value to the log.
+ */
 _RS_RUNTIME void __attribute__((overloadable)) rsDebug(const char *s, float4 v);
 
+
+/**
+ * Pack floating point (0-1) RGB values into a uchar4.  The alpha component is
+ * set to 255 (1.0).
+ *
+ * @param r
+ * @param g
+ * @param b
+ *
+ * @return uchar4
+ */
 _RS_RUNTIME uchar4 __attribute__((overloadable)) rsPackColorTo8888(float r, float g, float b);
 
+/**
+ * Pack floating point (0-1) RGBA values into a uchar4.
+ *
+ * @param r
+ * @param g
+ * @param b
+ * @param a
+ *
+ * @return uchar4
+ */
 _RS_RUNTIME uchar4 __attribute__((overloadable)) rsPackColorTo8888(float r, float g, float b, float a);
 
+/**
+ * Pack floating point (0-1) RGB values into a uchar4.  The alpha component is
+ * set to 255 (1.0).
+ *
+ * @param color
+ *
+ * @return uchar4
+ */
 _RS_RUNTIME uchar4 __attribute__((overloadable)) rsPackColorTo8888(float3 color);
 
+/**
+ * Pack floating point (0-1) RGBA values into a uchar4.
+ *
+ * @param color
+ *
+ * @return uchar4
+ */
 _RS_RUNTIME uchar4 __attribute__((overloadable)) rsPackColorTo8888(float4 color);
 
+/**
+ * Unpack a uchar4 color to float4.  The resulting float range will be (0-1).
+ *
+ * @param c
+ *
+ * @return float4
+ */
 _RS_RUNTIME float4 rsUnpackColor8888(uchar4 c);
 
-//extern uchar4 __attribute__((overloadable)) rsPackColorTo565(float r, float g, float b);
-//extern uchar4 __attribute__((overloadable)) rsPackColorTo565(float3);
-//extern float4 rsUnpackColor565(uchar4);
-
 
 /////////////////////////////////////////////////////
 // Matrix ops
 /////////////////////////////////////////////////////
 
+/**
+ * Set one element of a matrix.
+ *
+ * @param m The matrix to be set
+ * @param row
+ * @param col
+ * @param v
+ *
+ * @return void
+ */
 _RS_RUNTIME void __attribute__((overloadable))
 rsMatrixSet(rs_matrix4x4 *m, uint32_t row, uint32_t col, float v);
-
-_RS_RUNTIME float __attribute__((overloadable))
-rsMatrixGet(const rs_matrix4x4 *m, uint32_t row, uint32_t col);
-
 _RS_RUNTIME void __attribute__((overloadable))
 rsMatrixSet(rs_matrix3x3 *m, uint32_t row, uint32_t col, float v);
-
-_RS_RUNTIME float __attribute__((overloadable))
-rsMatrixGet(const rs_matrix3x3 *m, uint32_t row, uint32_t col);
-
 _RS_RUNTIME void __attribute__((overloadable))
 rsMatrixSet(rs_matrix2x2 *m, uint32_t row, uint32_t col, float v);
 
+/**
+ * Get one element of a matrix.
+ *
+ * @param m The matrix to read from
+ * @param row
+ * @param col
+ *
+ * @return float
+ */
+_RS_RUNTIME float __attribute__((overloadable))
+rsMatrixGet(const rs_matrix4x4 *m, uint32_t row, uint32_t col);
+_RS_RUNTIME float __attribute__((overloadable))
+rsMatrixGet(const rs_matrix3x3 *m, uint32_t row, uint32_t col);
 _RS_RUNTIME float __attribute__((overloadable))
 rsMatrixGet(const rs_matrix2x2 *m, uint32_t row, uint32_t col);
 
+/**
+ * Set the elements of a matrix to the identity matrix.
+ *
+ * @param m
+ */
 extern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix4x4 *m);
 extern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix3x3 *m);
 extern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix2x2 *m);
+
+/**
+ * Set the elements of a matrix from an array of floats.
+ *
+ * @param m
+ */
 extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const float *v);
 extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix3x3 *m, const float *v);
 extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix2x2 *m, const float *v);
+
+/**
+ * Set the elements of a matrix from another matrix.
+ *
+ * @param m
+ */
 extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix4x4 *v);
 extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix3x3 *v);
 extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix2x2 *v);
 extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix3x3 *m, const rs_matrix3x3 *v);
 extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix2x2 *m, const rs_matrix2x2 *v);
 
+/**
+ * Load a rotation matrix.
+ *
+ * @param m
+ * @param rot
+ * @param x
+ * @param y
+ * @param z
+ */
 extern void __attribute__((overloadable))
 rsMatrixLoadRotate(rs_matrix4x4 *m, float rot, float x, float y, float z);
 
diff --git a/libs/rs/scriptc/rs_graphics.rsh b/libs/rs/scriptc/rs_graphics.rsh
index 3868f24..142e21a 100644
--- a/libs/rs/scriptc/rs_graphics.rsh
+++ b/libs/rs/scriptc/rs_graphics.rsh
@@ -1,21 +1,60 @@
 #ifndef __RS_GRAPHICS_RSH__
 #define __RS_GRAPHICS_RSH__
 
-// Bind a ProgramFragment to the RS context.
-extern void __attribute__((overloadable))
-    rsgBindProgramFragment(rs_program_fragment);
-extern void __attribute__((overloadable))
-    rsgBindProgramStore(rs_program_store);
-extern void __attribute__((overloadable))
-    rsgBindProgramVertex(rs_program_vertex);
-extern void __attribute__((overloadable))
-    rsgBindProgramRaster(rs_program_raster);
 
+/**
+ * Bind a new ProgramFragment to the rendering context.
+ *
+ * @param pf
+ */
+extern void __attribute__((overloadable))
+    rsgBindProgramFragment(rs_program_fragment pf);
+
+/**
+ * Bind a new ProgramStore to the rendering context.
+ *
+ * @param ps
+ */
+extern void __attribute__((overloadable))
+    rsgBindProgramStore(rs_program_store ps);
+
+/**
+ * Bind a new ProgramVertex to the rendering context.
+ *
+ * @param pv
+ */
+extern void __attribute__((overloadable))
+    rsgBindProgramVertex(rs_program_vertex pv);
+
+/**
+ * Bind a new ProgramRaster to the rendering context.
+ *
+ * @param pr
+ */
+extern void __attribute__((overloadable))
+    rsgBindProgramRaster(rs_program_raster pr);
+
+/**
+ * Bind a new Sampler object to a ProgramFragment.  The sampler will
+ * operate on the texture bound at the matching slot.
+ *
+ * @param slot
+ */
 extern void __attribute__((overloadable))
     rsgBindSampler(rs_program_fragment, uint slot, rs_sampler);
+
+/**
+ * Bind a new Allocation object to a ProgramFragment.  The
+ * Allocation must be a valid texture for the Program.  The sampling
+ * of the texture will be controled by the Sampler bound at the
+ * matching slot.
+ *
+ * @param slot
+ */
 extern void __attribute__((overloadable))
     rsgBindTexture(rs_program_fragment, uint slot, rs_allocation);
 
+
 extern void __attribute__((overloadable))
     rsgProgramVertexLoadProjectionMatrix(const rs_matrix4x4 *);
 extern void __attribute__((overloadable))
@@ -26,32 +65,134 @@
 extern void __attribute__((overloadable))
     rsgProgramVertexGetProjectionMatrix(rs_matrix4x4 *);
 
+/**
+ * Set the constant color for a fixed function emulation program.
+ *
+ * @param pf
+ * @param r
+ * @param g
+ * @param b
+ * @param a
+ */
 extern void __attribute__((overloadable))
-    rsgProgramFragmentConstantColor(rs_program_fragment, float, float, float, float);
+    rsgProgramFragmentConstantColor(rs_program_fragment pf, float r, float g, float b, float a);
 
+/**
+ * Get the width of the current rendering surface.
+ *
+ * @return uint
+ */
 extern uint __attribute__((overloadable))
     rsgGetWidth(void);
+
+/**
+ * Get the height of the current rendering surface.
+ *
+ * @return uint
+ */
 extern uint __attribute__((overloadable))
     rsgGetHeight(void);
 
-extern void __attribute__((overloadable))
-    rsgAllocationSyncAll(rs_allocation);
 
+/**
+ * Sync the contents of an allocation from its SCRIPT memory space to its HW
+ * memory spaces.
+ *
+ * @param alloc
+ */
+extern void __attribute__((overloadable))
+    rsgAllocationSyncAll(rs_allocation alloc);
+
+/**
+ * Low performance utility function for drawing a simple rectangle.  Not
+ * intended for drawing large quantities of geometry.
+ *
+ * @param x1
+ * @param y1
+ * @param x2
+ * @param y2
+ * @param z
+ */
 extern void __attribute__((overloadable))
     rsgDrawRect(float x1, float y1, float x2, float y2, float z);
+
+/**
+ * Low performance utility function for drawing a simple quad.  Not intended for
+ * drawing large quantities of geometry.
+ *
+ * @param x1
+ * @param y1
+ * @param z1
+ * @param x2
+ * @param y2
+ * @param z2
+ * @param x3
+ * @param y3
+ * @param z3
+ * @param x4
+ * @param y4
+ * @param z4
+ */
 extern void __attribute__((overloadable))
     rsgDrawQuad(float x1, float y1, float z1,
                 float x2, float y2, float z2,
                 float x3, float y3, float z3,
                 float x4, float y4, float z4);
+
+
+/**
+ * Low performance utility function for drawing a textured quad.  Not intended
+ * for drawing large quantities of geometry.
+ *
+ * @param x1
+ * @param y1
+ * @param z1
+ * @param u1
+ * @param v1
+ * @param x2
+ * @param y2
+ * @param z2
+ * @param u2
+ * @param v2
+ * @param x3
+ * @param y3
+ * @param z3
+ * @param u3
+ * @param v3
+ * @param x4
+ * @param y4
+ * @param z4
+ * @param u4
+ * @param v4
+ */
 extern void __attribute__((overloadable))
     rsgDrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1,
                          float x2, float y2, float z2, float u2, float v2,
                          float x3, float y3, float z3, float u3, float v3,
                          float x4, float y4, float z4, float u4, float v4);
+
+
+/**
+ * Low performance function for drawing rectangles in screenspace.  This
+ * function uses the default passthough ProgramVertex.  Any bound ProgramVertex
+ * is ignored.  This function has considerable overhead and should not be used
+ * for drawing in shipping applications.
+ *
+ * @param x
+ * @param y
+ * @param z
+ * @param w
+ * @param h
+ */
 extern void __attribute__((overloadable))
     rsgDrawSpriteScreenspace(float x, float y, float z, float w, float h);
 
+/**
+ * Draw a mesh of geometry using the current context state.  The whole mesh is
+ * rendered.
+ *
+ * @param ism
+ */
 extern void __attribute__((overloadable))
     rsgDrawMesh(rs_mesh ism);
 extern void __attribute__((overloadable))
@@ -59,10 +200,23 @@
 extern void __attribute__((overloadable))
     rsgDrawMesh(rs_mesh ism, uint primitiveIndex, uint start, uint len);
 
+/**
+ * Clears the rendering surface to the specified color.
+ *
+ * @param r
+ * @param g
+ * @param b
+ * @param a
+ */
 extern void __attribute__((overloadable))
-    rsgClearColor(float, float, float, float);
+    rsgClearColor(float r, float g, float b, float a);
+
+/**
+ * Clears the depth suface to the specified value.
+ *
+ */
 extern void __attribute__((overloadable))
-    rsgClearDepth(float);
+    rsgClearDepth(float value);
 
 extern void __attribute__((overloadable))
     rsgDrawText(const char *, int x, int y);
@@ -94,12 +248,13 @@
     bBoxMax->z = z2;
 }
 
-///////////////////////////////////////////////////////
-// misc
 
-// Depricated
-extern void __attribute__((overloadable))
-    color(float, float, float, float);
+/**
+ * @hide
+ * Deprecated, do not use.
+ *
+ */
+extern void __attribute__((overloadable)) color(float, float, float, float);
 
 #endif
 
diff --git a/libs/rs/scriptc/rs_math.rsh b/libs/rs/scriptc/rs_math.rsh
index a74c0e0..e2719e0 100644
--- a/libs/rs/scriptc/rs_math.rsh
+++ b/libs/rs/scriptc/rs_math.rsh
@@ -1,6 +1,12 @@
 #ifndef __RS_MATH_RSH__
 #define __RS_MATH_RSH__
 
+/**
+ * Copy reference to the specified object.
+ *
+ * @param dst
+ * @param src
+ */
 extern void __attribute__((overloadable))
     rsSetObject(rs_element *dst, rs_element src);
 extern void __attribute__((overloadable))
@@ -24,6 +30,11 @@
 extern void __attribute__((overloadable))
     rsSetObject(rs_font *dst, rs_font src);
 
+/**
+ * Sets the object to NULL.
+ *
+ * @return bool
+ */
 extern void __attribute__((overloadable))
     rsClearObject(rs_element *dst);
 extern void __attribute__((overloadable))
@@ -47,6 +58,12 @@
 extern void __attribute__((overloadable))
     rsClearObject(rs_font *dst);
 
+/**
+ * Tests if the object is valid.  Returns true if the object is valid, false if
+ * it is NULL.
+ *
+ * @return bool
+ */
 extern bool __attribute__((overloadable))
     rsIsObject(rs_element);
 extern bool __attribute__((overloadable))
@@ -71,27 +88,58 @@
     rsIsObject(rs_font);
 
 
-
-// Allocations
-
-// Return the rs_allocation associated with a bound data
-// pointer.
+/**
+ * Returns the Allocation for a given pointer.  The pointer should point within
+ * a valid allocation.  The results are undefined if the pointer is not from a
+ * valid allocation.
+ */
 extern rs_allocation __attribute__((overloadable))
     rsGetAllocation(const void *);
 
-// Mark the allocation dirty and notify those using it
+/**
+ * Mark the contents of an allocation as dirty.  This forces any other scripts
+ * using the allocation to receive the updated
+ */
 extern void __attribute__((overloadable))
     rsAllocationMarkDirty(rs_allocation);
 
-// Return the dimensions associated with an allocation.
+/**
+ * Query the dimension of an allocation.
+ *
+ * @return uint32_t The X dimension of the allocation.
+ */
 extern uint32_t __attribute__((overloadable))
     rsAllocationGetDimX(rs_allocation);
+
+/**
+ * Query the dimension of an allocation.
+ *
+ * @return uint32_t The Y dimension of the allocation.
+ */
 extern uint32_t __attribute__((overloadable))
     rsAllocationGetDimY(rs_allocation);
+
+/**
+ * Query the dimension of an allocation.
+ *
+ * @return uint32_t The Z dimension of the allocation.
+ */
 extern uint32_t __attribute__((overloadable))
     rsAllocationGetDimZ(rs_allocation);
+
+/**
+ * Query an allocation for the presence of more than one LOD.
+ *
+ * @return uint32_t Returns 1 if more than one LOD is present, 0 otherwise.
+ */
 extern uint32_t __attribute__((overloadable))
     rsAllocationGetDimLOD(rs_allocation);
+
+/**
+ * Query an allocation for the presence of more than one face.
+ *
+ * @return uint32_t Returns 1 if more than one face is present, 0 otherwise.
+ */
 extern uint32_t __attribute__((overloadable))
     rsAllocationGetDimFaces(rs_allocation);
 
diff --git a/libs/rs/scriptc/rs_types.rsh b/libs/rs/scriptc/rs_types.rsh
index a010096..367af46 100644
--- a/libs/rs/scriptc/rs_types.rsh
+++ b/libs/rs/scriptc/rs_types.rsh
@@ -73,8 +73,6 @@
     float m[4];
 } rs_matrix2x2;
 
-typedef float4 rs_quaternion;
-
 #define RS_PACKED __attribute__((packed, aligned(4)))
 
 #endif
diff --git a/libs/surfaceflinger_client/ISurfaceComposer.cpp b/libs/surfaceflinger_client/ISurfaceComposer.cpp
index 2216824..01ae23f 100644
--- a/libs/surfaceflinger_client/ISurfaceComposer.cpp
+++ b/libs/surfaceflinger_client/ISurfaceComposer.cpp
@@ -266,13 +266,13 @@
             int32_t mode = data.readInt32();
             status_t res = turnElectronBeamOff(mode);
             reply->writeInt32(res);
-        }
+        } break;
         case TURN_ELECTRON_BEAM_ON: {
             CHECK_INTERFACE(ISurfaceComposer, data, reply);
             int32_t mode = data.readInt32();
             status_t res = turnElectronBeamOn(mode);
             reply->writeInt32(res);
-        }
+        } break;
         default:
             return BBinder::onTransact(code, data, reply, flags);
     }
diff --git a/libs/surfaceflinger_client/Surface.cpp b/libs/surfaceflinger_client/Surface.cpp
index e21bab7..1e9bd74 100644
--- a/libs/surfaceflinger_client/Surface.cpp
+++ b/libs/surfaceflinger_client/Surface.cpp
@@ -827,13 +827,15 @@
 
 int Surface::crop(Rect const* rect)
 {
-    // empty/invalid rects are not allowed
-    if (rect->isEmpty())
-        return BAD_VALUE;
-
     Mutex::Autolock _l(mSurfaceLock);
     // TODO: validate rect size
-    mNextBufferCrop = *rect;
+
+    if (rect == NULL || rect->isEmpty()) {
+        mNextBufferCrop = Rect(0,0);
+    } else {
+        mNextBufferCrop = *rect;
+    }
+
     return NO_ERROR;
 }
 
@@ -884,6 +886,9 @@
         // EGLConfig validation.
         mFormat = format;
     }
+
+    mNextBufferCrop = Rect(0,0);
+
     return NO_ERROR;
 }
 
diff --git a/media/java/android/media/videoeditor/AudioTrack.java b/media/java/android/media/videoeditor/AudioTrack.java
index 9e68a5d..eeace13 100755
--- a/media/java/android/media/videoeditor/AudioTrack.java
+++ b/media/java/android/media/videoeditor/AudioTrack.java
@@ -267,14 +267,16 @@
             throw new IllegalArgumentException("Volume set exceeds maximum allowed value");
         }
 
-         if (volumePercent < 0) {
+        if (volumePercent < 0) {
             throw new IllegalArgumentException("Invalid Volume ");
         }
-        mVolumePercent = volumePercent;
+
         /**
          *  Force update of preview settings
          */
         mMANativeHelper.setGeneratePreview(true);
+
+        mVolumePercent = volumePercent;
     }
 
     /**
@@ -294,11 +296,11 @@
      *         the volume of this Audio Track to 0.
      */
     public void setMute(boolean muted) {
-        mMuted = muted;
         /**
          *  Force update of preview settings
          */
         mMANativeHelper.setGeneratePreview(true);
+        mMuted = muted;
     }
 
     /**
@@ -363,14 +365,15 @@
             throw new IllegalArgumentException("Invalid end time; is < 0");
         }
 
-        mBeginBoundaryTimeMs = beginMs;
-        mEndBoundaryTimeMs = endMs;
-
-        mTimelineDurationMs = mEndBoundaryTimeMs - mBeginBoundaryTimeMs;
         /**
          *  Force update of preview settings
          */
         mMANativeHelper.setGeneratePreview(true);
+
+        mBeginBoundaryTimeMs = beginMs;
+        mEndBoundaryTimeMs = endMs;
+
+        mTimelineDurationMs = mEndBoundaryTimeMs - mBeginBoundaryTimeMs;
     }
 
     /**
@@ -412,11 +415,11 @@
      */
     public void disableLoop() {
         if (mLoop) {
-            mLoop = false;
             /**
              *  Force update of preview settings
              */
             mMANativeHelper.setGeneratePreview(true);
+            mLoop = false;
         }
     }
 
@@ -434,11 +437,11 @@
      */
     public void disableDucking() {
         if (mIsDuckingEnabled) {
-            mIsDuckingEnabled = false;
             /**
              *  Force update of preview settings
              */
             mMANativeHelper.setGeneratePreview(true);
+            mIsDuckingEnabled = false;
         }
     }
 
@@ -462,13 +465,14 @@
                     + duckedTrackVolume);
         }
 
-        mDuckingThreshold = threshold;
-        mDuckedTrackVolume = duckedTrackVolume;
-        mIsDuckingEnabled = true;
         /**
          *  Force update of preview settings
          */
         mMANativeHelper.setGeneratePreview(true);
+
+        mDuckingThreshold = threshold;
+        mDuckedTrackVolume = duckedTrackVolume;
+        mIsDuckingEnabled = true;
     }
 
     /**
diff --git a/media/java/android/media/videoeditor/Effect.java b/media/java/android/media/videoeditor/Effect.java
index 3362d47..c6b0839 100755
--- a/media/java/android/media/videoeditor/Effect.java
+++ b/media/java/android/media/videoeditor/Effect.java
@@ -105,8 +105,7 @@
         final long oldDurationMs = mDurationMs;
         mDurationMs = durationMs;
 
-        mMediaItem.invalidateTransitions(mStartTimeMs, oldDurationMs,
-                                         mStartTimeMs, mDurationMs);
+        mMediaItem.invalidateTransitions(mStartTimeMs, oldDurationMs, mStartTimeMs, mDurationMs);
     }
 
     /**
@@ -130,11 +129,11 @@
             throw new IllegalArgumentException("Start time is too large");
         }
 
+        getMediaItem().getNativeContext().setGeneratePreview(true);
         final long oldStartTimeMs = mStartTimeMs;
         mStartTimeMs = startTimeMs;
 
-        mMediaItem.invalidateTransitions(oldStartTimeMs, mDurationMs,
-                                         mStartTimeMs, mDurationMs);
+        mMediaItem.invalidateTransitions(oldStartTimeMs, mDurationMs, mStartTimeMs, mDurationMs);
     }
 
     /**
@@ -163,8 +162,7 @@
         mStartTimeMs = startTimeMs;
         mDurationMs = durationMs;
 
-        mMediaItem.invalidateTransitions(oldStartTimeMs, oldDurationMs,
-                                         mStartTimeMs, mDurationMs);
+        mMediaItem.invalidateTransitions(oldStartTimeMs, oldDurationMs, mStartTimeMs, mDurationMs);
     }
 
     /**
diff --git a/media/java/android/media/videoeditor/MediaArtistNativeHelper.java b/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
index f438be8..ba9403d 100644
--- a/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
+++ b/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
@@ -20,9 +20,10 @@
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.nio.IntBuffer;
-import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.concurrent.Semaphore;
+
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
@@ -39,22 +40,29 @@
  *This class provide Native methods to be used by MediaArtist {@hide}
  */
 class MediaArtistNativeHelper {
+    private static final String TAG = "MediaArtistNativeHelper";
 
     static {
         System.loadLibrary("videoeditor_jni");
     }
 
-    private final int MAX_THUMBNAIL_PERMITTED = 8;
+    private static final int MAX_THUMBNAIL_PERMITTED = 8;
+
+    public static final int TASK_LOADING_SETTINGS = 1;
+    public static final int TASK_ENCODING = 2;
+
+    /**
+     *  The resize paint
+     */
+    private static final Paint sResizePaint = new Paint(Paint.FILTER_BITMAP_FLAG);
 
     private final VideoEditor mVideoEditor;
 
-    public EditSettings mStoryBoardSettings;
+    private EditSettings mStoryBoardSettings;
 
     private String mOutputFilename;
 
-    EditSettings mEditSettings = null;
-
-    PreviewClipProperties mClipProperties = null;
+    private PreviewClipProperties mClipProperties = null;
 
     private EditSettings mPreviewEditSettings;
 
@@ -62,30 +70,24 @@
 
     private AudioTrack mAudioTrack = null;
 
-    public boolean mInvalidatePreviewArray = true;
+    private boolean mInvalidatePreviewArray = true;
 
     private boolean mRegenerateAudio = true;
 
     private String mExportFilename = null;
 
-    private boolean mExportDone = false;
-
     private int mProgressToApp;
 
-    /**
-     *  The resize paint
+    /*
+     *  Semaphore to control preview calls
      */
-    private static final Paint sResizePaint = new Paint(Paint.FILTER_BITMAP_FLAG);
+    private final Semaphore mLock = new Semaphore(1, true);
 
     private String mRenderPreviewOverlayFile;
-    private int   mRenderPreviewRenderingMode;
+    private int mRenderPreviewRenderingMode;
 
     private boolean mIsFirstProgress;
 
-    public static final int TASK_LOADING_SETTINGS = 1;
-
-    public static final int TASK_ENCODING = 2;
-
     private static final String AUDIO_TRACK_PCM_FILE = "AudioPcm.pcm";
 
     // Processing indication
@@ -98,33 +100,25 @@
     public static final int PROCESSING_INTERMEDIATE3 = 13;
     public static final int PROCESSING_EXPORT        = 20;
 
-    private int    mProcessingState;
+    private int mProcessingState;
     private Object mProcessingObject;
-
     private PreviewProgressListener mPreviewProgressListener;
     private ExportProgressListener mExportProgressListener;
     private ExtractAudioWaveformProgressListener mExtractAudioWaveformProgressListener;
-    private MediaProcessingProgressListener      mMediaProcessingProgressListener;
+    private MediaProcessingProgressListener mMediaProcessingProgressListener;
     private final String mProjectPath;
 
     private long mPreviewProgress;
 
     private String mAudioTrackPCMFilePath;
 
-    int mTotalClips = 0;
-
-    int mPreviewEffectsSize = 0;
+    private int mTotalClips = 0;
 
     private boolean mErrorFlagSet = false;
 
     @SuppressWarnings("unused")
     private int mManualEditContext;
 
-
-    List<Effect> mMediaEffectList;
-
-    List<Overlay> mMediaOverLayList;
-
     /* Listeners */
 
     /**
@@ -339,10 +333,13 @@
         public static final int JPG = 5;
 
         /** GIF image file type. */
-        public static final int GIF = 6;
+        public static final int GIF = 7;
 
         /** PNG image file type. */
-        public static final int PNG = 7;
+        public static final int PNG = 8;
+
+        /** M4V file type. */
+        public static final int M4V = 10;
 
         /** Unsupported file type. */
         public static final int UNSUPPORTED = 255;
@@ -760,7 +757,6 @@
 
         /** Internal error. */
         public static final int ERR_INTERNAL = 255;
-
     }
 
     /**
@@ -1200,9 +1196,8 @@
     }
 
     /**
-     * Defines transition behaviours.
-     **/
-
+     * Defines transition behaviors.
+     */
     public static final class TransitionBehaviour {
 
         /** The transition uses an increasing speed. */
@@ -1227,7 +1222,9 @@
         public static final int FAST_MIDDLE = 4;
     }
 
-    /** Defines settings for the background music. */
+    /**
+     * Defines settings for the background music.
+     */
     public static class BackgroundMusicSettings {
 
         /** Background music file. */
@@ -1270,7 +1267,6 @@
         public int lowVolume;
 
         public boolean isLooping;
-
     }
 
     /** Defines settings for an effect. */
@@ -1565,7 +1561,6 @@
         boolean bInDucking_enable;
 
         String pcmFilePath;
-
     }
 
     /** Encapsulates preview clips and effect settings */
@@ -1772,7 +1767,6 @@
         public int audioVolumeValue;
 
         public String Id;
-
     }
 
     /**
@@ -1793,8 +1787,6 @@
         if (mStoryBoardSettings == null)
             mStoryBoardSettings = new EditSettings();
 
-        mMediaEffectList = new ArrayList<Effect>();
-        mMediaOverLayList = new ArrayList<Overlay>();
         _init(mProjectPath, "null");
         mAudioTrackPCMFilePath = null;
     }
@@ -1876,7 +1868,7 @@
                 case PROCESSING_NONE:
 
                 default:
-                    Log.e("MediaArtistNativeHelper", "ERROR unexpected State=" + mProcessingState);
+                    Log.e(TAG, "ERROR unexpected State=" + mProcessingState);
                     return;
             }
             if ((mProgressToApp != actualProgress) && (actualProgress != 0)) {
@@ -1885,8 +1877,7 @@
 
                 if (mMediaProcessingProgressListener != null) {
                     // Send the progress indication
-                    mMediaProcessingProgressListener.onProgress(mProcessingObject,
-                                                                action,
+                    mMediaProcessingProgressListener.onProgress(mProcessingObject, action,
                                                                 actualProgress);
                 }
             }
@@ -1896,8 +1887,7 @@
                     /*
                      *  Send the progress indication
                      */
-                    mMediaProcessingProgressListener.onProgress(mProcessingObject,
-                                                                action,
+                    mMediaProcessingProgressListener.onProgress(mProcessingObject, action,
                                                                 actualProgress);
                 }
                 mProgressToApp = 1;
@@ -1941,15 +1931,14 @@
     /**
      * Release the native helper object
      */
-    public void releaseNativeHelper() {
+    void releaseNativeHelper() {
         try {
             release();
         } catch (IllegalStateException ex) {
-            Log.e("MediaArtistNativeHelper",
-            "Illegal State exeption caught in releaseNativeHelper");
+            Log.e(TAG, "Illegal State exeption caught in releaseNativeHelper");
             throw ex;
         } catch (RuntimeException ex) {
-            Log.e("MediaArtistNativeHelper", "Runtime exeption caught in releaseNativeHelper");
+            Log.e(TAG, "Runtime exeption caught in releaseNativeHelper");
             throw ex;
         }
     }
@@ -1959,9 +1948,7 @@
      */
     @SuppressWarnings("unused")
     private void onAudioGraphExtractProgressUpdate(int progress, boolean isVideo) {
-
-        if ((mExtractAudioWaveformProgressListener != null) && (progress > 0))
-        {
+        if ((mExtractAudioWaveformProgressListener != null) && (progress > 0)) {
             mExtractAudioWaveformProgressListener.onProgress(progress);
         }
     }
@@ -1971,8 +1958,7 @@
      *
      * @param effects The reference of EffectColor
      *
-     * @return The populated effect settings in EffectSettings
-     * reference
+     * @return The populated effect settings in EffectSettings reference
      */
     EffectSettings getEffectSettings(EffectColor effects) {
         EffectSettings effectSettings = new EffectSettings();
@@ -2014,8 +2000,7 @@
      *
      * @param overlay The reference of OverlayFrame
      *
-     * @return The populated overlay settings in EffectSettings
-     * reference
+     * @return The populated overlay settings in EffectSettings reference
      */
     EffectSettings getOverlaySettings(OverlayFrame overlay) {
         EffectSettings effectSettings = new EffectSettings();
@@ -2036,7 +2021,7 @@
                 try {
                     (overlay).save(mProjectPath);
                 } catch (IOException e) {
-                    Log.e("MediaArtistNativeHelper","getOverlaySettings : File not found");
+                    Log.e(TAG, "getOverlaySettings : File not found");
                 }
                 effectSettings.framingFile = overlay.getFilename();
             }
@@ -2095,13 +2080,12 @@
         int aspectRatio;
         if (overlay.getMediaItem() instanceof MediaImageItem) {
             if (((MediaImageItem)overlay.getMediaItem()).getGeneratedImageClip() != null) {
-                //Kenburns was applied
+                // Ken Burns was applied
                 mediaItemHeight = ((MediaImageItem)overlay.getMediaItem()).getGeneratedClipHeight();
                 aspectRatio = getAspectRatio(
                     ((MediaImageItem)overlay.getMediaItem()).getGeneratedClipWidth()
                     , mediaItemHeight);
-            }
-            else {
+            } else {
                 //For image get the scaled height. Aspect ratio would remain the same
                 mediaItemHeight = ((MediaImageItem)overlay.getMediaItem()).getScaledHeight();
                 aspectRatio = overlay.getMediaItem().getAspectRatio();
@@ -2145,7 +2129,7 @@
      *
      * @return The frame rate from one of the defined enum values
      */
-    public int GetClosestVideoFrameRate(int averageFrameRate) {
+    int GetClosestVideoFrameRate(int averageFrameRate) {
         if (averageFrameRate >= 25) {
             return VideoFrameRate.FR_30_FPS;
         } else if (averageFrameRate >= 20) {
@@ -2169,8 +2153,7 @@
      * Helper function to adjust the effect or overlay start time
      * depending on the begin and end boundary time of meddia item
      */
-    public void adjustEffectsStartTimeAndDuration(EffectSettings lEffect,
-                                                  int beginCutTime,
+    public void adjustEffectsStartTimeAndDuration(EffectSettings lEffect, int beginCutTime,
                                                   int endCutTime) {
 
         int effectStartTime = 0;
@@ -2268,20 +2251,20 @@
         try {
             err = nativeGenerateClip(editSettings);
         } catch (IllegalArgumentException ex) {
-            Log.e("MediaArtistNativeHelper","Illegal Argument exception in load settings");
+            Log.e(TAG, "Illegal Argument exception in load settings");
             return -1;
         } catch (IllegalStateException ex) {
-            Log.e("MediaArtistNativeHelper","Illegal state exception in load settings");
+            Log.e(TAG, "Illegal state exception in load settings");
             return -1;
         } catch (RuntimeException ex) {
-            Log.e("MediaArtistNativeHelper", "Runtime exception in load settings");
+            Log.e(TAG, "Runtime exception in load settings");
             return -1;
         }
         return err;
     }
 
     /**
-     * Init function to initialise the  ClipSettings reference to
+     * Init function to initialiZe the  ClipSettings reference to
      * default values
      *
      * @param lclipSettings The ClipSettings reference
@@ -2354,9 +2337,8 @@
             //editSettings.videoFormat = VideoFormat.MPEG4;
             editSettings.videoFormat = VideoFormat.H264;
             editSettings.videoFrameRate = VideoFrameRate.FR_30_FPS;
-            editSettings.videoFrameSize = findVideoResolution(mVideoEditor.getAspectRatio(), m
-                    .getHeight());
-
+            editSettings.videoFrameSize = findVideoResolution(mVideoEditor.getAspectRatio(),
+                    m.getHeight());
         } else {
             MediaImageItem m = (MediaImageItem)lMediaItem;
             editSettings.audioBitrate = Bitrate.BR_64_KBPS;
@@ -2367,8 +2349,8 @@
             editSettings.videoBitrate = Bitrate.BR_5_MBPS;
             editSettings.videoFormat = VideoFormat.H264;
             editSettings.videoFrameRate = VideoFrameRate.FR_30_FPS;
-            editSettings.videoFrameSize = findVideoResolution(mVideoEditor.getAspectRatio(), m
-                    .getScaledHeight());
+            editSettings.videoFrameSize = findVideoResolution(mVideoEditor.getAspectRatio(),
+                    m.getScaledHeight());
         }
 
         editSettings.outputFile = EffectClipPath;
@@ -2463,11 +2445,9 @@
                 clip2Height = ((MediaImageItem)m2).getScaledHeight();
             }
             if (clip1Height > clip2Height) {
-                videoSize = findVideoResolution(mVideoEditor.getAspectRatio(),
-                                                                   clip1Height);
+                videoSize = findVideoResolution(mVideoEditor.getAspectRatio(), clip1Height);
             } else {
-                videoSize = findVideoResolution(mVideoEditor.getAspectRatio(),
-                                                                   clip2Height);
+                videoSize = findVideoResolution(mVideoEditor.getAspectRatio(), clip2Height);
             }
         } else if (m1 == null && m2 != null) {
             if (m2 instanceof MediaVideoItem) {
@@ -2475,16 +2455,14 @@
             } else if (m2 instanceof MediaImageItem) {
                 clip2Height = ((MediaImageItem)m2).getScaledHeight();
             }
-            videoSize = findVideoResolution(mVideoEditor.getAspectRatio(),
-                                                                   clip2Height);
+            videoSize = findVideoResolution(mVideoEditor.getAspectRatio(), clip2Height);
         } else if (m1 != null && m2 == null) {
             if (m1 instanceof MediaVideoItem) {
                 clip1Height = m1.getHeight();
             } else if (m1 instanceof MediaImageItem) {
                 clip1Height = ((MediaImageItem)m1).getScaledHeight();
             }
-            videoSize = findVideoResolution(mVideoEditor.getAspectRatio(),
-                                                                   clip1Height);
+            videoSize = findVideoResolution(mVideoEditor.getAspectRatio(), clip1Height);
         }
         return videoSize;
     }
@@ -2539,7 +2517,7 @@
      *
      * @param m1 Media item associated with effect
      * @param effectSettings The EffectSettings reference containing
-     * effect specific data
+     *      effect specific data
      * @param beginCutTime The begin cut time of the clip associated with effect
      * @param endCutTime The end cut time of the clip associated with effect
      * @param storyBoardTime The current story board time
@@ -2548,8 +2526,6 @@
      */
     private int populateEffects(MediaItem m, EffectSettings[] effectSettings, int i,
             int beginCutTime, int endCutTime, int storyBoardTime) {
-        List<Effect> effects = m.getAllEffects();
-        List<Overlay> overlays = m.getAllOverlays();
 
         if (m.getBeginTransition() != null && m.getBeginTransition().getDuration() > 0
                 && m.getEndTransition() != null && m.getEndTransition().getDuration() > 0) {
@@ -2563,19 +2539,20 @@
             beginCutTime += m.getBeginTransition().getDuration();
         }
 
+        final List<Effect> effects = m.getAllEffects();
+        final List<Overlay> overlays = m.getAllOverlays();
         for (Effect effect : effects) {
             if (effect instanceof EffectColor) {
                 effectSettings[i] = getEffectSettings((EffectColor)effect);
-                adjustEffectsStartTimeAndDuration(effectSettings[i],
-                                                      beginCutTime, endCutTime);
+                adjustEffectsStartTimeAndDuration(effectSettings[i], beginCutTime, endCutTime);
                 effectSettings[i].startTime += storyBoardTime;
                 i++;
             }
         }
+
         for (Overlay overlay : overlays) {
             effectSettings[i] = getOverlaySettings((OverlayFrame)overlay);
-            adjustEffectsStartTimeAndDuration(effectSettings[i],
-                                                      beginCutTime, endCutTime);
+            adjustEffectsStartTimeAndDuration(effectSettings[i], beginCutTime, endCutTime);
             effectSettings[i].startTime += storyBoardTime;
             i++;
         }
@@ -2593,31 +2570,24 @@
                                          Properties clipProperties, MediaItem m) {
         if (m.getBeginTransition() != null && m.getBeginTransition().getDuration() > 0
                 && m.getEndTransition() != null && m.getEndTransition().getDuration() > 0) {
-
             clipSettings.beginCutTime += m.getBeginTransition().getDuration();
             clipSettings.endCutTime -= m.getEndTransition().getDuration();
-
         } else if (m.getBeginTransition() == null && m.getEndTransition() != null
                 && m.getEndTransition().getDuration() > 0) {
-
             clipSettings.endCutTime -= m.getEndTransition().getDuration();
-
         } else if (m.getEndTransition() == null && m.getBeginTransition() != null
                 && m.getBeginTransition().getDuration() > 0) {
-
             clipSettings.beginCutTime += m.getBeginTransition().getDuration();
         }
-        clipProperties.duration = clipSettings.endCutTime -
-                                                      clipSettings.beginCutTime;
+
+        clipProperties.duration = clipSettings.endCutTime - clipSettings.beginCutTime;
 
         if (clipProperties.videoDuration != 0) {
-            clipProperties.videoDuration = clipSettings.endCutTime -
-                                                      clipSettings.beginCutTime;
+            clipProperties.videoDuration = clipSettings.endCutTime - clipSettings.beginCutTime;
         }
 
         if (clipProperties.audioDuration != 0) {
-            clipProperties.audioDuration = clipSettings.endCutTime -
-                                                      clipSettings.beginCutTime;
+            clipProperties.audioDuration = clipSettings.endCutTime - clipSettings.beginCutTime;
         }
     }
 
@@ -2639,27 +2609,25 @@
         editSettings.clipSettingsArray[index].clipPath = transition.getFilename();
         editSettings.clipSettingsArray[index].fileType = FileType.THREE_GPP;
         editSettings.clipSettingsArray[index].beginCutTime = 0;
-        editSettings.clipSettingsArray[index].endCutTime =
-                                                  (int)transition.getDuration();
-        editSettings.clipSettingsArray[index].mediaRendering =
-                                                   MediaRendering.BLACK_BORDERS;
+        editSettings.clipSettingsArray[index].endCutTime = (int)transition.getDuration();
+        editSettings.clipSettingsArray[index].mediaRendering = MediaRendering.BLACK_BORDERS;
+
         try {
             clipPropertiesArray.clipProperties[index] =
-                                   getMediaProperties(transition.getFilename());
+                getMediaProperties(transition.getFilename());
         } catch (Exception e) {
             throw new IllegalArgumentException("Unsupported file or file not found");
         }
+
         clipPropertiesArray.clipProperties[index].Id = null;
         clipPropertiesArray.clipProperties[index].audioVolumeValue = 100;
-        clipPropertiesArray.clipProperties[index].duration =
-                                                  (int)transition.getDuration();
+        clipPropertiesArray.clipProperties[index].duration = (int)transition.getDuration();
         if (clipPropertiesArray.clipProperties[index].videoDuration != 0) {
-            clipPropertiesArray.clipProperties[index].videoDuration =
-                                                  (int)transition.getDuration();
+            clipPropertiesArray.clipProperties[index].videoDuration = (int)transition.getDuration();
         }
+
         if (clipPropertiesArray.clipProperties[index].audioDuration != 0) {
-            clipPropertiesArray.clipProperties[index].audioDuration =
-                                                  (int)transition.getDuration();
+            clipPropertiesArray.clipProperties[index].audioDuration = (int)transition.getDuration();
         }
     }
 
@@ -2673,10 +2641,10 @@
     private void adjustVolume(MediaItem m, PreviewClipProperties clipProperties,
                               int index) {
         if (m instanceof MediaVideoItem) {
-            boolean videoMuted = ((MediaVideoItem)m).isMuted();
+            final boolean videoMuted = ((MediaVideoItem)m).isMuted();
             if (videoMuted == false) {
-                mClipProperties.clipProperties[index].audioVolumeValue = ((MediaVideoItem)m)
-                .getVolume();
+                mClipProperties.clipProperties[index].audioVolumeValue =
+                    ((MediaVideoItem)m).getVolume();
             } else {
                 mClipProperties.clipProperties[index].audioVolumeValue = 0;
             }
@@ -2722,22 +2690,22 @@
     private int populateMediaItemProperties(MediaItem m, int index, int maxHeight) {
         mPreviewEditSettings.clipSettingsArray[index] = new ClipSettings();
         if (m instanceof MediaVideoItem) {
-            mPreviewEditSettings.clipSettingsArray[index] = ((MediaVideoItem)m)
-            .getVideoClipProperties();
+            mPreviewEditSettings.clipSettingsArray[index] =
+                ((MediaVideoItem)m).getVideoClipProperties();
             if (((MediaVideoItem)m).getHeight() > maxHeight) {
                 maxHeight = ((MediaVideoItem)m).getHeight();
             }
         } else if (m instanceof MediaImageItem) {
-            mPreviewEditSettings.clipSettingsArray[index] = ((MediaImageItem)m)
-            .getImageClipProperties();
+            mPreviewEditSettings.clipSettingsArray[index] =
+                ((MediaImageItem)m).getImageClipProperties();
             if (((MediaImageItem)m).getScaledHeight() > maxHeight) {
                 maxHeight = ((MediaImageItem)m).getScaledHeight();
             }
         }
         /** + Handle the image files here */
         if (mPreviewEditSettings.clipSettingsArray[index].fileType == FileType.JPG) {
-            mPreviewEditSettings.clipSettingsArray[index].clipDecodedPath = ((MediaImageItem)m)
-            .getDecodedImageFileName();
+            mPreviewEditSettings.clipSettingsArray[index].clipDecodedPath =
+                ((MediaImageItem)m).getDecodedImageFileName();
 
             mPreviewEditSettings.clipSettingsArray[index].clipOriginalPath =
                          mPreviewEditSettings.clipSettingsArray[index].clipPath;
@@ -2755,8 +2723,7 @@
 
         if (mediaBGMList.size() == 1) {
             mAudioTrack = mediaBGMList.get(0);
-        } else
-        {
+        } else {
             mAudioTrack = null;
         }
 
@@ -2789,41 +2756,31 @@
             mAudioSettings.ducking_threshold = mAudioTrack.getDuckingThreshhold();
             mAudioSettings.bInDucking_enable = mAudioTrack.isDuckingEnabled();
             mAudioTrackPCMFilePath = String.format(mProjectPath + "/" + AUDIO_TRACK_PCM_FILE);
-            //String.format(mProjectPath + "/" + "AudioPcm" + ".pcm");
             mAudioSettings.pcmFilePath = mAudioTrackPCMFilePath;
 
-            mPreviewEditSettings.backgroundMusicSettings =
-                                                  new BackgroundMusicSettings();
-            mPreviewEditSettings.backgroundMusicSettings.file =
-                                                         mAudioTrackPCMFilePath;
-            mPreviewEditSettings.backgroundMusicSettings.fileType =
-                                                      mAudioProperties.fileType;
+            mPreviewEditSettings.backgroundMusicSettings = new BackgroundMusicSettings();
+            mPreviewEditSettings.backgroundMusicSettings.file = mAudioTrackPCMFilePath;
+            mPreviewEditSettings.backgroundMusicSettings.fileType = mAudioProperties.fileType;
             mPreviewEditSettings.backgroundMusicSettings.insertionTime =
-                                                     mAudioTrack.getStartTime();
-            mPreviewEditSettings.backgroundMusicSettings.volumePercent =
-                                                        mAudioTrack.getVolume();
-            mPreviewEditSettings.backgroundMusicSettings.beginLoop = mAudioTrack
-            .getBoundaryBeginTime();
+                mAudioTrack.getStartTime();
+            mPreviewEditSettings.backgroundMusicSettings.volumePercent = mAudioTrack.getVolume();
+            mPreviewEditSettings.backgroundMusicSettings.beginLoop =
+                mAudioTrack.getBoundaryBeginTime();
             mPreviewEditSettings.backgroundMusicSettings.endLoop =
                                                mAudioTrack.getBoundaryEndTime();
-            mPreviewEditSettings.backgroundMusicSettings.enableDucking = mAudioTrack
-            .isDuckingEnabled();
-            mPreviewEditSettings.backgroundMusicSettings.duckingThreshold = mAudioTrack
-            .getDuckingThreshhold();
-            mPreviewEditSettings.backgroundMusicSettings.lowVolume = mAudioTrack
-            .getDuckedTrackVolume();
-            mPreviewEditSettings.backgroundMusicSettings.isLooping =
-                                                        mAudioTrack.isLooping();
+            mPreviewEditSettings.backgroundMusicSettings.enableDucking =
+                mAudioTrack.isDuckingEnabled();
+            mPreviewEditSettings.backgroundMusicSettings.duckingThreshold =
+                mAudioTrack.getDuckingThreshhold();
+            mPreviewEditSettings.backgroundMusicSettings.lowVolume =
+                mAudioTrack.getDuckedTrackVolume();
+            mPreviewEditSettings.backgroundMusicSettings.isLooping = mAudioTrack.isLooping();
             mPreviewEditSettings.primaryTrackVolume = 100;
             mProcessingState  = PROCESSING_AUDIO_PCM;
             mProcessingObject = mAudioTrack;
         } else {
-            if (mAudioSettings != null) {
-                mAudioSettings = null;
-            }
-            if (mPreviewEditSettings.backgroundMusicSettings != null) {
-                mPreviewEditSettings.backgroundMusicSettings = null;
-            }
+            mAudioSettings = null;
+            mPreviewEditSettings.backgroundMusicSettings = null;
             mAudioTrackPCMFilePath = null;
         }
     }
@@ -2847,8 +2804,9 @@
             final Iterator<Effect> ef = t.getAllEffects().iterator();
             while (ef.hasNext()) {
                 final Effect e = ef.next();
-                if (e instanceof EffectKenBurns)
+                if (e instanceof EffectKenBurns) {
                     totalEffects--;
+                }
             }
         }
         return totalEffects;
@@ -2866,7 +2824,7 @@
      * @param listener The MediaProcessingProgressListener
      *
      */
-    public void previewStoryBoard(List<MediaItem> mediaItemsList,
+    void previewStoryBoard(List<MediaItem> mediaItemsList,
             List<Transition> mediaTransitionList, List<AudioTrack> mediaBGMList,
             MediaProcessingProgressListener listener) {
         if (mInvalidatePreviewArray) {
@@ -2885,8 +2843,9 @@
 
             mTotalClips = mediaItemsList.size();
             for (Transition transition : mediaTransitionList) {
-                if (transition.getDuration() > 0)
+                if (transition.getDuration() > 0) {
                     mTotalClips++;
+                }
             }
 
             totalEffects = getTotalEffects(mediaItemsList);
@@ -2895,7 +2854,7 @@
             mPreviewEditSettings.effectSettingsArray = new EffectSettings[totalEffects];
             mClipProperties.clipProperties = new Properties[mTotalClips];
 
-            /** record the call back progress listner */
+            /** record the call back progress listener */
             mMediaProcessingProgressListener = listener;
             mProgressToApp = 0;
 
@@ -2920,19 +2879,16 @@
                         previewIndex++;
                     }
                     /* Populate media item properties */
-                    maxHeight = populateMediaItemProperties(lMediaItem,
-                                                            previewIndex,
-                                                            maxHeight);
+                    maxHeight = populateMediaItemProperties(lMediaItem, previewIndex, maxHeight);
                     /* Get the clip properties of the media item. */
-                    if (lMediaItem instanceof MediaImageItem)
-                    {
+                    if (lMediaItem instanceof MediaImageItem) {
                         int tmpCnt = 0;
                         boolean bEffectKbPresent = false;
-                        List<Effect> effectList = lMediaItem.getAllEffects();
+                        final List<Effect> effectList = lMediaItem.getAllEffects();
                         /**
-                         * check if Kenburns effect is present
+                         * Check if Ken Burns effect is present
                          */
-                        while ( tmpCnt < effectList.size()) {
+                        while (tmpCnt < effectList.size()) {
                             if (effectList.get(tmpCnt) instanceof EffectKenBurns) {
                                 bEffectKbPresent = true;
                                 break;
@@ -2957,9 +2913,7 @@
                             mClipProperties.clipProperties[previewIndex].width = ((MediaImageItem)lMediaItem).getScaledWidth();
                             mClipProperties.clipProperties[previewIndex].height = ((MediaImageItem)lMediaItem).getScaledHeight();
                         }
-
-                    }else
-                    {
+                    } else {
                         try {
                             mClipProperties.clipProperties[previewIndex]
                                  = getMediaProperties(lMediaItem.getFilename());
@@ -3005,22 +2959,19 @@
             if (!mErrorFlagSet) {
                 mPreviewEditSettings.videoFrameSize = findVideoResolution(mVideoEditor
                         .getAspectRatio(), maxHeight);
-                /*if (mediaBGMList.size() == 1) //for remove Audio check */ {
-                    populateBackgroundMusicProperties(mediaBGMList);
-                }
+                populateBackgroundMusicProperties(mediaBGMList);
+
                 /** call to native populate settings */
                 try {
                     nativePopulateSettings(mPreviewEditSettings, mClipProperties, mAudioSettings);
                 } catch (IllegalArgumentException ex) {
-                    Log.e("MediaArtistNativeHelper",
-                    "Illegal argument exception in nativePopulateSettings");
+                    Log.e(TAG, "Illegal argument exception in nativePopulateSettings");
                     throw ex;
                 } catch (IllegalStateException ex) {
-                    Log.e("MediaArtistNativeHelper",
-                    "Illegal state exception in nativePopulateSettings");
+                    Log.e(TAG, "Illegal state exception in nativePopulateSettings");
                     throw ex;
                 } catch (RuntimeException ex) {
-                    Log.e("MediaArtistNativeHelper", "Runtime exception in nativePopulateSettings");
+                    Log.e(TAG, "Runtime exception in nativePopulateSettings");
                     throw ex;
                 }
                 mInvalidatePreviewArray = false;
@@ -3045,7 +2996,7 @@
      * the callback is needed
      * @param listener The PreviewProgressListener
      */
-    public void doPreview(Surface surface, long fromMs, long toMs, boolean loop,
+    void doPreview(Surface surface, long fromMs, long toMs, boolean loop,
             int callbackAfterFrameCount, PreviewProgressListener listener) {
         mPreviewProgress = fromMs;
         mIsFirstProgress = true;
@@ -3054,22 +3005,23 @@
         if (!mInvalidatePreviewArray) {
             try {
                 /** Modify the image files names to rgb image files. */
-                for (int clipCnt = 0; clipCnt < mPreviewEditSettings.clipSettingsArray.length; clipCnt++) {
+                for (int clipCnt = 0; clipCnt < mPreviewEditSettings.clipSettingsArray.length;
+                    clipCnt++) {
                     if (mPreviewEditSettings.clipSettingsArray[clipCnt].fileType == FileType.JPG) {
-                        mPreviewEditSettings.clipSettingsArray[clipCnt].clipPath = mPreviewEditSettings.clipSettingsArray[clipCnt].clipDecodedPath;
+                        mPreviewEditSettings.clipSettingsArray[clipCnt].clipPath =
+                            mPreviewEditSettings.clipSettingsArray[clipCnt].clipDecodedPath;
                     }
                 }
                 nativePopulateSettings(mPreviewEditSettings, mClipProperties, mAudioSettings);
                 nativeStartPreview(surface, fromMs, toMs, callbackAfterFrameCount, loop);
             } catch (IllegalArgumentException ex) {
-                Log.e("MediaArtistNativeHelper",
-                "Illegal argument exception in nativeStartPreview");
+                Log.e(TAG, "Illegal argument exception in nativeStartPreview");
                 throw ex;
             } catch (IllegalStateException ex) {
-                Log.e("MediaArtistNativeHelper", "Illegal state exception in nativeStartPreview");
+                Log.e(TAG, "Illegal state exception in nativeStartPreview");
                 throw ex;
             } catch (RuntimeException ex) {
-                Log.e("MediaArtistNativeHelper", "Runtime exception in nativeStartPreview");
+                Log.e(TAG, "Runtime exception in nativeStartPreview");
                 throw ex;
             }
         }
@@ -3078,7 +3030,7 @@
     /**
      * This function is responsible for stopping the preview
      */
-    public long stopPreview() {
+    long stopPreview() {
         nativeStopPreview();
         return mPreviewProgress;
     }
@@ -3096,48 +3048,48 @@
      * @return The actual time from the story board at which the  frame was extracted
      * and rendered
      */
-    public long renderPreviewFrame(Surface surface, long time, int surfaceWidth,
+    long renderPreviewFrame(Surface surface, long time, int surfaceWidth,
             int surfaceHeight, VideoEditor.OverlayData overlayData) {
-        long timeMs = 0;
-        if (!mInvalidatePreviewArray) {
-            try {
-                for (int clipCnt = 0;
-                      clipCnt < mPreviewEditSettings.clipSettingsArray.length;
-                      clipCnt++) {
-
-                    if (mPreviewEditSettings.clipSettingsArray[clipCnt].fileType == FileType.JPG) {
-                        mPreviewEditSettings.clipSettingsArray[clipCnt].clipPath =
-                            mPreviewEditSettings.clipSettingsArray[clipCnt].clipDecodedPath;
-                    }
-                }
-
-                // Reset the render preview frame params that shall be set by native.
-                mRenderPreviewOverlayFile = null;
-                mRenderPreviewRenderingMode = MediaRendering.RESIZING;
-                nativePopulateSettings(mPreviewEditSettings, mClipProperties, mAudioSettings);
-                timeMs = (long)nativeRenderPreviewFrame(surface, time, surfaceWidth, surfaceHeight);
-
-                if (mRenderPreviewOverlayFile != null) {
-                    overlayData.set(BitmapFactory.decodeFile(mRenderPreviewOverlayFile), mRenderPreviewRenderingMode);
-                } else {
-                    overlayData.setClear();
-                }
-            } catch (IllegalArgumentException ex) {
-                Log.e("MediaArtistNativeHelper",
-                "Illegal Argument exception in nativeRenderPreviewFrame");
-                throw ex;
-            } catch (IllegalStateException ex) {
-                Log.e("MediaArtistNativeHelper",
-                "Illegal state exception in nativeRenderPreviewFrame");
-                throw ex;
-            } catch (RuntimeException ex) {
-                Log.e("MediaArtistNativeHelper", "Runtime exception in nativeRenderPreviewFrame");
-                throw ex;
-            }
-            return timeMs;
-        } else {
+        if (mInvalidatePreviewArray) {
             throw new RuntimeException("Call generate preview first");
         }
+
+        long timeMs = 0;
+        try {
+            for (int clipCnt = 0; clipCnt < mPreviewEditSettings.clipSettingsArray.length;
+                  clipCnt++) {
+                if (mPreviewEditSettings.clipSettingsArray[clipCnt].fileType == FileType.JPG) {
+                    mPreviewEditSettings.clipSettingsArray[clipCnt].clipPath =
+                        mPreviewEditSettings.clipSettingsArray[clipCnt].clipDecodedPath;
+                }
+            }
+
+            // Reset the render preview frame params that shall be set by native.
+            mRenderPreviewOverlayFile = null;
+            mRenderPreviewRenderingMode = MediaRendering.RESIZING;
+
+            nativePopulateSettings(mPreviewEditSettings, mClipProperties, mAudioSettings);
+
+            timeMs = (long)nativeRenderPreviewFrame(surface, time, surfaceWidth, surfaceHeight);
+
+            if (mRenderPreviewOverlayFile != null) {
+                overlayData.set(BitmapFactory.decodeFile(mRenderPreviewOverlayFile),
+                        mRenderPreviewRenderingMode);
+            } else {
+                overlayData.setClear();
+            }
+        } catch (IllegalArgumentException ex) {
+            Log.e(TAG, "Illegal Argument exception in nativeRenderPreviewFrame");
+            throw ex;
+        } catch (IllegalStateException ex) {
+            Log.e(TAG, "Illegal state exception in nativeRenderPreviewFrame");
+            throw ex;
+        } catch (RuntimeException ex) {
+            Log.e(TAG, "Runtime exception in nativeRenderPreviewFrame");
+            throw ex;
+        }
+
+        return timeMs;
     }
 
     private void previewFrameEditInfo(String filename, int renderingMode) {
@@ -3159,24 +3111,20 @@
      * @return The actual time from media item at which the  frame was extracted
      * and rendered
      */
-    public long renderMediaItemPreviewFrame(Surface surface, String filepath,
-                                            long time, int framewidth,
-                                            int frameheight) {
+    long renderMediaItemPreviewFrame(Surface surface, String filepath,
+                                            long time, int framewidth, int frameheight) {
         long timeMs = 0;
         try {
-
             timeMs = (long)nativeRenderMediaItemPreviewFrame(surface, filepath, framewidth,
                     frameheight, 0, 0, time);
         } catch (IllegalArgumentException ex) {
-            Log.e("MediaArtistNativeHelper",
-            "Illegal Argument exception in renderMediaItemPreviewFrame");
+            Log.e(TAG, "Illegal Argument exception in renderMediaItemPreviewFrame");
             throw ex;
         } catch (IllegalStateException ex) {
-            Log.e("MediaArtistNativeHelper",
-            "Illegal state exception in renderMediaItemPreviewFrame");
+            Log.e(TAG, "Illegal state exception in renderMediaItemPreviewFrame");
             throw ex;
         } catch (RuntimeException ex) {
-            Log.e("MediaArtistNativeHelper", "Runtime exception in renderMediaItemPreviewFrame");
+            Log.e(TAG, "Runtime exception in renderMediaItemPreviewFrame");
             throw ex;
         }
 
@@ -3188,7 +3136,18 @@
      * and for generating the preview again
      */
     void setGeneratePreview(boolean isRequired) {
-        mInvalidatePreviewArray = isRequired;
+        boolean semAcquiredDone = false;
+        try {
+            lock();
+            semAcquiredDone = true;
+            mInvalidatePreviewArray = isRequired;
+        } catch (InterruptedException ex) {
+            Log.e(TAG, "Runtime exception in renderMediaItemPreviewFrame");
+        } finally {
+            if (semAcquiredDone) {
+                unlock();
+            }
+        }
     }
 
     /**
@@ -3207,7 +3166,7 @@
      *
      * @return The calculated aspect ratio
      */
-    public int getAspectRatio(int w, int h) {
+    int getAspectRatio(int w, int h) {
         double apRatio = (double)(w) / (double)(h);
         BigDecimal bd = new BigDecimal(apRatio);
         bd = bd.setScale(3, BigDecimal.ROUND_HALF_UP);
@@ -3235,7 +3194,7 @@
      *
      * @return The File type in JAVA layer
      */
-    public int getFileType(int fileType) {
+    int getFileType(int fileType) {
         int retValue = -1;
         switch (fileType) {
             case FileType.UNSUPPORTED:
@@ -3256,6 +3215,9 @@
             case FileType.MP3:
                 retValue = MediaProperties.FILE_MP3;
                 break;
+            case FileType.M4V:
+                retValue = MediaProperties.FILE_M4V;
+                break;
 
             default:
                 retValue = -1;
@@ -3271,7 +3233,7 @@
      *
      * @return The video codec type in JAVA layer
      */
-    public int getVideoCodecType(int codecType) {
+    int getVideoCodecType(int codecType) {
         int retValue = -1;
         switch (codecType) {
             case VideoFormat.H263:
@@ -3299,7 +3261,7 @@
      *
      * @return The audio codec type in JAVA layer
      */
-    public int getAudioCodecType(int codecType) {
+    int getAudioCodecType(int codecType) {
         int retValue = -1;
         switch (codecType) {
             case AudioFormat.AMR_NB:
@@ -3325,7 +3287,7 @@
      *
      * @return The frame rate as integer
      */
-    public int getFrameRate(int fps) {
+    int getFrameRate(int fps) {
         int retValue = -1;
         switch (fps) {
             case VideoFrameRate.FR_5_FPS:
@@ -3386,6 +3348,9 @@
             case MediaProperties.FILE_PNG:
                 retValue = FileType.PNG;
                 break;
+            case MediaProperties.FILE_M4V:
+                retValue = FileType.M4V;
+                break;
 
             default:
                 retValue = -1;
@@ -3527,7 +3492,7 @@
     }
 
     /**
-     * Calculates videdo resolution for output clip
+     * Calculates video resolution for output clip
      * based on clip's height and aspect ratio of storyboard
      *
      * @param aspectRatio The aspect ratio of story board
@@ -3571,8 +3536,7 @@
             resolutions = MediaProperties.getSupportedResolutions(mVideoEditor.getAspectRatio());
             // Get the highest resolution
             maxResolution = resolutions[resolutions.length - 1];
-            retValue = findVideoResolution(mVideoEditor.getAspectRatio(),
-                                           maxResolution.second);
+            retValue = findVideoResolution(mVideoEditor.getAspectRatio(), maxResolution.second);
         }
 
         return retValue;
@@ -3586,12 +3550,12 @@
      * @param height The height of clip
      * @param bitrate The bitrate at which the movie should be exported
      * @param mediaItemsList The media items list
-     * @param mediaTransitionList The transitons list
+     * @param mediaTransitionList The transitions list
      * @param mediaBGMList The background track list
      * @param listener The ExportProgressListener
      *
      */
-    public void export(String filePath, String projectDir, int height, int bitrate,
+    void export(String filePath, String projectDir, int height, int bitrate,
             List<MediaItem> mediaItemsList, List<Transition> mediaTransitionList,
             List<AudioTrack> mediaBGMList, ExportProgressListener listener) {
 
@@ -3663,8 +3627,10 @@
         mPreviewEditSettings.transitionSettingsArray = new TransitionSettings[mTotalClips - 1];
         for (int index = 0; index < mTotalClips - 1; index++) {
             mPreviewEditSettings.transitionSettingsArray[index] = new TransitionSettings();
-            mPreviewEditSettings.transitionSettingsArray[index].videoTransitionType = VideoTransition.NONE;
-            mPreviewEditSettings.transitionSettingsArray[index].audioTransitionType = AudioTransition.NONE;
+            mPreviewEditSettings.transitionSettingsArray[index].videoTransitionType =
+                VideoTransition.NONE;
+            mPreviewEditSettings.transitionSettingsArray[index].audioTransitionType =
+                AudioTransition.NONE;
         }
         for (int clipCnt = 0; clipCnt < mPreviewEditSettings.clipSettingsArray.length; clipCnt++) {
             if (mPreviewEditSettings.clipSettingsArray[clipCnt].fileType == FileType.JPG) {
@@ -3681,193 +3647,39 @@
             err = generateClip(mPreviewEditSettings);
             mProcessingState  = PROCESSING_NONE;
         } catch (IllegalArgumentException ex) {
-            Log.e("MediaArtistNativeHelper", "IllegalArgument for generateClip");
+            Log.e(TAG, "IllegalArgument for generateClip");
             throw ex;
         } catch (IllegalStateException ex) {
-            Log.e("MediaArtistNativeHelper", "IllegalStateExceptiont for generateClip");
+            Log.e(TAG, "IllegalStateExceptiont for generateClip");
             throw ex;
         } catch (RuntimeException ex) {
-            Log.e("MediaArtistNativeHelper", "RuntimeException for generateClip");
+            Log.e(TAG, "RuntimeException for generateClip");
             throw ex;
         }
 
         if (err != 0) {
-            Log.e("MediaArtistNativeHelper", "RuntimeException for generateClip");
-            throw new RuntimeException("generateClip failed with error="+err );
+            Log.e(TAG, "RuntimeException for generateClip");
+            throw new RuntimeException("generateClip failed with error=" + err);
         }
 
-        mExportDone = true;
-        setGeneratePreview(true);
         mExportProgressListener = null;
     }
 
     /**
-     * This method is responsible for exporting a movie
-     *
-     * @param filePath The output file path
-     * @param projectDir The output project directory
-     * @param height The height of clip
-     * @param bitrate The bitrate at which the movie should be exported
-     * @param audioCodec The audio codec to use
-     * @param videoCodec The video codec to use
-     * @param mediaItemsList The media items list
-     * @param mediaTransitionList The transitons list
-     * @param mediaBGMList The background track list
-     * @param listener The ExportProgressListener
-     *
-     */
-    public void export(String filePath, String projectDir,int height,int bitrate,
-            int audioCodec,int videoCodec,List<MediaItem> mediaItemsList,
-            List<Transition> mediaTransitionList,List<AudioTrack> mediaBGMList,
-            ExportProgressListener listener) {
-
-        int outBitrate = 0;
-        mExportFilename = filePath;
-        previewStoryBoard(mediaItemsList, mediaTransitionList, mediaBGMList,null);
-        mExportProgressListener = listener;
-
-        mProgressToApp = 0;
-
-        switch (bitrate) {
-            case MediaProperties.BITRATE_28K:
-                outBitrate = Bitrate.BR_32_KBPS;
-                break;
-            case MediaProperties.BITRATE_40K:
-                outBitrate = Bitrate.BR_48_KBPS;
-                break;
-            case MediaProperties.BITRATE_64K:
-                outBitrate = Bitrate.BR_64_KBPS;
-                break;
-            case MediaProperties.BITRATE_96K:
-                outBitrate = Bitrate.BR_96_KBPS;
-                break;
-            case MediaProperties.BITRATE_128K:
-                outBitrate = Bitrate.BR_128_KBPS;
-                break;
-            case MediaProperties.BITRATE_192K:
-                outBitrate = Bitrate.BR_192_KBPS;
-                break;
-            case MediaProperties.BITRATE_256K:
-                outBitrate = Bitrate.BR_256_KBPS;
-                break;
-            case MediaProperties.BITRATE_384K:
-                outBitrate = Bitrate.BR_384_KBPS;
-                break;
-            case MediaProperties.BITRATE_512K:
-                outBitrate = Bitrate.BR_512_KBPS;
-                break;
-            case MediaProperties.BITRATE_800K:
-                outBitrate = Bitrate.BR_800_KBPS;
-                break;
-            case MediaProperties.BITRATE_2M:
-                outBitrate = Bitrate.BR_2_MBPS;
-                break;
-            case MediaProperties.BITRATE_5M:
-                outBitrate = Bitrate.BR_5_MBPS;
-                break;
-            case MediaProperties.BITRATE_8M:
-                outBitrate = Bitrate.BR_8_MBPS;
-                break;
-
-            default:
-                throw new IllegalArgumentException("Argument Bitrate incorrect");
-        }
-        mPreviewEditSettings.videoFrameRate = VideoFrameRate.FR_30_FPS;
-        mPreviewEditSettings.outputFile = mOutputFilename = filePath;
-
-        int aspectRatio = mVideoEditor.getAspectRatio();
-        mPreviewEditSettings.videoFrameSize = findVideoResolution(aspectRatio, height);
-        switch (audioCodec) {
-            case MediaProperties.ACODEC_AAC_LC:
-                mPreviewEditSettings.audioFormat = AudioFormat.AAC;
-                break;
-            case MediaProperties.ACODEC_AMRNB:
-                mPreviewEditSettings.audioFormat = AudioFormat.AMR_NB;
-                break;
-        }
-
-        switch (videoCodec) {
-            case MediaProperties.VCODEC_H263:
-                mPreviewEditSettings.videoFormat = VideoFormat.H263;
-                break;
-            case MediaProperties.VCODEC_H264BP:
-                mPreviewEditSettings.videoFormat = VideoFormat.H264;
-                break;
-            case MediaProperties.VCODEC_MPEG4:
-                mPreviewEditSettings.videoFormat = VideoFormat.MPEG4;
-                break;
-        }
-
-        mPreviewEditSettings.audioSamplingFreq = AudioSamplingFrequency.FREQ_32000;
-        mPreviewEditSettings.maxFileSize = 0;
-        mPreviewEditSettings.audioChannels = 2;
-        mPreviewEditSettings.videoBitrate = outBitrate;
-        mPreviewEditSettings.audioBitrate = Bitrate.BR_96_KBPS;
-
-        mPreviewEditSettings.transitionSettingsArray =
-                                        new TransitionSettings[mTotalClips - 1];
-        for (int index = 0; index < mTotalClips - 1; index++) {
-            mPreviewEditSettings.transitionSettingsArray[index] =
-                                                       new TransitionSettings();
-            mPreviewEditSettings.transitionSettingsArray[index].videoTransitionType =
-                                                                      VideoTransition.NONE;
-            mPreviewEditSettings.transitionSettingsArray[index].audioTransitionType =
-                                                                      AudioTransition.NONE;
-        }
-        for (int clipCnt = 0; clipCnt < mPreviewEditSettings.clipSettingsArray.length; clipCnt++) {
-            if (mPreviewEditSettings.clipSettingsArray[clipCnt].fileType == FileType.JPG) {
-                mPreviewEditSettings.clipSettingsArray[clipCnt].clipPath =
-                  mPreviewEditSettings.clipSettingsArray[clipCnt].clipOriginalPath;
-            }
-        }
-        nativePopulateSettings(mPreviewEditSettings, mClipProperties, mAudioSettings);
-
-        int err = 0;
-        try {
-            mProcessingState  = PROCESSING_EXPORT;
-            mProcessingObject = null;
-            err = generateClip(mPreviewEditSettings);
-            mProcessingState  = PROCESSING_NONE;
-        } catch (IllegalArgumentException ex) {
-            Log.e("MediaArtistNativeHelper", "IllegalArgument for generateClip");
-            throw ex;
-        } catch (IllegalStateException ex) {
-            Log.e("MediaArtistNativeHelper", "IllegalStateExceptiont for generateClip");
-            throw ex;
-        } catch (RuntimeException ex) {
-            Log.e("MediaArtistNativeHelper", "RuntimeException for generateClip");
-            throw ex;
-        }
-
-        if (err != 0) {
-            Log.e("MediaArtistNativeHelper", "RuntimeException for generateClip");
-            throw new RuntimeException("generateClip failed with error="+err );
-        }
-
-        mExportDone = true;
-        setGeneratePreview(true);
-        mExportProgressListener = null;
-    }
-
-
-    /**
      * This methods takes care of stopping the Export process
      *
      * @param The input file name for which export has to be stopped
      */
-    public void stop(String filename) {
-        if (!mExportDone) {
-            try {
-                stopEncoding();
-            } catch (IllegalStateException ex) {
-                Log.e("MediaArtistNativeHelper", "Illegal state exception in unload settings");
-                throw ex;
-            } catch (RuntimeException ex) {
-                Log.e("MediaArtistNativeHelper", "Runtime exception in unload settings");
-                throw ex;
-            }
-
+    void stop(String filename) {
+        try {
+            stopEncoding();
             new File(mExportFilename).delete();
+        } catch (IllegalStateException ex) {
+            Log.e(TAG, "Illegal state exception in unload settings");
+            throw ex;
+        } catch (RuntimeException ex) {
+            Log.e(TAG, "Runtime exception in unload settings");
+            throw ex;
         }
     }
 
@@ -3878,9 +3690,9 @@
      * @param inputFile The inputFile
      * @param width The width of the output frame
      * @param height The height of the output frame
-     * @param timeMS The time in ms at which the frame hass to be extracted
+     * @param timeMS The time in ms at which the frame has to be extracted
      */
-    public Bitmap getPixels(String inputFile, int width, int height, long timeMS) {
+    Bitmap getPixels(String inputFile, int width, int height, long timeMS) {
         if (inputFile == null) {
             throw new IllegalArgumentException();
         }
@@ -3911,8 +3723,7 @@
             /* Create a canvas to resize */
             final Canvas canvas = new Canvas(bitmap);
             canvas.drawBitmap(tempBitmap, new Rect(0, 0, newWidth, newHeight),
-                                          new Rect(0, 0, width, height),
-                                          sResizePaint);
+                                          new Rect(0, 0, width, height), sResizePaint);
         }
 
         if (tempBitmap != null) {
@@ -3954,50 +3765,49 @@
         }
         int i = 0;
         int deltaTime = (int)(endMs - startMs) / thumbnailCount;
-        Bitmap[] bitmap = null;
+        Bitmap[] bitmaps = null;
 
         try {
             // This may result in out of Memory Error
             rgb888 = new int[thumbnailSize * thumbnailCount];
-            bitmap = new Bitmap[thumbnailCount];
+            bitmaps = new Bitmap[thumbnailCount];
         } catch (Throwable e) {
             // Allocating to new size with Fixed count
             try {
                 System.gc();
                 rgb888 = new int[thumbnailSize * MAX_THUMBNAIL_PERMITTED];
-                bitmap = new Bitmap[MAX_THUMBNAIL_PERMITTED];
+                bitmaps = new Bitmap[MAX_THUMBNAIL_PERMITTED];
                 thumbnailCount = MAX_THUMBNAIL_PERMITTED;
             } catch (Throwable ex) {
                 throw new RuntimeException("Memory allocation fails, thumbnail count too large: "+thumbnailCount);
             }
         }
         IntBuffer tmpBuffer = IntBuffer.allocate(thumbnailSize);
-        nativeGetPixelsList(filename, rgb888, newWidth, newHeight, deltaTime, thumbnailCount, startMs,
-                endMs);
+        nativeGetPixelsList(filename, rgb888, newWidth, newHeight, deltaTime, thumbnailCount,
+                startMs, endMs);
 
         for (; i < thumbnailCount; i++) {
-            bitmap[i] = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+            bitmaps[i] = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
             tmpBuffer.put(rgb888, (i * thumbnailSize), thumbnailSize);
             tmpBuffer.rewind();
 
             if ((newWidth == width) && (newHeight == height)) {
-                bitmap[i].copyPixelsFromBuffer(tmpBuffer);
+                bitmaps[i].copyPixelsFromBuffer(tmpBuffer);
             } else {
                 /* Copy the out rgb buffer to temp bitmap */
                 tempBitmap.copyPixelsFromBuffer(tmpBuffer);
 
                 /* Create a canvas to resize */
-                final Canvas canvas = new Canvas(bitmap[i]);
+                final Canvas canvas = new Canvas(bitmaps[i]);
                 canvas.drawBitmap(tempBitmap, new Rect(0, 0, newWidth, newHeight),
-                                              new Rect(0, 0, width, height),
-                                              sResizePaint);
+                                              new Rect(0, 0, width, height), sResizePaint);
             }
         }
 
         if (tempBitmap != null) {
             tempBitmap.recycle();
         }
-        return bitmap;
+        return bitmaps;
     }
 
     /**
@@ -4013,7 +3823,7 @@
      * @param isVideo The flag to indicate if the file is video file or not
      *
      **/
-    public void generateAudioGraph(String uniqueId, String inFileName, String OutAudiGraphFileName,
+    void generateAudioGraph(String uniqueId, String inFileName, String OutAudiGraphFileName,
             int frameDuration, int audioChannels, int samplesCount,
             ExtractAudioWaveformProgressListener listener, boolean isVideo) {
         String tempPCMFileName;
@@ -4021,7 +3831,7 @@
         mExtractAudioWaveformProgressListener = listener;
 
         /**
-         * in case of Video , first call will generate the PCM file to make the
+         * In case of Video, first call will generate the PCM file to make the
          * audio graph
          */
         if (isVideo) {
@@ -4029,6 +3839,7 @@
         } else {
             tempPCMFileName = mAudioTrackPCMFilePath;
         }
+
         /**
          * For Video item, generate the PCM
          */
@@ -4039,19 +3850,46 @@
         nativeGenerateAudioGraph(tempPCMFileName, OutAudiGraphFileName, frameDuration,
                 audioChannels, samplesCount);
 
-        /* once the audio graph file is generated, delete the pcm file */
+        /**
+         * Once the audio graph file is generated, delete the pcm file
+         */
         if (isVideo) {
             new File(tempPCMFileName).delete();
         }
     }
 
-    public void clearPreviewSurface(Surface surface) {
-       nativeClearSurface(surface);
+    void clearPreviewSurface(Surface surface) {
+        nativeClearSurface(surface);
+    }
+
+    /**
+     * Grab the semaphore which arbitrates access to the editor
+     *
+     * @throws InterruptedException
+     */
+    void lock() throws InterruptedException {
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            Log.d(TAG, "lock: grabbing semaphore", new Throwable());
+        }
+        mLock.acquire();
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            Log.d(TAG, "lock: grabbed semaphore");
+        }
+    }
+
+    /**
+     * Release the semaphore which arbitrates access to the editor
+     */
+    void unlock() {
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            Log.d(TAG, "unlock: releasing semaphore");
+        }
+        mLock.release();
     }
 
     /**     Native Methods        */
     native Properties getMediaProperties(String file) throws IllegalArgumentException,
-    IllegalStateException, RuntimeException, Exception;
+            IllegalStateException, RuntimeException, Exception;
 
     /**
      * Get the version of ManualEdit.
@@ -4066,7 +3904,7 @@
      * Returns the video thumbnail in an array of integers. Output format is
      * ARGB8888.
      *
-     * @param pixelArray the array that receives the pixelvalues
+     * @param pixelArray the array that receives the pixel values
      * @param width width of the video thumbnail
      * @param height height of the video thumbnail
      * @param timeMS desired time of the thumbnail in ms
@@ -4096,7 +3934,6 @@
      */
     private native void nativeClearSurface(Surface surface);
 
-
     /**
      * Stops the encoding. This method should only be called after encoding has
      * started using method <code> startEncoding</code>
@@ -4106,7 +3943,6 @@
     private native void stopEncoding() throws IllegalStateException, RuntimeException;
 
 
-
     private native void _init(String tempPath, String libraryPath)
             throws IllegalArgumentException, IllegalStateException, RuntimeException;
 
@@ -4114,7 +3950,7 @@
             int callbackAfterFrameCount, boolean loop) throws IllegalArgumentException,
             IllegalStateException, RuntimeException;
 
-    private native void nativePopulateSettings(EditSettings mEditSettings,
+    private native void nativePopulateSettings(EditSettings editSettings,
             PreviewClipProperties mProperties, AudioSettings mAudioSettings)
     throws IllegalArgumentException, IllegalStateException, RuntimeException;
 
diff --git a/media/java/android/media/videoeditor/MediaImageItem.java b/media/java/android/media/videoeditor/MediaImageItem.java
index f1315c0..69088ed 100755
--- a/media/java/android/media/videoeditor/MediaImageItem.java
+++ b/media/java/android/media/videoeditor/MediaImageItem.java
@@ -294,6 +294,8 @@
             return;
         }
 
+        mMANativeHelper.setGeneratePreview(true);
+
         /**
          * Invalidate the end transitions if necessary.
          * This invalidation is necessary for the case in which an effect or
@@ -794,8 +796,8 @@
             return clipSettings;
         }
 
-        PanZoomXa = (100 * start.width()) / width;
-        PanZoomXb = (100 * end.width()) / width;
+        PanZoomXa = (1000 * start.width()) / width;
+        PanZoomXb = (1000 * end.width()) / width;
 
         clipSettings.clipPath = getDecodedImageFileName();
         clipSettings.fileType = mMANativeHelper.getMediaItemFileType(getFileType());
@@ -805,11 +807,11 @@
         clipSettings.endCutPercent = 0;
         clipSettings.panZoomEnabled = true;
         clipSettings.panZoomPercentStart = PanZoomXa;
-        clipSettings.panZoomTopLeftXStart = (start.left * 100) / width;
-        clipSettings.panZoomTopLeftYStart = (start.top * 100) / height;
+        clipSettings.panZoomTopLeftXStart = (start.left * 1000) / width;
+        clipSettings.panZoomTopLeftYStart = (start.top * 1000) / height;
         clipSettings.panZoomPercentEnd = PanZoomXb;
-        clipSettings.panZoomTopLeftXEnd = (end.left * 100) / width;
-        clipSettings.panZoomTopLeftYEnd = (end.top * 100) / height;
+        clipSettings.panZoomTopLeftXEnd = (end.left * 1000) / width;
+        clipSettings.panZoomTopLeftYEnd = (end.top * 1000) / height;
         clipSettings.mediaRendering
             = mMANativeHelper.getMediaItemRenderingMode(getRenderingMode());
 
diff --git a/media/java/android/media/videoeditor/MediaItem.java b/media/java/android/media/videoeditor/MediaItem.java
index a24b46e..d3ab051 100755
--- a/media/java/android/media/videoeditor/MediaItem.java
+++ b/media/java/android/media/videoeditor/MediaItem.java
@@ -176,6 +176,9 @@
             default:
                 throw new IllegalArgumentException("Invalid Rendering Mode");
         }
+
+        mMANativeHelper.setGeneratePreview(true);
+
         mRenderingMode = renderingMode;
         if (mBeginTransition != null) {
             mBeginTransition.invalidate();
@@ -184,7 +187,6 @@
         if (mEndTransition != null) {
             mEndTransition.invalidate();
         }
-        mMANativeHelper.setGeneratePreview(true);
     }
 
     /**
@@ -296,12 +298,11 @@
         mEffects.add(effect);
 
         invalidateTransitions(effect.getStartTime(), effect.getDuration());
-        if (mMANativeHelper != null) {
-            if (effect instanceof EffectKenBurns) {
-                mRegenerateClip = true;
-            }
-            mMANativeHelper.setGeneratePreview(true);
+
+        if (effect instanceof EffectKenBurns) {
+            mRegenerateClip = true;
         }
+        mMANativeHelper.setGeneratePreview(true);
     }
 
     /**
@@ -318,23 +319,23 @@
     public Effect removeEffect(String effectId) {
         for (Effect effect : mEffects) {
             if (effect.getId().equals(effectId)) {
+                mMANativeHelper.setGeneratePreview(true);
+
                 mEffects.remove(effect);
+
                 invalidateTransitions(effect.getStartTime(), effect.getDuration());
-                if (mMANativeHelper != null) {
-                    if (effect instanceof EffectKenBurns) {
-                        if (mGeneratedImageClip != null) {
-                            /**
-                             *  Delete the file
-                             */
-                            new File(mGeneratedImageClip).delete();
-                            /**
-                             *  Invalidate the filename
-                             */
-                            mGeneratedImageClip = null;
-                        }
-                        mRegenerateClip = false;
+                if (effect instanceof EffectKenBurns) {
+                    if (mGeneratedImageClip != null) {
+                        /**
+                         *  Delete the file
+                         */
+                        new File(mGeneratedImageClip).delete();
+                        /**
+                         *  Invalidate the filename
+                         */
+                        mGeneratedImageClip = null;
                     }
-                    mMANativeHelper.setGeneratePreview(true);
+                    mRegenerateClip = false;
                 }
                 return effect;
             }
@@ -448,9 +449,7 @@
 
         mOverlays.add(overlay);
         invalidateTransitions(overlay.getStartTime(), overlay.getDuration());
-        if (mMANativeHelper != null) {
-            mMANativeHelper.setGeneratePreview(true);
-        }
+        mMANativeHelper.setGeneratePreview(true);
     }
 
     /**
@@ -483,10 +482,9 @@
     public Overlay removeOverlay(String overlayId) {
         for (Overlay overlay : mOverlays) {
             if (overlay.getId().equals(overlayId)) {
+                mMANativeHelper.setGeneratePreview(true);
+
                 mOverlays.remove(overlay);
-                if (mMANativeHelper != null) {
-                    mMANativeHelper.setGeneratePreview(true);
-                }
                 if (overlay instanceof OverlayFrame) {
                     ((OverlayFrame)overlay).invalidate();
                 }
diff --git a/media/java/android/media/videoeditor/MediaProperties.java b/media/java/android/media/videoeditor/MediaProperties.java
index 9654a6a..a2e01f6 100755
--- a/media/java/android/media/videoeditor/MediaProperties.java
+++ b/media/java/android/media/videoeditor/MediaProperties.java
@@ -190,15 +190,20 @@
     public static final int FILE_MP3 = 3;
     // 4 is for PCM
     public static final int FILE_JPEG = 5;
-    // 6 is for GIF
-    public static final int FILE_PNG = 7;
+    // 6 is for BMP
+    // 7 is for GIF
+    public static final int FILE_PNG = 8;
+    // 9 is for ARGB8888
+    public static final int FILE_M4V = 10;
     public static final int FILE_UNSUPPORTED = 255;
+
     /**
      * The array of the supported file formats
      */
     private static final int[] SUPPORTED_VIDEO_FILE_FORMATS = new int[] {
         FILE_3GP,
-        FILE_MP4
+        FILE_MP4,
+        FILE_M4V
     };
 
     /**
diff --git a/media/java/android/media/videoeditor/MediaVideoItem.java b/media/java/android/media/videoeditor/MediaVideoItem.java
index 2981b41..bbadd62 100755
--- a/media/java/android/media/videoeditor/MediaVideoItem.java
+++ b/media/java/android/media/videoeditor/MediaVideoItem.java
@@ -120,8 +120,8 @@
 
         switch (mMANativeHelper.getFileType(properties.fileType)) {
             case MediaProperties.FILE_3GP:
-                break;
             case MediaProperties.FILE_MP4:
+            case MediaProperties.FILE_M4V:
                 break;
 
             default:
@@ -130,11 +130,8 @@
 
         switch (mMANativeHelper.getVideoCodecType(properties.videoFormat)) {
             case MediaProperties.VCODEC_H263:
-                break;
             case MediaProperties.VCODEC_H264BP:
-                break;
             case MediaProperties.VCODEC_H264MP:
-                break;
             case MediaProperties.VCODEC_MPEG4:
                 break;
 
@@ -201,6 +198,8 @@
             throw new IllegalArgumentException("setExtractBoundaries: Start time or end time is negative");
         }
 
+        mMANativeHelper.setGeneratePreview(true);
+
         if (beginMs != mBeginBoundaryTimeMs) {
             if (mBeginTransition != null) {
                 mBeginTransition.invalidate();
@@ -215,7 +214,6 @@
 
         mBeginBoundaryTimeMs = beginMs;
         mEndBoundaryTimeMs = endMs;
-        mMANativeHelper.setGeneratePreview(true);
         adjustTransitions();
         mVideoEditor.updateTimelineDuration();
         /**
@@ -263,12 +261,11 @@
             throw new IllegalArgumentException("Invalid Time duration");
         }
 
-        if ((width <=0) || (height <= 0)) {
+        if ((width <= 0) || (height <= 0)) {
             throw new IllegalArgumentException("Invalid Dimensions");
         }
 
-        return mMANativeHelper.getPixels(super.getFilename(),
-                width, height,timeMs);
+        return mMANativeHelper.getPixels(super.getFilename(), width, height,timeMs);
     }
 
     /*
@@ -613,6 +610,7 @@
      * @param muted true to mute the media item
      */
     public void setMute(boolean muted) {
+        mMANativeHelper.setGeneratePreview(true);
         mMuted = muted;
         if (mBeginTransition != null) {
             mBeginTransition.invalidate();
@@ -620,7 +618,6 @@
         if (mEndTransition != null) {
             mEndTransition.invalidate();
         }
-        mMANativeHelper.setGeneratePreview(true);
     }
 
     /**
diff --git a/media/java/android/media/videoeditor/Overlay.java b/media/java/android/media/videoeditor/Overlay.java
index ec03966..a070eb4 100755
--- a/media/java/android/media/videoeditor/Overlay.java
+++ b/media/java/android/media/videoeditor/Overlay.java
@@ -106,7 +106,6 @@
      * @param durationMs The duration in milliseconds
      */
     public void setDuration(long durationMs) {
-
         if (durationMs < 0) {
             throw new IllegalArgumentException("Invalid duration");
         }
@@ -115,11 +114,12 @@
             throw new IllegalArgumentException("Duration is too large");
         }
 
+        getMediaItem().getNativeContext().setGeneratePreview(true);
+
         final long oldDurationMs = mDurationMs;
         mDurationMs = durationMs;
 
-        mMediaItem.invalidateTransitions(mStartTimeMs, oldDurationMs,
-                                         mStartTimeMs, mDurationMs);
+        mMediaItem.invalidateTransitions(mStartTimeMs, oldDurationMs, mStartTimeMs, mDurationMs);
     }
 
     /**
@@ -143,11 +143,12 @@
             throw new IllegalArgumentException("Start time is too large");
         }
 
+        getMediaItem().getNativeContext().setGeneratePreview(true);
+
         final long oldStartTimeMs = mStartTimeMs;
         mStartTimeMs = startTimeMs;
 
-        mMediaItem.invalidateTransitions(oldStartTimeMs, mDurationMs,
-                                         mStartTimeMs, mDurationMs);
+        mMediaItem.invalidateTransitions(oldStartTimeMs, mDurationMs, mStartTimeMs, mDurationMs);
     }
 
     /**
@@ -161,14 +162,15 @@
             throw new IllegalArgumentException("Invalid start time or duration");
         }
 
+        getMediaItem().getNativeContext().setGeneratePreview(true);
+
         final long oldStartTimeMs = mStartTimeMs;
         final long oldDurationMs = mDurationMs;
 
         mStartTimeMs = startTimeMs;
         mDurationMs = durationMs;
 
-        mMediaItem.invalidateTransitions(oldStartTimeMs, oldDurationMs,
-                                         mStartTimeMs, mDurationMs);
+        mMediaItem.invalidateTransitions(oldStartTimeMs, oldDurationMs, mStartTimeMs, mDurationMs);
     }
 
     /**
diff --git a/media/java/android/media/videoeditor/OverlayFrame.java b/media/java/android/media/videoeditor/OverlayFrame.java
index 0a928fe..2bb9a1c 100755
--- a/media/java/android/media/videoeditor/OverlayFrame.java
+++ b/media/java/android/media/videoeditor/OverlayFrame.java
@@ -120,6 +120,10 @@
      * @param bitmap The overlay bitmap.
      */
     public void setBitmap(Bitmap bitmap) {
+        getMediaItem().getNativeContext().setGeneratePreview(true);
+
+        invalidate();
+
         mBitmap = bitmap;
         if (mFilename != null) {
             /**
@@ -238,12 +242,16 @@
      * Delete the overlay files
      */
     void invalidate() {
-        if (mFilename != null) {
-            new File(mFilename).delete();
-            mFilename = null;
+        if (mBitmap != null) {
             mBitmap.recycle();
             mBitmap = null;
         }
+
+        if (mFilename != null) {
+            new File(mFilename).delete();
+            mFilename = null;
+        }
+
         if (mBitmapFileName != null) {
             new File(mBitmapFileName).delete();
             mBitmapFileName = null;
diff --git a/media/java/android/media/videoeditor/VideoEditorImpl.java b/media/java/android/media/videoeditor/VideoEditorImpl.java
index 54b3837..cc847ef 100755
--- a/media/java/android/media/videoeditor/VideoEditorImpl.java
+++ b/media/java/android/media/videoeditor/VideoEditorImpl.java
@@ -27,20 +27,17 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.Semaphore;
-
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 import org.xmlpull.v1.XmlSerializer;
 
+import android.graphics.Bitmap;
 import android.graphics.Rect;
 import android.util.Log;
 import android.util.Xml;
 import android.view.Surface;
 import android.view.SurfaceHolder;
 
-import android.graphics.Bitmap;
-
 /**
  * The VideoEditor implementation {@hide}
  */
@@ -54,15 +51,6 @@
      *  The project filename
      */
     private static final String PROJECT_FILENAME = "videoeditor.xml";
-    /*
-     *  Semaphore to control preview calls
-     */
-    final Semaphore mPreviewSemaphore = new Semaphore(1, true);
-
-    /*
-     *  Semaphore to control export calls
-     */
-    final Semaphore mExportSemaphore = new Semaphore(1, true);
 
     /*
      *  XML tags
@@ -74,8 +62,7 @@
     private static final String TAG_TRANSITION = "transition";
     private static final String TAG_OVERLAYS = "overlays";
     private static final String TAG_OVERLAY = "overlay";
-    private static final String TAG_OVERLAY_USER_ATTRIBUTES =
-                                                      "overlay_user_attributes";
+    private static final String TAG_OVERLAY_USER_ATTRIBUTES = "overlay_user_attributes";
     private static final String TAG_EFFECTS = "effects";
     private static final String TAG_EFFECT = "effect";
     private static final String TAG_AUDIO_TRACKS = "audio_tracks";
@@ -86,7 +73,6 @@
     private static final String ATTR_AUDIO_WAVEFORM_FILENAME = "waveform";
     private static final String ATTR_RENDERING_MODE = "rendering_mode";
     private static final String ATTR_ASPECT_RATIO = "aspect_ratio";
-    private static final String ATTR_PREVIEW_PREPARE = "preview_prepare_invalid";
     private static final String ATTR_REGENERATE_PCM = "regeneratePCMFlag";
     private static final String ATTR_TYPE = "type";
     private static final String ATTR_DURATION = "duration";
@@ -116,18 +102,12 @@
     private static final String ATTR_DUCK_ENABLED = "ducking_enabled";
     private static final String ATTR_DUCK_THRESHOLD = "ducking_threshold";
     private static final String ATTR_DUCKED_TRACK_VOLUME = "ducking_volume";
-    private static final String ATTR_GENERATED_IMAGE_CLIP =
-                                                         "generated_image_clip";
-    private static final String ATTR_GENERATED_TRANSITION_CLIP =
-                                                    "generated_transition_clip";
-    private static final String ATTR_IS_TRANSITION_GENERATED =
-                                                      "is_transition_generated";
-    private static final String ATTR_OVERLAY_RGB_FILENAME =
-                                                         "overlay_rgb_filename";
-    private static final String ATTR_OVERLAY_FRAME_WIDTH =
-                                                          "overlay_frame_width";
-    private static final String ATTR_OVERLAY_FRAME_HEIGHT =
-                                                         "overlay_frame_height";
+    private static final String ATTR_GENERATED_IMAGE_CLIP = "generated_image_clip";
+    private static final String ATTR_GENERATED_TRANSITION_CLIP = "generated_transition_clip";
+    private static final String ATTR_IS_TRANSITION_GENERATED = "is_transition_generated";
+    private static final String ATTR_OVERLAY_RGB_FILENAME = "overlay_rgb_filename";
+    private static final String ATTR_OVERLAY_FRAME_WIDTH = "overlay_frame_width";
+    private static final String ATTR_OVERLAY_FRAME_HEIGHT = "overlay_frame_height";
 
     /*
      *  Instance variables
@@ -143,7 +123,6 @@
      * Private Object for calling native Methods via MediaArtistNativeHelper
      */
     private MediaArtistNativeHelper mMANativeHelper;
-    private VideoEditor veObject = null;
     private boolean mPreviewInProgress = false;
 
     /**
@@ -153,7 +132,6 @@
      *        related to the project
      */
     public VideoEditorImpl(String projectPath) throws IOException {
-
         mMANativeHelper = new MediaArtistNativeHelper(projectPath, this);
         mProjectPath = projectPath;
         final File projectXml = new File(projectPath, PROJECT_FILENAME);
@@ -184,6 +162,7 @@
         if (audioTrack == null) {
             throw new IllegalArgumentException("Audio Track is null");
         }
+
         if (mAudioTracks.size() == 1) {
             throw new IllegalArgumentException("No more tracks can be added");
         }
@@ -196,16 +175,16 @@
         /*
          * Form the audio PCM file path
          */
-        String audioTrackPCMFilePath = String.format(mProjectPath + "/"
+        final String audioTrackPCMFilePath = String.format(mProjectPath + "/"
                     + "AudioPcm" + audioTrack.getId() + ".pcm");
 
         /*
          * Create PCM only if not generated in previous session
          */
-        if (new File(audioTrackPCMFilePath).exists())
-        {
+        if (new File(audioTrackPCMFilePath).exists()) {
             mMANativeHelper.setAudioflag(false);
         }
+
         mMANativeHelper.setGeneratePreview(true);
     }
 
@@ -223,15 +202,14 @@
          * Add the Media item to MediaItem list
          */
         if (mMediaItems.contains(mediaItem)) {
-            throw new IllegalArgumentException("Media item already exists: " +
-            mediaItem.getId());
+            throw new IllegalArgumentException("Media item already exists: " + mediaItem.getId());
         }
 
         /*
          *  Invalidate the end transition if necessary
          */
         final int mediaItemsCount = mMediaItems.size();
-        if ( mediaItemsCount > 0) {
+        if (mediaItemsCount > 0) {
             removeTransitionAfter(mediaItemsCount - 1);
         }
 
@@ -258,6 +236,7 @@
         if (transition == null) {
             throw new IllegalArgumentException("Null Transition");
         }
+
         final MediaItem beforeMediaItem = transition.getBeforeMediaItem();
         final MediaItem afterMediaItem = transition.getAfterMediaItem();
         /*
@@ -266,15 +245,16 @@
         if (mMediaItems == null) {
             throw new IllegalArgumentException("No media items are added");
         }
-        if ((afterMediaItem != null) &&  (beforeMediaItem != null)) {
-            int afterMediaItemIndex = mMediaItems.indexOf(afterMediaItem);
-            int beforeMediaItemIndex = mMediaItems.indexOf(beforeMediaItem);
 
+        if ((afterMediaItem != null) &&  (beforeMediaItem != null)) {
+            final int afterMediaItemIndex = mMediaItems.indexOf(afterMediaItem);
+            final int beforeMediaItemIndex = mMediaItems.indexOf(beforeMediaItem);
 
             if ((afterMediaItemIndex == -1) || (beforeMediaItemIndex == -1)) {
                 throw new IllegalArgumentException
                     ("Either of the mediaItem is not found in the list");
             }
+
             if (afterMediaItemIndex != (beforeMediaItemIndex - 1) ) {
                 throw new IllegalArgumentException("MediaItems are not in sequence");
             }
@@ -334,9 +314,10 @@
             case MediaProperties.ACODEC_AMRNB:
                 break;
 
-            default :
+            default: {
                 String message = "Unsupported audio codec type " + audioCodec;
                 throw new IllegalArgumentException(message);
+            }
         }
 
         switch (videoCodec) {
@@ -347,9 +328,10 @@
             case MediaProperties.VCODEC_MPEG4:
                 break;
 
-            default :
+            default: {
                 String message = "Unsupported video codec type " + videoCodec;
                 throw new IllegalArgumentException(message);
+            }
         }
 
         export(filename, height, bitrate, listener);
@@ -360,13 +342,15 @@
      */
     public void export(String filename, int height, int bitrate,
                        ExportProgressListener listener) throws IOException {
-        if ( filename == null) {
+        if (filename == null) {
             throw new IllegalArgumentException("export: filename is null");
         }
-        File tempPathFile = new File(filename);
+
+        final File tempPathFile = new File(filename);
         if (tempPathFile == null) {
             throw new IOException(filename + "can not be created");
         }
+
         if (mMediaItems.size() == 0) {
             throw new IllegalStateException("No MediaItems added");
         }
@@ -381,10 +365,12 @@
             case MediaProperties.HEIGHT_720:
                 break;
 
-            default:
+            default: {
                 String message = "Unsupported height value " + height;
                 throw new IllegalArgumentException(message);
+            }
         }
+
         switch (bitrate) {
             case MediaProperties.BITRATE_28K:
                 break;
@@ -413,20 +399,24 @@
             case MediaProperties.BITRATE_8M:
                 break;
 
-            default:
+            default: {
                 final String message = "Unsupported bitrate value " + bitrate;
                 throw new IllegalArgumentException(message);
+            }
         }
 
+        boolean semAcquireDone = false;
         try {
-            mExportSemaphore.acquire();
+            mMANativeHelper.lock();
+            semAcquireDone = true;
             mMANativeHelper.export(filename, mProjectPath, height,bitrate,
-                               mMediaItems, mTransitions, mAudioTracks,
-                               listener);
+                               mMediaItems, mTransitions, mAudioTracks, listener);
         } catch (InterruptedException  ex) {
             Log.e(TAG, "Sem acquire NOT successful in export");
         } finally {
-            mExportSemaphore.release();
+            if (semAcquireDone) {
+                mMANativeHelper.unlock();
+            }
         }
     }
 
@@ -436,18 +426,18 @@
     public void generatePreview(MediaProcessingProgressListener listener) {
         boolean semAcquireDone = false;
         try {
-            mPreviewSemaphore.acquire();
+            mMANativeHelper.lock();
             semAcquireDone = true;
-            mMANativeHelper.setGeneratePreview(true);
+
             if ((mMediaItems.size() > 0) || (mAudioTracks.size() > 0)) {
-                mMANativeHelper.previewStoryBoard(mMediaItems, mTransitions,
-                        mAudioTracks, listener);
+                mMANativeHelper.previewStoryBoard(mMediaItems, mTransitions, mAudioTracks,
+                        listener);
             }
         } catch (InterruptedException  ex) {
             Log.e(TAG, "Sem acquire NOT successful in previewStoryBoard");
         } finally {
             if (semAcquireDone) {
-                mPreviewSemaphore.release();
+                mMANativeHelper.unlock();
             }
         }
     }
@@ -553,29 +543,28 @@
 
         if (afterAudioTrackId == null) {
             mAudioTracks.add(0, audioTrack);
+            mMANativeHelper.setGeneratePreview(true);
         } else {
             final int audioTrackCount = mAudioTracks.size();
             for (int i = 0; i < audioTrackCount; i++) {
                 AudioTrack at = mAudioTracks.get(i);
                 if (at.getId().equals(afterAudioTrackId)) {
                     mAudioTracks.add(i + 1, audioTrack);
+                    mMANativeHelper.setGeneratePreview(true);
                     return;
                 }
             }
-            throw new IllegalArgumentException("AudioTrack not found: "
-                                                           + afterAudioTrackId);
+
+            throw new IllegalArgumentException("AudioTrack not found: " + afterAudioTrackId);
         }
-        mMANativeHelper.setGeneratePreview(true);
     }
 
     /*
      * {@inheritDoc}
      */
-    public synchronized void insertMediaItem(MediaItem mediaItem,
-                                             String afterMediaItemId) {
+    public synchronized void insertMediaItem(MediaItem mediaItem, String afterMediaItemId) {
         if (mMediaItems.contains(mediaItem)) {
-            throw new IllegalArgumentException("Media item already exists: "
-                                                           + mediaItem.getId());
+            throw new IllegalArgumentException("Media item already exists: " + mediaItem.getId());
         }
 
         if (afterMediaItemId == null) {
@@ -585,9 +574,11 @@
                  */
                 removeTransitionBefore(0);
             }
+
             mMediaItems.add(0, mediaItem);
             computeTimelineDuration();
             generateProjectThumbnail();
+            mMANativeHelper.setGeneratePreview(true);
         } else {
             final int mediaItemCount = mMediaItems.size();
             for (int i = 0; i < mediaItemCount; i++) {
@@ -606,29 +597,25 @@
                     return;
                 }
             }
-            throw new IllegalArgumentException("MediaItem not found: "
-                                                            + afterMediaItemId);
+
+            throw new IllegalArgumentException("MediaItem not found: " + afterMediaItemId);
         }
-        mMANativeHelper.setGeneratePreview(true);
     }
 
     /*
      * {@inheritDoc}
      */
-    public synchronized void moveAudioTrack(String audioTrackId,
-                                            String afterAudioTrackId) {
+    public synchronized void moveAudioTrack(String audioTrackId, String afterAudioTrackId) {
         throw new IllegalStateException("Not supported");
     }
 
     /*
      * {@inheritDoc}
      */
-    public synchronized void moveMediaItem(String mediaItemId,
-                                           String afterMediaItemId) {
+    public synchronized void moveMediaItem(String mediaItemId, String afterMediaItemId) {
         final MediaItem moveMediaItem = removeMediaItem(mediaItemId,true);
         if (moveMediaItem == null) {
-            throw new IllegalArgumentException("Target MediaItem not found: "
-                                                                 + mediaItemId);
+            throw new IllegalArgumentException("Target MediaItem not found: " + mediaItemId);
         }
 
         if (afterMediaItemId == null) {
@@ -643,6 +630,8 @@
                  */
                 mMediaItems.add(0, moveMediaItem);
                 computeTimelineDuration();
+                mMANativeHelper.setGeneratePreview(true);
+
                 generateProjectThumbnail();
             } else {
                 throw new IllegalStateException("Cannot move media item (it is the only item)");
@@ -666,10 +655,8 @@
                 }
             }
 
-            throw new IllegalArgumentException("MediaItem not found: "
-                                                            + afterMediaItemId);
+            throw new IllegalArgumentException("MediaItem not found: " + afterMediaItemId);
         }
-        mMANativeHelper.setGeneratePreview(true);
     }
 
     /*
@@ -681,16 +668,15 @@
         mAudioTracks.clear();
         mTransitions.clear();
         mMANativeHelper.releaseNativeHelper();
-        if (mMANativeHelper!= null)
-            mMANativeHelper = null;
-        if (veObject != null)
-            veObject= null;
+        mMANativeHelper = null;
     }
 
     /*
      * {@inheritDoc}
      */
     public synchronized void removeAllMediaItems() {
+        mMANativeHelper.setGeneratePreview(true);
+
         mMediaItems.clear();
 
         /**
@@ -702,7 +688,6 @@
         mTransitions.clear();
 
         mDurationMs = 0;
-        mMANativeHelper.setGeneratePreview(true);
         /**
          * If a thumbnail already exists, then delete it
          */
@@ -722,11 +707,10 @@
             audioTrack.invalidate();
             mMANativeHelper.invalidatePcmFile();
             mMANativeHelper.setAudioflag(true);
-        }
-        else {
+            mMANativeHelper.setGeneratePreview(true);
+        } else {
             throw new IllegalArgumentException(" No more audio tracks");
         }
-        mMANativeHelper.setGeneratePreview(true);
         return audioTrack;
     }
 
@@ -737,6 +721,7 @@
         final String firstItemString = mMediaItems.get(0).getId();
         final MediaItem mediaItem = getMediaItem(mediaItemId);
         if (mediaItem != null) {
+            mMANativeHelper.setGeneratePreview(true);
             /**
              *  Remove the media item
              */
@@ -760,10 +745,10 @@
             removeAdjacentTransitions(mediaItem);
             computeTimelineDuration();
         }
-        mMANativeHelper.setGeneratePreview(true);
+
         /**
          * If string equals first mediaItem, then
-         * generate Project thumbail
+         * generate Project thumbnail
          */
         if (firstItemString.equals(mediaItemId)) {
             generateProjectThumbnail();
@@ -784,6 +769,7 @@
 
         final MediaItem mediaItem = getMediaItem(mediaItemId);
         if (mediaItem != null) {
+            mMANativeHelper.setGeneratePreview(true);
             /**
              *  Remove the media item
              */
@@ -794,7 +780,6 @@
             removeAdjacentTransitions(mediaItem);
             computeTimelineDuration();
         }
-        mMANativeHelper.setGeneratePreview(true);
 
         /**
          * If string equals first mediaItem, then
@@ -812,10 +797,11 @@
     public synchronized Transition removeTransition(String transitionId) {
         final Transition transition = getTransition(transitionId);
         if (transition == null) {
-            throw new IllegalStateException("Transition not found: "
-                                                                + transitionId);
+            throw new IllegalStateException("Transition not found: " + transitionId);
         }
 
+        mMANativeHelper.setGeneratePreview(true);
+
         /**
          *  Remove the transition references
          */
@@ -832,7 +818,6 @@
         mTransitions.remove(transition);
         transition.invalidate();
         computeTimelineDuration();
-        mMANativeHelper.setGeneratePreview(true);
         return transition;
     }
 
@@ -841,63 +826,43 @@
      */
     public long renderPreviewFrame(SurfaceHolder surfaceHolder, long timeMs,
                                     OverlayData overlayData) {
-        long result = 0;
-        int surfaceWidth = 0;
-        int surfaceHeight = 0;
-        Rect frame;
-
         if (surfaceHolder == null) {
             throw new IllegalArgumentException("Surface Holder is null");
         }
 
+        final Surface surface = surfaceHolder.getSurface();
+        if (surface == null) {
+            throw new IllegalArgumentException("Surface could not be retrieved from Surface holder");
+        }
+
         if (timeMs < 0) {
             throw new IllegalArgumentException("requested time not correct");
         } else if (timeMs > mDurationMs) {
             throw new IllegalArgumentException("requested time more than duration");
         }
-        if (mMANativeHelper != null) {
-            if (mMANativeHelper.mInvalidatePreviewArray) {
-                return -1;
-            }
-        }
-        else {
-            return -1;
-        }
+
+        long result = 0;
+
         boolean semAcquireDone = false;
-
-        try{
-            mPreviewSemaphore.acquire();
+        try {
+            mMANativeHelper.lock();
             semAcquireDone = true;
-            Surface surface = surfaceHolder.getSurface();
-            frame = surfaceHolder.getSurfaceFrame();
-            surfaceWidth = frame.width();
-            surfaceHeight = frame.height();
 
-            if (surface == null) {
-                throw new RuntimeException("Surface could not be retrieved from Surface holder");
+            if (mMediaItems.size() > 0) {
+                final Rect frame = surfaceHolder.getSurfaceFrame();
+                result = mMANativeHelper.renderPreviewFrame(surface,
+                        timeMs, frame.width(), frame.height(), overlayData);
+            } else {
+                result = 0;
             }
-
-            if (!mMANativeHelper.mInvalidatePreviewArray) {
-                if (mMediaItems.size() > 0) {
-                    result = mMANativeHelper.renderPreviewFrame(surface,
-                                             timeMs,surfaceWidth,surfaceHeight, overlayData);
-                }
-                else {
-                    result = 0;
-                }
-            }
-            else {
-                result = -1;
-            }
-
         } catch (InterruptedException  ex) {
             Log.e(TAG, "Sem acquire NOT successful in renderPreviewFrame");
-        }
-        finally {
+        } finally {
             if (semAcquireDone) {
-                mPreviewSemaphore.release();
+                mMANativeHelper.unlock();
             }
         }
+
         return result;
     }
 
@@ -926,10 +891,6 @@
                             mAspectRatio =
                                    Integer.parseInt(parser.getAttributeValue("",
                                    ATTR_ASPECT_RATIO));
-                            final boolean mInvalidatePreviewArray =
-                               Boolean.parseBoolean(parser.getAttributeValue("",
-                                    ATTR_PREVIEW_PREPARE));
-                            mMANativeHelper.setGeneratePreview(mInvalidatePreviewArray);
 
                             final boolean mRegenPCM =
                                Boolean.parseBoolean(parser.getAttributeValue("",
@@ -1126,7 +1087,7 @@
             final String transitionFile = parser.getAttributeValue("",
                                                 ATTR_GENERATED_TRANSITION_CLIP);
 
-            if (new File(transitionFile).exists() == true) {
+            if (new File(transitionFile).exists()) {
                 transition.setFilename(transitionFile);
             } else {
                 transition.setFilename(null);
@@ -1300,8 +1261,6 @@
         serializer.startTag("", TAG_PROJECT);
         serializer.attribute("",
                              ATTR_ASPECT_RATIO, Integer.toString(mAspectRatio));
-        serializer.attribute("", ATTR_PREVIEW_PREPARE,
-                        Boolean.toString(mMANativeHelper.getGeneratePreview()));
 
         serializer.attribute("", ATTR_REGENERATE_PCM,
                         Boolean.toString(mMANativeHelper.getAudioflag()));
@@ -1551,56 +1510,54 @@
         if (surfaceHolder == null) {
             throw new IllegalArgumentException();
         }
+
+        final Surface surface = surfaceHolder.getSurface();
+        if (surface == null) {
+            throw new IllegalArgumentException("Surface could not be retrieved from surface holder");
+        }
+
         if (listener == null) {
             throw new IllegalArgumentException();
         }
+
         if (fromMs >= mDurationMs) {
-            throw new IllegalArgumentException("requested time not correct");
+            throw new IllegalArgumentException("Requested time not correct");
         }
 
         if (fromMs < 0) {
-            throw new IllegalArgumentException("requested time not correct");
+            throw new IllegalArgumentException("Requested time not correct");
         }
 
         boolean semAcquireDone = false;
         try{
-            mPreviewSemaphore.acquire();
+            mMANativeHelper.lock();
             semAcquireDone = true;
-        } catch (InterruptedException  ex) {
-            Log.e(TAG, "Sem acquire NOT successful in startPreview");
-        }
-
-        if (semAcquireDone) {
-            Surface mSurface = surfaceHolder.getSurface();
-
-            if (mSurface == null) {
-                throw new RuntimeException("Surface could not be retrieved from surface holder");
-            }
 
             if (mMediaItems.size() > 0) {
-                try {
-                    mMANativeHelper.previewStoryBoard(mMediaItems, mTransitions,
-                                                      mAudioTracks, null);
-                    mMANativeHelper.doPreview(mSurface, fromMs, toMs, loop,
-                                     callbackAfterFrameCount, listener);
-                    mPreviewInProgress = true;
-                } catch (IllegalArgumentException ex) {
-                    mPreviewSemaphore.release();
-                    Log.e(TAG, "Illegal Argument exception in do preview");
-                    throw ex;
-                } catch (IllegalStateException ex) {
-                    mPreviewSemaphore.release();
-                    Log.e(TAG, "Illegal State exception in do preview");
-                    throw ex;
-                } catch (RuntimeException ex) {
-                    mPreviewSemaphore.release();
-                    Log.e(TAG, "Runtime exception in do preview");
-                    throw ex;
-                }
+                mMANativeHelper.previewStoryBoard(mMediaItems, mTransitions,
+                                                  mAudioTracks, null);
+                mMANativeHelper.doPreview(surface, fromMs, toMs, loop,
+                                 callbackAfterFrameCount, listener);
+                mPreviewInProgress = true;
             }
             /**
              *  release on complete by calling stopPreview
              */
+        } catch (InterruptedException  ex) {
+            Log.e(TAG, "Sem acquire NOT successful in startPreview");
+        } catch (IllegalArgumentException ex) {
+            Log.e(TAG, "Illegal Argument exception in do preview");
+            throw ex;
+        } catch (IllegalStateException ex) {
+            Log.e(TAG, "Illegal State exception in do preview");
+            throw ex;
+        } catch (RuntimeException ex) {
+            Log.e(TAG, "Runtime exception in do preview");
+            throw ex;
+        } finally {
+            if (semAcquireDone) {
+                mMANativeHelper.unlock();
+            }
         }
     }
 
@@ -1614,10 +1571,9 @@
             /**
              *  release the sem acquired in startPreview
              */
-            mPreviewSemaphore.release();
+            mMANativeHelper.unlock();
             return result;
-        }
-        else {
+        } else {
             return 0;
         }
     }
@@ -1662,6 +1618,7 @@
             Transition t = it.next();
             if (t.getBeforeMediaItem() == mediaItem) {
                 it.remove();
+                mMANativeHelper.setGeneratePreview(true);
                 t.invalidate();
                 mediaItem.setBeginTransition(null);
                 if (index > 0) {
@@ -1684,6 +1641,7 @@
             Transition t = it.next();
             if (t.getAfterMediaItem() == mediaItem) {
                 it.remove();
+                mMANativeHelper.setGeneratePreview(true);
                 t.invalidate();
                 mediaItem.setEndTransition(null);
                 /**
@@ -1730,22 +1688,22 @@
         if (mMediaItems.size() > 0) {
             MediaItem mI = mMediaItems.get(0);
             /*
-             * Lets initialiZe the width for default aspect ratio i.e 16:9
+             * Lets initialize the width for default aspect ratio i.e 16:9
              */
             int height = 480;
             int width = 854;
             switch (mI.getAspectRatio()) {
                 case MediaProperties.ASPECT_RATIO_3_2:
-                    width =  720;
+                    width = 720;
                     break;
                 case MediaProperties.ASPECT_RATIO_4_3:
-                    width =  640;
+                    width = 640;
                     break;
                 case MediaProperties.ASPECT_RATIO_5_3:
-                    width =  800;
+                    width = 800;
                     break;
                 case MediaProperties.ASPECT_RATIO_11_9:
-                    width =  586;
+                    width = 586;
                     break;
                 case MediaProperties.ASPECT_RATIO_16_9:
                 case MediaProperties.ASPECT_RATIO_UNDEFINED:
@@ -1756,10 +1714,11 @@
             try {
                 projectBitmap = mI.getThumbnail(width, height, 500);
             } catch (IllegalArgumentException e) {
-                throw new IllegalArgumentException ("Illegal Argument Error creating project thumbnail");
+                throw new IllegalArgumentException ("Illegal argument error creating project thumbnail");
             } catch (IOException e) {
                 throw new IllegalArgumentException ("IO Error creating project thumbnail");
             }
+
             try {
                 FileOutputStream stream = new FileOutputStream(mProjectPath + "/"
                                                           + THUMBNAIL_FILENAME);
@@ -1767,7 +1726,6 @@
                 stream.flush();
                 stream.close();
             } catch (IOException e) {
-
                 throw new IllegalArgumentException ("Error creating project thumbnail");
             } finally {
                 projectBitmap.recycle();
@@ -1788,7 +1746,7 @@
 
         final Surface surface = surfaceHolder.getSurface();
         if (surface == null) {
-            throw new RuntimeException("Surface could not be retrieved from surface holder");
+            throw new IllegalArgumentException("Surface could not be retrieved from surface holder");
         }
 
         if (mMANativeHelper != null) {
diff --git a/media/jni/mediaeditor/VideoEditorClasses.cpp b/media/jni/mediaeditor/VideoEditorClasses.cpp
index 369faa9..8a35041 100755
--- a/media/jni/mediaeditor/VideoEditorClasses.cpp
+++ b/media/jni/mediaeditor/VideoEditorClasses.cpp
@@ -145,6 +145,7 @@
     VIDEOEDIT_JAVA_CONSTANT_INIT("MP3",         M4VIDEOEDITING_kFileType_MP3),
     VIDEOEDIT_JAVA_CONSTANT_INIT("PCM",         M4VIDEOEDITING_kFileType_PCM),
     VIDEOEDIT_JAVA_CONSTANT_INIT("JPG",         M4VIDEOEDITING_kFileType_JPG),
+    VIDEOEDIT_JAVA_CONSTANT_INIT("M4V",         M4VIDEOEDITING_kFileType_M4V),
     VIDEOEDIT_JAVA_CONSTANT_INIT("UNSUPPORTED", M4VIDEOEDITING_kFileType_Unsupported)
 };
 
@@ -330,6 +331,7 @@
     VIDEOEDIT_JAVA_CONSTANT_INIT("JPG",         VideoEditClasses_kFileType_JPG),
     VIDEOEDIT_JAVA_CONSTANT_INIT("GIF",         VideoEditClasses_kFileType_GIF),
     VIDEOEDIT_JAVA_CONSTANT_INIT("PNG",         VideoEditClasses_kFileType_PNG),
+    VIDEOEDIT_JAVA_CONSTANT_INIT("M4V",         VideoEditClasses_kFileType_M4V),
     VIDEOEDIT_JAVA_CONSTANT_INIT("UNSUPPORTED", VideoEditClasses_kFileType_Unsupported)
 };
 
@@ -1548,7 +1550,7 @@
 
             // Set the panZoomPercentStart field.
             pEnv->SetIntField(object, fieldIds.panZoomPercentStart,
-                (100 - pSettings->xVSS.PanZoomXa));
+                (1000 - pSettings->xVSS.PanZoomXa));
 
             // Set the panZoomTopLeftXStart field.
             pEnv->SetIntField(object, fieldIds.panZoomTopLeftXStart,
@@ -1560,7 +1562,7 @@
 
             // Set the panZoomPercentEnd field.
             pEnv->SetIntField(object, fieldIds.panZoomPercentEnd,
-                (100 - pSettings->xVSS.PanZoomXb));
+                (1000 - pSettings->xVSS.PanZoomXb));
 
             // Set the panZoomTopLeftXEnd field.
             pEnv->SetIntField(object, fieldIds.panZoomTopLeftXEnd,
diff --git a/media/jni/mediaeditor/VideoEditorClasses.h b/media/jni/mediaeditor/VideoEditorClasses.h
index 3c8f055..045f229 100755
--- a/media/jni/mediaeditor/VideoEditorClasses.h
+++ b/media/jni/mediaeditor/VideoEditorClasses.h
@@ -91,8 +91,11 @@
     VideoEditClasses_kFileType_MP3,
     VideoEditClasses_kFileType_PCM,
     VideoEditClasses_kFileType_JPG,
+    VideoEditClasses_kFileType_BMP,
     VideoEditClasses_kFileType_GIF,
     VideoEditClasses_kFileType_PNG,
+    VideoEditClasses_kFileType_ARGB8888,
+    VideoEditClasses_kFileType_M4V,
     VideoEditClasses_kFileType_Unsupported
 } VideoEditClasses_FileType;
 
diff --git a/media/jni/mediaeditor/VideoEditorJava.cpp b/media/jni/mediaeditor/VideoEditorJava.cpp
index 1d610f6..884256a 100755
--- a/media/jni/mediaeditor/VideoEditorJava.cpp
+++ b/media/jni/mediaeditor/VideoEditorJava.cpp
@@ -410,7 +410,7 @@
             (*pValue) = pEnv->GetStaticIntField(clazz, fieldId);
 
             // Log the value.
-            VIDEOEDIT_LOG_EXCEPTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_JAVA",
+            VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_JAVA",
                     "videoEditJava_getStaticIntField, %s = %d", pName, (*pValue));
         }
         else
diff --git a/media/jni/mediaeditor/VideoEditorMain.cpp b/media/jni/mediaeditor/VideoEditorMain.cpp
index 4149bc9..221bfa1 100755
--- a/media/jni/mediaeditor/VideoEditorMain.cpp
+++ b/media/jni/mediaeditor/VideoEditorMain.cpp
@@ -307,7 +307,7 @@
 };
 
 // temp file name of VSS out file
-#define TEMP_MCS_OUT_FILE_PATH "/tmpOut.3gp"
+#define TEMP_MCS_OUT_FILE_PATH "tmpOut.3gp"
 
 void
 getClipSetting(
@@ -1144,13 +1144,13 @@
     // generate the path for temp 3gp output file
     pTemp3gpFilePath = (M4OSA_Char*) M4OSA_malloc (
         (M4OSA_chrLength((M4OSA_Char*)pContext->initParams.pTempPath)
-        + M4OSA_chrLength ((M4OSA_Char*)TEMP_MCS_OUT_FILE_PATH)) , 0x0,
+        + M4OSA_chrLength ((M4OSA_Char*)TEMP_MCS_OUT_FILE_PATH)) + 1 /* for null termination */ , 0x0,
         (M4OSA_Char*) "Malloc for temp 3gp file");
     if ( pTemp3gpFilePath != M4OSA_NULL )
     {
         M4OSA_memset(pTemp3gpFilePath  ,
             M4OSA_chrLength((M4OSA_Char*)pContext->initParams.pTempPath)
-            + M4OSA_chrLength((M4OSA_Char*)TEMP_MCS_OUT_FILE_PATH), 0);
+            + M4OSA_chrLength((M4OSA_Char*)TEMP_MCS_OUT_FILE_PATH) + 1, 0);
         M4OSA_chrNCat ( (M4OSA_Char*)pTemp3gpFilePath,
             (M4OSA_Char*)pContext->initParams.pTempPath  ,
             M4OSA_chrLength ((M4OSA_Char*)pContext->initParams.pTempPath));
@@ -2385,7 +2385,7 @@
                                              "not initialized");
 
     // We start in Analyzing state
-    pContext->state = ManualEditState_ANALYZING;
+    pContext->state = ManualEditState_INITIALIZED;
     M4OSA_ERR          completionResult = M4VSS3GPP_WAR_ANALYZING_DONE;
     ManualEditState    completionState  = ManualEditState_OPENED;
     ManualEditState    errorState       = ManualEditState_ANALYZING_ERROR;
@@ -2560,9 +2560,10 @@
     result = videoEditor_processClip(pEnv, thiz, 0 /*item id is unused*/);
     LOGV("videoEditor_generateClip videoEditor_processClip returned 0x%x", result);
 
-    // Free up memory (whatever the result)
-    videoEditor_unloadSettings(pEnv, thiz);
-    //LVME_release(pEnv, thiz);
+    if (pContext->state != ManualEditState_INITIALIZED) {
+        // Free up memory (whatever the result)
+        videoEditor_unloadSettings(pEnv, thiz);
+    }
 
     LOGV("videoEditor_generateClip END 0x%x", (unsigned int) result);
     return result;
diff --git a/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp b/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp
index 7bf76da..35c14b6 100755
--- a/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp
+++ b/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp
@@ -165,7 +165,8 @@
             (VideoEditClasses_kFileType_MP4  == fileType) ||
             (VideoEditClasses_kFileType_3GPP == fileType) ||
             (VideoEditClasses_kFileType_AMR  == fileType) ||
-            (VideoEditClasses_kFileType_PCM  == fileType))
+            (VideoEditClasses_kFileType_PCM  == fileType) ||
+            (VideoEditClasses_kFileType_M4V  == fileType))
         {
             // Allocate a new clip properties structure.
             pClipProperties =
@@ -316,12 +317,13 @@
             extension[index] = M4OSA_chrToLower(pExtension[index]);
         }
 
-                // Check if the extension is ".mp3".
+        // Check if the extension is ".mp3".
         if (!(VideoEdit_chrCompare(extension, (M4OSA_Char*)"mp3", &cmpResult)))
         {
             *pFileType = VideoEditClasses_kFileType_MP3;
             *pClipType = M4VIDEOEDITING_kFileType_MP3;
-        }       // Check if the extension is ".mp4".
+        }
+        // Check if the extension is ".mp4".
         else if (!(VideoEdit_chrCompare(extension, (M4OSA_Char*)"mp4", &cmpResult)))
         {
             *pFileType = VideoEditClasses_kFileType_MP4;
@@ -333,7 +335,7 @@
             *pFileType = VideoEditClasses_kFileType_3GPP;
             *pClipType = M4VIDEOEDITING_kFileType_3GPP;
         }
-        // Check if the extension is ".3gp".
+        // Check if the extension is ".m4a".
         else if (!(VideoEdit_chrCompare(extension, (M4OSA_Char*)"m4a", &cmpResult)))
         {
             *pFileType = VideoEditClasses_kFileType_3GPP;
@@ -348,7 +350,6 @@
         // Check if the extension is ".amr".
         else if (!(VideoEdit_chrCompare(extension, (M4OSA_Char*)"amr", &cmpResult)))
         {
-
             *pFileType = VideoEditClasses_kFileType_AMR;
             *pClipType = M4VIDEOEDITING_kFileType_AMR;
         }
@@ -378,9 +379,13 @@
         {
             *pFileType = VideoEditClasses_kFileType_PNG;
         }
-
+        // Check if the extension is ".m4v".
+        else if (!(VideoEdit_chrCompare(extension, (M4OSA_Char*)"m4v", &cmpResult)))
+        {
+            *pFileType = VideoEditClasses_kFileType_M4V;
+            *pClipType = M4VIDEOEDITING_kFileType_M4V;
+        }
     }
-
 }
 
 static M4OSA_ERR getClipProperties(
diff --git a/media/libmedia/Visualizer.cpp b/media/libmedia/Visualizer.cpp
index a660429..43571cf 100644
--- a/media/libmedia/Visualizer.cpp
+++ b/media/libmedia/Visualizer.cpp
@@ -219,8 +219,13 @@
     }
 
     for (uint32_t i = 0; i < mCaptureSize; i += 2) {
-        fft[i] = workspace[i >> 1] >> 24;
-        fft[i + 1] = workspace[i >> 1] >> 8;
+        short tmp = workspace[i >> 1] >> 21;
+        while (tmp > 127 || tmp < -128) tmp >>= 1;
+        fft[i] = tmp;
+        tmp = workspace[i >> 1];
+        tmp >>= 5;
+        while (tmp > 127 || tmp < -128) tmp >>= 1;
+        fft[i + 1] = tmp;
     }
 
     return NO_ERROR;
diff --git a/media/tests/MediaFrameworkTest/AndroidManifest.xml b/media/tests/MediaFrameworkTest/AndroidManifest.xml
index 5c20811..2253eb2 100644
--- a/media/tests/MediaFrameworkTest/AndroidManifest.xml
+++ b/media/tests/MediaFrameworkTest/AndroidManifest.xml
@@ -25,7 +25,8 @@
     <application>    
         <uses-library android:name="android.test.runner" />
         <activity android:label="@string/app_name"
-                android:name="MediaFrameworkTest">         
+                android:name="MediaFrameworkTest"
+                android:screenOrientation="landscape">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.LAUNCHER"/>
diff --git a/opengl/libagl/egl.cpp b/opengl/libagl/egl.cpp
index 7ac6f92..a1cb23a 100644
--- a/opengl/libagl/egl.cpp
+++ b/opengl/libagl/egl.cpp
@@ -82,6 +82,11 @@
     if (ggl_unlikely(gEGLErrorKey == -1))
         return EGL_SUCCESS;
     GLint error = (GLint)pthread_getspecific(gEGLErrorKey);
+    if (error == 0) {
+        // The TLS key has been created by another thread, but the value for
+        // this thread has not been initialized.
+        return EGL_SUCCESS;
+    }
     pthread_setspecific(gEGLErrorKey, (void*)EGL_SUCCESS);
     return error;
 }
diff --git a/packages/SystemUI/res/layout-xlarge/status_bar_input_methods_panel.xml b/packages/SystemUI/res/layout-xlarge/status_bar_input_methods_panel.xml
index c4bca61..bb1cf23 100644
--- a/packages/SystemUI/res/layout-xlarge/status_bar_input_methods_panel.xml
+++ b/packages/SystemUI/res/layout-xlarge/status_bar_input_methods_panel.xml
@@ -38,6 +38,47 @@
             android:layout_marginLeft="20dip"
             android:orientation="vertical"
             android:background="@*android:drawable/dialog_full_holo_dark">
+            <!-- Hard keyboard switch -->
+            <LinearLayout
+                android:id="@+id/hard_keyboard_section"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent"
+                android:orientation="vertical">
+                <LinearLayout
+                    android:layout_height="wrap_content"
+                    android:layout_width="match_parent"
+                    android:orientation="horizontal">
+                    <TextView
+                        android:id="@+id/use_physical_keyboard_label"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:minHeight="?android:attr/listPreferredItemHeight"
+                        android:background="?android:attr/selectableItemBackground"
+                        android:orientation="vertical"
+                        android:paddingRight="6dip"
+                        android:paddingLeft="30dip"
+                        android:paddingTop="5dip"
+                        android:paddingBottom="5dip"
+                        android:gravity="center_vertical"
+                        android:singleLine="true"
+                        android:text="@string/status_bar_use_physical_keyboard"
+                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        android:ellipsize="marquee" />
+                    <Switch
+                        android:id="@+id/hard_keyboard_switch"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center_vertical"
+                        android:layout_marginRight="16dip" />
+                </LinearLayout>
+                <View
+                    android:layout_width="match_parent"
+                    android:layout_height="1dip"
+                    android:background="@android:drawable/divider_horizontal_dark" />
+            </LinearLayout>
+
+            <!-- Input method list -->
             <ScrollView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
@@ -50,6 +91,8 @@
                     android:layout_height="wrap_content"
                     android:orientation="vertical" />
             </ScrollView>
+
+            <!-- Configure input methods -->
             <TextView
                 android:id="@+id/ime_settings_shortcut"
                 android:layout_width="match_parent"
diff --git a/packages/SystemUI/res/layout-xlarge/status_bar_notification_panel_title.xml b/packages/SystemUI/res/layout-xlarge/status_bar_notification_panel_title.xml
index 40f2247..2d34635 100644
--- a/packages/SystemUI/res/layout-xlarge/status_bar_notification_panel_title.xml
+++ b/packages/SystemUI/res/layout-xlarge/status_bar_notification_panel_title.xml
@@ -86,7 +86,7 @@
         android:layout_alignBaseline="@id/battery"
         android:layout_alignParentRight="true"
         android:paddingRight="16dp"
-        android:src="@drawable/ic_notification_open"
+        android:src="@drawable/ic_sysbar_quicksettings"
         android:baseline="21dp"
         />
 
@@ -119,7 +119,7 @@
         android:layout_width="match_parent"
         android:layout_alignParentRight="true"
         android:layout_above="@id/title_divider"
-        android:layout_marginRight="32dip"
+        android:layout_marginRight="6dip"
         android:layout_marginBottom="8dip"
         >
         <TextView android:id="@+id/time_bg"
@@ -127,14 +127,14 @@
             android:layout_height="wrap_content"
             android:gravity="right"
             android:singleLine="true"
-            android:textSize="72sp"
+            android:textSize="78sp"
             android:textColor="#999999" />
         <TextView android:id="@+id/time_fg"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:gravity="right"
             android:singleLine="true"
-            android:textSize="72sp"
+            android:textSize="78sp"
             android:textColor="#666666" />
     </com.android.systemui.statusbar.tablet.HoloClock>
 
diff --git a/packages/SystemUI/res/layout-xlarge/status_bar_settings_view.xml b/packages/SystemUI/res/layout-xlarge/status_bar_settings_view.xml
index d0afbb2..75bbb3a 100644
--- a/packages/SystemUI/res/layout-xlarge/status_bar_settings_view.xml
+++ b/packages/SystemUI/res/layout-xlarge/status_bar_settings_view.xml
@@ -118,7 +118,7 @@
         <ImageView
                 android:id="@+id/do_not_disturb_icon"
                 style="@style/StatusBarPanelSettingsIcon"
-                android:src="@drawable/ic_sysbar_gps_on"
+                android:src="@drawable/ic_notification_open"
                 />
         <TextView
                 style="@style/StatusBarPanelSettingsContents"
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index a550a0b..c38abdd 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -43,4 +43,5 @@
     <!-- outdated translation 5550538721034982973 -->     <string name="recent_tasks_app_label" msgid="3796483981246752469">"Google Apps"</string>
     <!-- outdated translation 8017158699581472359 -->     <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth anclado"</string>
     <!-- outdated translation 3875357213648023768 -->     <string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Configurar métodos de entrada"</string>
+    <string name="status_bar_use_physical_keyboard">"Usar un teclado externo"</string>
 </resources>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 53d06c0..0923570 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -112,4 +112,7 @@
     <string name="bluetooth_tethered">Bluetooth tethered</string>
     <!-- Title of a button to open the settings for input methods [CHAR LIMIT=30] -->
     <string name="status_bar_input_method_settings_configure_input_methods">Configure input methods</string>
+
+    <!-- Label of a toggle switch to disable use of the physical keyboard in favor of the IME. [CHAR LIMIT=25] -->
+    <string name="status_bar_use_physical_keyboard">Use physical keyboard</string>
 </resources>
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index 76aa793..d55a7c2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -56,6 +56,7 @@
 
     private static final int MSG_SHOW_MENU = 0x00080000;
     private static final int MSG_SHOW_IME_BUTTON = 0x00090000;
+    private static final int MSG_SET_HARD_KEYBOARD_STATUS = 0x000a0000;
 
     private StatusBarIconList mList;
     private Callbacks mCallbacks;
@@ -83,6 +84,7 @@
         public void setLightsOn(boolean on);
         public void setMenuKeyVisible(boolean visible);
         public void setImeWindowStatus(IBinder token, int vis, int backDisposition);
+        public void setHardKeyboardStatus(boolean available, boolean enabled);
     }
 
     public CommandQueue(Callbacks callbacks, StatusBarIconList list) {
@@ -173,6 +175,14 @@
         }
     }
 
+    public void setHardKeyboardStatus(boolean available, boolean enabled) {
+        synchronized (mList) {
+            mHandler.removeMessages(MSG_SET_HARD_KEYBOARD_STATUS);
+            mHandler.obtainMessage(MSG_SET_HARD_KEYBOARD_STATUS,
+                    available ? 1 : 0, enabled ? 1 : 0).sendToTarget();
+        }
+    }
+
     private final class H extends Handler {
         public void handleMessage(Message msg) {
             final int what = msg.what & MSG_MASK;
@@ -236,6 +246,9 @@
                 case MSG_SHOW_IME_BUTTON:
                     mCallbacks.setImeWindowStatus((IBinder)msg.obj, msg.arg1, msg.arg2);
                     break;
+                case MSG_SET_HARD_KEYBOARD_STATUS:
+                    mCallbacks.setHardKeyboardStatus(msg.arg1 != 0, msg.arg2 != 0);
+                    break;
             }
         }
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java
index da8e831..23ae823 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java
@@ -67,7 +67,7 @@
         mCommandQueue = new CommandQueue(this, iconList);
         mBarService = IStatusBarService.Stub.asInterface(
                 ServiceManager.getService(Context.STATUS_BAR_SERVICE));
-        int[] switches = new int[5];
+        int[] switches = new int[7];
         ArrayList<IBinder> binders = new ArrayList<IBinder>();
         try {
             mBarService.registerStatusBar(mCommandQueue, iconList, notificationKeys, notifications,
@@ -81,6 +81,7 @@
         setMenuKeyVisible(switches[2] != 0);
         // StatusBarManagerService has a back up of IME token and it's restored here.
         setImeWindowStatus(binders.get(0), switches[3], switches[4]);
+        setHardKeyboardStatus(switches[5] != 0, switches[6] != 0);
 
         // Set up the initial icon state
         int N = iconList.size();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 9505391..1e46246 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -1021,6 +1021,8 @@
     // Not supported
     public void setMenuKeyVisible(boolean visible) { }
     public void setImeWindowStatus(IBinder token, int vis, int backDisposition) { }
+    @Override
+    public void setHardKeyboardStatus(boolean available, boolean enabled) { }
 
     private class Launcher implements View.OnClickListener {
         private PendingIntent mIntent;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java
index 136f4a94..6ab03e1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java
@@ -20,6 +20,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.text.format.DateFormat;
 import android.util.AttributeSet;
 import android.util.Slog;
 import android.widget.TextView;
@@ -27,7 +28,6 @@
 import android.view.View;
 import android.view.ViewParent;
 
-import java.text.DateFormat;
 import java.util.Date;
 
 public final class DateView extends TextView {
@@ -86,8 +86,11 @@
     }
 
     private final void updateClock() {
+        final Context context = getContext();
         Date now = new Date();
-        setText(DateFormat.getDateInstance(DateFormat.FULL).format(now));
+        CharSequence dow = DateFormat.format("EEEE", now);
+        CharSequence date = DateFormat.getMediumDateFormat(getContext()).format(now);
+        setText(dow + "\n" + date);
     }
 
     private boolean isVisible() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
index cb5e361..a4c153f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
@@ -146,6 +146,7 @@
         filter.addAction(Telephony.Intents.SPN_STRINGS_UPDATED_ACTION);
         filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
         filter.addAction(ConnectivityManager.INET_CONDITION_ACTION);
+        filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
         context.registerReceiver(this, filter);
 
         // yuck
@@ -197,6 +198,8 @@
                  action.equals(ConnectivityManager.INET_CONDITION_ACTION)) {
             updateConnectivity(intent);
             refreshViews();
+        } else if (action.equals(Intent.ACTION_CONFIGURATION_CHANGED)) {
+            refreshViews();
         }
     }
 
@@ -697,7 +700,7 @@
         } else {
             label = context.getString(R.string.status_bar_settings_signal_meter_disconnected);
             combinedSignalIconId = mDataSignalIconId;
-            dataTypeIconId = mDataTypeIconId;
+            dataTypeIconId = 0;
         }
 
         if (false) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodButton.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodButton.java
index f131111..100ed55 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodButton.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodButton.java
@@ -17,32 +17,23 @@
 package com.android.systemui.statusbar.tablet;
 
 import android.content.Context;
-import android.content.pm.PackageManager;
-import android.graphics.drawable.Drawable;
 import android.os.IBinder;
 import android.provider.Settings;
-import android.util.Log;
 import android.util.AttributeSet;
 import android.view.inputmethod.InputMethodInfo;
 import android.view.inputmethod.InputMethodManager;
-import android.view.inputmethod.InputMethodSubtype;
 import android.view.View;
 import android.widget.ImageView;
 
 import com.android.systemui.R;
 
 import java.util.List;
-import java.util.Map;
 
 public class InputMethodButton extends ImageView {
 
     private static final String  TAG = "StatusBar/InputMethodButton";
     private static final boolean DEBUG = false;
 
-    private static final int ID_IME_SWITCH_BUTTON = R.id.imeSwitchButton;
-    // IME shortcut button is disabled.
-    private static final int ID_IME_SHORTCUT_BUTTON = 0;
-
     // These values are defined in Settings application.
     private static final int ID_IME_BUTTON_VISIBILITY_AUTO = 0;
     private static final int ID_IME_BUTTON_VISIBILITY_ALWAYS_SHOW = 1;
@@ -55,8 +46,7 @@
     private IBinder mToken;
     private boolean mShowButton = false;
     private boolean mScreenLocked = false;
-    private InputMethodInfo mShortcutInfo;
-    private InputMethodSubtype mShortcutSubtype;
+    private boolean mHardKeyboardAvailable;
 
     public InputMethodButton(Context context, AttributeSet attrs) {
         super(context, attrs);
@@ -65,26 +55,6 @@
         mId = getId();
         // IME hookup
         mImm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
-        // TODO: read the current icon & visibility state directly from the service
-
-        // TODO: register for notifications about changes to visibility & subtype from service
-
-        setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                switch (mId) {
-                    case ID_IME_SWITCH_BUTTON:
-                        mImm.showInputMethodPicker();
-                        break;
-                    case ID_IME_SHORTCUT_BUTTON:
-                        if (mToken != null && mShortcutInfo != null) {
-                            mImm.setInputMethodAndSubtype(
-                                    mToken, mShortcutInfo.getId(), mShortcutSubtype);
-                        }
-                        break;
-                }
-            }
-        });
     }
 
     @Override
@@ -94,57 +64,17 @@
         refreshStatusIcon();
     }
 
-    // TODO: Need to show an appropriate drawable for this shortcut button,
-    // if there are two or more shortcut input methods contained in this button.
-    // And need to add other methods to handle multiple shortcuts as appropriate.
-    private Drawable getShortcutInputMethodAndSubtypeDrawable() {
-        Map<InputMethodInfo, List<InputMethodSubtype>> shortcuts =
-                mImm.getShortcutInputMethodsAndSubtypes();
-        if (shortcuts.size() > 0) {
-            for (InputMethodInfo imi: shortcuts.keySet()) {
-                List<InputMethodSubtype> subtypes = shortcuts.get(imi);
-                // TODO: Returns the first found IMI for now. Should handle all shortcuts as
-                // appropriate.
-                mShortcutInfo = imi;
-                // TODO: Pick up the first found subtype for now. Should handle all subtypes
-                // as appropriate.
-                mShortcutSubtype = subtypes.size() > 0 ? subtypes.get(0) : null;
-                return getSubtypeIcon(mShortcutInfo, mShortcutSubtype);
-            }
-        }
-        return null;
-    }
-
-    private Drawable getSubtypeIcon(InputMethodInfo imi, InputMethodSubtype subtype) {
-        final PackageManager pm = getContext().getPackageManager();
-        if (imi != null) {
-            if (DEBUG) {
-                Log.d(TAG, "Update icons of IME: " + imi.getPackageName());
-            }
-            if (subtype != null) {
-                return pm.getDrawable(imi.getPackageName(), subtype.getIconResId(),
-                        imi.getServiceInfo().applicationInfo);
-            } else if (imi.getSubtypeCount() > 0) {
-                return pm.getDrawable(imi.getPackageName(),
-                        imi.getSubtypeAt(0).getIconResId(),
-                        imi.getServiceInfo().applicationInfo);
-            } else {
-                try {
-                    return pm.getApplicationInfo(imi.getPackageName(), 0).loadIcon(pm);
-                } catch (PackageManager.NameNotFoundException e) {
-                    Log.w(TAG, "IME can't be found: " + imi.getPackageName());
-                }
-            }
-        }
-        return null;
-    }
-
     // Display IME switcher icon only when all of the followings are true:
     // * There is only one enabled IME on the device.  (Note that the IME should be the system IME)
     // * There are no explicitly enabled (by the user) subtypes of the IME, or the IME doesn't have
     // its subtypes at all
     private boolean needsToShowIMEButton() {
         if (!mShowButton || mScreenLocked) return false;
+
+        if (mHardKeyboardAvailable) {
+            return true;
+        }
+
         List<InputMethodInfo> imis = mImm.getEnabledInputMethodList();
         final int size = imis.size();
         final int visibility = loadInputMethodSelectorVisibility();
@@ -170,17 +100,7 @@
         } else {
             setVisibility(View.VISIBLE);
         }
-        Drawable icon = null;
-        switch (mId) {
-            case ID_IME_SHORTCUT_BUTTON:
-                icon = getShortcutInputMethodAndSubtypeDrawable();
-                break;
-        }
-        if (icon == null) {
-            mIcon.setImageResource(R.drawable.ic_sysbar_ime);
-        } else {
-            mIcon.setImageDrawable(icon);
-        }
+        mIcon.setImageResource(R.drawable.ic_sysbar_ime);
     }
 
     private int loadInputMethodSelectorVisibility() {
@@ -200,6 +120,13 @@
         refreshStatusIcon();
     }
 
+    public void setHardKeyboardStatus(boolean available) {
+        if (mHardKeyboardAvailable != available) {
+            mHardKeyboardAvailable = available;
+            refreshStatusIcon();
+        }
+    }
+
     public void setScreenLocked(boolean locked) {
         mScreenLocked = locked;
         refreshStatusIcon();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodsPanel.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodsPanel.java
index 474ef45..0c2909a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodsPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodsPanel.java
@@ -16,6 +16,8 @@
 
 package com.android.systemui.statusbar.tablet;
 
+import com.android.systemui.R;
+
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -29,13 +31,14 @@
 import android.util.Log;
 import android.util.Pair;
 import android.view.View;
-import android.view.View.OnClickListener;
 import android.view.inputmethod.InputMethodInfo;
 import android.view.inputmethod.InputMethodManager;
 import android.view.inputmethod.InputMethodSubtype;
+import android.widget.CompoundButton;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.RadioButton;
+import android.widget.Switch;
 import android.widget.TextView;
 
 import java.util.Comparator;
@@ -45,9 +48,8 @@
 import java.util.Set;
 import java.util.TreeMap;
 
-import com.android.systemui.R;
-
-public class InputMethodsPanel extends LinearLayout implements StatusBarPanel, OnClickListener {
+public class InputMethodsPanel extends LinearLayout implements StatusBarPanel, View.OnClickListener,
+        CompoundButton.OnCheckedChangeListener {
     private static final boolean DEBUG = TabletStatusBar.DEBUG;
     private static final String TAG = "InputMethodsPanel";
 
@@ -73,6 +75,11 @@
     private IBinder mToken;
     private InputMethodButton mInputMethodSwitchButton;
     private LinearLayout mInputMethodMenuList;
+    private boolean mHardKeyboardAvailable;
+    private boolean mHardKeyboardEnabled;
+    private OnHardKeyboardEnabledChangeListener mHardKeyboardEnabledChangeListener;
+    private LinearLayout mHardKeyboardSection;
+    private Switch mHardKeyboardSwitch;
     private PackageManager mPackageManager;
     private String mEnabledInputMethodAndSubtypesCacheStr;
     private String mLastSystemLocaleString;
@@ -107,6 +114,11 @@
         mIntentFilter.addDataScheme("package");
     }
 
+    public void setHardKeyboardEnabledChangeListener(
+            OnHardKeyboardEnabledChangeListener listener) {
+        mHardKeyboardEnabledChangeListener = listener;
+    }
+
     @Override
     protected void onDetachedFromWindow() {
         super.onDetachedFromWindow();
@@ -128,7 +140,10 @@
     @Override
     public void onFinishInflate() {
         mInputMethodMenuList = (LinearLayout) findViewById(R.id.input_method_menu_list);
-        mConfigureImeShortcut = ((View) findViewById(R.id.ime_settings_shortcut));
+        mHardKeyboardSection = (LinearLayout) findViewById(R.id.hard_keyboard_section);
+        mHardKeyboardSwitch = (Switch) findViewById(R.id.hard_keyboard_switch);
+        mHardKeyboardSwitch.setOnCheckedChangeListener(this);
+        mConfigureImeShortcut = findViewById(R.id.ime_settings_shortcut);
         mConfigureImeShortcut.setOnClickListener(this);
         // TODO: If configurations for IME are not changed, do not update
         // by checking onConfigurationChanged.
@@ -162,7 +177,17 @@
         if (view == mConfigureImeShortcut) {
             showConfigureInputMethods();
             onFinishPanel(true);
-            return;
+        }
+    }
+
+    @Override
+    public void onCheckedChanged(CompoundButton button, boolean checked) {
+        if (button == mHardKeyboardSwitch) {
+            if (mHardKeyboardEnabled != checked) {
+                mHardKeyboardEnabled = checked;
+                if (mHardKeyboardEnabledChangeListener != null)
+                    mHardKeyboardEnabledChangeListener.onHardKeyboardEnabledChange(checked);
+            }
         }
     }
 
@@ -228,9 +253,9 @@
                 subtypeView, new Pair<InputMethodInfo, InputMethodSubtype> (imi, subtype));
         subtypeView.setOnClickListener(new View.OnClickListener() {
             @Override
-            public void onClick(View view) {
+            public void onClick(View v) {
                 Pair<InputMethodInfo, InputMethodSubtype> imiAndSubtype =
-                        updateRadioButtonsByView(view);
+                        updateRadioButtonsByView(v);
                 onFinishPanel(false);
                 setInputMethodAndSubtype(imiAndSubtype.first, imiAndSubtype.second);
             }
@@ -239,6 +264,8 @@
     }
 
     private void updateUiElements() {
+        updateHardKeyboardSection();
+
         // TODO: Reuse subtype views.
         mInputMethodMenuList.removeAllViews();
         mRadioViewAndImiMap.clear();
@@ -278,6 +305,25 @@
         }
     }
 
+    public void setHardKeyboardStatus(boolean available, boolean enabled) {
+        if (mHardKeyboardAvailable != available || mHardKeyboardEnabled != enabled) {
+            mHardKeyboardAvailable = available;
+            mHardKeyboardEnabled = enabled;
+            updateHardKeyboardSection();
+        }
+    }
+
+    private void updateHardKeyboardSection() {
+        if (mHardKeyboardAvailable) {
+            mHardKeyboardSection.setVisibility(View.VISIBLE);
+            if (mHardKeyboardSwitch.isChecked() != mHardKeyboardEnabled) {
+                mHardKeyboardSwitch.setChecked(mHardKeyboardEnabled);
+            }
+        } else {
+            mHardKeyboardSection.setVisibility(View.GONE);
+        }
+    }
+
     // Turn on the selected radio button when the user chooses the item
     private Pair<InputMethodInfo, InputMethodSubtype> updateRadioButtonsByView(View selectedView) {
         Pair<InputMethodInfo, InputMethodSubtype> selectedImiAndSubtype = null;
@@ -423,4 +469,8 @@
         }
         mPackageChanged = true;
     }
+
+    public interface OnHardKeyboardEnabledChangeListener {
+        public void onHardKeyboardEnabledChange(boolean enabled);
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java
index 372aa90..2ec2af0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java
@@ -170,7 +170,7 @@
             setContentFrameVisible(n > 0, false);
         } else if (mSettingsView == null) {
             // we're looking at the notifications; time to maybe make some changes
-            if (mNotificationCount != n) {
+            if ((mNotificationCount > 0) != (n > 0)) {
                 setContentFrameVisible(n > 0, true);
             }
         }
@@ -320,7 +320,7 @@
                 if (mNotificationCount == 0) {
                     end += mContentFrameMissingTranslation;
                 }
-                start = (y < (HYPERSPACE_OFFRAMP+end)) ? y : (HYPERSPACE_OFFRAMP+end);
+                start = HYPERSPACE_OFFRAMP+end;
             } else {
                 start = y;
                 end = y + HYPERSPACE_OFFRAMP;
@@ -336,10 +336,15 @@
                 mContentAnim.cancel();
             }
 
+            Animator fadeAnim = ObjectAnimator.ofFloat(mContentParent, "alpha",
+                                mContentParent.getAlpha(), appearing ? 1.0f : 0.0f);
+            fadeAnim.setInterpolator(appearing
+                    ? new android.view.animation.AccelerateInterpolator(2.0f)
+                    : new android.view.animation.DecelerateInterpolator(2.0f));
+
             mContentAnim = new AnimatorSet();
             mContentAnim
-                .play(ObjectAnimator.ofFloat(mContentParent, "alpha",
-                    mContentParent.getAlpha(), appearing ? 1.0f : 0.0f))
+                .play(fadeAnim)
                 .with(bgAnim)
                 .with(posAnim)
                 ;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
index 6c8a20d..715bb83 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
@@ -76,7 +76,8 @@
 import com.android.systemui.recent.RecentApplicationsActivity;
 
 public class TabletStatusBar extends StatusBar implements
-        HeightReceiver.OnBarHeightChangedListener {
+        HeightReceiver.OnBarHeightChangedListener,
+        InputMethodsPanel.OnHardKeyboardEnabledChangeListener {
     public static final boolean DEBUG = false;
     public static final String TAG = "TabletStatusBar";
 
@@ -94,6 +95,7 @@
     public static final int MSG_HIDE_CHROME = 1031;
     public static final int MSG_OPEN_INPUT_METHODS_PANEL = 1040;
     public static final int MSG_CLOSE_INPUT_METHODS_PANEL = 1041;
+    public static final int MSG_STOP_TICKER = 2000;
 
     // Fitts' Law assistance for LatinIME; TODO: replace with a more general approach
     private static final boolean FAKE_SPACE_BAR = true;
@@ -268,6 +270,7 @@
         // Input methods Panel
         mInputMethodsPanel = (InputMethodsPanel) View.inflate(context,
                 R.layout.status_bar_input_methods_panel, null);
+        mInputMethodsPanel.setHardKeyboardEnabledChangeListener(this);
         mInputMethodsPanel.setVisibility(View.GONE);
         mInputMethodsPanel.setOnTouchListener(new TouchOutsideListener(
                 MSG_CLOSE_INPUT_METHODS_PANEL, mInputMethodsPanel));
@@ -581,6 +584,9 @@
                     mShadow.setVisibility(View.VISIBLE);
                     notifyLightsChanged(false);
                     break;
+                case MSG_STOP_TICKER:
+                    mTicker.halt();
+                    break;
             }
         }
     }
@@ -905,6 +911,25 @@
         }
     }
 
+    @Override
+    public void setHardKeyboardStatus(boolean available, boolean enabled) {
+        if (DEBUG) {
+            Slog.d(TAG, "Set hard keyboard status: available=" + available
+                    + ", enabled=" + enabled);
+        }
+        mInputMethodSwitchButton.setHardKeyboardStatus(available);
+        updateNotificationIcons();
+        mInputMethodsPanel.setHardKeyboardStatus(available, enabled);
+    }
+
+    @Override
+    public void onHardKeyboardEnabledChange(boolean enabled) {
+        try {
+            mBarService.setHardKeyboardEnabled(enabled);
+        } catch (RemoteException ex) {
+        }
+    }
+
     private boolean isImmersive() {
         try {
             return ActivityManagerNative.getDefault().isTopActivityImmersive();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarView.java
index 98f718b..4e2faf7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarView.java
@@ -51,6 +51,8 @@
             mHandler.sendEmptyMessage(TabletStatusBar.MSG_CLOSE_RECENTS_PANEL);
             mHandler.removeMessages(TabletStatusBar.MSG_CLOSE_INPUT_METHODS_PANEL);
             mHandler.sendEmptyMessage(TabletStatusBar.MSG_CLOSE_INPUT_METHODS_PANEL);
+            mHandler.removeMessages(TabletStatusBar.MSG_STOP_TICKER);
+            mHandler.sendEmptyMessage(TabletStatusBar.MSG_STOP_TICKER);
 
             for (int i=0; i < mPanels.length; i++) {
                 if (mPanels[i] != null && mPanels[i].getVisibility() == View.VISIBLE) {
diff --git a/policy/src/com/android/internal/policy/impl/AccountUnlockScreen.java b/policy/src/com/android/internal/policy/impl/AccountUnlockScreen.java
index 840c5e1..c4feefd 100644
--- a/policy/src/com/android/internal/policy/impl/AccountUnlockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/AccountUnlockScreen.java
@@ -62,8 +62,8 @@
      */
     private static final int AWAKE_POKE_MILLIS = 30000;
 
-    private final KeyguardScreenCallback mCallback;
-    private final LockPatternUtils mLockPatternUtils;
+    private KeyguardScreenCallback mCallback;
+    private LockPatternUtils mLockPatternUtils;
     private KeyguardUpdateMonitor mUpdateMonitor;
 
     private TextView mTopHeader;
@@ -159,7 +159,10 @@
         if (mCheckingDialog != null) {
             mCheckingDialog.hide();
         }
-        mUpdateMonitor.removeCallback(this);
+        mUpdateMonitor.removeCallback(this); // this must be first
+        mCallback = null;
+        mLockPatternUtils = null;
+        mUpdateMonitor = null;
     }
 
     /** {@inheritDoc} */
diff --git a/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java b/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java
index 32c016d..edab690 100644
--- a/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java
+++ b/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java
@@ -229,8 +229,8 @@
                 mKeyguardHost.postDelayed(new Runnable() {
                     public void run() {
                         synchronized (KeyguardViewManager.this) {
-                            mKeyguardHost.removeView(lastView);
                             lastView.cleanUp();
+                            mKeyguardHost.removeView(lastView);
                         }
                     }
                 }, 500);
diff --git a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java
index 822be46..886b85f 100644
--- a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java
+++ b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java
@@ -495,8 +495,10 @@
     public void cleanUp() {
         ((KeyguardScreen) mLockScreen).onPause();
         ((KeyguardScreen) mLockScreen).cleanUp();
+        this.removeView(mLockScreen);
         ((KeyguardScreen) mUnlockScreen).onPause();
         ((KeyguardScreen) mUnlockScreen).cleanUp();
+        this.removeView(mUnlockScreen);
     }
 
     private boolean isSecure() {
diff --git a/policy/src/com/android/internal/policy/impl/LockScreen.java b/policy/src/com/android/internal/policy/impl/LockScreen.java
index 1b810d5..2bc57b5 100644
--- a/policy/src/com/android/internal/policy/impl/LockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/LockScreen.java
@@ -59,9 +59,9 @@
 
     private Status mStatus = Status.Normal;
 
-    private final LockPatternUtils mLockPatternUtils;
-    private final KeyguardUpdateMonitor mUpdateMonitor;
-    private final KeyguardScreenCallback mCallback;
+    private LockPatternUtils mLockPatternUtils;
+    private KeyguardUpdateMonitor mUpdateMonitor;
+    private KeyguardScreenCallback mCallback;
 
     private SlidingTab mSlidingTab;
     private TextView mScreenLocked;
@@ -659,7 +659,10 @@
 
     /** {@inheritDoc} */
     public void cleanUp() {
-        mUpdateMonitor.removeCallback(this);
+        mUpdateMonitor.removeCallback(this); // this must be first
+        mLockPatternUtils = null;
+        mUpdateMonitor = null;
+        mCallback = null;
     }
 
     /** {@inheritDoc} */
diff --git a/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java b/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java
index 6815d50..6c6c2cc8 100644
--- a/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java
@@ -62,9 +62,9 @@
     private int mTotalFailedPatternAttempts = 0;
     private CountDownTimer mCountdownTimer = null;
 
-    private final LockPatternUtils mLockPatternUtils;
-    private final KeyguardUpdateMonitor mUpdateMonitor;
-    private final KeyguardScreenCallback mCallback;
+    private LockPatternUtils mLockPatternUtils;
+    private KeyguardUpdateMonitor mUpdateMonitor;
+    private KeyguardScreenCallback mCallback;
 
     /**
      * whether there is a fallback option available when the pattern is forgotten.
@@ -362,6 +362,9 @@
     /** {@inheritDoc} */
     public void cleanUp() {
         mUpdateMonitor.removeCallback(this);
+        mLockPatternUtils = null;
+        mUpdateMonitor = null;
+        mCallback = null;
     }
 
     @Override
diff --git a/policy/src/com/android/internal/policy/impl/StatusView.java b/policy/src/com/android/internal/policy/impl/StatusView.java
index 1732adb..da7bbb8 100644
--- a/policy/src/com/android/internal/policy/impl/StatusView.java
+++ b/policy/src/com/android/internal/policy/impl/StatusView.java
@@ -19,10 +19,10 @@
 import android.widget.TextView;
 
 class StatusView {
-    public static final int LOCK_ICON = R.drawable.ic_lock_idle_lock;
-    public static final int ALARM_ICON = R.drawable.ic_lock_idle_alarm;
-    public static final int CHARGING_ICON = R.drawable.ic_lock_idle_charging;
-    public static final int BATTERY_LOW_ICON = R.drawable.ic_lock_idle_low_battery;
+    public static final int LOCK_ICON = 0; // R.drawable.ic_lock_idle_lock;
+    public static final int ALARM_ICON = 0; // R.drawable.ic_lock_idle_alarm;
+    public static final int CHARGING_ICON = 0; //R.drawable.ic_lock_idle_charging;
+    public static final int BATTERY_LOW_ICON = 0; //R.drawable.ic_lock_idle_low_battery;
 
     private String mDateFormatString;
 
diff --git a/services/audioflinger/AudioPolicyManagerBase.cpp b/services/audioflinger/AudioPolicyManagerBase.cpp
index e4086c4..2c81c34 100644
--- a/services/audioflinger/AudioPolicyManagerBase.cpp
+++ b/services/audioflinger/AudioPolicyManagerBase.cpp
@@ -1835,7 +1835,8 @@
         AudioSystem::DEVICE_OUT_WIRED_HEADPHONE |
         AudioSystem::DEVICE_OUT_ANLG_DOCK_HEADSET |
         AudioSystem::DEVICE_OUT_DGTL_DOCK_HEADSET)) &&
-        (getStrategy((AudioSystem::stream_type)stream) == STRATEGY_SONIFICATION) &&
+        ((getStrategy((AudioSystem::stream_type)stream) == STRATEGY_SONIFICATION) ||
+         (stream == AudioSystem::SYSTEM)) &&
         streamDesc.mCanBeMuted) {
         volume *= SONIFICATION_HEADSET_VOLUME_FACTOR;
         // when the phone is ringing we must consider that music could have been paused just before
diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java
index 8d6d3a1..586d222 100644
--- a/services/java/com/android/server/InputMethodManagerService.java
+++ b/services/java/com/android/server/InputMethodManagerService.java
@@ -1053,7 +1053,15 @@
                     }
                     if (mCurMethod != null) {
                         try {
-                            mImeWindowVis = 0;
+                            final Configuration conf = mRes.getConfiguration();
+                            final boolean haveHardKeyboard = conf.keyboard
+                                    != Configuration.KEYBOARD_NOKEYS;
+                            final boolean hardKeyShown = haveHardKeyboard
+                                    && conf.hardKeyboardHidden
+                                            != Configuration.HARDKEYBOARDHIDDEN_YES;
+                            mImeWindowVis = (mInputShown || hardKeyShown) ? (
+                                    InputMethodService.IME_ACTIVE | InputMethodService.IME_VISIBLE)
+                                    : 0;
                             mStatusBar.setImeWindowStatus(mCurToken, mImeWindowVis,
                                     mBackDisposition);
                             // If subtype is null, try to find the most applicable one from
diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java
index 7440f52..436eff0 100644
--- a/services/java/com/android/server/MountService.java
+++ b/services/java/com/android/server/MountService.java
@@ -46,6 +46,7 @@
 import android.os.storage.IObbActionListener;
 import android.os.storage.OnObbStateChangeListener;
 import android.os.storage.StorageResultCode;
+import android.text.TextUtils;
 import android.util.Slog;
 
 import java.io.FileDescriptor;
@@ -79,7 +80,7 @@
     private static final boolean LOCAL_LOGD = false;
     private static final boolean DEBUG_UNMOUNT = false;
     private static final boolean DEBUG_EVENTS = false;
-    private static final boolean DEBUG_OBB = true;
+    private static final boolean DEBUG_OBB = false;
 
     private static final String TAG = "MountService";
 
@@ -1632,8 +1633,8 @@
     }
 
     public int decryptStorage(String password) {
-        if (password == null) {
-            throw new IllegalArgumentException("password cannot be null");
+        if (TextUtils.isEmpty(password)) {
+            throw new IllegalArgumentException("password cannot be empty");
         }
 
         mContext.enforceCallingOrSelfPermission(Manifest.permission.CRYPT_KEEPER,
@@ -1647,13 +1648,13 @@
 
         try {
             ArrayList<String> rsp = mConnector.doCommand("cryptfs checkpw " + password);
-            String []tok = rsp.get(0).split(" ");
+            String[] tokens = rsp.get(0).split(" ");
 
-            if (tok == null || tok.length != 2) {
+            if (tokens == null || tokens.length != 2) {
                 return -1;
             }
 
-            int code = Integer.parseInt(tok[1]);
+            int code = Integer.parseInt(tokens[1]);
 
             if (code == 0) {
                 // Decrypt was successful. Post a delayed message before restarting in order
@@ -1662,7 +1663,7 @@
                     public void run() {
                         mConnector.doCommand(String.format("cryptfs restart"));
                     }
-                }, 2000); // 2 seconds
+                }, 1000); // 1 second
             }
 
             return code;
@@ -1673,8 +1674,8 @@
     }
 
     public int encryptStorage(String password) {
-        if (password == null) {
-            throw new IllegalArgumentException("password cannot be null");
+        if (TextUtils.isEmpty(password)) {
+            throw new IllegalArgumentException("password cannot be empty");
         }
 
         mContext.enforceCallingOrSelfPermission(Manifest.permission.CRYPT_KEEPER,
@@ -1696,6 +1697,36 @@
         return 0;
     }
 
+    public int changeEncryptionPassword(String password) {
+        if (TextUtils.isEmpty(password)) {
+            throw new IllegalArgumentException("password cannot be empty");
+        }
+
+        mContext.enforceCallingOrSelfPermission(Manifest.permission.CRYPT_KEEPER,
+            "no permission to access the crypt keeper");
+
+        waitForReady();
+
+        if (DEBUG_EVENTS) {
+            Slog.i(TAG, "changing encryption password...");
+        }
+
+        try {
+            ArrayList<String> response = mConnector.doCommand("cryptfs changepw " + password);
+
+            String[] tokens = response.get(0).split(" ");
+
+            if (tokens == null || tokens.length != 2) {
+                return -1;
+            }
+
+            return Integer.parseInt(tokens[1]);
+        } catch (NativeDaemonConnectorException e) {
+            // Encryption failed
+            return e.getCode();
+        }
+    }
+
     private void addObbStateLocked(ObbState obbState) throws RemoteException {
         final IBinder binder = obbState.getBinder();
         List<ObbState> obbStates = mObbMounts.get(binder);
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index 5806de2..d75aef6 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -8043,6 +8043,14 @@
             sharedUser = orig.sharedUser;
         }
 
+        public void copyFrom(PackageSetting base) {
+            super.copyFrom((PackageSettingBase) base);
+
+            userId = base.userId;
+            sharedUser = base.sharedUser;
+            pkg = base.pkg;
+        }
+
         @Override
         public String toString() {
             return "PackageSetting{"
diff --git a/services/java/com/android/server/StatusBarManagerService.java b/services/java/com/android/server/StatusBarManagerService.java
index 1a2f867..5ada77b 100644
--- a/services/java/com/android/server/StatusBarManagerService.java
+++ b/services/java/com/android/server/StatusBarManagerService.java
@@ -53,11 +53,13 @@
  * if they are local, that they just enqueue messages to not deadlock.
  */
 public class StatusBarManagerService extends IStatusBarService.Stub
+    implements WindowManagerService.OnHardKeyboardStatusChangeListener
 {
     static final String TAG = "StatusBarManagerService";
     static final boolean SPEW = false;
 
     final Context mContext;
+    final WindowManagerService mWindowManager;
     Handler mHandler = new Handler();
     NotificationCallbacks mNotificationCallbacks;
     volatile IStatusBar mBar;
@@ -103,8 +105,10 @@
     /**
      * Construct the service, add the status bar view to the window manager
      */
-    public StatusBarManagerService(Context context) {
+    public StatusBarManagerService(Context context, WindowManagerService windowManager) {
         mContext = context;
+        mWindowManager = windowManager;
+        mWindowManager.setOnHardKeyboardStatusChangeListener(this);
 
         final Resources res = context.getResources();
         mIcons.defineSlots(res.getStringArray(com.android.internal.R.array.config_statusBarIcons));
@@ -320,6 +324,28 @@
         }
     }
 
+    public void setHardKeyboardEnabled(final boolean enabled) {
+        mHandler.post(new Runnable() {
+            public void run() {
+                mWindowManager.setHardKeyboardEnabled(enabled);
+            }
+        });
+    }
+
+    @Override
+    public void onHardKeyboardStatusChange(final boolean available, final boolean enabled) {
+        mHandler.post(new Runnable() {
+            public void run() {
+                if (mBar != null) {
+                    try {
+                        mBar.setHardKeyboardStatus(available, enabled);
+                    } catch (RemoteException ex) {
+                    }
+                }
+            }
+        });
+    }
+
     private void enforceStatusBar() {
         mContext.enforceCallingOrSelfPermission(android.Manifest.permission.STATUS_BAR,
                 "StatusBarManagerService");
@@ -335,7 +361,6 @@
                 "StatusBarManagerService");
     }
 
-
     // ================================================================================
     // Callbacks from the status bar service.
     // ================================================================================
@@ -363,6 +388,8 @@
             switches[4] = mImeBackDisposition;
             binders.add(mImeToken);
         }
+        switches[5] = mWindowManager.isHardKeyboardAvailable() ? 1 : 0;
+        switches[6] = mWindowManager.isHardKeyboardEnabled() ? 1 : 0;
     }
 
     /**
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 978946f..92ec1da 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -248,7 +248,7 @@
 
             try {
                 Slog.i(TAG, "Status Bar");
-                statusBar = new StatusBarManagerService(context);
+                statusBar = new StatusBarManagerService(context, wm);
                 ServiceManager.addService(Context.STATUS_BAR_SERVICE, statusBar);
             } catch (Throwable e) {
                 Slog.e(TAG, "Failure starting StatusBarManagerService", e);
diff --git a/services/java/com/android/server/WifiService.java b/services/java/com/android/server/WifiService.java
index cf07239..d2f2ec7 100644
--- a/services/java/com/android/server/WifiService.java
+++ b/services/java/com/android/server/WifiService.java
@@ -955,10 +955,10 @@
          * @see #shouldDeviceStayAwake(int, int)
          */
         private boolean shouldWifiStayAwake(int stayAwakeConditions, int pluggedType) {
-            //Never sleep when plugged in as long as the user has not changed the settings
+            //Never sleep as long as the user has not changed the settings
             int wifiSleepPolicy = Settings.System.getInt(mContext.getContentResolver(),
                     Settings.System.WIFI_SLEEP_POLICY,
-                    Settings.System.WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED);
+                    Settings.System.WIFI_SLEEP_POLICY_NEVER);
 
             if (wifiSleepPolicy == Settings.System.WIFI_SLEEP_POLICY_NEVER) {
                 // Never sleep
diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java
index faaa28d7..7c79b8a 100644
--- a/services/java/com/android/server/WindowManagerService.java
+++ b/services/java/com/android/server/WindowManagerService.java
@@ -47,6 +47,7 @@
 import android.Manifest;
 import android.app.ActivityManagerNative;
 import android.app.IActivityManager;
+import android.app.StatusBarManager;
 import android.app.admin.DevicePolicyManager;
 import android.content.BroadcastReceiver;
 import android.content.ClipData;
@@ -454,6 +455,10 @@
     WindowState mInputMethodWindow = null;
     final ArrayList<WindowState> mInputMethodDialogs = new ArrayList<WindowState>();
 
+    boolean mHardKeyboardAvailable;
+    boolean mHardKeyboardEnabled;
+    OnHardKeyboardStatusChangeListener mHardKeyboardStatusChangeListener;
+
     final ArrayList<WindowToken> mWallpaperTokens = new ArrayList<WindowToken>();
 
     // If non-null, this is the currently visible window that is associated
@@ -2754,6 +2759,15 @@
         boolean displayed = false;
         boolean inTouchMode;
         boolean configChanged;
+
+        // if they don't have this permission, mask out the status bar bits
+        if (attrs != null) {
+            if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.STATUS_BAR)
+                    != PackageManager.PERMISSION_GRANTED) {
+                attrs.systemUiVisibility &= ~StatusBarManager.DISABLE_MASK;
+                attrs.subtreeSystemUiVisibility &= ~StatusBarManager.DISABLE_MASK;
+            }
+        }
         long origId = Binder.clearCallingIdentity();
 
         synchronized(mWindowMap) {
@@ -5753,13 +5767,13 @@
                     mScreenLayout = Configuration.SCREENLAYOUT_SIZE_LARGE;
                 } else {
                     mScreenLayout = Configuration.SCREENLAYOUT_SIZE_NORMAL;
-
-                    // If this screen is wider than normal HVGA, or taller
-                    // than FWVGA, then for old apps we want to run in size
-                    // compatibility mode.
-                    if (shortSize > 321 || longSize > 570) {
-                        mScreenLayout |= Configuration.SCREENLAYOUT_COMPAT_NEEDED;
-                    }
+                }
+                
+                // If this screen is wider than normal HVGA, or taller
+                // than FWVGA, then for old apps we want to run in size
+                // compatibility mode.
+                if (shortSize > 321 || longSize > 570) {
+                    mScreenLayout |= Configuration.SCREENLAYOUT_COMPAT_NEEDED;
                 }
 
                 // Is this a long screen?
@@ -5776,9 +5790,64 @@
         config.keyboardHidden = Configuration.KEYBOARDHIDDEN_NO;
         config.hardKeyboardHidden = Configuration.HARDKEYBOARDHIDDEN_NO;
         mPolicy.adjustConfigurationLw(config);
+
+        // Adjust the hard keyboard configuration based on whether the hard keyboard is enabled.
+        boolean hardKeyboardAvailable = config.keyboard != Configuration.KEYBOARD_NOKEYS;
+        if (hardKeyboardAvailable != mHardKeyboardAvailable) {
+            mHardKeyboardAvailable = hardKeyboardAvailable;
+            mHardKeyboardEnabled = hardKeyboardAvailable;
+
+            mH.removeMessages(H.REPORT_HARD_KEYBOARD_STATUS_CHANGE);
+            mH.sendEmptyMessage(H.REPORT_HARD_KEYBOARD_STATUS_CHANGE);
+        }
+        if (!mHardKeyboardEnabled) {
+            config.keyboard = Configuration.KEYBOARD_NOKEYS;
+            config.hardKeyboardHidden = Configuration.HARDKEYBOARDHIDDEN_NO;
+        }
         return true;
     }
 
+    public boolean isHardKeyboardAvailable() {
+        synchronized (mWindowMap) {
+            return mHardKeyboardAvailable;
+        }
+    }
+
+    public boolean isHardKeyboardEnabled() {
+        synchronized (mWindowMap) {
+            return mHardKeyboardEnabled;
+        }
+    }
+
+    public void setHardKeyboardEnabled(boolean enabled) {
+        synchronized (mWindowMap) {
+            if (mHardKeyboardEnabled != enabled) {
+                mHardKeyboardEnabled = enabled;
+                mH.sendEmptyMessage(H.SEND_NEW_CONFIGURATION);
+            }
+        }
+    }
+
+    public void setOnHardKeyboardStatusChangeListener(
+            OnHardKeyboardStatusChangeListener listener) {
+        synchronized (mWindowMap) {
+            mHardKeyboardStatusChangeListener = listener;
+        }
+    }
+
+    void notifyHardKeyboardStatusChange() {
+        final boolean available, enabled;
+        final OnHardKeyboardStatusChangeListener listener;
+        synchronized (mWindowMap) {
+            listener = mHardKeyboardStatusChangeListener;
+            available = mHardKeyboardAvailable;
+            enabled = mHardKeyboardEnabled;
+        }
+        if (listener != null) {
+            listener.onHardKeyboardStatusChange(available, enabled);
+        }
+    }
+
     // -------------------------------------------------------------
     // Drag and drop
     // -------------------------------------------------------------
@@ -8869,6 +8938,7 @@
         public static final int REPORT_WINDOWS_CHANGE = 19;
         public static final int DRAG_START_TIMEOUT = 20;
         public static final int DRAG_END_TIMEOUT = 21;
+        public static final int REPORT_HARD_KEYBOARD_STATUS_CHANGE = 22;
 
         private Session mLastReportedHold;
 
@@ -9242,6 +9312,11 @@
                     }
                     break;
                 }
+
+                case REPORT_HARD_KEYBOARD_STATUS_CHANGE: {
+                    notifyHardKeyboardStatusChange();
+                    break;
+                }
             }
         }
     }
@@ -11988,4 +12063,8 @@
             return Animation.ZORDER_TOP;
         }
     }
+
+    public interface OnHardKeyboardStatusChangeListener {
+        public void onHardKeyboardStatusChange(boolean available, boolean enabled);
+    }
 }
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index 3730739..f64fd7b 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -150,8 +150,7 @@
     // the layer is not on screen anymore. free as much resources as possible
     mFreezeLock.clear();
 
-    EGLDisplay dpy(mFlinger->graphicPlane(0).getEGLDisplay());
-    mBufferManager.destroy(dpy);
+    // Free our own reference to ISurface
     mSurface.clear();
 
     Mutex::Autolock _l(mLock);
diff --git a/services/surfaceflinger/LayerBase.cpp b/services/surfaceflinger/LayerBase.cpp
index 8d83f0b..86057f8 100644
--- a/services/surfaceflinger/LayerBase.cpp
+++ b/services/surfaceflinger/LayerBase.cpp
@@ -498,11 +498,9 @@
 }
 
 void LayerBase::setBufferCrop(const Rect& crop) {
-    if (!crop.isEmpty()) {
-        if (mBufferCrop != crop) {
-            mBufferCrop = crop;
-            mFlinger->invalidateHwcGeometry();
-        }
+    if (mBufferCrop != crop) {
+        mBufferCrop = crop;
+        mFlinger->invalidateHwcGeometry();
     }
 }
 
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 4424e5b..88d9436 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -402,7 +402,6 @@
     /** Current network is eHRPD */
     public static final int NETWORK_TYPE_EHRPD = 14;
 
-
     /**
      * Returns a constant indicating the radio technology (network type)
      * currently in use on the device for data transmission.
diff --git a/telephony/java/com/android/internal/telephony/CallManager.java b/telephony/java/com/android/internal/telephony/CallManager.java
index 43fae69..7abae09 100644
--- a/telephony/java/com/android/internal/telephony/CallManager.java
+++ b/telephony/java/com/android/internal/telephony/CallManager.java
@@ -905,6 +905,8 @@
     public boolean getMute() {
         if (hasActiveFgCall()) {
             return getActiveFgCall().getPhone().getMute();
+        } else if (hasActiveBgCall()) {
+            return getFirstActiveBgCall().getPhone().getMute();
         }
         return false;
     }
diff --git a/telephony/java/com/android/internal/telephony/DataConnectionTracker.java b/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
index 2343dd8..7f8485b 100644
--- a/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
@@ -531,7 +531,9 @@
      *         {@code true} otherwise.
      */
     public synchronized boolean getAnyDataEnabled() {
-        return (mInternalDataEnabled && mDataEnabled && (enabledCount != 0));
+        boolean result = (mInternalDataEnabled && mDataEnabled && (enabledCount != 0));
+        if (!result && DBG) log("getAnyDataEnabled " + result);
+        return result;
     }
 
     protected abstract void startNetStatPoll();
@@ -657,7 +659,13 @@
 
     // disabled apn's still need avail/unavail notificiations - send them out
     protected void notifyOffApnsOfAvailability(String reason, boolean availability) {
-        if (mAvailability == availability) return;
+        if (mAvailability == availability) {
+            if (DBG) {
+                log("notifyOffApnsOfAvailability: no change in availability, " +
+                     "not nofitying about reason='" + reason + "' availability=" + availability);
+            }
+            return;
+        }
         mAvailability = availability;
         for (int id = 0; id < APN_NUM_TYPES; id++) {
             if (!isApnIdEnabled(id)) {
@@ -685,10 +693,13 @@
      * @return {@code true} if data connectivity is possible, {@code false} otherwise.
      */
     protected boolean isDataPossible() {
-        boolean possible = (isDataAllowed()
-                && !(getAnyDataEnabled() && (mState == State.FAILED || mState == State.IDLE)));
-        if (!possible && DBG && isDataAllowed()) {
-            log("Data not possible.  No coverage: dataState = " + mState);
+        boolean dataAllowed = isDataAllowed();
+        boolean anyDataEnabled = getAnyDataEnabled();
+        boolean possible = (dataAllowed
+                && !(anyDataEnabled && (mState == State.FAILED || mState == State.IDLE)));
+        if (!possible && DBG) {
+            log("isDataPossible() " + possible + ", dataAllowed=" + dataAllowed +
+                    " anyDataEnabled=" + anyDataEnabled + " dataState=" + mState);
         }
         return possible;
     }
diff --git a/telephony/java/com/android/internal/telephony/RIL.java b/telephony/java/com/android/internal/telephony/RIL.java
index 9479a2d..91b19a9 100644
--- a/telephony/java/com/android/internal/telephony/RIL.java
+++ b/telephony/java/com/android/internal/telephony/RIL.java
@@ -434,7 +434,6 @@
                             mWakeLock.release();
                         }
                     }
-
                     break;
             }
         }
diff --git a/telephony/java/com/android/internal/telephony/sip/SipPhone.java b/telephony/java/com/android/internal/telephony/sip/SipPhone.java
index f9bc0e9..7373cbb 100755
--- a/telephony/java/com/android/internal/telephony/sip/SipPhone.java
+++ b/telephony/java/com/android/internal/telephony/sip/SipPhone.java
@@ -309,7 +309,9 @@
     }
 
     public boolean getMute() {
-        return foregroundCall.getMute();
+        return (foregroundCall.getState().isAlive()
+                ? foregroundCall.getMute()
+                : backgroundCall.getMute());
     }
 
     public Call getForegroundCall() {
diff --git a/tools/layoutlib/bridge/.classpath b/tools/layoutlib/bridge/.classpath
index 64c1fb5..2eaf8e3 100644
--- a/tools/layoutlib/bridge/.classpath
+++ b/tools/layoutlib/bridge/.classpath
@@ -8,6 +8,6 @@
 	<classpathentry kind="var" path="ANDROID_PLAT_SRC/prebuilt/common/kxml2/kxml2-2.3.0.jar" sourcepath="/ANDROID_PLAT_SRC/dalvik/libcore/xml/src/main/java"/>
 	<classpathentry kind="var" path="ANDROID_PLAT_SRC/out/host/common/obj/JAVA_LIBRARIES/temp_layoutlib_intermediates/javalib.jar" sourcepath="/ANDROID_PLAT_SRC/frameworks/base"/>
 	<classpathentry kind="var" path="ANDROID_PLAT_SRC/prebuilt/common/ninepatch/ninepatch-prebuilt.jar"/>
-	<classpathentry kind="var" path="ANDROID_PLAT_SRC/prebuilt/common/resources/resources-prebuilt.jar"/>
+	<classpathentry kind="var" path="ANDROID_PLAT_SRC/prebuilt/common/common/common-prebuilt.jar"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/tools/layoutlib/bridge/Android.mk b/tools/layoutlib/bridge/Android.mk
index 57dd7ae..3d4c76a 100644
--- a/tools/layoutlib/bridge/Android.mk
+++ b/tools/layoutlib/bridge/Android.mk
@@ -21,7 +21,7 @@
 LOCAL_JAVA_LIBRARIES := \
 	kxml2-2.3.0 \
 	layoutlib_api-prebuilt \
-	resources-prebuilt
+	common-prebuilt
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
 	temp_layoutlib \
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java
index 0ed4305..93c81d1 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java
@@ -31,6 +31,7 @@
 import com.android.resources.ResourceType;
 import com.android.tools.layoutlib.create.MethodAdapter;
 import com.android.tools.layoutlib.create.OverrideMethod;
+import com.android.util.Pair;
 
 import android.graphics.Bitmap;
 import android.graphics.Typeface;
@@ -42,6 +43,7 @@
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
 import java.util.Arrays;
+import java.util.EnumMap;
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.Map;
@@ -69,9 +71,11 @@
     private final static ReentrantLock sLock = new ReentrantLock();
 
     /**
-     * Maps from id to resource name/type. This is for android.R only.
+     * Maps from id to resource type/name. This is for android.R only.
      */
-    private final static Map<Integer, String[]> sRMap = new HashMap<Integer, String[]>();
+    private final static Map<Integer, Pair<ResourceType, String>> sRMap =
+        new HashMap<Integer, Pair<ResourceType, String>>();
+
     /**
      * Same as sRMap except for int[] instead of int resources. This is for android.R only.
      */
@@ -80,8 +84,8 @@
      * Reverse map compared to sRMap, resource type -> (resource name -> id).
      * This is for android.R only.
      */
-    private final static Map<String, Map<String, Integer>> sRFullMap =
-        new HashMap<String, Map<String,Integer>>();
+    private final static Map<ResourceType, Map<String, Integer>> sRFullMap =
+        new EnumMap<ResourceType, Map<String,Integer>>(ResourceType.class);
 
     private final static Map<Object, Map<String, SoftReference<Bitmap>>> sProjectBitmapCache =
         new HashMap<Object, Map<String, SoftReference<Bitmap>>>();
@@ -131,7 +135,7 @@
         }
     }
 
-    /** Instance of IntArrayWrapper to be reused in {@link #resolveResourceValue(int[])}. */
+    /** Instance of IntArrayWrapper to be reused in {@link #resolveResourceId(int[])}. */
     private final static IntArray sIntArrayWrapper = new IntArray();
 
     /**
@@ -237,28 +241,30 @@
             Class<?> r = com.android.internal.R.class;
 
             for (Class<?> inner : r.getDeclaredClasses()) {
-                String resType = inner.getSimpleName();
+                String resTypeName = inner.getSimpleName();
+                ResourceType resType = ResourceType.getEnum(resTypeName);
+                if (resType != null) {
+                    Map<String, Integer> fullMap = new HashMap<String, Integer>();
+                    sRFullMap.put(resType, fullMap);
 
-                Map<String, Integer> fullMap = new HashMap<String, Integer>();
-                sRFullMap.put(resType, fullMap);
-
-                for (Field f : inner.getDeclaredFields()) {
-                    // only process static final fields. Since the final attribute may have
-                    // been altered by layoutlib_create, we only check static
-                    int modifiers = f.getModifiers();
-                    if (Modifier.isStatic(modifiers)) {
-                        Class<?> type = f.getType();
-                        if (type.isArray() && type.getComponentType() == int.class) {
-                            // if the object is an int[] we put it in sRArrayMap using an IntArray
-                            // wrapper that properly implements equals and hashcode for the array
-                            // objects, as required by the map contract.
-                            sRArrayMap.put(new IntArray((int[]) f.get(null)), f.getName());
-                        } else if (type == int.class) {
-                            Integer value = (Integer) f.get(null);
-                            sRMap.put(value, new String[] { f.getName(), resType });
-                            fullMap.put(f.getName(), value);
-                        } else {
-                            assert false;
+                    for (Field f : inner.getDeclaredFields()) {
+                        // only process static final fields. Since the final attribute may have
+                        // been altered by layoutlib_create, we only check static
+                        int modifiers = f.getModifiers();
+                        if (Modifier.isStatic(modifiers)) {
+                            Class<?> type = f.getType();
+                            if (type.isArray() && type.getComponentType() == int.class) {
+                                // if the object is an int[] we put it in sRArrayMap using an IntArray
+                                // wrapper that properly implements equals and hashcode for the array
+                                // objects, as required by the map contract.
+                                sRArrayMap.put(new IntArray((int[]) f.get(null)), f.getName());
+                            } else if (type == int.class) {
+                                Integer value = (Integer) f.get(null);
+                                sRMap.put(value, Pair.of(resType, f.getName()));
+                                fullMap.put(f.getName(), value);
+                            } else {
+                                assert false;
+                            }
                         }
                     }
                 }
@@ -389,10 +395,10 @@
     /**
      * Returns details of a framework resource from its integer value.
      * @param value the integer value
-     * @return an array of 2 strings containing the resource name and type, or null if the id
-     * does not match any resource.
+     * @return a Pair containing the resource type and name, or null if the id
+     *     does not match any resource.
      */
-    public static String[] resolveResourceValue(int value) {
+    public static Pair<ResourceType, String> resolveResourceId(int value) {
         return sRMap.get(value);
     }
 
@@ -400,7 +406,7 @@
      * Returns the name of a framework resource whose value is an int array.
      * @param array
      */
-    public static String resolveResourceValue(int[] array) {
+    public static String resolveResourceId(int[] array) {
         sIntArrayWrapper.set(array);
         return sRArrayMap.get(sIntArrayWrapper);
     }
@@ -411,9 +417,8 @@
      * @param name the name of the resource.
      * @return an {@link Integer} containing the resource id, or null if no resource were found.
      */
-    public static Integer getResourceValue(ResourceType type, String name) {
-        String typeString = type.getName();
-        Map<String, Integer> map = sRFullMap.get(typeString);
+    public static Integer getResourceId(ResourceType type, String name) {
+        Map<String, Integer> map = sRFullMap.get(type);
         if (map != null) {
             return map.get(name);
         }
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
index abea8c70..037ad23 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
@@ -25,6 +25,7 @@
 import com.android.layoutlib.bridge.BridgeConstants;
 import com.android.layoutlib.bridge.impl.Stack;
 import com.android.resources.ResourceType;
+import com.android.util.Pair;
 
 import android.app.Activity;
 import android.app.Fragment;
@@ -518,14 +519,14 @@
      */
     private TreeMap<Integer,String> searchAttrs(int[] attrs, boolean[] outFrameworkFlag) {
         // get the name of the array from the framework resources
-        String arrayName = Bridge.resolveResourceValue(attrs);
+        String arrayName = Bridge.resolveResourceId(attrs);
         if (arrayName != null) {
             // if we found it, get the name of each of the int in the array.
             TreeMap<Integer,String> attributes = new TreeMap<Integer, String>();
             for (int i = 0 ; i < attrs.length ; i++) {
-                String[] info = Bridge.resolveResourceValue(attrs[i]);
+                Pair<ResourceType, String> info = Bridge.resolveResourceId(attrs[i]);
                 if (info != null) {
-                    attributes.put(i, info[0]);
+                    attributes.put(i, info.getSecond());
                 } else {
                     // FIXME Not sure what we should be doing here...
                     attributes.put(i, null);
@@ -541,13 +542,13 @@
 
         // if the name was not found in the framework resources, look in the project
         // resources
-        arrayName = mProjectCallback.resolveResourceValue(attrs);
+        arrayName = mProjectCallback.resolveResourceId(attrs);
         if (arrayName != null) {
             TreeMap<Integer,String> attributes = new TreeMap<Integer, String>();
             for (int i = 0 ; i < attrs.length ; i++) {
-                String[] info = mProjectCallback.resolveResourceValue(attrs[i]);
+                Pair<ResourceType, String> info = mProjectCallback.resolveResourceId(attrs[i]);
                 if (info != null) {
-                    attributes.put(i, info[0]);
+                    attributes.put(i, info.getSecond());
                 } else {
                     // FIXME Not sure what we should be doing here...
                     attributes.put(i, null);
@@ -572,14 +573,14 @@
      *         if nothing is found.
      */
     public String searchAttr(int attr) {
-        String[] info = Bridge.resolveResourceValue(attr);
+        Pair<ResourceType, String> info = Bridge.resolveResourceId(attr);
         if (info != null) {
-            return info[0];
+            return info.getSecond();
         }
 
-        info = mProjectCallback.resolveResourceValue(attr);
+        info = mProjectCallback.resolveResourceId(attr);
         if (info != null) {
-            return info[0];
+            return info.getSecond();
         }
 
         return null;
@@ -616,7 +617,7 @@
     }
 
     int getFrameworkResourceValue(ResourceType resType, String resName, int defValue) {
-        Integer value = Bridge.getResourceValue(resType, resName);
+        Integer value = Bridge.getResourceId(resType, resName);
         if (value != null) {
             return value.intValue();
         }
@@ -626,7 +627,7 @@
 
     int getProjectResourceValue(ResourceType resType, String resName, int defValue) {
         if (mProjectCallback != null) {
-            Integer value = mProjectCallback.getResourceValue(resType, resName);
+            Integer value = mProjectCallback.getResourceId(resType, resName);
             if (value != null) {
                 return value.intValue();
             }
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeInflater.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeInflater.java
index edc92c2..5740e8b 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeInflater.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeInflater.java
@@ -22,6 +22,7 @@
 import com.android.ide.common.rendering.api.ResourceValue;
 import com.android.layoutlib.bridge.Bridge;
 import com.android.resources.ResourceType;
+import com.android.util.Pair;
 
 import org.kxml2.io.KXmlParser;
 import org.xmlpull.v1.XmlPullParser;
@@ -155,16 +156,16 @@
 
             ResourceValue value = null;
 
-            String[] layoutInfo = Bridge.resolveResourceValue(resource);
+            Pair<ResourceType, String> layoutInfo = Bridge.resolveResourceId(resource);
             if (layoutInfo != null) {
                 value = bridgeContext.getRenderResources().getFrameworkResource(
-                        ResourceType.LAYOUT, layoutInfo[0]);
+                        ResourceType.LAYOUT, layoutInfo.getSecond());
             } else {
-                layoutInfo = mProjectCallback.resolveResourceValue(resource);
+                layoutInfo = mProjectCallback.resolveResourceId(resource);
 
                 if (layoutInfo != null) {
                     value = bridgeContext.getRenderResources().getProjectResource(
-                            ResourceType.LAYOUT, layoutInfo[0]);
+                            ResourceType.LAYOUT, layoutInfo.getSecond());
                 }
             }
 
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeResources.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeResources.java
index e71bbb23..5ea0a8df 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeResources.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeResources.java
@@ -23,6 +23,7 @@
 import com.android.layoutlib.bridge.BridgeConstants;
 import com.android.layoutlib.bridge.impl.ResourceHelper;
 import com.android.resources.ResourceType;
+import com.android.util.Pair;
 
 import org.kxml2.io.KXmlParser;
 import org.xmlpull.v1.XmlPullParser;
@@ -101,32 +102,22 @@
 
     private ResourceValue getResourceValue(int id, boolean[] platformResFlag_out) {
         // first get the String related to this id in the framework
-        String[] resourceInfo = Bridge.resolveResourceValue(id);
+        Pair<ResourceType, String> resourceInfo = Bridge.resolveResourceId(id);
 
         if (resourceInfo != null) {
-            ResourceType resType = ResourceType.getEnum(resourceInfo[1]);
-            if (resType == null) {
-                return null;
-            }
-
             platformResFlag_out[0] = true;
             return mContext.getRenderResources().getFrameworkResource(
-                    resType, resourceInfo[0]);
+                    resourceInfo.getFirst(), resourceInfo.getSecond());
         }
 
         // didn't find a match in the framework? look in the project.
         if (mProjectCallback != null) {
-            resourceInfo = mProjectCallback.resolveResourceValue(id);
+            resourceInfo = mProjectCallback.resolveResourceId(id);
 
             if (resourceInfo != null) {
-                ResourceType resType = ResourceType.getEnum(resourceInfo[1]);
-                if (resType == null) {
-                    return null;
-                }
-
                 platformResFlag_out[0] = false;
                 return mContext.getRenderResources().getProjectResource(
-                        resType, resourceInfo[0]);
+                        resourceInfo.getFirst(), resourceInfo.getSecond());
             }
         }
 
@@ -625,18 +616,18 @@
      */
     private void throwException(int id) throws NotFoundException {
         // first get the String related to this id in the framework
-        String[] resourceInfo = Bridge.resolveResourceValue(id);
+        Pair<ResourceType, String> resourceInfo = Bridge.resolveResourceId(id);
 
         // if the name is unknown in the framework, get it from the custom view loader.
         if (resourceInfo == null && mProjectCallback != null) {
-            resourceInfo = mProjectCallback.resolveResourceValue(id);
+            resourceInfo = mProjectCallback.resolveResourceId(id);
         }
 
         String message = null;
         if (resourceInfo != null) {
             message = String.format(
                     "Could not find %1$s resource matching value 0x%2$X (resolved name: %3$s) in current configuration.",
-                    resourceInfo[1], id, resourceInfo[0]);
+                    resourceInfo.getFirst(), id, resourceInfo.getSecond());
         } else {
             message = String.format(
                     "Could not resolve resource value: 0x%1$X.", id);
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeTypedArray.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeTypedArray.java
index 2b48539..cf2c0ff 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeTypedArray.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeTypedArray.java
@@ -589,7 +589,7 @@
         // then the xml attribute value was "resolved" which leads us to a ResourceValue with a
         // valid getType() and getName() returning a resource name.
         // (and getValue() returning null!). We need to handle this!
-        if (resValue.getResourceType() != null && resValue.getType().startsWith("@+") == false) {
+        if (resValue.getResourceType() != null) {
             // if this is a framework id
             if (mPlatformFile || resValue.isFramework()) {
                 // look for idName in the android R classes
@@ -647,10 +647,10 @@
         Integer idValue = null;
 
         if (resValue.isFramework()) {
-            idValue = Bridge.getResourceValue(resValue.getResourceType(),
+            idValue = Bridge.getResourceId(resValue.getResourceType(),
                     resValue.getName());
         } else {
-            idValue = mContext.getProjectCallback().getResourceValue(
+            idValue = mContext.getProjectCallback().getResourceId(
                     resValue.getResourceType(), resValue.getName());
         }
 
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlPullAttributes.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlPullAttributes.java
index f39961e..ba856e0 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlPullAttributes.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlPullAttributes.java
@@ -59,7 +59,7 @@
         String ns = mParser.getAttributeNamespace(index);
 
         if (BridgeConstants.NS_RESOURCES.equals(ns)) {
-            Integer v = Bridge.getResourceValue(ResourceType.ATTR, name);
+            Integer v = Bridge.getResourceId(ResourceType.ATTR, name);
             if (v != null) {
                 return v.intValue();
             }
@@ -70,8 +70,7 @@
         // this is not an attribute in the android namespace, we query the customviewloader, if
         // the namespaces match.
         if (mContext.getProjectCallback().getNamespace().equals(ns)) {
-            Integer v = mContext.getProjectCallback().getResourceValue(ResourceType.ATTR,
-                    name);
+            Integer v = mContext.getProjectCallback().getResourceId(ResourceType.ATTR, name);
             if (v != null) {
                 return v.intValue();
             }
@@ -111,9 +110,9 @@
         if (resource != null) {
             Integer id = null;
             if (mPlatformFile || resource.isFramework()) {
-                id = Bridge.getResourceValue(resource.getResourceType(), resource.getName());
+                id = Bridge.getResourceId(resource.getResourceType(), resource.getName());
             } else {
-                id = mContext.getProjectCallback().getResourceValue(
+                id = mContext.getProjectCallback().getResourceId(
                         resource.getResourceType(), resource.getName());
             }
 
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
index 19251f9..d816d18 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
@@ -50,6 +50,7 @@
 import com.android.resources.Density;
 import com.android.resources.ResourceType;
 import com.android.resources.ScreenSize;
+import com.android.util.Pair;
 
 import android.animation.Animator;
 import android.animation.AnimatorInflater;
@@ -569,13 +570,13 @@
             animationResource = mContext.getRenderResources().getFrameworkResource(
                     ResourceType.ANIMATOR, animationName);
             if (animationResource != null) {
-                animationId = Bridge.getResourceValue(ResourceType.ANIMATOR, animationName);
+                animationId = Bridge.getResourceId(ResourceType.ANIMATOR, animationName);
             }
         } else {
             animationResource = mContext.getRenderResources().getProjectResource(
                     ResourceType.ANIMATOR, animationName);
             if (animationResource != null) {
-                animationId = mContext.getProjectCallback().getResourceValue(
+                animationId = mContext.getProjectCallback().getResourceId(
                         ResourceType.ANIMATOR, animationName);
             }
         }
@@ -1227,10 +1228,10 @@
                 View child = content.getChildAt(i);
                 String tabSpec = String.format("tab_spec%d", i+1);
                 int id = child.getId();
-                String[] resource = projectCallback.resolveResourceValue(id);
+                Pair<ResourceType, String> resource = projectCallback.resolveResourceId(id);
                 String name;
                 if (resource != null) {
-                    name = resource[0]; // 0 is resource name, 1 is resource type.
+                    name = resource.getSecond();
                 } else {
                     name = String.format("Tab %d", i+1); // default name if id is unresolved.
                 }
@@ -1310,6 +1311,6 @@
 
     @Override
     public Integer getId(ResourceType resType, String resName) {
-        return Bridge.getResourceValue(resType, resName);
+        return Bridge.getResourceId(resType, resName);
     }
 }
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java
index ae7a77f..25bb81c 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java
@@ -197,7 +197,8 @@
                 } catch (Exception e) {
                     // this is an error and not warning since the file existence is checked before
                     // attempting to parse it.
-                    Bridge.getLog().error(null, "Failed to parse file " + value, e, null /*data*/);
+                    Bridge.getLog().error(null, "Failed to parse file " + stringValue,
+                            e, null /*data*/);
                 }
             } else {
                 Bridge.getLog().error(LayoutLog.TAG_BROKEN,
