Merge change 26876 into eclair

* changes:
  Restrict touch to the view height with the title. This should fix the links in the bottom of the screen are not touchable when title bar presents.
diff --git a/api/current.xml b/api/current.xml
index c8fbb52..9de4797 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -112833,6 +112833,3015 @@
 >
 </field>
 </interface>
+<class name="ContactsContract"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="ContactsContract"
+ type="android.provider.ContactsContract"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</constructor>
+<field name="AUTHORITY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;com.android.contacts&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AUTHORITY_URI"
+ type="android.net.Uri"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CALLER_IS_SYNCADAPTER"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;caller_is_syncadapter&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.AggregationExceptions"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="android.provider.BaseColumns">
+</implements>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.item/aggregation_exception&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.dir/aggregation_exception&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_URI"
+ type="android.net.Uri"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="RAW_CONTACT_ID1"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;raw_contact_id1&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="RAW_CONTACT_ID2"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;raw_contact_id2&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;type&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_AUTOMATIC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_KEEP_SEPARATE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_KEEP_TOGETHER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.CommonDataKinds"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</class>
+<interface name="ContactsContract.CommonDataKinds.BaseTypes"
+ abstract="true"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<field name="TYPE_CUSTOM"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</interface>
+<class name="ContactsContract.CommonDataKinds.Email"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="getTypeLabel"
+ return="java.lang.CharSequence"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="res" type="android.content.res.Resources">
+</parameter>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="label" type="java.lang.CharSequence">
+</parameter>
+</method>
+<method name="getTypeLabelResource"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="type" type="int">
+</parameter>
+</method>
+<field name="CONTENT_FILTER_URI"
+ type="android.net.Uri"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.item/email_v2&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_LOOKUP_URI"
+ type="android.net.Uri"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.dir/email_v2&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_URI"
+ type="android.net.Uri"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="DISPLAY_NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data4&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_HOME"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_MOBILE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_OTHER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_WORK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.CommonDataKinds.Event"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.item/event&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="START_DATE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data1&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_ANNIVERSARY"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_OTHER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.CommonDataKinds.GroupMembership"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.item/group_membership&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GROUP_ROW_ID"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data1&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GROUP_SOURCE_ID"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;group_sourceid&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.CommonDataKinds.Im"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="getProtocolLabel"
+ return="java.lang.CharSequence"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="res" type="android.content.res.Resources">
+</parameter>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="label" type="java.lang.CharSequence">
+</parameter>
+</method>
+<method name="getProtocolLabelResource"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="type" type="int">
+</parameter>
+</method>
+<method name="getTypeLabel"
+ return="java.lang.CharSequence"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="res" type="android.content.res.Resources">
+</parameter>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="label" type="java.lang.CharSequence">
+</parameter>
+</method>
+<method name="getTypeLabelResource"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="type" type="int">
+</parameter>
+</method>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.item/im&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CUSTOM_PROTOCOL"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data6&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PROTOCOL"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data5&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PROTOCOL_AIM"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PROTOCOL_CUSTOM"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="-1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PROTOCOL_GOOGLE_TALK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PROTOCOL_ICQ"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="6"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PROTOCOL_JABBER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="7"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PROTOCOL_MSN"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PROTOCOL_NETMEETING"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="8"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PROTOCOL_QQ"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PROTOCOL_SKYPE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PROTOCOL_YAHOO"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_HOME"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_OTHER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_WORK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.CommonDataKinds.Miscellaneous"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<field name="BIRTHDAY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data1&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.item/misc&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.CommonDataKinds.Nickname"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.item/nickname&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data1&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_DEFAULT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_INITIALS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_MAINDEN_NAME"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_OTHER_NAME"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_SHORT_NAME"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.CommonDataKinds.Note"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.item/note&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NOTE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data1&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.CommonDataKinds.Organization"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="getTypeLabel"
+ return="java.lang.CharSequence"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="res" type="android.content.res.Resources">
+</parameter>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="label" type="java.lang.CharSequence">
+</parameter>
+</method>
+<method name="getTypeLabelResource"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="type" type="int">
+</parameter>
+</method>
+<field name="COMPANY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data1&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.item/organization&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="DEPARTMENT"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data5&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="JOB_DESCRIPTION"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data6&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PHONETIC_NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data8&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SYMBOL"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data7&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TITLE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data4&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_OTHER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_WORK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.CommonDataKinds.Phone"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="getTypeLabel"
+ return="java.lang.CharSequence"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="res" type="android.content.res.Resources">
+</parameter>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="label" type="java.lang.CharSequence">
+</parameter>
+</method>
+<method name="getTypeLabelResource"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="type" type="int">
+</parameter>
+</method>
+<field name="CONTENT_FILTER_URI"
+ type="android.net.Uri"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.item/phone_v2&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.dir/phone_v2&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_URI"
+ type="android.net.Uri"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NUMBER"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data1&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_ASSISTANT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="19"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_CALLBACK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="8"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_CAR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="9"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_COMPANY_MAIN"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="10"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_FAX_HOME"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_FAX_WORK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_HOME"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_ISDN"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="11"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_MAIN"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_MMS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="20"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_MOBILE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_OTHER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="7"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_OTHER_FAX"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="13"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_PAGER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="6"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_RADIO"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="14"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_TELEX"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="15"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_TTY_TDD"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_WORK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_WORK_MOBILE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="17"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_WORK_PAGER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="18"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.CommonDataKinds.Photo"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.item/photo&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PHOTO"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data15&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.CommonDataKinds.Relation"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.item/relation&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data1&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_ASSISTANT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_BROTHER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_CHILD"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_DOMESTIC_PARTNER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_FATHER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_FRIEND"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="6"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_MANAGER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="7"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_MOTHER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="8"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_PARENT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="9"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_PARTNER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="10"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_REFERRED_BY"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="11"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_RELATIVE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_SISTER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="13"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_SPOUSE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="14"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.CommonDataKinds.StructuredName"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.item/name&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="DISPLAY_NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data1&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FAMILY_NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data3&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GIVEN_NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data2&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="MIDDLE_NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data5&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PHONETIC_FAMILY_NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data9&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PHONETIC_GIVEN_NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data7&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PHONETIC_MIDDLE_NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data8&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PREFIX"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data4&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SUFFIX"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data6&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.CommonDataKinds.StructuredPostal"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="getTypeLabel"
+ return="java.lang.CharSequence"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="res" type="android.content.res.Resources">
+</parameter>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="label" type="java.lang.CharSequence">
+</parameter>
+</method>
+<method name="getTypeLabelResource"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="type" type="int">
+</parameter>
+</method>
+<field name="CITY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data7&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.item/postal-address_v2&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.dir/postal-address_v2&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_URI"
+ type="android.net.Uri"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="COUNTRY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data10&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMATTED_ADDRESS"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data1&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NEIGHBORHOOD"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data6&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="POBOX"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data5&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="POSTCODE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data9&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="REGION"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data8&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="STREET"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data4&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_HOME"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_OTHER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_WORK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.CommonDataKinds.Website"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.item/website&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_BLOG"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_FTP"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="6"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_HOME"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_HOMEPAGE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_OTHER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="7"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_PROFILE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE_WORK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="URL"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data1&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.Contacts"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="android.provider.BaseColumns">
+</implements>
+<method name="getLookupUri"
+ return="android.net.Uri"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="resolver" type="android.content.ContentResolver">
+</parameter>
+<parameter name="contactUri" type="android.net.Uri">
+</parameter>
+</method>
+<method name="getLookupUri"
+ return="android.net.Uri"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="contactId" type="long">
+</parameter>
+<parameter name="lookupKey" type="java.lang.String">
+</parameter>
+</method>
+<method name="lookupContact"
+ return="android.net.Uri"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="resolver" type="android.content.ContentResolver">
+</parameter>
+<parameter name="lookupUri" type="android.net.Uri">
+</parameter>
+</method>
+<method name="markAsContacted"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="resolver" type="android.content.ContentResolver">
+</parameter>
+<parameter name="contactId" type="long">
+</parameter>
+</method>
+<method name="openContactPhotoInputStream"
+ return="java.io.InputStream"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="cr" type="android.content.ContentResolver">
+</parameter>
+<parameter name="contactUri" type="android.net.Uri">
+</parameter>
+</method>
+<field name="CONTENT_FILTER_URI"
+ type="android.net.Uri"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_GROUP_URI"
+ type="android.net.Uri"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.item/contact&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_LOOKUP_URI"
+ type="android.net.Uri"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_STREQUENT_FILTER_URI"
+ type="android.net.Uri"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_STREQUENT_URI"
+ type="android.net.Uri"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.dir/contact&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_URI"
+ type="android.net.Uri"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.Contacts.AggregationSuggestions"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="android.provider.BaseColumns">
+</implements>
+<field name="CONTENT_DIRECTORY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;suggestions&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.Contacts.Data"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="android.provider.BaseColumns">
+</implements>
+<field name="CONTENT_DIRECTORY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.Contacts.Photo"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="android.provider.BaseColumns">
+</implements>
+<field name="CONTENT_DIRECTORY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;photo&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.Data"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="getContactLookupUri"
+ return="android.net.Uri"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="resolver" type="android.content.ContentResolver">
+</parameter>
+<parameter name="dataUri" type="android.net.Uri">
+</parameter>
+</method>
+<field name="CONTENT_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.dir/data&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_URI"
+ type="android.net.Uri"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.Groups"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="android.provider.BaseColumns">
+</implements>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.item/group&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_SUMMARY_URI"
+ type="android.net.Uri"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.dir/group&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_URI"
+ type="android.net.Uri"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.Intents"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="ContactsContract.Intents"
+ type="android.provider.ContactsContract.Intents"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</constructor>
+<field name="ATTACH_IMAGE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;com.android.contacts.action.ATTACH_IMAGE&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EXTRA_CREATE_DESCRIPTION"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;com.android.contacts.action.CREATE_DESCRIPTION&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EXTRA_FORCE_CREATE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;com.android.contacts.action.FORCE_CREATE&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SEARCH_SUGGESTION_CLICKED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.provider.Contacts.SEARCH_SUGGESTION_CLICKED&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.provider.Contacts.SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.provider.Contacts.SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SHOW_OR_CREATE_CONTACT"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;com.android.contacts.action.SHOW_OR_CREATE_CONTACT&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.Intents.Insert"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="ContactsContract.Intents.Insert"
+ type="android.provider.ContactsContract.Intents.Insert"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</constructor>
+<field name="ACTION"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.intent.action.INSERT&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="COMPANY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;company&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EMAIL"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;email&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EMAIL_ISPRIMARY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;email_isprimary&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EMAIL_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;email_type&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FULL_MODE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;full_mode&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="IM_HANDLE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;im_handle&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="IM_ISPRIMARY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;im_isprimary&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="IM_PROTOCOL"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;im_protocol&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="JOB_TITLE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;job_title&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;name&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NOTES"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;notes&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PHONE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;phone&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PHONETIC_NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;phonetic_name&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PHONE_ISPRIMARY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;phone_isprimary&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PHONE_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;phone_type&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="POSTAL"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;postal&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="POSTAL_ISPRIMARY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;postal_isprimary&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="POSTAL_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;postal_type&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SECONDARY_EMAIL"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;secondary_email&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SECONDARY_EMAIL_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;secondary_email_type&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SECONDARY_PHONE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;secondary_phone&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SECONDARY_PHONE_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;secondary_phone_type&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TERTIARY_EMAIL"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;tertiary_email&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TERTIARY_EMAIL_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;tertiary_email_type&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TERTIARY_PHONE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;tertiary_phone&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TERTIARY_PHONE_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;tertiary_phone_type&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.PhoneLookup"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="android.provider.BaseColumns">
+</implements>
+<field name="CONTENT_FILTER_URI"
+ type="android.net.Uri"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.Presence"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="getPresenceIconResourceId"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="status" type="int">
+</parameter>
+</method>
+<method name="getPresencePrecedence"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="status" type="int">
+</parameter>
+</method>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.item/im-presence&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.dir/im-presence&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_URI"
+ type="android.net.Uri"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="_ID"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;presence_id&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.RawContacts"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="android.provider.BaseColumns">
+</implements>
+<method name="getContactLookupUri"
+ return="android.net.Uri"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="resolver" type="android.content.ContentResolver">
+</parameter>
+<parameter name="rawContactUri" type="android.net.Uri">
+</parameter>
+</method>
+<field name="AGGREGATION_MODE_DEFAULT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AGGREGATION_MODE_DISABLED"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AGGREGATION_MODE_IMMEDIATE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AGGREGATION_MODE_SUSPENDED"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.item/raw_contact&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.dir/raw_contact&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_URI"
+ type="android.net.Uri"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.RawContacts.Data"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="android.provider.BaseColumns">
+</implements>
+<field name="CONTENT_DIRECTORY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;data&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.Settings"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.item/setting&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;vnd.android.cursor.dir/setting&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_URI"
+ type="android.net.Uri"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="ContactsContract.SyncState"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="android.provider.SyncStateContract.Columns">
+</implements>
+<method name="get"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="provider" type="android.content.ContentProviderClient">
+</parameter>
+<parameter name="account" type="android.accounts.Account">
+</parameter>
+<exception name="RemoteException" type="android.os.RemoteException">
+</exception>
+</method>
+<method name="getWithUri"
+ return="android.util.Pair&lt;android.net.Uri, byte[]&gt;"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="provider" type="android.content.ContentProviderClient">
+</parameter>
+<parameter name="account" type="android.accounts.Account">
+</parameter>
+<exception name="RemoteException" type="android.os.RemoteException">
+</exception>
+</method>
+<method name="newSetOperation"
+ return="android.content.ContentProviderOperation"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="account" type="android.accounts.Account">
+</parameter>
+<parameter name="data" type="byte[]">
+</parameter>
+</method>
+<method name="set"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="provider" type="android.content.ContentProviderClient">
+</parameter>
+<parameter name="account" type="android.accounts.Account">
+</parameter>
+<parameter name="data" type="byte[]">
+</parameter>
+<exception name="RemoteException" type="android.os.RemoteException">
+</exception>
+</method>
+<field name="CONTENT_DIRECTORY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;syncstate&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_URI"
+ type="android.net.Uri"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
 <class name="LiveFolders"
  extends="java.lang.Object"
  abstract="false"
@@ -115776,6 +118785,17 @@
  visibility="public"
 >
 </field>
+<field name="ACTION_PRIVACY_SETTINGS"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.settings.PRIVACY_SETTINGS&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="ACTION_QUICK_LAUNCH_SETTINGS"
  type="java.lang.String"
  transient="false"
