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=""com.android.contacts""
+ 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=""caller_is_syncadapter""
+ 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=""vnd.android.cursor.item/aggregation_exception""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""vnd.android.cursor.dir/aggregation_exception""
+ 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=""raw_contact_id1""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="RAW_CONTACT_ID2"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""raw_contact_id2""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""type""
+ 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=""vnd.android.cursor.item/email_v2""
+ 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=""vnd.android.cursor.dir/email_v2""
+ 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=""data4""
+ 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=""vnd.android.cursor.item/event""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="START_DATE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data1""
+ 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=""vnd.android.cursor.item/group_membership""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GROUP_ROW_ID"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data1""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GROUP_SOURCE_ID"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""group_sourceid""
+ 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=""vnd.android.cursor.item/im""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CUSTOM_PROTOCOL"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data6""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PROTOCOL"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data5""
+ 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=""data1""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""vnd.android.cursor.item/misc""
+ 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=""vnd.android.cursor.item/nickname""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data1""
+ 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=""vnd.android.cursor.item/note""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NOTE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data1""
+ 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=""data1""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""vnd.android.cursor.item/organization""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="DEPARTMENT"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data5""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="JOB_DESCRIPTION"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data6""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PHONETIC_NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data8""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SYMBOL"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data7""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TITLE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data4""
+ 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=""vnd.android.cursor.item/phone_v2""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""vnd.android.cursor.dir/phone_v2""
+ 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=""data1""
+ 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=""vnd.android.cursor.item/photo""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PHOTO"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data15""
+ 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=""vnd.android.cursor.item/relation""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data1""
+ 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=""vnd.android.cursor.item/name""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="DISPLAY_NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data1""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FAMILY_NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data3""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GIVEN_NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data2""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="MIDDLE_NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data5""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PHONETIC_FAMILY_NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data9""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PHONETIC_GIVEN_NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data7""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PHONETIC_MIDDLE_NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data8""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PREFIX"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data4""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SUFFIX"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data6""
+ 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=""data7""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_ITEM_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""vnd.android.cursor.item/postal-address_v2""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""vnd.android.cursor.dir/postal-address_v2""
+ 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=""data10""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMATTED_ADDRESS"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data1""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NEIGHBORHOOD"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data6""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="POBOX"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data5""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="POSTCODE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data9""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="REGION"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data8""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="STREET"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""data4""
+ 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=""vnd.android.cursor.item/website""
+ 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=""data1""
+ 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=""vnd.android.cursor.item/contact""
+ 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=""vnd.android.cursor.dir/contact""
+ 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=""suggestions""
+ 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=""data""
+ 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=""photo""
+ 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=""vnd.android.cursor.dir/data""
+ 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=""vnd.android.cursor.item/group""
+ 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=""vnd.android.cursor.dir/group""
+ 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=""com.android.contacts.action.ATTACH_IMAGE""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EXTRA_CREATE_DESCRIPTION"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""com.android.contacts.action.CREATE_DESCRIPTION""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EXTRA_FORCE_CREATE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""com.android.contacts.action.FORCE_CREATE""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SEARCH_SUGGESTION_CLICKED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""android.provider.Contacts.SEARCH_SUGGESTION_CLICKED""
+ 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=""android.provider.Contacts.SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED""
+ 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=""android.provider.Contacts.SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED""
+ 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=""com.android.contacts.action.SHOW_OR_CREATE_CONTACT""
+ 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=""android.intent.action.INSERT""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="COMPANY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""company""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EMAIL"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""email""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EMAIL_ISPRIMARY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""email_isprimary""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EMAIL_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""email_type""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FULL_MODE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""full_mode""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="IM_HANDLE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""im_handle""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="IM_ISPRIMARY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""im_isprimary""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="IM_PROTOCOL"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""im_protocol""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="JOB_TITLE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""job_title""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""name""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="NOTES"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""notes""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PHONE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""phone""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PHONETIC_NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""phonetic_name""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PHONE_ISPRIMARY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""phone_isprimary""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PHONE_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""phone_type""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="POSTAL"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""postal""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="POSTAL_ISPRIMARY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""postal_isprimary""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="POSTAL_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""postal_type""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SECONDARY_EMAIL"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""secondary_email""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SECONDARY_EMAIL_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""secondary_email_type""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SECONDARY_PHONE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""secondary_phone""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SECONDARY_PHONE_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""secondary_phone_type""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TERTIARY_EMAIL"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""tertiary_email""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TERTIARY_EMAIL_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""tertiary_email_type""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TERTIARY_PHONE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""tertiary_phone""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="TERTIARY_PHONE_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""tertiary_phone_type""
+ 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=""vnd.android.cursor.item/im-presence""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""vnd.android.cursor.dir/im-presence""
+ 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=""presence_id""
+ 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=""vnd.android.cursor.item/raw_contact""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""vnd.android.cursor.dir/raw_contact""
+ 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=""data""
+ 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=""vnd.android.cursor.item/setting""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CONTENT_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""vnd.android.cursor.dir/setting""
+ 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<android.net.Uri, 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="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=""syncstate""
+ 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=""android.settings.PRIVACY_SETTINGS""
+ 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";