diff --git a/core/java/android/provider/Browser.java b/core/java/android/provider/Browser.java
index 028d3d7..4600b49 100644
--- a/core/java/android/provider/Browser.java
+++ b/core/java/android/provider/Browser.java
@@ -274,6 +274,32 @@
     }
 
     /**
+     *  Returns all the URLs in the history.
+     *  Requires {@link android.Manifest.permission#READ_HISTORY_BOOKMARKS}
+     *  @param cr   The ContentResolver used to access the database.
+     *  @hide pending API council approval
+     */
+    public static final String[] getVisitedHistory(ContentResolver cr) {
+	try {
+	    String[] projection = new String[] { "url" };
+	    Cursor c = cr.query(BOOKMARKS_URI,
+				projection,
+				"visits > 0",
+				null, null);
+	    String[] str = new String[c.getCount()];
+	    int i = 0;
+	    while (c.moveToNext()) {
+		str[i] = c.getString(0);
+		i++;
+	    }
+	    c.deactivate();
+	    return str;
+	} catch (IllegalStateException e) {
+	    return new String[0];
+	}
+    }
+
+    /**
      * If there are more than MAX_HISTORY_COUNT non-bookmark history
      * items in the bookmark/history table, delete TRUNCATE_N_OLDEST
      * of them.  This is used to keep our history table to a
diff --git a/core/java/android/provider/Contacts.java b/core/java/android/provider/Contacts.java
index d87018d..d4d3a7e 100644
--- a/core/java/android/provider/Contacts.java
+++ b/core/java/android/provider/Contacts.java
@@ -36,34 +36,57 @@
 
 /**
  * The Contacts provider stores all information about contacts.
+ *
+ * @deprecated The APIs have been superseded by {@link ContactsContract}. The newer APIs allow
+ * access multiple accounts and support aggregation of similar contacts. These APIs continue to
+ * work but will only return data for the first Google account created, which matches the original
+ * behavior.
  */
 @Deprecated
 public class Contacts {
     private static final String TAG = "Contacts";
 
+    /**
+     * @deprecated see {@link android.provider.ContactsContract}
+     */
     @Deprecated
     public static final String AUTHORITY = "contacts";
 
     /**
      * The content:// style URL for this provider
+     * @deprecated see {@link android.provider.ContactsContract}
      */
     @Deprecated
-    public static final Uri CONTENT_URI =
-        Uri.parse("content://" + AUTHORITY);
+    public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY);
 
-    /** Signifies an email address row that is stored in the ContactMethods table */
+    /** 
+     * Signifies an email address row that is stored in the ContactMethods table
+     * @deprecated see {@link android.provider.ContactsContract}
+     */
     @Deprecated
     public static final int KIND_EMAIL = 1;
-    /** Signifies a postal address row that is stored in the ContactMethods table */
+    /**
+     * Signifies a postal address row that is stored in the ContactMethods table
+     * @deprecated see {@link android.provider.ContactsContract}
+     */
     @Deprecated
     public static final int KIND_POSTAL = 2;
-    /** Signifies an IM address row that is stored in the ContactMethods table */
+    /**
+     * Signifies an IM address row that is stored in the ContactMethods table
+     * @deprecated see {@link android.provider.ContactsContract}
+     */
     @Deprecated
     public static final int KIND_IM = 3;
-    /** Signifies an Organization row that is stored in the Organizations table */
+    /**
+     * Signifies an Organization row that is stored in the Organizations table
+     * @deprecated see {@link android.provider.ContactsContract}
+     */
     @Deprecated
     public static final int KIND_ORGANIZATION = 4;
-    /** Signifies an Phone row that is stored in the Phones table */
+    /**
+     * Signifies an Phone row that is stored in the Phones table
+     * @deprecated see {@link android.provider.ContactsContract}
+     */
     @Deprecated
     public static final int KIND_PHONE = 5;
 
@@ -74,12 +97,14 @@
 
     /**
      * Columns from the Settings table that other columns join into themselves.
+     * @deprecated see {@link android.provider.ContactsContract}
      */
     @Deprecated
     public interface SettingsColumns {
         /**
          * The _SYNC_ACCOUNT to which this setting corresponds. This may be null.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String _SYNC_ACCOUNT = "_sync_account";
@@ -87,6 +112,7 @@
         /**
          * The _SYNC_ACCOUNT_TYPE to which this setting corresponds. This may be null.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String _SYNC_ACCOUNT_TYPE = "_sync_account_type";
@@ -94,6 +120,7 @@
         /**
          * The key of this setting.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String KEY = "key";
@@ -101,6 +128,7 @@
         /**
          * The value of this setting.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String VALUE = "value";
@@ -108,6 +136,7 @@
 
     /**
      * The settings over all of the people
+     * @deprecated see {@link android.provider.ContactsContract}
      */
     @Deprecated
     public static final class Settings implements BaseColumns, SettingsColumns {
@@ -118,6 +147,7 @@
 
         /**
          * The content:// style URL for this table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final Uri CONTENT_URI =
@@ -125,12 +155,14 @@
 
         /**
          * The directory twig for this sub-table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String CONTENT_DIRECTORY = "settings";
 
         /**
          * The default sort order for this table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String DEFAULT_SORT_ORDER = "key ASC";
@@ -143,10 +175,14 @@
          * <p>
          * This is a boolean setting. It is true if it is set and it is anything other than the
          * emptry string or "0".
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String SYNC_EVERYTHING = "syncEverything";
 
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static String getSetting(ContentResolver cr, String account, String key) {
             // For now we only support a single account and the UI doesn't know what
@@ -177,6 +213,9 @@
             }
         }
 
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static void setSetting(ContentResolver cr, String account, String key,
                 String value) {
@@ -195,12 +234,14 @@
 
     /**
      * Columns from the People table that other tables join into themselves.
+     * @deprecated see {@link android.provider.ContactsContract}
      */
     @Deprecated
     public interface PeopleColumns {
         /**
          * The person's name.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String NAME = "name";
@@ -210,6 +251,7 @@
          * character set (e.g. hiragana for Japanese).
          * Used for pronunciation and/or collation in some languages.
          * <p>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String PHONETIC_NAME = "phonetic_name";
@@ -218,6 +260,7 @@
          * The display name. If name is not null name, else if number is not null number,
          * else if email is not null email.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String DISPLAY_NAME = "display_name";
@@ -227,6 +270,7 @@
          * may not be human readable but phonetically sortable.
          * <P>Type: TEXT</p>
          * @hide Used only in Contacts application for now.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String SORT_STRING = "sort_string";
@@ -234,6 +278,7 @@
         /**
          * Notes about the person.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String NOTES = "notes";
@@ -241,6 +286,7 @@
         /**
          * The number of times a person has been contacted
          * <P>Type: INTEGER</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String TIMES_CONTACTED = "times_contacted";
@@ -248,6 +294,7 @@
         /**
          * The last time a person was contacted.
          * <P>Type: INTEGER</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String LAST_TIME_CONTACTED = "last_time_contacted";
@@ -255,6 +302,7 @@
         /**
          * A custom ringtone associated with a person. Not always present.
          * <P>Type: TEXT (URI to the ringtone)</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String CUSTOM_RINGTONE = "custom_ringtone";
@@ -263,6 +311,7 @@
          * Whether the person should always be sent to voicemail. Not always
          * present.
          * <P>Type: INTEGER (0 for false, 1 for true)</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String SEND_TO_VOICEMAIL = "send_to_voicemail";
@@ -270,6 +319,7 @@
         /**
          * Is the contact starred?
          * <P>Type: INTEGER (boolean)</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String STARRED = "starred";
@@ -277,6 +327,7 @@
         /**
          * The server version of the photo
          * <P>Type: TEXT (the version number portion of the photo URI)</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String PHOTO_VERSION = "photo_version";
@@ -284,17 +335,20 @@
 
     /**
      * This table contains people.
+     * @deprecated see {@link android.provider.ContactsContract}
      */
     @Deprecated
     public static final class People implements BaseColumns, SyncConstValue, PeopleColumns,
             PhonesColumns, PresenceColumns {
         /**
          * no public constructor since this is a utility class
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         private People() {}
 
         /**
          * The content:// style URL for this table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final Uri CONTENT_URI =
@@ -303,6 +357,7 @@
         /**
          * The content:// style URL for filtering people by name. The filter
          * argument should be passed as an additional path segment after this URI.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final Uri CONTENT_FILTER_URI =
@@ -311,6 +366,7 @@
         /**
          * The content:// style URL for the table that holds the deleted
          * contacts.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final Uri DELETED_CONTENT_URI =
@@ -326,6 +382,7 @@
          * Not exposed because we expect significant changes in the contacts
          * schema and do not want to have to support this.
          * @hide
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final Uri WITH_EMAIL_OR_IM_FILTER_URI =
@@ -334,6 +391,7 @@
         /**
          * The MIME type of {@link #CONTENT_URI} providing a directory of
          * people.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String CONTENT_TYPE = "vnd.android.cursor.dir/person";
@@ -341,12 +399,14 @@
         /**
          * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
          * person.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/person";
 
         /**
          * The default sort order for this table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String DEFAULT_SORT_ORDER = People.NAME + " ASC";
@@ -354,6 +414,7 @@
         /**
          * The ID of the persons preferred phone number.
          * <P>Type: INTEGER (foreign key to phones table on the _ID field)</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String PRIMARY_PHONE_ID = "primary_phone";
@@ -362,6 +423,7 @@
          * The ID of the persons preferred email.
          * <P>Type: INTEGER (foreign key to contact_methods table on the
          * _ID field)</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String PRIMARY_EMAIL_ID = "primary_email";
@@ -370,6 +432,7 @@
          * The ID of the persons preferred organization.
          * <P>Type: INTEGER (foreign key to organizations table on the
          * _ID field)</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String PRIMARY_ORGANIZATION_ID = "primary_organization";
@@ -379,6 +442,7 @@
          *
          * @param resolver the ContentResolver to use
          * @param personId the person who was contacted
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static void markAsContacted(ContentResolver resolver, long personId) {
@@ -393,6 +457,7 @@
 
         /**
          * @hide Used in vCard parser code.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static long tryGetMyContactsGroupId(ContentResolver resolver) {
@@ -417,6 +482,7 @@
          * @param personId the person to add to the group
          * @return the URI of the group membership row
          * @throws IllegalStateException if the My Contacts group can't be found
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static Uri addToMyContactsGroup(ContentResolver resolver, long personId) {
@@ -436,6 +502,7 @@
          * @param groupName the name of the group to add the contact to
          * @return the URI of the group membership row
          * @throws IllegalStateException if the group can't be found
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static Uri addToGroup(ContentResolver resolver, long personId, String groupName) {
@@ -466,6 +533,7 @@
          * @param personId the person to add to the group
          * @param groupId the group to add the person to
          * @return the URI of the group membership row
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static Uri addToGroup(ContentResolver resolver, long personId, long groupId) {
@@ -485,6 +553,7 @@
          * @param resolver the ContentResolver to use
          * @param values the values to use when creating the contact
          * @return the URI of the contact, or null if the operation fails
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static Uri createPersonInMyContactsGroup(ContentResolver resolver,
@@ -503,6 +572,9 @@
             return contactUri;
         }
 
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static Cursor queryGroups(ContentResolver resolver, long person) {
             return resolver.query(GroupMembership.CONTENT_URI, null, "person=?",
@@ -514,6 +586,7 @@
          * @param cr the ContentResolver to use
          * @param person the Uri of the person whose photo is to be updated
          * @param data the byte[] that represents the photo
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static void setPhotoData(ContentResolver cr, Uri person, byte[] data) {
@@ -527,6 +600,7 @@
          * Opens an InputStream for the person's photo and returns the photo as a Bitmap.
          * If the person's photo isn't present returns the placeholderImageResource instead.
          * @param person the person whose photo should be used
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static InputStream openContactPhotoInputStream(ContentResolver cr, Uri person) {
@@ -554,6 +628,7 @@
          * @param placeholderImageResource the image resource to use if the person doesn't
          *   have a photo
          * @param options the decoding options, can be set to null
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static Bitmap loadContactPhoto(Context context, Uri person,
@@ -581,6 +656,7 @@
 
         /**
          * A sub directory of a single person that contains all of their Phones.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final class Phones implements BaseColumns, PhonesColumns,
@@ -606,6 +682,7 @@
         /**
          * A subdirectory of a single person that contains all of their
          * ContactMethods.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final class ContactMethods
@@ -617,12 +694,14 @@
 
             /**
              * The directory twig for this sub-table
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String CONTENT_DIRECTORY = "contact_methods";
 
             /**
              * The default sort order for this table
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String DEFAULT_SORT_ORDER = "data ASC";
@@ -630,22 +709,26 @@
 
         /**
          * The extensions for a person
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static class Extensions implements BaseColumns, ExtensionsColumns {
             /**
              * no public constructor since this is a utility class
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             private Extensions() {}
 
             /**
              * The directory twig for this sub-table
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String CONTENT_DIRECTORY = "extensions";
 
             /**
              * The default sort order for this table
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String DEFAULT_SORT_ORDER = "name ASC";
@@ -653,6 +736,7 @@
             /**
              * The ID of the person this phone number is assigned to.
              * <P>Type: INTEGER (long)</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String PERSON_ID = "person";
@@ -661,12 +745,14 @@
 
     /**
      * Columns from the groups table.
+     * @deprecated see {@link android.provider.ContactsContract}
      */
     @Deprecated
     public interface GroupsColumns {
         /**
          * The group name.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String NAME = "name";
@@ -674,6 +760,7 @@
         /**
          * Notes about the group.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String NOTES = "notes";
@@ -682,6 +769,7 @@
          * Whether this group should be synced if the SYNC_EVERYTHING settings is false
          * for this group's account.
          * <P>Type: INTEGER (boolean)</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String SHOULD_SYNC = "should_sync";
@@ -689,6 +777,7 @@
         /**
          * The ID of this group if it is a System Group, null otherwise.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String SYSTEM_ID = "system_id";
@@ -696,6 +785,7 @@
 
     /**
      * This table contains the groups for an account.
+     * @deprecated see {@link android.provider.ContactsContract}
      */
     @Deprecated
     public static final class Groups
@@ -707,6 +797,7 @@
 
         /**
          * The content:// style URL for this table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final Uri CONTENT_URI =
@@ -715,6 +806,7 @@
         /**
          * The content:// style URL for the table that holds the deleted
          * groups.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final Uri DELETED_CONTENT_URI =
@@ -723,6 +815,7 @@
         /**
          * The MIME type of {@link #CONTENT_URI} providing a directory of
          * groups.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contactsgroup";
@@ -730,24 +823,27 @@
         /**
          * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
          * group.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contactsgroup";
 
         /**
          * The default sort order for this table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String DEFAULT_SORT_ORDER = NAME + " ASC";
 
         /**
-         *
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String GROUP_ANDROID_STARRED = "Starred in Android";
 
         /**
          * The "My Contacts" system group.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String GROUP_MY_CONTACTS = "Contacts";
@@ -755,36 +851,63 @@
 
     /**
      * Columns from the Phones table that other columns join into themselves.
+     * @deprecated see {@link android.provider.ContactsContract}
      */
     @Deprecated
     public interface PhonesColumns {
         /**
          * The type of the the phone number.
          * <P>Type: INTEGER (one of the constants below)</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String TYPE = "type";
 
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final int TYPE_CUSTOM = 0;
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final int TYPE_HOME = 1;
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final int TYPE_MOBILE = 2;
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final int TYPE_WORK = 3;
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final int TYPE_FAX_WORK = 4;
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final int TYPE_FAX_HOME = 5;
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final int TYPE_PAGER = 6;
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final int TYPE_OTHER = 7;
 
         /**
          * The user provided label for the phone number, only used if TYPE is TYPE_CUSTOM.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String LABEL = "label";
@@ -792,6 +915,7 @@
         /**
          * The phone number as the user entered it.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String NUMBER = "number";
@@ -799,6 +923,7 @@
         /**
          * The normalized phone number
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String NUMBER_KEY = "number_key";
@@ -806,6 +931,7 @@
         /**
          * Whether this is the primary phone number
          * <P>Type: INTEGER (if set, non-0 means true)</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String ISPRIMARY = "isprimary";
@@ -815,6 +941,7 @@
      * This table stores phone numbers and a reference to the person that the
      * contact method belongs to. Phone numbers are stored separately from
      * other contact methods to make caller ID lookup more efficient.
+     * @deprecated see {@link android.provider.ContactsContract}
      */
     @Deprecated
     public static final class Phones
@@ -824,6 +951,9 @@
          */
         private Phones() {}
 
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final CharSequence getDisplayLabel(Context context, int type,
                 CharSequence label, CharSequence[] labelArray) {
@@ -846,6 +976,9 @@
             return display;
         }
 
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final CharSequence getDisplayLabel(Context context, int type,
                 CharSequence label) {
@@ -854,6 +987,7 @@
 
         /**
          * The content:// style URL for this table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final Uri CONTENT_URI =
@@ -861,6 +995,7 @@
 
         /**
          * The content:// style URL for filtering phone numbers
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final Uri CONTENT_FILTER_URL =
@@ -869,6 +1004,7 @@
         /**
          * The MIME type of {@link #CONTENT_URI} providing a directory of
          * phones.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String CONTENT_TYPE = "vnd.android.cursor.dir/phone";
@@ -876,12 +1012,14 @@
         /**
          * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
          * phone.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/phone";
 
         /**
          * The default sort order for this table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String DEFAULT_SORT_ORDER = "name ASC";
@@ -889,11 +1027,15 @@
         /**
          * The ID of the person this phone number is assigned to.
          * <P>Type: INTEGER (long)</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String PERSON_ID = "person";
     }
 
+    /**
+     * @deprecated see {@link android.provider.ContactsContract}
+     */
     @Deprecated
     public static final class GroupMembership implements BaseColumns, GroupsColumns {
         /**
@@ -903,6 +1045,7 @@
 
         /**
          * The content:// style URL for this table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final Uri CONTENT_URI =
@@ -910,6 +1053,7 @@
 
         /**
          * The content:// style URL for this table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final Uri RAW_CONTENT_URI =
@@ -917,6 +1061,7 @@
 
         /**
          * The directory twig for this sub-table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String CONTENT_DIRECTORY = "groupmembership";
@@ -924,6 +1069,7 @@
         /**
          * The MIME type of {@link #CONTENT_URI} providing a directory of all
          * person groups.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contactsgroupmembership";
@@ -931,6 +1077,7 @@
         /**
          * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
          * person group.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String CONTENT_ITEM_TYPE =
@@ -938,6 +1085,7 @@
 
         /**
          * The default sort order for this table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String DEFAULT_SORT_ORDER = "group_id ASC";
@@ -945,6 +1093,7 @@
         /**
          * The row id of the accounts group.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String GROUP_ID = "group_id";
@@ -952,6 +1101,7 @@
         /**
          * The sync id of the group.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String GROUP_SYNC_ID = "group_sync_id";
@@ -959,6 +1109,7 @@
         /**
          * The account of the group.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String GROUP_SYNC_ACCOUNT = "group_sync_account";
@@ -966,6 +1117,7 @@
         /**
          * The account type of the group.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String GROUP_SYNC_ACCOUNT_TYPE = "group_sync_account_type";
@@ -973,6 +1125,7 @@
         /**
          * The row id of the person.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String PERSON_ID = "person";
@@ -981,6 +1134,7 @@
     /**
      * Columns from the ContactMethods table that other tables join into
      * themseleves.
+     * @deprecated see {@link android.provider.ContactsContract}
      */
     @Deprecated
     public interface ContactMethodsColumns {
@@ -988,6 +1142,7 @@
          * The kind of the the contact method. For example, email address,
          * postal address, etc.
          * <P>Type: INTEGER (one of the values below)</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String KIND = "kind";
@@ -995,20 +1150,34 @@
         /**
          * The type of the contact method, must be one of the types below.
          * <P>Type: INTEGER (one of the values below)</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String TYPE = "type";
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final int TYPE_CUSTOM = 0;
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final int TYPE_HOME = 1;
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final int TYPE_WORK = 2;
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final int TYPE_OTHER = 3;
 
         /**
          * @hide This is temporal. TYPE_MOBILE should be added to TYPE in the future.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final int MOBILE_EMAIL_TYPE_INDEX = 2;
@@ -1016,6 +1185,7 @@
         /**
          * @hide This is temporal. TYPE_MOBILE should be added to TYPE in the future.
          * This is not "mobile" but "CELL" since vCard uses it for identifying mobile phone.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String MOBILE_EMAIL_TYPE_NAME = "_AUTO_CELL";
@@ -1023,6 +1193,7 @@
         /**
          * The user defined label for the the contact method.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String LABEL = "label";
@@ -1030,6 +1201,7 @@
         /**
          * The data for the contact method.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String DATA = "data";
@@ -1037,6 +1209,7 @@
         /**
          * Auxiliary data for the contact method.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String AUX_DATA = "aux_data";
@@ -1044,6 +1217,7 @@
         /**
          * Whether this is the primary organization
          * <P>Type: INTEGER (if set, non-0 means true)</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String ISPRIMARY = "isprimary";
@@ -1052,6 +1226,7 @@
     /**
      * This table stores all non-phone contact methods and a reference to the
      * person that the contact method belongs to.
+     * @deprecated see {@link android.provider.ContactsContract}
      */
     @Deprecated
     public static final class ContactMethods
@@ -1059,6 +1234,7 @@
         /**
          * The column with latitude data for postal locations
          * <P>Type: REAL</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String POSTAL_LOCATION_LATITUDE = DATA;
@@ -1066,6 +1242,7 @@
         /**
          * The column with longitude data for postal locations
          * <P>Type: REAL</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String POSTAL_LOCATION_LONGITUDE = AUX_DATA;
@@ -1077,34 +1254,65 @@
          *  - null
          *  - pre:<an integer, one of the protocols below>
          *  - custom:<a string>
+         *  @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final int PROTOCOL_AIM = 0;
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final int PROTOCOL_MSN = 1;
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final int PROTOCOL_YAHOO = 2;
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final int PROTOCOL_SKYPE = 3;
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final int PROTOCOL_QQ = 4;
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final int PROTOCOL_GOOGLE_TALK = 5;
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final int PROTOCOL_ICQ = 6;
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final int PROTOCOL_JABBER = 7;
 
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static String encodePredefinedImProtocol(int protocol) {
             return "pre:" + protocol;
         }
 
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static String encodeCustomImProtocol(String protocolString) {
             return "custom:" + protocolString;
         }
 
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static Object decodeImProtocol(String encodedString) {
             if (encodedString == null) {
@@ -1131,6 +1339,7 @@
          * @param protocol the protocol ID
          * @return the provider name the IM app uses for the given protocol, or null if no
          * provider is defined for the given protocol
+         * @deprecated see {@link android.provider.ContactsContract}
          * @hide
          */
         @Deprecated
@@ -1161,6 +1370,9 @@
          */
         private ContactMethods() {}
 
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final CharSequence getDisplayLabel(Context context, int kind,
                 int type, CharSequence label) {
@@ -1213,6 +1425,7 @@
          * @param postalId the address to update
          * @param latitude the latitude for the address
          * @param longitude the longitude for the address
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public void addPostalLocation(Context context, long postalId,
@@ -1233,6 +1446,7 @@
 
         /**
          * The content:// style URL for this table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final Uri CONTENT_URI =
@@ -1240,6 +1454,7 @@
 
         /**
          * The content:// style URL for sub-directory of e-mail addresses.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final Uri CONTENT_EMAIL_URI =
@@ -1247,21 +1462,24 @@
 
         /**
          * The MIME type of {@link #CONTENT_URI} providing a directory of
+         * @deprecated see {@link android.provider.ContactsContract}
          * phones.
          */
         @Deprecated
         public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contact-methods";
 
         /**
-         * The MIME type of a {@link #CONTENT_EMAIL_URI} sub-directory of\
+         * The MIME type of a {@link #CONTENT_EMAIL_URI} sub-directory of
          * multiple {@link Contacts#KIND_EMAIL} entries.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String CONTENT_EMAIL_TYPE = "vnd.android.cursor.dir/email";
 
         /**
-         * The MIME type of a {@link #CONTENT_EMAIL_URI} sub-directory of\
+         * The MIME type of a {@link #CONTENT_EMAIL_URI} sub-directory of
          * multiple {@link Contacts#KIND_POSTAL} entries.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String CONTENT_POSTAL_TYPE = "vnd.android.cursor.dir/postal-address";
@@ -1269,6 +1487,7 @@
         /**
          * The MIME type of a {@link #CONTENT_URI} sub-directory of a single
          * {@link Contacts#KIND_EMAIL} entry.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String CONTENT_EMAIL_ITEM_TYPE = "vnd.android.cursor.item/email";
@@ -1276,6 +1495,7 @@
         /**
          * The MIME type of a {@link #CONTENT_URI} sub-directory of a single
          * {@link Contacts#KIND_POSTAL} entry.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String CONTENT_POSTAL_ITEM_TYPE
@@ -1284,12 +1504,14 @@
         /**
          * The MIME type of a {@link #CONTENT_URI} sub-directory of a single
          * {@link Contacts#KIND_IM} entry.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String CONTENT_IM_ITEM_TYPE = "vnd.android.cursor.item/jabber-im";
 
         /**
          * The default sort order for this table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String DEFAULT_SORT_ORDER = "name ASC";
@@ -1297,6 +1519,7 @@
         /**
          * The ID of the person this contact method is assigned to.
          * <P>Type: INTEGER (long)</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String PERSON_ID = "person";
@@ -1304,6 +1527,7 @@
 
     /**
      * The IM presence columns with some contacts specific columns mixed in.
+     * @deprecated see {@link android.provider.ContactsContract}
      */
     @Deprecated
     public interface PresenceColumns extends Im.CommonPresenceColumns {
@@ -1312,6 +1536,7 @@
          * {@link Contacts.ContactMethods#encodePredefinedImProtocol} or
          * {@link Contacts.ContactMethods#encodeCustomImProtocol}.
          * <P>Type: STRING</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String IM_PROTOCOL = "im_protocol";
@@ -1320,6 +1545,7 @@
          * The IM handle the presence item is for. The handle is scoped to
          * the {@link #IM_PROTOCOL}.
          * <P>Type: STRING</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String IM_HANDLE = "im_handle";
@@ -1327,6 +1553,7 @@
         /**
          * The IM account for the local user that the presence data came from.
          * <P>Type: STRING</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String IM_ACCOUNT = "im_account";
@@ -1335,12 +1562,14 @@
     /**
      * Contains presence information about contacts.
      * @hide
+     * @deprecated see {@link android.provider.ContactsContract}
      */
     @Deprecated
     public static final class Presence
             implements BaseColumns, PresenceColumns, PeopleColumns {
         /**
          * The content:// style URL for this table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final Uri CONTENT_URI =
@@ -1349,6 +1578,7 @@
         /**
          * The ID of the person this presence item is assigned to.
          * <P>Type: INTEGER (long)</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String PERSON_ID = "person";
@@ -1358,6 +1588,7 @@
          *
          * @param status the status to get the icon for
          * @return the resource ID for the proper presence icon
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final int getPresenceIconResourceId(int status) {
@@ -1386,6 +1617,7 @@
          *
          * @param icon the icon to to set
          * @param serverStatus that status
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final void setPresenceIcon(ImageView icon, int serverStatus) {
@@ -1395,26 +1627,38 @@
 
     /**
      * Columns from the Organizations table that other columns join into themselves.
+     * @deprecated see {@link android.provider.ContactsContract}
      */
     @Deprecated
     public interface OrganizationColumns {
         /**
          * The type of the organizations.
          * <P>Type: INTEGER (one of the constants below)</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String TYPE = "type";
 
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final int TYPE_CUSTOM = 0;
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final int TYPE_WORK = 1;
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final int TYPE_OTHER = 2;
 
         /**
          * The user provided label, only used if TYPE is TYPE_CUSTOM.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String LABEL = "label";
@@ -1422,6 +1666,7 @@
         /**
          * The name of the company for this organization.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String COMPANY = "company";
@@ -1429,6 +1674,7 @@
         /**
          * The title within this organization.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String TITLE = "title";
@@ -1436,6 +1682,7 @@
         /**
          * The person this organization is tied to.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String PERSON_ID = "person";
@@ -1443,6 +1690,7 @@
         /**
          * Whether this is the primary organization
          * <P>Type: INTEGER (if set, non-0 means true)</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String ISPRIMARY = "isprimary";
@@ -1450,6 +1698,7 @@
 
     /**
      * A sub directory of a single person that contains all of their Phones.
+     * @deprecated see {@link android.provider.ContactsContract}
      */
     @Deprecated
     public static final class Organizations implements BaseColumns, OrganizationColumns {
@@ -1458,6 +1707,9 @@
          */
         private Organizations() {}
 
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public static final CharSequence getDisplayLabel(Context context, int type,
                 CharSequence label) {
@@ -1481,6 +1733,7 @@
 
         /**
          * The content:// style URL for this table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final Uri CONTENT_URI =
@@ -1488,12 +1741,14 @@
 
         /**
          * The directory twig for this sub-table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String CONTENT_DIRECTORY = "organizations";
 
         /**
          * The default sort order for this table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String DEFAULT_SORT_ORDER = "company, title, isprimary ASC";
@@ -1501,12 +1756,14 @@
 
     /**
      * Columns from the Photos table that other columns join into themselves.
+     * @deprecated see {@link android.provider.ContactsContract}
      */
     @Deprecated
     public interface PhotosColumns {
         /**
          * The _SYNC_VERSION of the photo that was last downloaded
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String LOCAL_VERSION = "local_version";
@@ -1514,6 +1771,7 @@
         /**
          * The person this photo is associated with.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String PERSON_ID = "person";
@@ -1522,6 +1780,7 @@
          * non-zero if a download is required and the photo isn't marked as a bad resource.
          * You must specify this in the columns in order to use it in the where clause.
          * <P>Type: INTEGER(boolean)</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String DOWNLOAD_REQUIRED = "download_required";
@@ -1529,6 +1788,7 @@
         /**
          * non-zero if this photo is known to exist on the server
          * <P>Type: INTEGER(boolean)</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String EXISTS_ON_SERVER = "exists_on_server";
@@ -1537,6 +1797,7 @@
          * Contains the description of the upload or download error from
          * the previous attempt. If null then the previous attempt succeeded.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String SYNC_ERROR = "sync_error";
@@ -1544,6 +1805,7 @@
         /**
          * The image data, or null if there is no image.
          * <P>Type: BLOB</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String DATA = "data";
@@ -1552,6 +1814,7 @@
 
     /**
      * The photos over all of the people
+     * @deprecated see {@link android.provider.ContactsContract}
      */
     @Deprecated
     public static final class Photos implements BaseColumns, PhotosColumns, SyncConstValue {
@@ -1562,29 +1825,35 @@
 
         /**
          * The content:// style URL for this table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
-        public static final Uri CONTENT_URI =
-            Uri.parse("content://contacts/photos");
+        public static final Uri CONTENT_URI = Uri.parse("content://contacts/photos");
 
         /**
          * The directory twig for this sub-table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String CONTENT_DIRECTORY = "photo";
 
         /**
          * The default sort order for this table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String DEFAULT_SORT_ORDER = "person ASC";
     }
 
+    /**
+     * @deprecated see {@link android.provider.ContactsContract}
+     */
     @Deprecated
     public interface ExtensionsColumns {
         /**
          * The name of this extension. May not be null. There may be at most one row for each name.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String NAME = "name";
@@ -1592,6 +1861,7 @@
         /**
          * The value of this extension. May not be null.
          * <P>Type: TEXT</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String VALUE = "value";
@@ -1599,6 +1869,7 @@
 
     /**
      * The extensions for a person
+     * @deprecated see {@link android.provider.ContactsContract}
      */
     @Deprecated
     public static final class Extensions implements BaseColumns, ExtensionsColumns {
@@ -1609,6 +1880,7 @@
 
         /**
          * The content:// style URL for this table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final Uri CONTENT_URI =
@@ -1617,6 +1889,7 @@
         /**
          * The MIME type of {@link #CONTENT_URI} providing a directory of
          * phones.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contact_extensions";
@@ -1624,12 +1897,14 @@
         /**
          * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
          * phone.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_extensions";
 
         /**
          * The default sort order for this table
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String DEFAULT_SORT_ORDER = "person, name ASC";
@@ -1637,6 +1912,7 @@
         /**
          * The ID of the person this phone number is assigned to.
          * <P>Type: INTEGER (long)</P>
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String PERSON_ID = "person";
@@ -1645,6 +1921,7 @@
     /**
      * Contains helper classes used to create or manage {@link android.content.Intent Intents}
      * that involve contacts.
+     * @deprecated see {@link android.provider.ContactsContract}
      */
     @Deprecated
     public static final class Intents {
@@ -1654,6 +1931,7 @@
 
         /**
          * This is the intent that is fired when a search suggestion is clicked on.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String SEARCH_SUGGESTION_CLICKED =
@@ -1662,6 +1940,7 @@
         /**
          * This is the intent that is fired when a search suggestion for dialing a number
          * is clicked on.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED =
@@ -1670,6 +1949,7 @@
         /**
          * This is the intent that is fired when a search suggestion for creating a contact
          * is clicked on.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED =
@@ -1678,6 +1958,7 @@
         /**
          * Starts an Activity that lets the user pick a contact to attach an image to.
          * After picking the contact it launches the image cropper in face detection mode.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String ATTACH_IMAGE = ContactsContract.Intents.ATTACH_IMAGE;
@@ -1704,6 +1985,7 @@
          * <p>
          * Passing true for the {@link #EXTRA_FORCE_CREATE} extra will skip
          * prompting the user when the contact doesn't exist.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String SHOW_OR_CREATE_CONTACT =
@@ -1715,6 +1997,7 @@
          * to prompt user with dialog before creating.
          * <p>
          * Type: BOOLEAN
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String EXTRA_FORCE_CREATE = ContactsContract.Intents.EXTRA_FORCE_CREATE;
@@ -1725,6 +2008,7 @@
          * contact.
          * <p>
          * Type: STRING
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String EXTRA_CREATE_DESCRIPTION =
@@ -1736,27 +2020,34 @@
          * dialog will be centered.
          *
          * @hide pending API council review
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final String EXTRA_TARGET_RECT = ContactsContract.Intents.EXTRA_TARGET_RECT;
 
         /**
          * Intents related to the Contacts app UI.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final class UI {
+            /**
+             * @deprecated see {@link android.provider.ContactsContract}
+             */
             @Deprecated
             public UI() {
             }
 
             /**
              * The action for the default contacts list tab.
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String LIST_DEFAULT = ContactsContract.Intents.UI.LIST_DEFAULT;
 
             /**
              * The action for the contacts list tab.
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String LIST_GROUP_ACTION =
@@ -1764,12 +2055,14 @@
 
             /**
              * When in LIST_GROUP_ACTION mode, this is the group to display.
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String GROUP_NAME_EXTRA_KEY =
                     ContactsContract.Intents.UI.GROUP_NAME_EXTRA_KEY;
             /**
              * The action for the all contacts list tab.
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String LIST_ALL_CONTACTS_ACTION =
@@ -1777,6 +2070,7 @@
 
             /**
              * The action for the contacts with phone numbers list tab.
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String LIST_CONTACTS_WITH_PHONES_ACTION =
@@ -1784,6 +2078,7 @@
 
             /**
              * The action for the starred contacts list tab.
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String LIST_STARRED_ACTION =
@@ -1791,6 +2086,7 @@
 
             /**
              * The action for the frequent contacts list tab.
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String LIST_FREQUENT_ACTION =
@@ -1800,6 +2096,7 @@
              * The action for the "strequent" contacts list tab. It first lists the starred
              * contacts in alphabetical order and then the frequent contacts in descending
              * order of the number of times they have been contacted.
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String LIST_STREQUENT_ACTION =
@@ -1808,6 +2105,7 @@
             /**
              * A key for to be used as an intent extra to set the activity
              * title to a custom String value.
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String TITLE_EXTRA_KEY =
@@ -1820,6 +2118,7 @@
              * filtering
              * <p>
              * Output: Nothing.
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String FILTER_CONTACTS_ACTION =
@@ -1828,6 +2127,7 @@
             /**
              * Used as an int extra field in {@link #FILTER_CONTACTS_ACTION}
              * intents to supply the text on which to filter.
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String FILTER_TEXT_EXTRA_KEY =
@@ -1837,19 +2137,26 @@
         /**
          * Convenience class that contains string constants used
          * to create contact {@link android.content.Intent Intents}.
+         * @deprecated see {@link android.provider.ContactsContract}
          */
         @Deprecated
         public static final class Insert {
+            /**
+             * @deprecated see {@link android.provider.ContactsContract}
+             */
             @Deprecated
             public Insert() {
             }
 
-            /** The action code to use when adding a contact */
+            /** The action code to use when adding a contact
+             * @deprecated see {@link android.provider.ContactsContract} 
+             */
             @Deprecated
             public static final String ACTION = ContactsContract.Intents.Insert.ACTION;
 
             /**
              * If present, forces a bypass of quick insert mode.
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String FULL_MODE = ContactsContract.Intents.Insert.FULL_MODE;
@@ -1857,6 +2164,7 @@
             /**
              * The extra field for the contact name.
              * <P>Type: String</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String NAME = ContactsContract.Intents.Insert.NAME;
@@ -1864,6 +2172,7 @@
             /**
              * The extra field for the contact phonetic name.
              * <P>Type: String</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String PHONETIC_NAME =
@@ -1872,6 +2181,7 @@
             /**
              * The extra field for the contact company.
              * <P>Type: String</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String COMPANY = ContactsContract.Intents.Insert.COMPANY;
@@ -1879,6 +2189,7 @@
             /**
              * The extra field for the contact job title.
              * <P>Type: String</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String JOB_TITLE = ContactsContract.Intents.Insert.JOB_TITLE;
@@ -1886,6 +2197,7 @@
             /**
              * The extra field for the contact notes.
              * <P>Type: String</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String NOTES = ContactsContract.Intents.Insert.NOTES;
@@ -1893,6 +2205,7 @@
             /**
              * The extra field for the contact phone number.
              * <P>Type: String</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String PHONE = ContactsContract.Intents.Insert.PHONE;
@@ -1901,6 +2214,7 @@
              * The extra field for the contact phone number type.
              * <P>Type: Either an integer value from {@link android.provider.Contacts.PhonesColumns PhonesColumns},
              *  or a string specifying a custom label.</P>
+             *  @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String PHONE_TYPE = ContactsContract.Intents.Insert.PHONE_TYPE;
@@ -1908,6 +2222,7 @@
             /**
              * The extra field for the phone isprimary flag.
              * <P>Type: boolean</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String PHONE_ISPRIMARY =
@@ -1916,6 +2231,7 @@
             /**
              * The extra field for an optional second contact phone number.
              * <P>Type: String</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String SECONDARY_PHONE =
@@ -1925,6 +2241,7 @@
              * The extra field for an optional second contact phone number type.
              * <P>Type: Either an integer value from {@link android.provider.Contacts.PhonesColumns PhonesColumns},
              *  or a string specifying a custom label.</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String SECONDARY_PHONE_TYPE =
@@ -1933,6 +2250,7 @@
             /**
              * The extra field for an optional third contact phone number.
              * <P>Type: String</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String TERTIARY_PHONE =
@@ -1942,6 +2260,7 @@
              * The extra field for an optional third contact phone number type.
              * <P>Type: Either an integer value from {@link android.provider.Contacts.PhonesColumns PhonesColumns},
              *  or a string specifying a custom label.</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String TERTIARY_PHONE_TYPE =
@@ -1950,6 +2269,7 @@
             /**
              * The extra field for the contact email address.
              * <P>Type: String</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String EMAIL = ContactsContract.Intents.Insert.EMAIL;
@@ -1958,6 +2278,7 @@
              * The extra field for the contact email type.
              * <P>Type: Either an integer value from {@link android.provider.Contacts.ContactMethodsColumns ContactMethodsColumns}
              *  or a string specifying a custom label.</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String EMAIL_TYPE = ContactsContract.Intents.Insert.EMAIL_TYPE;
@@ -1965,6 +2286,7 @@
             /**
              * The extra field for the email isprimary flag.
              * <P>Type: boolean</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String EMAIL_ISPRIMARY =
@@ -1973,6 +2295,7 @@
             /**
              * The extra field for an optional second contact email address.
              * <P>Type: String</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String SECONDARY_EMAIL =
@@ -1982,6 +2305,7 @@
              * The extra field for an optional second contact email type.
              * <P>Type: Either an integer value from {@link android.provider.Contacts.ContactMethodsColumns ContactMethodsColumns}
              *  or a string specifying a custom label.</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String SECONDARY_EMAIL_TYPE =
@@ -1990,6 +2314,7 @@
             /**
              * The extra field for an optional third contact email address.
              * <P>Type: String</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String TERTIARY_EMAIL =
@@ -1999,6 +2324,7 @@
              * The extra field for an optional third contact email type.
              * <P>Type: Either an integer value from {@link android.provider.Contacts.ContactMethodsColumns ContactMethodsColumns}
              *  or a string specifying a custom label.</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String TERTIARY_EMAIL_TYPE =
@@ -2007,6 +2333,7 @@
             /**
              * The extra field for the contact postal address.
              * <P>Type: String</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String POSTAL = ContactsContract.Intents.Insert.POSTAL;
@@ -2015,6 +2342,7 @@
              * The extra field for the contact postal address type.
              * <P>Type: Either an integer value from {@link android.provider.Contacts.ContactMethodsColumns ContactMethodsColumns}
              *  or a string specifying a custom label.</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String POSTAL_TYPE = ContactsContract.Intents.Insert.POSTAL_TYPE;
@@ -2022,6 +2350,7 @@
             /**
              * The extra field for the postal isprimary flag.
              * <P>Type: boolean</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String POSTAL_ISPRIMARY = ContactsContract.Intents.Insert.POSTAL_ISPRIMARY;
@@ -2029,6 +2358,7 @@
             /**
              * The extra field for an IM handle.
              * <P>Type: String</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String IM_HANDLE = ContactsContract.Intents.Insert.IM_HANDLE;
@@ -2037,6 +2367,7 @@
              * The extra field for the IM protocol
              * <P>Type: the result of {@link Contacts.ContactMethods#encodePredefinedImProtocol}
              * or {@link Contacts.ContactMethods#encodeCustomImProtocol}.</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String IM_PROTOCOL = ContactsContract.Intents.Insert.IM_PROTOCOL;
@@ -2044,6 +2375,7 @@
             /**
              * The extra field for the IM isprimary flag.
              * <P>Type: boolean</P>
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String IM_ISPRIMARY = ContactsContract.Intents.Insert.IM_ISPRIMARY;
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index 6b2ab3f..f65ceee 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -40,8 +40,6 @@
 /**
  * The contract between the contacts provider and applications. Contains definitions
  * for the supported URIs and columns. These APIs supersede {@link Contacts}.
- *
- * @hide
  */
 @SuppressWarnings("unused")
 public final class ContactsContract {
@@ -228,7 +226,7 @@
         public static final String IN_VISIBLE_GROUP = "in_visible_group";
 
         /**
-         * Contact presence status.  See {@link PresenceColumns}
+         * Contact presence status.  See {@link Presence}
          * for individual status definitions.  This column is only returned if explicitly
          * requested in the query projection.
          * <p>Type: NUMBER</p>
@@ -320,7 +318,7 @@
 
         /**
          * Build a {@link #CONTENT_LOOKUP_URI} lookup {@link Uri} using the
-         * given {@link Contacts#_ID} and {@link Contacts#LOOKUP_KEY}.
+         * given {@link android.provider.ContactsContract.Contacts#_ID} and {@link #LOOKUP_KEY}.
          */
         public static Uri getLookupUri(long contactId, String lookupKey) {
             return ContentUris.withAppendedId(Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI,
@@ -460,7 +458,8 @@
 
             /**
              * The directory twig for this sub-table. The URI can be followed by an optional
-             * type-to-filter, similar to {@link Contacts#CONTENT_FILTER_URI}.
+             * type-to-filter, similar to
+             * {@link android.provider.ContactsContract.Contacts#CONTENT_FILTER_URI}.
              */
             public static final String CONTENT_DIRECTORY = "suggestions";
         }
@@ -604,8 +603,9 @@
         public static final int AGGREGATION_MODE_DISABLED = 3;
 
         /**
-         * Build a {@link Contacts#CONTENT_LOOKUP_URI} style {@link Uri} for the
-         * parent {@link Contacts} entry of the given {@link RawContacts} entry.
+         * Build a {@link android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI}
+         * style {@link Uri} for the parent {@link android.provider.ContactsContract.Contacts}
+         * entry of the given {@link RawContacts} entry.
          */
         public static Uri getContactLookupUri(ContentResolver resolver, Uri rawContactUri) {
             // TODO: use a lighter query by joining rawcontacts with contacts in provider
@@ -769,8 +769,9 @@
         public static final String CONTENT_TYPE = "vnd.android.cursor.dir/data";
 
         /**
-         * Build a {@link Contacts#CONTENT_LOOKUP_URI} style {@link Uri} for the
-         * parent {@link Contacts} entry of the given {@link Data} entry.
+         * Build a {@link android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI}
+         * style {@link Uri} for the parent {@link android.provider.ContactsContract.Contacts}
+         * entry of the given {@link Data} entry.
          */
         public static Uri getContactLookupUri(ContentResolver resolver, Uri dataUri) {
             final Cursor cursor = resolver.query(dataUri, new String[] {
@@ -1104,7 +1105,7 @@
 
             /**
              * The content:// style URI for all data records of the
-             * {@link Phone#CONTENT_ITEM_TYPE} MIME type, combined with the
+             * {@link #CONTENT_ITEM_TYPE} MIME type, combined with the
              * associated raw contact and aggregate contact data.
              */
             public static final Uri CONTENT_URI = Uri.withAppendedPath(Data.CONTENT_URI,
@@ -1112,7 +1113,7 @@
 
             /**
              * The content:// style URL for phone lookup using a filter. The filter returns
-             * records of MIME type {@link Phone#CONTENT_ITEM_TYPE}. The filter is applied
+             * records of MIME type {@link #CONTENT_ITEM_TYPE}. The filter is applied
              * to display names as well as phone numbers. The filter argument should be passed
              * as an additional path segment after this URI.
              */
@@ -1168,7 +1169,7 @@
 
             /**
              * Return the string resource that best describes the given
-             * {@link CommonColumns#TYPE}. Will always return a valid resource.
+             * {@link #TYPE}. Will always return a valid resource.
              */
             public static final int getTypeLabelResource(int type) {
                 switch (type) {
@@ -1198,8 +1199,8 @@
 
             /**
              * Return a {@link CharSequence} that best describes the given type,
-             * possibly substituting the given {@link CommonColumns#LABEL} value
-             * for {@link BaseTypes#TYPE_CUSTOM}.
+             * possibly substituting the given {@link #LABEL} value
+             * for {@link #TYPE_CUSTOM}.
              */
             public static final CharSequence getTypeLabel(Resources res, int type,
                     CharSequence label) {
@@ -1231,7 +1232,7 @@
 
             /**
              * The content:// style URI for all data records of the
-             * {@link Email#CONTENT_ITEM_TYPE} MIME type, combined with the
+             * {@link #CONTENT_ITEM_TYPE} MIME type, combined with the
              * associated raw contact and aggregate contact data.
              */
             public static final Uri CONTENT_URI = Uri.withAppendedPath(Data.CONTENT_URI,
@@ -1247,7 +1248,7 @@
 
             /**
              * The content:// style URL for email lookup using a filter. The filter returns
-             * records of MIME type {@link Email#CONTENT_ITEM_TYPE}. The filter is applied
+             * records of MIME type {@link #CONTENT_ITEM_TYPE}. The filter is applied
              * to display names as well as email addresses. The filter argument should be passed
              * as an additional path segment after this URI.
              */
@@ -1267,7 +1268,7 @@
 
             /**
              * Return the string resource that best describes the given
-             * {@link CommonColumns#TYPE}. Will always return a valid resource.
+             * {@link #TYPE}. Will always return a valid resource.
              */
             public static final int getTypeLabelResource(int type) {
                 switch (type) {
@@ -1281,8 +1282,8 @@
 
             /**
              * Return a {@link CharSequence} that best describes the given type,
-             * possibly substituting the given {@link CommonColumns#LABEL} value
-             * for {@link BaseTypes#TYPE_CUSTOM}.
+             * possibly substituting the given {@link #LABEL} value
+             * for {@link #TYPE_CUSTOM}.
              */
             public static final CharSequence getTypeLabel(Resources res, int type,
                     CharSequence label) {
@@ -1393,7 +1394,7 @@
 
             /**
              * Return the string resource that best describes the given
-             * {@link CommonColumns#TYPE}. Will always return a valid resource.
+             * {@link #TYPE}. Will always return a valid resource.
              */
             public static final int getTypeLabelResource(int type) {
                 switch (type) {
@@ -1406,8 +1407,8 @@
 
             /**
              * Return a {@link CharSequence} that best describes the given type,
-             * possibly substituting the given {@link CommonColumns#LABEL} value
-             * for {@link BaseTypes#TYPE_CUSTOM}.
+             * possibly substituting the given {@link #LABEL} value
+             * for {@link #TYPE_CUSTOM}.
              */
             public static final CharSequence getTypeLabel(Resources res, int type,
                     CharSequence label) {
@@ -1462,7 +1463,7 @@
 
             /**
              * Return the string resource that best describes the given
-             * {@link CommonColumns#TYPE}. Will always return a valid resource.
+             * {@link #TYPE}. Will always return a valid resource.
              */
             public static final int getTypeLabelResource(int type) {
                 switch (type) {
@@ -1475,8 +1476,8 @@
 
             /**
              * Return a {@link CharSequence} that best describes the given type,
-             * possibly substituting the given {@link CommonColumns#LABEL} value
-             * for {@link BaseTypes#TYPE_CUSTOM}.
+             * possibly substituting the given {@link #LABEL} value
+             * for {@link #TYPE_CUSTOM}.
              */
             public static final CharSequence getTypeLabel(Resources res, int type,
                     CharSequence label) {
@@ -1490,7 +1491,7 @@
 
             /**
              * Return the string resource that best describes the given
-             * {@link Im#PROTOCOL}. Will always return a valid resource.
+             * {@link #PROTOCOL}. Will always return a valid resource.
              */
             public static final int getProtocolLabelResource(int type) {
                 switch (type) {
@@ -1576,7 +1577,7 @@
 
             /**
              * Return the string resource that best describes the given
-             * {@link CommonColumns#TYPE}. Will always return a valid resource.
+             * {@link #TYPE}. Will always return a valid resource.
              */
             public static final int getTypeLabelResource(int type) {
                 switch (type) {
@@ -1588,8 +1589,8 @@
 
             /**
              * Return a {@link CharSequence} that best describes the given type,
-             * possibly substituting the given {@link CommonColumns#LABEL} value
-             * for {@link BaseTypes#TYPE_CUSTOM}.
+             * possibly substituting the given {@link #LABEL} value
+             * for {@link #TYPE_CUSTOM}.
              */
             public static final CharSequence getTypeLabel(Resources res, int type,
                     CharSequence label) {
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 8d10fde..e3fc72d 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -148,6 +148,20 @@
             "android.settings.SECURITY_SETTINGS";
 
     /**
+     * Activity Action: Show settings to allow configuration of privacy options.
+     * <p>
+     * In some cases, a matching Activity may not exist, so ensure you
+     * safeguard against this.
+     * <p>
+     * Input: Nothing.
+     * <p>
+     * Output: Nothing.
+     */
+    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+    public static final String ACTION_PRIVACY_SETTINGS =
+            "android.settings.PRIVACY_SETTINGS";
+
+    /**
      * Activity Action: Show settings to allow configuration of Wi-Fi.
 
      * <p>
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index c87e5a5..f617401 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -30,6 +30,7 @@
 import android.os.Looper;
 import android.os.Message;
 import android.os.Process;
+import android.provider.Browser;
 import android.util.Log;
 import android.util.SparseBooleanArray;
 import android.view.KeyEvent;
@@ -310,6 +311,10 @@
                 });
     }
 
+    protected String[] populateVisitedLinks() {
+	return Browser.getVisitedHistory(mContext.getContentResolver());
+    }
+
     /**
      * Shows a prompt to ask the user to set the Geolocation permission state
      * for the given origin.
diff --git a/core/java/com/android/internal/widget/RotarySelector.java b/core/java/com/android/internal/widget/RotarySelector.java
index 426cef5..42cbd07 100644
--- a/core/java/com/android/internal/widget/RotarySelector.java
+++ b/core/java/com/android/internal/widget/RotarySelector.java
@@ -18,7 +18,12 @@
 
 import android.content.Context;
 import android.content.res.Resources;
+import android.content.res.TypedArray;
 import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Matrix;
 import android.graphics.drawable.Drawable;
 import android.os.Vibrator;
 import android.util.AttributeSet;
@@ -38,6 +43,9 @@
  * security pattern is set.
  */
 public class RotarySelector extends View {
+    public static final int HORIZONTAL = 0;
+    public static final int VERTICAL = 1;
+
     private static final String LOG_TAG = "RotarySelector";
     private static final boolean DBG = false;
 
@@ -47,15 +55,15 @@
     private float mDensity;
 
     // UI elements
-    private Drawable mBackground;
+    private Bitmap mBackground;
     private Drawable mDimple;
 
     private Drawable mLeftHandleIcon;
     private Drawable mRightHandleIcon;
 
-    private Drawable mArrowShortLeftAndRight;
-    private Drawable mArrowLongLeft;  // Long arrow starting on the left, pointing clockwise
-    private Drawable mArrowLongRight;  // Long arrow starting on the right, pointing CCW
+    private Bitmap mArrowShortLeftAndRight;
+    private Bitmap mArrowLongLeft;  // Long arrow starting on the left, pointing clockwise
+    private Bitmap mArrowLongRight;  // Long arrow starting on the right, pointing CCW
 
     // positions of the left and right handle
     private int mLeftHandleX;
@@ -74,6 +82,12 @@
 
     private DecelerateInterpolator mInterpolator;
 
+    private Paint mPaint = new Paint();
+
+    // used to rotate the background and arrow assets depending on orientation
+    final Matrix mBgMatrix = new Matrix();
+    final Matrix mArrowMatrix = new Matrix();
+
     /**
      * If the user is currently dragging something.
      */
@@ -117,7 +131,6 @@
     static final int SNAP_BACK_ANIMATION_DURATION_MILLIS = 300;
     static final int SPIN_ANIMATION_DURATION_MILLIS = 800;
 
-    private static final boolean DRAW_CENTER_DIMPLE = true;
     private int mEdgeTriggerThresh;
     private int mDimpleWidth;
     private int mBackgroundWidth;
@@ -137,6 +150,10 @@
      */
     private int mDimplesOfFling = 0;
 
+    /**
+     * Either {@link #HORIZONTAL} or {@link #VERTICAL}.
+     */
+    private int mOrientation;
 
 
     public RotarySelector(Context context) {
@@ -148,28 +165,23 @@
      */
     public RotarySelector(Context context, AttributeSet attrs) {
         super(context, attrs);
-        if (DBG) log("IncomingCallDialWidget constructor...");
+
+        TypedArray a =
+            context.obtainStyledAttributes(attrs, R.styleable.RotarySelector);
+        mOrientation = a.getInt(R.styleable.RotarySelector_orientation, HORIZONTAL);
+        a.recycle();
 
         Resources r = getResources();
         mDensity = r.getDisplayMetrics().density;
         if (DBG) log("- Density: " + mDensity);
 
         // Assets (all are BitmapDrawables).
-        mBackground = r.getDrawable(R.drawable.jog_dial_bg_cropped);
+        mBackground = getBitmapFor(R.drawable.jog_dial_bg);
         mDimple = r.getDrawable(R.drawable.jog_dial_dimple);
 
-        mArrowLongLeft = r.getDrawable(R.drawable.jog_dial_arrow_long_left_green);
-        mArrowLongRight = r.getDrawable(R.drawable.jog_dial_arrow_long_right_red);
-        mArrowShortLeftAndRight = r.getDrawable(R.drawable.jog_dial_arrow_short_left_and_right);
-
-        // Arrows:
-        // All arrow assets are the same size (they're the full width of
-        // the screen) regardless of which arrows are actually visible.
-        int arrowW = mArrowShortLeftAndRight.getIntrinsicWidth();
-        int arrowH = mArrowShortLeftAndRight.getIntrinsicHeight();
-        mArrowShortLeftAndRight.setBounds(0, 0, arrowW, arrowH);
-        mArrowLongLeft.setBounds(0, 0, arrowW, arrowH);
-        mArrowLongRight.setBounds(0, 0, arrowW, arrowH);
+        mArrowLongLeft = getBitmapFor(R.drawable.jog_dial_arrow_long_left_green);
+        mArrowLongRight = getBitmapFor(R.drawable.jog_dial_arrow_long_right_red);
+        mArrowShortLeftAndRight = getBitmapFor(R.drawable.jog_dial_arrow_short_left_and_right);
 
         mInterpolator = new DecelerateInterpolator(1f);
 
@@ -177,8 +189,8 @@
 
         mDimpleWidth = mDimple.getIntrinsicWidth();
 
-        mBackgroundWidth = mBackground.getIntrinsicWidth();
-        mBackgroundHeight = mBackground.getIntrinsicHeight();
+        mBackgroundWidth = mBackground.getWidth();
+        mBackgroundHeight = mBackground.getHeight();
         mOuterRadius = (int) (mDensity * OUTER_ROTARY_RADIUS_DIP);
         mInnerRadius = (int) ((OUTER_ROTARY_RADIUS_DIP - ROTARY_STROKE_WIDTH_DIP) * mDensity);
 
@@ -187,15 +199,35 @@
         mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
     }
 
+    private Bitmap getBitmapFor(int resId) {
+        return BitmapFactory.decodeResource(getContext().getResources(), resId);
+    }
+
     @Override
     protected void onSizeChanged(int w, int h, int oldw, int oldh) {
         super.onSizeChanged(w, h, oldw, oldh);
 
-        mLeftHandleX = (int) (EDGE_PADDING_DIP * mDensity) + mDimpleWidth / 2;
-        mRightHandleX =
-                getWidth() - (int) (EDGE_PADDING_DIP * mDensity) - mDimpleWidth / 2;
+        final int edgePadding = (int) (EDGE_PADDING_DIP * mDensity);
+        mLeftHandleX = edgePadding + mDimpleWidth / 2;
+        final int length = isHoriz() ? w : h;
+        mRightHandleX = length - edgePadding - mDimpleWidth / 2;
+        mDimpleSpacing = (length / 2) - mLeftHandleX;
 
-        mDimpleSpacing = (getWidth() / 2) - mLeftHandleX;
+        // bg matrix only needs to be calculated once
+        mBgMatrix.setTranslate(0, 0);
+        if (!isHoriz()) {
+            // set up matrix for translating drawing of background and arrow assets
+            final int left = w - mBackgroundHeight;
+            mBgMatrix.preRotate(-90, 0, 0);
+            mBgMatrix.postTranslate(left, h);
+
+        } else {
+            mBgMatrix.postTranslate(0, h - mBackgroundHeight);
+        }
+    }
+
+    private boolean isHoriz() {
+        return mOrientation == HORIZONTAL;
     }
 
     /**
@@ -252,28 +284,35 @@
 
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        final int width = MeasureSpec.getSize(widthMeasureSpec);  // screen width
-
-        final int arrowH = mArrowShortLeftAndRight.getIntrinsicHeight();
-        final int backgroundH = mBackgroundHeight;
+        final int length = isHoriz() ?
+                MeasureSpec.getSize(widthMeasureSpec) :
+                MeasureSpec.getSize(heightMeasureSpec);
+        final int arrowScrunch = (int) (ARROW_SCRUNCH_DIP * mDensity);
+        final int arrowH = mArrowShortLeftAndRight.getHeight();
 
         // by making the height less than arrow + bg, arrow and bg will be scrunched together,
         // overlaying somewhat (though on transparent portions of the drawable).
         // this works because the arrows are drawn from the top, and the rotary bg is drawn
         // from the bottom.
-        final int arrowScrunch = (int) (ARROW_SCRUNCH_DIP * mDensity);
-        setMeasuredDimension(width, backgroundH + arrowH - arrowScrunch);
-    }
+        final int height = mBackgroundHeight + arrowH - arrowScrunch;
 
-//    private Paint mPaint = new Paint();
+        if (isHoriz()) {
+            setMeasuredDimension(length, height);
+        } else {
+            setMeasuredDimension(height, length);
+        }
+    }
 
     @Override
     protected void onDraw(Canvas canvas) {
         super.onDraw(canvas);
-        if (DBG) {
-            log(String.format("onDraw: mAnimating=%s, mRotaryOffsetX=%d, mGrabbedState=%d",
-                    mAnimating, mRotaryOffsetX, mGrabbedState));
-        }
+
+        final int width = getWidth();
+
+        // DEBUG: draw bounding box around widget
+//        mPaint.setColor(Color.RED);
+//        mPaint.setStyle(Paint.Style.STROKE);
+//        canvas.drawRect(0, 0, width, getHeight(), mPaint);
 
         final int height = getHeight();
 
@@ -283,76 +322,113 @@
         }
 
         // Background:
-        final int backgroundW = mBackgroundWidth;
-        final int backgroundH = mBackgroundHeight;
-        final int backgroundY = height - backgroundH;
-        if (DBG) log("- Background INTRINSIC: " + backgroundW + " x " + backgroundH);
-        mBackground.setBounds(0, backgroundY,
-                              backgroundW, backgroundY + backgroundH);
-        if (DBG) log("  Background BOUNDS: " + mBackground.getBounds());
-        mBackground.draw(canvas);
-
+        canvas.drawBitmap(mBackground, mBgMatrix, mPaint);
 
         // Draw the correct arrow(s) depending on the current state:
-        Drawable currentArrow;
+        mArrowMatrix.reset();
         switch (mGrabbedState) {
             case NOTHING_GRABBED:
-                currentArrow  = null; //mArrowShortLeftAndRight;
+                //mArrowShortLeftAndRight;
                 break;
             case LEFT_HANDLE_GRABBED:
-                currentArrow = mArrowLongLeft;
+                mArrowMatrix.setTranslate(0, 0);
+                if (!isHoriz()) {
+                    mArrowMatrix.preRotate(-90, 0, 0);
+                    mArrowMatrix.postTranslate(0, height);
+                }
+                canvas.drawBitmap(mArrowLongLeft, mArrowMatrix, mPaint);
                 break;
             case RIGHT_HANDLE_GRABBED:
-                currentArrow = mArrowLongRight;
+                mArrowMatrix.setTranslate(0, 0);
+                if (!isHoriz()) {
+                    mArrowMatrix.preRotate(-90, 0, 0);
+                    // since bg width is > height of screen in landscape mode...
+                    mArrowMatrix.postTranslate(0, height + (mBackgroundWidth - height));
+                }
+                canvas.drawBitmap(mArrowLongRight, mArrowMatrix, mPaint);
                 break;
             default:
                 throw new IllegalStateException("invalid mGrabbedState: " + mGrabbedState);
         }
-        if (currentArrow != null) currentArrow.draw(canvas);
 
-        // debug: draw circle that should match the outer arc (good sanity check)
-//        mPaint.setColor(Color.RED);
-//        mPaint.setStyle(Paint.Style.STROKE);
+        final int bgHeight = mBackgroundHeight;
+        final int bgTop = isHoriz() ?
+                height - bgHeight:
+                width - bgHeight;
+        // DEBUG: draw circle bounding arc drawable: good sanity check we're doing the math
+        // correctly
 //        float or = OUTER_ROTARY_RADIUS_DIP * mDensity;
-//        canvas.drawCircle(getWidth() / 2, or + mBackground.getBounds().top, or, mPaint);
+//        final int vOffset = mBackgroundWidth - height;
+//        final int midX = isHoriz() ?
+//                width / 2 :
+//                mBackgroundWidth / 2 - vOffset;
+//        if (isHoriz()) {
+//            canvas.drawCircle(midX, or + bgTop, or, mPaint);
+//        } else {
+//            canvas.drawCircle(or + bgTop, midX, or, mPaint);
+//        }
 
-        final int bgTop = mBackground.getBounds().top;
+        // left dimple / icon
         {
             final int xOffset = mLeftHandleX + mRotaryOffsetX;
             final int drawableY = getYOnArc(
-                    mBackground,
+                    mBackgroundWidth,
                     mInnerRadius,
                     mOuterRadius,
                     xOffset);
-
-            drawCentered(mDimple, canvas, xOffset, drawableY + bgTop);
-            if (mGrabbedState != RIGHT_HANDLE_GRABBED) {
-                drawCentered(mLeftHandleIcon, canvas, xOffset, drawableY + bgTop);
+            if (isHoriz()) {
+                drawCentered(mDimple, canvas, xOffset, drawableY + bgTop);
+                if (mGrabbedState != RIGHT_HANDLE_GRABBED) {
+                    drawCentered(mLeftHandleIcon, canvas, xOffset, drawableY + bgTop);
+                }
+            } else {
+                // vertical
+                drawCentered(mDimple, canvas, drawableY + bgTop, height - xOffset);
+                if (mGrabbedState != RIGHT_HANDLE_GRABBED) {
+                    drawCentered(mLeftHandleIcon, canvas, drawableY + bgTop, height - xOffset);
+                }
             }
         }
 
-        if (DRAW_CENTER_DIMPLE) {
-            final int xOffset = getWidth() / 2 + mRotaryOffsetX;
+        // center dimple
+        {
+            final int xOffset = isHoriz() ?
+                    width / 2 + mRotaryOffsetX:
+                    height / 2 + mRotaryOffsetX;
             final int drawableY = getYOnArc(
-                    mBackground,
+                    mBackgroundWidth,
                     mInnerRadius,
                     mOuterRadius,
                     xOffset);
 
-            drawCentered(mDimple, canvas, xOffset, drawableY + bgTop);
+            if (isHoriz()) {
+                drawCentered(mDimple, canvas, xOffset, drawableY + bgTop);
+            } else {
+                // vertical
+                drawCentered(mDimple, canvas, drawableY + bgTop, height - xOffset);
+            }
         }
 
+        // right dimple / icon
         {
             final int xOffset = mRightHandleX + mRotaryOffsetX;
             final int drawableY = getYOnArc(
-                    mBackground,
+                    mBackgroundWidth,
                     mInnerRadius,
                     mOuterRadius,
                     xOffset);
 
-            drawCentered(mDimple, canvas, xOffset, drawableY + bgTop);
-            if (mGrabbedState != LEFT_HANDLE_GRABBED) {
-                drawCentered(mRightHandleIcon, canvas, xOffset, drawableY + bgTop);
+            if (isHoriz()) {
+                drawCentered(mDimple, canvas, xOffset, drawableY + bgTop);
+                if (mGrabbedState != LEFT_HANDLE_GRABBED) {
+                    drawCentered(mRightHandleIcon, canvas, xOffset, drawableY + bgTop);
+                }
+            } else {
+                // vertical
+                drawCentered(mDimple, canvas, drawableY + bgTop, height - xOffset);
+                if (mGrabbedState != LEFT_HANDLE_GRABBED) {
+                    drawCentered(mRightHandleIcon, canvas, drawableY + bgTop, height - xOffset);
+                }
             }
         }
 
@@ -361,12 +437,16 @@
         final int halfdimple = mDimpleWidth / 2;
         while (dimpleLeft > -halfdimple) {
             final int drawableY = getYOnArc(
-                    mBackground,
+                    mBackgroundWidth,
                     mInnerRadius,
                     mOuterRadius,
                     dimpleLeft);
 
-            drawCentered(mDimple, canvas, dimpleLeft, drawableY + bgTop);
+            if (isHoriz()) {
+                drawCentered(mDimple, canvas, dimpleLeft, drawableY + bgTop);
+            } else {
+                drawCentered(mDimple, canvas, drawableY + bgTop, height - dimpleLeft);
+            }
             dimpleLeft -= mDimpleSpacing;
         }
 
@@ -375,40 +455,43 @@
         final int rightThresh = mRight + halfdimple;
         while (dimpleRight < rightThresh) {
             final int drawableY = getYOnArc(
-                    mBackground,
+                    mBackgroundWidth,
                     mInnerRadius,
                     mOuterRadius,
                     dimpleRight);
 
-            drawCentered(mDimple, canvas, dimpleRight, drawableY + bgTop);
+            if (isHoriz()) {
+                drawCentered(mDimple, canvas, dimpleRight, drawableY + bgTop);
+            } else {
+                drawCentered(mDimple, canvas, drawableY + bgTop, height - dimpleRight);
+            }
             dimpleRight += mDimpleSpacing;
         }
     }
 
     /**
-     * Assuming drawable is a bounding box around a piece of an arc drawn by two concentric circles
+     * Assuming bitmap is a bounding box around a piece of an arc drawn by two concentric circles
      * (as the background drawable for the rotary widget is), and given an x coordinate along the
      * drawable, return the y coordinate of a point on the arc that is between the two concentric
      * circles.  The resulting y combined with the incoming x is a point along the circle in
      * between the two concentric circles.
      *
-     * @param drawable The drawable.
+     * @param backgroundWidth The width of the asset (the bottom of the box surrounding the arc).
      * @param innerRadius The radius of the circle that intersects the drawable at the bottom two
      *        corders of the drawable (top two corners in terms of drawing coordinates).
      * @param outerRadius The radius of the circle who's top most point is the top center of the
      *        drawable (bottom center in terms of drawing coordinates).
-     * @param x The distance along the x axis of the desired point.
-     * @return The y coordinate, in drawing coordinates, that will place (x, y) along the circle
+     * @param x The distance along the x axis of the desired point.    @return The y coordinate, in drawing coordinates, that will place (x, y) along the circle
      *        in between the two concentric circles.
      */
-    private int getYOnArc(Drawable drawable, int innerRadius, int outerRadius, int x) {
+    private int getYOnArc(int backgroundWidth, int innerRadius, int outerRadius, int x) {
 
         // the hypotenuse
         final int halfWidth = (outerRadius - innerRadius) / 2;
         final int middleRadius = innerRadius + halfWidth;
 
         // the bottom leg of the triangle
-        final int triangleBottom = (drawable.getIntrinsicWidth() / 2) - x;
+        final int triangleBottom = (backgroundWidth / 2) - x;
 
         // "Our offense is like the pythagorean theorem: There is no answer!" - Shaquille O'Neal
         final int triangleY =
@@ -437,8 +520,11 @@
         }
         mVelocityTracker.addMovement(event);
 
+        final int height = getHeight();
 
-        final int eventX = (int) event.getX();
+        final int eventX = isHoriz() ?
+                (int) event.getX():
+                height - ((int) event.getY());
         final int hitWindow = mDimpleWidth;
 
         final int action = event.getAction();
@@ -468,12 +554,16 @@
                 if (mGrabbedState == LEFT_HANDLE_GRABBED) {
                     mRotaryOffsetX = eventX - mLeftHandleX;
                     invalidate();
-                    if (eventX >= getRight() - mEdgeTriggerThresh && !mTriggered) {
+                    final int rightThresh = isHoriz() ? getRight() : height;
+                    if (eventX >= rightThresh - mEdgeTriggerThresh && !mTriggered) {
                         mTriggered = true;
                         dispatchTriggerEvent(OnDialTriggerListener.LEFT_HANDLE);
                         final VelocityTracker velocityTracker = mVelocityTracker;
                         velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
-                        final int velocity = Math.max(mMinimumVelocity, (int) velocityTracker.getXVelocity());
+                        final int rawVelocity = isHoriz() ?
+                                (int) velocityTracker.getXVelocity():
+                                -(int) velocityTracker.getYVelocity();
+                        final int velocity = Math.max(mMinimumVelocity, rawVelocity);
                         mDimplesOfFling = Math.max(
                                 8,
                                 Math.abs(velocity / mDimpleSpacing));
@@ -490,7 +580,10 @@
                         dispatchTriggerEvent(OnDialTriggerListener.RIGHT_HANDLE);
                         final VelocityTracker velocityTracker = mVelocityTracker;
                         velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
-                        final int velocity = Math.min(-mMinimumVelocity, (int) velocityTracker.getXVelocity());
+                        final int rawVelocity = isHoriz() ?
+                                (int) velocityTracker.getXVelocity():
+                                - (int) velocityTracker.getYVelocity();
+                        final int velocity = Math.min(-mMinimumVelocity, rawVelocity);
                         mDimplesOfFling = Math.max(
                                 8,
                                 Math.abs(velocity / mDimpleSpacing));
@@ -559,6 +652,7 @@
         final long millisSoFar = currentAnimationTimeMillis() - mAnimationStartTime;
         final long millisLeft = mAnimationDuration - millisSoFar;
         final int totalDeltaX = mAnimatingDeltaXStart - mAnimatingDeltaXEnd;
+        final boolean goingRight = totalDeltaX < 0;
         if (DBG) log("millisleft for animating: " + millisLeft);
         if (millisLeft <= 0) {
             reset();
@@ -569,13 +663,17 @@
                 mInterpolator.getInterpolation((float) millisSoFar / mAnimationDuration);
         final int dx = (int) (totalDeltaX * (1 - interpolation));
         mRotaryOffsetX = mAnimatingDeltaXEnd + dx;
+
+        // once we have gone far enough to animate the current buttons off screen, we start
+        // wrapping the offset back to the other side so that when the animation is finished,
+        // the buttons will come back into their original places.
         if (mDimplesOfFling > 0) {
-            if (mRotaryOffsetX < 4 * mDimpleSpacing) {
+            if (!goingRight && mRotaryOffsetX < -3 * mDimpleSpacing) {
                 // wrap around on fling left
-                mRotaryOffsetX += (4 + mDimplesOfFling - 4) * mDimpleSpacing;
-            } else if (mRotaryOffsetX > 4 * mDimpleSpacing) {
+                mRotaryOffsetX += mDimplesOfFling * mDimpleSpacing;
+            } else if (goingRight && mRotaryOffsetX > 3 * mDimpleSpacing) {
                 // wrap around on fling right
-                mRotaryOffsetX -= (4 + mDimplesOfFling - 4) * mDimpleSpacing;
+                mRotaryOffsetX -= mDimplesOfFling * mDimpleSpacing;
             }
         }
         invalidate();
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 3242ed2..9cf5324 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -52,6 +52,10 @@
     <protected-broadcast android:name="android.intent.action.NEW_OUTGOING_CALL" />
     <protected-broadcast android:name="android.intent.action.REBOOT" />
 
+    <protected-broadcast android:name="android.backup.intent.RUN" />
+    <protected-broadcast android:name="android.backup.intent.CLEAR" />
+    <protected-broadcast android:name="android.backup.intent.INIT" />
+
     <protected-broadcast android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
     <protected-broadcast android:name="android.bluetooth.adapter.action.SCAN_MODE_CHANGED" />
     <protected-broadcast android:name="android.bluetooth.adapter.action.DISCOVERY_STARTED" />
diff --git a/core/res/res/drawable-hdpi/ic_jog_dial_sound_off.png b/core/res/res/drawable-hdpi/ic_jog_dial_sound_off.png
new file mode 100755
index 0000000..d73db48
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_jog_dial_sound_off.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_jog_dial_sound_on.png b/core/res/res/drawable-hdpi/ic_jog_dial_sound_on.png
new file mode 100755
index 0000000..90da6e3
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_jog_dial_sound_on.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_jog_dial_unlock.png b/core/res/res/drawable-hdpi/ic_jog_dial_unlock.png
new file mode 100755
index 0000000..a9af1af
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_jog_dial_unlock.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_green.png b/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_green.png
new file mode 100755
index 0000000..f19811e
--- /dev/null
+++ b/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_green.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_yellow.png b/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_yellow.png
new file mode 100755
index 0000000..0596035
--- /dev/null
+++ b/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_long_middle_yellow.png b/core/res/res/drawable-hdpi/jog_dial_arrow_long_middle_yellow.png
new file mode 100755
index 0000000..3ab2723
--- /dev/null
+++ b/core/res/res/drawable-hdpi/jog_dial_arrow_long_middle_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_red.png b/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_red.png
new file mode 100755
index 0000000..dd6899f
--- /dev/null
+++ b/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_red.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_yellow.png b/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_yellow.png
new file mode 100755
index 0000000..27151e0
--- /dev/null
+++ b/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_short_left.png b/core/res/res/drawable-hdpi/jog_dial_arrow_short_left.png
new file mode 100755
index 0000000..66d49bb
--- /dev/null
+++ b/core/res/res/drawable-hdpi/jog_dial_arrow_short_left.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_short_left_and_right.png b/core/res/res/drawable-hdpi/jog_dial_arrow_short_left_and_right.png
new file mode 100755
index 0000000..c47e176
--- /dev/null
+++ b/core/res/res/drawable-hdpi/jog_dial_arrow_short_left_and_right.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_short_right.png b/core/res/res/drawable-hdpi/jog_dial_arrow_short_right.png
new file mode 100755
index 0000000..f5ea157
--- /dev/null
+++ b/core/res/res/drawable-hdpi/jog_dial_arrow_short_right.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_dial_bg.png b/core/res/res/drawable-hdpi/jog_dial_bg.png
new file mode 100755
index 0000000..8adbfd8
--- /dev/null
+++ b/core/res/res/drawable-hdpi/jog_dial_bg.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_dial_dimple.png b/core/res/res/drawable-hdpi/jog_dial_dimple.png
new file mode 100755
index 0000000..0eaea91
--- /dev/null
+++ b/core/res/res/drawable-hdpi/jog_dial_dimple.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_jog_dial_sound_off.png b/core/res/res/drawable-mdpi/ic_jog_dial_sound_off.png
new file mode 100644
index 0000000..b9aec69
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_jog_dial_sound_off.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_jog_dial_sound_on.png b/core/res/res/drawable-mdpi/ic_jog_dial_sound_on.png
new file mode 100644
index 0000000..4952746
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_jog_dial_sound_on.png
Binary files differ
diff --git a/core/res/res/drawable/ic_jog_dial_unlock.png b/core/res/res/drawable-mdpi/ic_jog_dial_unlock.png
old mode 100644
new mode 100755
similarity index 100%
rename from core/res/res/drawable/ic_jog_dial_unlock.png
rename to core/res/res/drawable-mdpi/ic_jog_dial_unlock.png
Binary files differ
diff --git a/core/res/res/drawable/jog_dial_arrow_long_left_green.png b/core/res/res/drawable-mdpi/jog_dial_arrow_long_left_green.png
old mode 100644
new mode 100755
similarity index 100%
rename from core/res/res/drawable/jog_dial_arrow_long_left_green.png
rename to core/res/res/drawable-mdpi/jog_dial_arrow_long_left_green.png
Binary files differ
diff --git a/core/res/res/drawable/jog_dial_arrow_long_left_yellow.png b/core/res/res/drawable-mdpi/jog_dial_arrow_long_left_yellow.png
old mode 100644
new mode 100755
similarity index 100%
rename from core/res/res/drawable/jog_dial_arrow_long_left_yellow.png
rename to core/res/res/drawable-mdpi/jog_dial_arrow_long_left_yellow.png
Binary files differ
diff --git a/core/res/res/drawable/jog_dial_arrow_long_middle_yellow.png b/core/res/res/drawable-mdpi/jog_dial_arrow_long_middle_yellow.png
old mode 100644
new mode 100755
similarity index 100%
rename from core/res/res/drawable/jog_dial_arrow_long_middle_yellow.png
rename to core/res/res/drawable-mdpi/jog_dial_arrow_long_middle_yellow.png
Binary files differ
diff --git a/core/res/res/drawable/jog_dial_arrow_long_right_red.png b/core/res/res/drawable-mdpi/jog_dial_arrow_long_right_red.png
old mode 100644
new mode 100755
similarity index 100%
rename from core/res/res/drawable/jog_dial_arrow_long_right_red.png
rename to core/res/res/drawable-mdpi/jog_dial_arrow_long_right_red.png
Binary files differ
diff --git a/core/res/res/drawable/jog_dial_arrow_long_right_yellow.png b/core/res/res/drawable-mdpi/jog_dial_arrow_long_right_yellow.png
old mode 100644
new mode 100755
similarity index 100%
rename from core/res/res/drawable/jog_dial_arrow_long_right_yellow.png
rename to core/res/res/drawable-mdpi/jog_dial_arrow_long_right_yellow.png
Binary files differ
diff --git a/core/res/res/drawable/jog_dial_arrow_short_left.png b/core/res/res/drawable-mdpi/jog_dial_arrow_short_left.png
old mode 100644
new mode 100755
similarity index 100%
rename from core/res/res/drawable/jog_dial_arrow_short_left.png
rename to core/res/res/drawable-mdpi/jog_dial_arrow_short_left.png
Binary files differ
diff --git a/core/res/res/drawable/jog_dial_arrow_short_left_and_right.png b/core/res/res/drawable-mdpi/jog_dial_arrow_short_left_and_right.png
old mode 100644
new mode 100755
similarity index 100%
rename from core/res/res/drawable/jog_dial_arrow_short_left_and_right.png
rename to core/res/res/drawable-mdpi/jog_dial_arrow_short_left_and_right.png
Binary files differ
diff --git a/core/res/res/drawable/jog_dial_arrow_short_right.png b/core/res/res/drawable-mdpi/jog_dial_arrow_short_right.png
old mode 100644
new mode 100755
similarity index 100%
rename from core/res/res/drawable/jog_dial_arrow_short_right.png
rename to core/res/res/drawable-mdpi/jog_dial_arrow_short_right.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_dial_bg.png b/core/res/res/drawable-mdpi/jog_dial_bg.png
new file mode 100755
index 0000000..2f8f24d
--- /dev/null
+++ b/core/res/res/drawable-mdpi/jog_dial_bg.png
Binary files differ
diff --git a/core/res/res/drawable/jog_dial_dimple.png b/core/res/res/drawable-mdpi/jog_dial_dimple.png
old mode 100644
new mode 100755
similarity index 100%
rename from core/res/res/drawable/jog_dial_dimple.png
rename to core/res/res/drawable-mdpi/jog_dial_dimple.png
Binary files differ
diff --git a/core/res/res/drawable/ic_jog_dial_answer.png b/core/res/res/drawable/ic_jog_dial_answer.png
deleted file mode 100644
index e2bc483..0000000
--- a/core/res/res/drawable/ic_jog_dial_answer.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/ic_jog_dial_decline.png b/core/res/res/drawable/ic_jog_dial_decline.png
deleted file mode 100644
index 81c76b5..0000000
--- a/core/res/res/drawable/ic_jog_dial_decline.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/ic_jog_dial_silence_ringer.png b/core/res/res/drawable/ic_jog_dial_silence_ringer.png
deleted file mode 100644
index 6d573e6..0000000
--- a/core/res/res/drawable/ic_jog_dial_silence_ringer.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/ic_jog_dial_turn_ring_vol_off.png b/core/res/res/drawable/ic_jog_dial_turn_ring_vol_off.png
deleted file mode 100644
index 3804c25..0000000
--- a/core/res/res/drawable/ic_jog_dial_turn_ring_vol_off.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/ic_jog_dial_turn_ring_vol_on.png b/core/res/res/drawable/ic_jog_dial_turn_ring_vol_on.png
deleted file mode 100644
index 62f8e15..0000000
--- a/core/res/res/drawable/ic_jog_dial_turn_ring_vol_on.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/jog_dial_bg_cropped.png b/core/res/res/drawable/jog_dial_bg_cropped.png
deleted file mode 100644
index 60d93d2..0000000
--- a/core/res/res/drawable/jog_dial_bg_cropped.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/layout/keyguard_screen_rotary_unlock_land.xml b/core/res/res/layout/keyguard_screen_rotary_unlock_land.xml
new file mode 100644
index 0000000..5fe1dde
--- /dev/null
+++ b/core/res/res/layout/keyguard_screen_rotary_unlock_land.xml
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2009, 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.
+*/
+-->
+
+<!-- This is the general lock screen which shows information about the
+  state of the device, as well as instructions on how to get past it
+  depending on the state of the device.-->
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+             xmlns:rotaryunlock="http://schemas.android.com/apk/res/com.android.rotaryunlock"
+             android:layout_width="fill_parent"
+             android:layout_height="fill_parent"
+             android:id="@+id/root"
+                 >
+<LinearLayout
+        android:orientation="horizontal"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        android:background="#A0000000"
+        >
+
+    <!-- left side -->
+    <RelativeLayout
+            android:orientation="vertical"
+            android:layout_width="0dip"
+            android:layout_height="fill_parent"
+            android:layout_weight="1.0"
+            android:gravity="center_horizontal"
+            >
+
+        <TextView
+            android:id="@+id/carrier"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignParentTop="true"
+            android:layout_centerHorizontal="true"
+            android:layout_marginTop="20dip"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:textColor="?android:attr/textColorSecondary"
+            />
+
+        <TextView
+            android:id="@+id/time"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@id/carrier"
+            android:layout_centerHorizontal="true"
+            android:layout_marginTop="25dip"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:textSize="55sp"
+            />
+
+        <TextView
+            android:id="@+id/date"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@id/time"
+            android:layout_centerHorizontal="true"
+            android:layout_marginTop="-12dip"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            />
+
+        <View
+            android:id="@+id/divider"
+            android:layout_width="fill_parent"
+            android:layout_height="1dip"
+            android:layout_marginTop="10dip"
+            android:layout_below="@id/date"
+            android:background="@android:drawable/divider_horizontal_dark"
+                />
+
+        <TextView
+            android:id="@+id/status1"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@id/divider"
+            android:layout_centerHorizontal="true"
+            android:layout_marginTop="6dip"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:textColor="?android:attr/textColorSecondary"
+            android:drawablePadding="4dip"
+            />
+
+        <TextView
+            android:id="@+id/status2"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@id/status1"
+            android:layout_centerHorizontal="true"
+            android:layout_marginTop="6dip"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:textColor="?android:attr/textColorSecondary"
+            android:drawablePadding="4dip"
+            />
+
+        <TextView
+            android:id="@+id/screenLocked"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@id/status2"
+            android:layout_centerHorizontal="true"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:textColor="?android:attr/textColorSecondary"
+            android:gravity="center"
+            android:layout_marginTop="12dip"
+            />
+        <!-- emergency call button shown when sim is missing or PUKd -->
+        <Button
+            android:id="@+id/emergencyCallButton"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@id/screenLocked"
+            android:layout_centerHorizontal="true"
+            android:layout_marginTop="24dip"
+            android:drawableLeft="@drawable/ic_emergency"
+            android:drawablePadding="8dip"
+           />
+    </RelativeLayout>
+
+
+    <!-- right side -->
+    <com.android.internal.widget.RotarySelector
+        android:id="@+id/rotary"
+        android:layout_width="wrap_content"
+        android:layout_height="fill_parent"
+        android:orientation="vertical"
+        />
+
+
+</LinearLayout>
+</FrameLayout>
\ No newline at end of file
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index df2a715..f5b8ab6 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -2295,6 +2295,14 @@
         <attr name="layout_scale" format="float" />
     </declare-styleable>
 
+    <!-- attributes for internal rotary widget used in lock screen and phone app
+      @hide -->
+    <declare-styleable name="RotarySelector">
+        <!-- Use "horizontal" or "vertical".  The default is horizontal. -->
+        <attr name="orientation" />
+    </declare-styleable>
+
+
     <!-- ========================= -->
     <!-- Drawable class attributes -->
     <!-- ========================= -->
diff --git a/libs/utils/BackupData.cpp b/libs/utils/BackupData.cpp
index 0cef35a..2535094 100644
--- a/libs/utils/BackupData.cpp
+++ b/libs/utils/BackupData.cpp
@@ -196,8 +196,9 @@
                 m_done = true; \
             } else { \
                 m_status = errno; \
+                LOGD("CHECK_SIZE(a=%ld e=%ld) failed at line %d m_status='%s'", \
+                    long(actual), long(expected), __LINE__, strerror(m_status)); \
             } \
-            LOGD("CHECK_SIZE failed with at line %d m_status='%s'", __LINE__, strerror(m_status)); \
             return m_status; \
         } \
     } while(0)
diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java
index 2fa18bf..83b55c5 100644
--- a/services/java/com/android/server/BackupManagerService.java
+++ b/services/java/com/android/server/BackupManagerService.java
@@ -31,7 +31,6 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.IPackageDataObserver;
 import android.content.pm.PackageInfo;
-import android.content.pm.PermissionInfo;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.PackageManager;
 import android.content.pm.Signature;
@@ -67,6 +66,7 @@
 import java.io.EOFException;
 import java.io.File;
 import java.io.FileDescriptor;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.RandomAccessFile;
@@ -89,11 +89,14 @@
     // the first backup pass.
     private static final long FIRST_BACKUP_INTERVAL = 12 * AlarmManager.INTERVAL_HOUR;
 
-    private static final String RUN_BACKUP_ACTION = "_backup_run_";
+    private static final String RUN_BACKUP_ACTION = "android.backup.intent.RUN";
+    private static final String RUN_INITIALIZE_ACTION = "android.backup.intent.INIT";
+    private static final String RUN_CLEAR_ACTION = "android.backup.intent.CLEAR";
     private static final int MSG_RUN_BACKUP = 1;
     private static final int MSG_RUN_FULL_BACKUP = 2;
     private static final int MSG_RUN_RESTORE = 3;
     private static final int MSG_RUN_CLEAR = 4;
+    private static final int MSG_RUN_INITIALIZE = 5;
 
     // Event tags -- see system/core/logcat/event-log-tags
     private static final int BACKUP_DATA_CHANGED_EVENT = 2820;
@@ -123,9 +126,8 @@
     boolean mProvisioned;
     PowerManager.WakeLock mWakelock;
     final BackupHandler mBackupHandler = new BackupHandler();
-    PendingIntent mRunBackupIntent;
-    BroadcastReceiver mRunBackupReceiver;
-    IntentFilter mRunBackupFilter;
+    PendingIntent mRunBackupIntent, mRunInitIntent;
+    BroadcastReceiver mRunBackupReceiver, mRunInitReceiver;
     // map UIDs to the set of backup client services within that UID's app set
     final SparseArray<HashSet<ApplicationInfo>> mBackupParticipants
         = new SparseArray<HashSet<ApplicationInfo>>();
@@ -206,6 +208,10 @@
     private RandomAccessFile mEverStoredStream;
     HashSet<String> mEverStoredApps = new HashSet<String>();
 
+    // Persistently track the need to do a full init
+    static final String INIT_SENTINEL_FILE_NAME = "_need_init_";
+    HashSet<String> mPendingInits = new HashSet<String>();  // transport names
+    boolean mInitInProgress = false;
 
     public BackupManagerService(Context context) {
         mContext = context;
@@ -218,23 +224,32 @@
         // Set up our bookkeeping
         boolean areEnabled = Settings.Secure.getInt(context.getContentResolver(),
                 Settings.Secure.BACKUP_ENABLED, 0) != 0;
-        // !!! TODO: mProvisioned needs to default to 0, not 1.
         mProvisioned = Settings.Secure.getInt(context.getContentResolver(),
                 Settings.Secure.BACKUP_PROVISIONED, 0) != 0;
         mBaseStateDir = new File(Environment.getDataDirectory(), "backup");
         mDataDir = Environment.getDownloadCacheDirectory();
 
+        // Alarm receivers for scheduled backups & initialization operations
         mRunBackupReceiver = new RunBackupReceiver();
-        mRunBackupFilter = new IntentFilter();
-        mRunBackupFilter.addAction(RUN_BACKUP_ACTION);
-        context.registerReceiver(mRunBackupReceiver, mRunBackupFilter);
+        IntentFilter filter = new IntentFilter();
+        filter.addAction(RUN_BACKUP_ACTION);
+        context.registerReceiver(mRunBackupReceiver, filter,
+                android.Manifest.permission.BACKUP, null);
+
+        mRunInitReceiver = new RunInitializeReceiver();
+        filter = new IntentFilter();
+        filter.addAction(RUN_INITIALIZE_ACTION);
+        context.registerReceiver(mRunInitReceiver, filter,
+                android.Manifest.permission.BACKUP, null);
 
         Intent backupIntent = new Intent(RUN_BACKUP_ACTION);
-        // !!! TODO: restrict delivery to our receiver; the naive setClass() doesn't seem to work
-        //backupIntent.setClass(context, mRunBackupReceiver.getClass());
         backupIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
         mRunBackupIntent = PendingIntent.getBroadcast(context, MSG_RUN_BACKUP, backupIntent, 0);
 
+        Intent initIntent = new Intent(RUN_INITIALIZE_ACTION);
+        backupIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
+        mRunInitIntent = PendingIntent.getBroadcast(context, MSG_RUN_INITIALIZE, initIntent, 0);
+
         // Set up the backup-request journaling
         mJournalDir = new File(mBaseStateDir, "pending");
         mJournalDir.mkdirs();   // creates mBaseStateDir along the way
@@ -287,14 +302,52 @@
     private class RunBackupReceiver extends BroadcastReceiver {
         public void onReceive(Context context, Intent intent) {
             if (RUN_BACKUP_ACTION.equals(intent.getAction())) {
-                if (DEBUG) Log.v(TAG, "Running a backup pass");
-
                 synchronized (mQueueLock) {
-                    // acquire a wakelock and pass it to the backup thread.  it will
-                    // be released once backup concludes.
+                    if (mPendingInits.size() > 0) {
+                        // If there are pending init operations, we process those
+                        // and then settle into the usual periodic backup schedule.
+                        if (DEBUG) Log.v(TAG, "Init pending at scheduled backup");
+                        try {
+                            mAlarmManager.cancel(mRunInitIntent);
+                            mRunInitIntent.send();
+                        } catch (PendingIntent.CanceledException ce) {
+                            Log.e(TAG, "Run init intent cancelled");
+                            // can't really do more than bail here
+                        }
+                    } else {
+                        // Don't run backups now if we're disabled, not yet
+                        // fully set up, or racing with an initialize pass.
+                        if (mEnabled && mProvisioned && !mInitInProgress) {
+                            if (DEBUG) Log.v(TAG, "Running a backup pass");
+
+                            // Acquire the wakelock and pass it to the backup thread.  it will
+                            // be released once backup concludes.
+                            mWakelock.acquire();
+
+                            Message msg = mBackupHandler.obtainMessage(MSG_RUN_BACKUP);
+                            mBackupHandler.sendMessage(msg);
+                        } else {
+                            Log.w(TAG, "Backup pass but e=" + mEnabled + " p=" + mProvisioned
+                                    + " i=" + mInitInProgress);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    private class RunInitializeReceiver extends BroadcastReceiver {
+        public void onReceive(Context context, Intent intent) {
+            if (RUN_INITIALIZE_ACTION.equals(intent.getAction())) {
+                synchronized (mQueueLock) {
+                    if (DEBUG) Log.v(TAG, "Running a device init");
+                    mInitInProgress = true;
+
+                    // Acquire the wakelock and pass it to the init thread.  it will
+                    // be released once init concludes.
                     mWakelock.acquire();
 
-                    Message msg = mBackupHandler.obtainMessage(MSG_RUN_BACKUP);
+                    Message msg = mBackupHandler.obtainMessage(MSG_RUN_INITIALIZE);
                     mBackupHandler.sendMessage(msg);
                 }
             }
@@ -408,6 +461,37 @@
         }
     }
 
+    // Maintain persistent state around whether need to do an initialize operation.
+    // Must be called with the queue lock held.
+    void recordInitPendingLocked(boolean isPending, String transportName) {
+        if (DEBUG) Log.i(TAG, "recordInitPendingLocked: " + isPending
+                + " on transport " + transportName);
+        try {
+            IBackupTransport transport = getTransport(transportName);
+            String transportDirName = transport.transportDirName();
+            File stateDir = new File(mBaseStateDir, transportDirName);
+            File initPendingFile = new File(stateDir, INIT_SENTINEL_FILE_NAME);
+
+            if (isPending) {
+                // We need an init before we can proceed with sending backup data.
+                // Record that with an entry in our set of pending inits, as well as
+                // journaling it via creation of a sentinel file.
+                mPendingInits.add(transportName);
+                try {
+                    (new FileOutputStream(initPendingFile)).close();
+                } catch (IOException ioe) {
+                    // Something is badly wrong with our permissions; just try to move on
+                }
+            } else {
+                // No more initialization needed; wipe the journal and reset our state.
+                initPendingFile.delete();
+                mPendingInits.remove(transportName);
+            }
+        } catch (RemoteException e) {
+            // can't happen; the transport is local
+        }
+    }
+
     // Reset all of our bookkeeping, in response to having been told that
     // the backend data has been wiped [due to idle expiry, for example],
     // so we must re-upload all saved settings.
@@ -430,7 +514,10 @@
 
             // Remove all the state files
             for (File sf : stateFileDir.listFiles()) {
-                sf.delete();
+                // ... but don't touch the needs-init sentinel
+                if (!sf.getName().equals(INIT_SENTINEL_FILE_NAME)) {
+                    sf.delete();
+                }
             }
 
             // Enqueue a new backup of every participant
@@ -455,6 +542,29 @@
             if (DEBUG) Log.v(TAG, "Registering transport " + name + " = " + transport);
             mTransports.put(name, transport);
         }
+
+        // If the init sentinel file exists, we need to be sure to perform the init
+        // as soon as practical.  We also create the state directory at registration
+        // time to ensure it's present from the outset.
+        try {
+            String transportName = transport.transportDirName();
+            File stateDir = new File(mBaseStateDir, transportName);
+            stateDir.mkdirs();
+
+            File initSentinel = new File(stateDir, INIT_SENTINEL_FILE_NAME);
+            if (initSentinel.exists()) {
+                synchronized (mQueueLock) {
+                    mPendingInits.add(transportName);
+
+                    // TODO: pick a better starting time than now + 1 minute
+                    long delay = 1000 * 60; // one minute, in milliseconds
+                    mAlarmManager.set(AlarmManager.RTC_WAKEUP,
+                            System.currentTimeMillis() + delay, mRunInitIntent);
+                }
+            }
+        } catch (RemoteException e) {
+            // can't happen, the transport is local
+        }
     }
 
     // ----- Track installation/removal of packages -----
@@ -581,6 +691,20 @@
                 (new PerformClearThread(params.transport, params.packageInfo)).start();
                 break;
             }
+
+            case MSG_RUN_INITIALIZE:
+            {
+                HashSet<String> queue;
+
+                // Snapshot the pending-init queue and work on that
+                synchronized (mQueueLock) {
+                    queue = new HashSet<String>(mPendingInits);
+                    mPendingInits.clear();
+                }
+
+                (new PerformInitializeThread(queue)).start();
+                break;
+            }
             }
         }
     }
@@ -907,7 +1031,6 @@
             } catch (RemoteException e) {
                 // can't happen; the transport is local
             }
-            mStateDir.mkdirs();
         }
 
         @Override
@@ -1206,7 +1329,6 @@
             } catch (RemoteException e) {
                 // can't happen; the transport is local
             }
-            mStateDir.mkdirs();
         }
 
         @Override
@@ -1552,6 +1674,80 @@
         }
     }
 
+    class PerformInitializeThread extends Thread {
+        HashSet<String> mQueue;
+
+        PerformInitializeThread(HashSet<String> transportNames) {
+            mQueue = transportNames;
+        }
+
+        @Override
+        public void run() {
+            int status;
+            try {
+                for (String transportName : mQueue) {
+                    IBackupTransport transport = getTransport(transportName);
+                    if (transport == null) {
+                        Log.e(TAG, "Requested init for " + transportName + " but not found");
+                        continue;
+                    }
+
+                    status = BackupConstants.TRANSPORT_OK;
+                    File stateDir = null;
+
+                    Log.i(TAG, "Device init on " + transport.transportDirName());
+
+                    stateDir = new File(mBaseStateDir, transport.transportDirName());
+
+                    status = transport.initializeDevice();
+                    if (status != BackupConstants.TRANSPORT_OK) {
+                        Log.e(TAG, "Error from initializeDevice: " + status);
+                    }
+                    if (status == BackupConstants.TRANSPORT_OK) {
+                        status = transport.finishBackup();
+                    }
+
+                    // Okay, the wipe really happened.  Clean up our local bookkeeping.
+                    if (status == BackupConstants.TRANSPORT_OK) {
+                        resetBackupState(stateDir);
+                        synchronized (mQueueLock) {
+                            recordInitPendingLocked(false, transportName);
+                        }
+                    }
+
+                    // If this didn't work, requeue this one and try again
+                    // after a suitable interval
+                    if (status != BackupConstants.TRANSPORT_OK) {
+                        Log.i(TAG, "Device init failed");
+                        synchronized (mQueueLock) {
+                            recordInitPendingLocked(true, transportName);
+                        }
+                        // do this via another alarm to make sure of the wakelock states
+                        long delay = transport.requestBackupTime();
+                        if (DEBUG) Log.w(TAG, "init failed on "
+                                + transportName + " resched in " + delay);
+                        mAlarmManager.set(AlarmManager.RTC_WAKEUP,
+                                System.currentTimeMillis() + delay, mRunInitIntent);
+                    } else {
+                        // success!
+                        Log.i(TAG, "Device init successful");
+                    }
+
+                }
+            } catch (RemoteException e) {
+                // can't happen; the transports are local
+            } catch (Exception e) {
+                Log.e(TAG, "Unexpected error performing init", e);
+            } finally {
+                // Done; indicate that we're finished and release the wakelock
+                synchronized (mQueueLock) {
+                    mInitInProgress = false;
+                }
+                mWakelock.release();
+            }
+        }
+    }
+
 
     // ----- IBackupManager binder interface -----
 
@@ -1694,6 +1890,8 @@
         mContext.enforceCallingOrSelfPermission(android.Manifest.permission.BACKUP,
                 "setBackupEnabled");
 
+        Log.i(TAG, "Backup enabled => " + enable);
+
         boolean wasEnabled = mEnabled;
         synchronized (this) {
             Settings.Secure.putInt(mContext.getContentResolver(),
@@ -1707,7 +1905,27 @@
                 startBackupAlarmsLocked(BACKUP_INTERVAL);
             } else if (!enable) {
                 // No longer enabled, so stop running backups
+                if (DEBUG) Log.i(TAG, "Opting out of backup");
+
                 mAlarmManager.cancel(mRunBackupIntent);
+
+                // This also constitutes an opt-out, so we wipe any data for
+                // this device from the backend.  We start that process with
+                // an alarm in order to guarantee wakelock states.
+                if (wasEnabled && mProvisioned) {
+                    // NOTE: we currently flush every registered transport, not just
+                    // the currently-active one.
+                    HashSet<String> allTransports;
+                    synchronized (mTransports) {
+                        allTransports = new HashSet<String>(mTransports.keySet());
+                    }
+                    // build the set of transports for which we are posting an init
+                    for (String transport : allTransports) {
+                        recordInitPendingLocked(true, transport);
+                    }
+                    mAlarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),
+                            mRunInitIntent);
+                }
             }
         }
     }
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java b/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
index 3fef61c..39b8774 100644
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
@@ -247,6 +247,7 @@
 
     // Dump the page
     public void dump(boolean timeout, String webkitData) {
+        mDumpWebKitData = true;
         if (mResultFile == null || mResultFile.length() == 0) {
             finished();
             return;
@@ -290,8 +291,9 @@
         mCallback = callback;
     }
 
-    public void finished() {
-        if (mTestPageLoaded) {
+    public boolean finished() {
+        if (canMoveToNextTest()) {
+            mHandler.removeMessages(MSG_TIMEOUT);
             if (mUiAutoTestPath != null) {
                 //don't really finish here
                 moveToNextTest();
@@ -300,12 +302,9 @@
                     mCallback.finished();
                 }
             }
-        } else {
-            // The test is complete but the page has not completed loading. We
-            // can't continue to the next test until both the test is finished
-            // and the page has stopped loading.
-            mReadyForNextTest = true;
+            return true;
         }
+        return false;
     }
 
     public void setDefaultDumpDataType(DumpDataType defaultDumpDataType) {
@@ -333,7 +332,7 @@
         Log.v(LOGTAG, "notifyDone called: " + url);
         if (mWaitUntilDone) {
             mWaitUntilDone = false;
-            mChromeClient.onProgressChanged(mWebView, 100);
+            mChromeClient.onProgressChanged(mWebView, 101);
         }
     }
 
@@ -452,14 +451,19 @@
         @Override
         public void onPageFinished(WebView view, String url) {
             Log.v(LOGTAG, "onPageFinished, url=" + url);
-            mTestPageLoaded = true;
+            mPageFinished = true;
+            // Calling finished() will check if we've met all the conditions for completing
+            // this test and move to the next one if we are ready.
+            if (finished()) {
+                return;
+            }
             super.onPageFinished(view, url);
         }
 
         @Override
         public void onPageStarted(WebView view, String url, Bitmap favicon) {
             Log.v(LOGTAG, "onPageStarted, url=" + url);
-            mTestPageLoaded = false;
+            mPageFinished = false;
             super.onPageStarted(view, url, favicon);
         }
 
@@ -488,22 +492,24 @@
     private final WebChromeClient mChromeClient = new WebChromeClient() {
         @Override
         public void onProgressChanged(WebView view, int newProgress) {
-            if (newProgress == 100) {
 
-                if (mReadyForNextTest) {
-                    // In this case, the test has completed (i.e. called
-                    // layoutTestController.notifyDone) before the page finished loading. This
-                    // usually happens if the test is not invoked by an onload handler, rather
-                    // directly in a script tag. Now that the page has finished loading, it is
-                    // safe for DRT to go to the next test.
-                    finished();
+            // notifyDone calls this with 101%. We only want to update this flag if this
+            // is the real call from WebCore.
+            if (newProgress == 100) {
+                mOneHundredPercentComplete = true;
+            }
+
+            // With the flag updated, we can now proceed as normal whether the progress update came from
+            // WebCore or notifyDone.
+            if (newProgress >= 100) {
+                // finished() will check if we are ready to move to the next test and do so if we are.
+                if (finished()) {
                     return;
                 }
 
                 if (!mTimedOut && !mWaitUntilDone && !mRequestedWebKitData) {
                     String url = mWebView.getUrl();
                     Log.v(LOGTAG, "Finished: "+ url);
-                    mHandler.removeMessages(MSG_TIMEOUT);
                     requestWebKitData();
                 } else {
                     String url = mWebView.getUrl();
@@ -675,8 +681,13 @@
         mDumpDatabaseCallbacks = false;
         mCanOpenWindows = false;
         mEventSender.resetMouse();
-        mTestPageLoaded = false;
-        mReadyForNextTest = false;
+        mPageFinished = false;
+        mOneHundredPercentComplete = false;
+        mDumpWebKitData = false;
+    }
+
+    private boolean canMoveToNextTest() {
+        return (mDumpWebKitData && mOneHundredPercentComplete && mPageFinished && !mWaitUntilDone) || mTimedOut;
     }
 
     private void setupWebViewForLayoutTests(WebView webview, CallbackProxy callbackProxy) {
@@ -733,8 +744,9 @@
     private StringBuffer mConsoleMessages;
     private boolean mCanOpenWindows;
 
-    private boolean mTestPageLoaded = false;
-    private boolean mReadyForNextTest = false;
+    private boolean mPageFinished = false;
+    private boolean mDumpWebKitData = false;
+    private boolean mOneHundredPercentComplete = false;
 
     static final String TIMEOUT_STR = "**Test timeout";