OSDN Git Service

Remove the IM provider contract class.
authorJeff Hamilton <jham@android.com>
Sat, 21 Nov 2009 04:04:03 +0000 (20:04 -0800)
committerJeff Hamilton <jham@android.com>
Thu, 17 Dec 2009 19:47:36 +0000 (13:47 -0600)
Change-Id: Ia644689021aca3e429d42727dfd6262b6986dfd2

api/current.xml
core/java/android/provider/Contacts.java
core/java/android/provider/ContactsContract.java
core/java/android/provider/Im.java [deleted file]
preloaded-classes

index c2e84be..d7bc614 100644 (file)
  deprecated="deprecated"
  visibility="public"
 >
+<field name="AVAILABLE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AWAY"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="DO_NOT_DISTURB"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="IDLE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="IM_ACCOUNT"
  type="java.lang.String"
  transient="false"
  visibility="public"
 >
 </field>
+<field name="INVISIBLE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="OFFLINE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PRESENCE_CUSTOM_STATUS"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;status&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PRESENCE_STATUS"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;mode&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PRIORITY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;priority&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 </interface>
 <class name="Contacts.Settings"
  extends="java.lang.Object"
  deprecated="not deprecated"
  visibility="protected"
 >
+<field name="AVAILABLE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AWAY"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="DO_NOT_DISTURB"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="IDLE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="INVISIBLE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="OFFLINE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="PRESENCE"
  type="java.lang.String"
  transient="false"
  visibility="public"
 >
 </field>
+<field name="PRESENCE_CUSTOM_STATUS"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;status&quot;"
+ static="true"
+ final="true"
+ deprecated="deprecated"
+ visibility="public"
+>
+</field>
+<field name="PRESENCE_STATUS"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;mode&quot;"
+ static="true"
+ final="true"
+ deprecated="deprecated"
+ visibility="public"
+>
+</field>
 <field name="STATUS"
  type="java.lang.String"
  transient="false"
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="t" type="T">
+<parameter name="arg0" type="T">
 </parameter>
 </method>
 </interface>
index 1a38166..a29ecb5 100644 (file)
@@ -1334,8 +1334,26 @@ public class Contacts {
         }
 
         /**
+         * TODO find a place to put the canonical version of these.
+         */
+        interface ProviderNames {
+            //
+            //NOTE: update Contacts.java with new providers when they're added.
+            //
+            String YAHOO = "Yahoo";
+            String GTALK = "GTalk";
+            String MSN = "MSN";
+            String ICQ = "ICQ";
+            String AIM = "AIM";
+            String XMPP = "XMPP";
+            String JABBER = "JABBER";
+            String SKYPE = "SKYPE";
+            String QQ = "QQ";
+        }
+
+        /**
          * This looks up the provider name defined in
-         * {@link android.provider.Im.ProviderNames} from the predefined IM protocol id.
+         * from the predefined IM protocol id.
          * This is used for interacting with the IM application.
          *
          * @param protocol the protocol ID
@@ -1348,21 +1366,21 @@ public class Contacts {
         public static String lookupProviderNameFromId(int protocol) {
             switch (protocol) {
                 case PROTOCOL_GOOGLE_TALK:
-                    return Im.ProviderNames.GTALK;
+                    return ProviderNames.GTALK;
                 case PROTOCOL_AIM:
-                    return Im.ProviderNames.AIM;
+                    return ProviderNames.AIM;
                 case PROTOCOL_MSN:
-                    return Im.ProviderNames.MSN;
+                    return ProviderNames.MSN;
                 case PROTOCOL_YAHOO:
-                    return Im.ProviderNames.YAHOO;
+                    return ProviderNames.YAHOO;
                 case PROTOCOL_ICQ:
-                    return Im.ProviderNames.ICQ;
+                    return ProviderNames.ICQ;
                 case PROTOCOL_JABBER:
-                    return Im.ProviderNames.JABBER;
+                    return ProviderNames.JABBER;
                 case PROTOCOL_SKYPE:
-                    return Im.ProviderNames.SKYPE;
+                    return ProviderNames.SKYPE;
                 case PROTOCOL_QQ:
-                    return Im.ProviderNames.QQ;
+                    return ProviderNames.QQ;
             }
             return null;
         }
@@ -1532,7 +1550,35 @@ public class Contacts {
      * @deprecated see {@link android.provider.ContactsContract}
      */
     @Deprecated
-    public interface PresenceColumns extends Im.CommonPresenceColumns {
+    public interface PresenceColumns {
+        /**
+         * The priority, an integer, used by XMPP presence
+         * <P>Type: INTEGER</P>
+         */
+        String PRIORITY = "priority";
+
+        /**
+         * The server defined status.
+         * <P>Type: INTEGER (one of the values below)</P>
+         */
+        String PRESENCE_STATUS = ContactsContract.StatusUpdates.PRESENCE;
+
+        /**
+         * Presence Status definition
+         */
+        int OFFLINE = ContactsContract.StatusUpdates.OFFLINE;
+        int INVISIBLE = ContactsContract.StatusUpdates.INVISIBLE;
+        int AWAY = ContactsContract.StatusUpdates.AWAY;
+        int IDLE = ContactsContract.StatusUpdates.IDLE;
+        int DO_NOT_DISTURB = ContactsContract.StatusUpdates.DO_NOT_DISTURB;
+        int AVAILABLE = ContactsContract.StatusUpdates.AVAILABLE;
+
+        /**
+         * The user defined status line.
+         * <P>Type: TEXT</P>
+         */
+        String PRESENCE_CUSTOM_STATUS = ContactsContract.StatusUpdates.STATUS;
+
         /**
          * The IM service the presence is coming from. Formatted using either
          * {@link Contacts.ContactMethods#encodePredefinedImProtocol} or
index e98d8ee..ed9198e 100644 (file)
@@ -1601,18 +1601,39 @@ public final class ContactsContract {
      * @see StatusUpdates
      * @see ContactsContract.Data
      */
-    protected interface StatusColumns extends Im.CommonPresenceColumns {
+    protected interface StatusColumns {
         /**
          * Contact's latest presence level.
          * <P>Type: INTEGER (one of the values below)</P>
          */
-        public static final String PRESENCE = PRESENCE_STATUS;
+        public static final String PRESENCE = "mode";
+
+        /**
+         * @deprecated use {@link #PRESENCE}
+         */
+        @Deprecated
+        public static final String PRESENCE_STATUS = PRESENCE;
+
+        /*
+         * Presence Status definition
+         */
+        int OFFLINE = 0;
+        int INVISIBLE = 1;
+        int AWAY = 2;
+        int IDLE = 3;
+        int DO_NOT_DISTURB = 4;
+        int AVAILABLE = 5;
 
         /**
          * Contact latest status update.
          * <p>Type: TEXT</p>
          */
-        public static final String STATUS = PRESENCE_CUSTOM_STATUS;
+        public static final String STATUS = "status";
+
+        /**
+         * @deprecated use {@link #STATUS}
+         */
+        public static final String PRESENCE_CUSTOM_STATUS = STATUS;
 
         /**
          * The absolute time in milliseconds when the latest status was inserted/updated.
diff --git a/core/java/android/provider/Im.java b/core/java/android/provider/Im.java
deleted file mode 100644 (file)
index ff52199..0000000
+++ /dev/null
@@ -1,2358 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.provider;
-
-import android.content.ContentQueryMap;
-import android.content.ContentResolver;
-import android.content.ContentUris;
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Handler;
-
-import java.util.HashMap;
-
-/**
- * The GTalk provider stores all information about roster contacts, chat messages, presence, etc.
- *
- * @hide
- */
-public class Im {
-    /**
-     * no public constructor since this is a utility class
-     */
-    private Im() {}
-
-    /**
-     * The Columns for IM providers
-     */
-    public interface ProviderColumns {
-        /**
-         * The name of the IM provider
-         * <P>Type: TEXT</P>
-         */
-        String NAME = "name";
-
-        /**
-         * The full name of the provider
-         * <P>Type: TEXT</P>
-         */
-        String FULLNAME = "fullname";
-
-        /**
-         * The category for the provider, used to form intent.
-         * <P>Type: TEXT</P>
-         */
-        String CATEGORY = "category";
-
-        /**
-         * The url users should visit to create a new account for this provider
-         * <P>Type: TEXT</P>
-         */
-        String SIGNUP_URL = "signup_url";
-    }
-
-    /**
-     * Known names corresponding to the {@link ProviderColumns#NAME} column
-     */
-    public interface ProviderNames {
-        //
-        //NOTE: update Contacts.java with new providers when they're added.
-        //
-        String YAHOO = "Yahoo";
-        String GTALK = "GTalk";
-        String MSN = "MSN";
-        String ICQ = "ICQ";
-        String AIM = "AIM";
-        String XMPP = "XMPP";
-        String JABBER = "JABBER";
-        String SKYPE = "SKYPE";
-        String QQ = "QQ";
-    }
-
-    /**
-     * This table contains the IM providers
-     */
-    public static final class Provider implements BaseColumns, ProviderColumns {
-        private Provider() {}
-
-        public static final long getProviderIdForName(ContentResolver cr, String providerName) {
-            String[] selectionArgs = new String[1];
-            selectionArgs[0] = providerName;
-
-            Cursor cursor = cr.query(CONTENT_URI,
-                    PROVIDER_PROJECTION,
-                    NAME+"=?",
-                    selectionArgs, null);
-
-            long retVal = 0;
-            try {
-                if (cursor.moveToFirst()) {
-                    retVal = cursor.getLong(cursor.getColumnIndexOrThrow(_ID));
-                }
-            } finally {
-                cursor.close();
-            }
-
-            return retVal;
-        }
-
-        public static final String getProviderNameForId(ContentResolver cr, long providerId) {
-            Cursor cursor = cr.query(CONTENT_URI,
-                    PROVIDER_PROJECTION,
-                    _ID + "=" + providerId,
-                    null, null);
-
-            String retVal = null;
-            try {
-                if (cursor.moveToFirst()) {
-                    retVal = cursor.getString(cursor.getColumnIndexOrThrow(NAME));
-                }
-            } finally {
-                cursor.close();
-            }
-
-            return retVal;
-        }
-
-        private static final String[] PROVIDER_PROJECTION = new String[] {
-                _ID,
-                NAME
-        };
-
-        public static final String ACTIVE_ACCOUNT_ID = "account_id";
-        public static final String ACTIVE_ACCOUNT_USERNAME = "account_username";
-        public static final String ACTIVE_ACCOUNT_PW = "account_pw";
-        public static final String ACTIVE_ACCOUNT_LOCKED = "account_locked";
-        public static final String ACTIVE_ACCOUNT_KEEP_SIGNED_IN = "account_keepSignedIn";
-        public static final String ACCOUNT_PRESENCE_STATUS = "account_presenceStatus";
-        public static final String ACCOUNT_CONNECTION_STATUS = "account_connStatus";
-
-        /**
-         * The content:// style URL for this table
-         */
-        public static final Uri CONTENT_URI =
-            Uri.parse("content://com.google.android.providers.talk/providers");
-
-        public static final Uri CONTENT_URI_WITH_ACCOUNT =
-            Uri.parse("content://com.google.android.providers.talk/providers/account");
-
-        /**
-         * The MIME type of {@link #CONTENT_URI} providing a directory of
-         * people.
-         */
-        public static final String CONTENT_TYPE =
-                "vnd.android.cursor.dir/gtalk-providers";
-
-        public static final String CONTENT_ITEM_TYPE =
-                "vnd.android.cursor.item/gtalk-providers";
-
-        /**
-         * The default sort order for this table
-         */
-        public static final String DEFAULT_SORT_ORDER = "name ASC";
-    }
-
-    /**
-     * The columns for IM accounts. There can be more than one account for each IM provider.
-     */
-    public interface AccountColumns {
-        /**
-         * The name of the account
-         * <P>Type: TEXT</P>
-         */
-        String NAME = "name";
-
-        /**
-         * The IM provider for this account
-         * <P>Type: INTEGER</P>
-         */
-        String PROVIDER = "provider";
-
-        /**
-         * The username for this account
-         * <P>Type: TEXT</P>
-         */
-        String USERNAME = "username";
-
-        /**
-         * The password for this account
-         * <P>Type: TEXT</P>
-         */
-        String PASSWORD = "pw";
-
-        /**
-         * A boolean value indicates if the account is active.
-         * <P>Type: INTEGER</P>
-         */
-        String ACTIVE = "active";
-
-        /**
-         * A boolean value indicates if the account is locked (not editable)
-         * <P>Type: INTEGER</P>
-         */
-        String LOCKED = "locked";
-
-        /**
-         * A boolean value to indicate whether this account is kept signed in.
-         * <P>Type: INTEGER</P>
-         */
-        String KEEP_SIGNED_IN = "keep_signed_in";
-
-        /**
-         * A boolean value indiciating the last login state for this account
-         * <P>Type: INTEGER</P>
-         */
-        String LAST_LOGIN_STATE = "last_login_state";
-    }
-
-    /**
-     * This table contains the IM accounts.
-     */
-    public static final class Account implements BaseColumns, AccountColumns {
-        private Account() {}
-
-        public static final long getProviderIdForAccount(ContentResolver cr, long accountId) {
-            Cursor cursor = cr.query(CONTENT_URI,
-                    PROVIDER_PROJECTION,
-                    _ID + "=" + accountId,
-                    null /* selection args */,
-                    null /* sort order */);
-
-            long providerId = 0;
-
-            try {
-                if (cursor.moveToFirst()) {
-                    providerId = cursor.getLong(PROVIDER_COLUMN);
-                }
-            } finally {
-                cursor.close();
-            }
-
-            return providerId;
-        }
-
-        private static final String[] PROVIDER_PROJECTION = new String[] { PROVIDER };
-        private static final int PROVIDER_COLUMN = 0;
-
-        /**
-         * The content:// style URL for this table
-         */
-        public static final Uri CONTENT_URI =
-            Uri.parse("content://com.google.android.providers.talk/accounts");
-
-        /**
-         * The MIME type of {@link #CONTENT_URI} providing a directory of
-         * account.
-         */
-        public static final String CONTENT_TYPE =
-                "vnd.android.cursor.dir/gtalk-accounts";
-
-        /**
-         * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
-         * account.
-         */
-        public static final String CONTENT_ITEM_TYPE =
-                "vnd.android.cursor.item/gtalk-accounts";
-
-        /**
-         * The default sort order for this table
-         */
-        public static final String DEFAULT_SORT_ORDER = "name ASC";
-
-    }
-
-    /**
-     * Connection status
-     */
-    public interface ConnectionStatus {
-        /**
-         * The connection is offline, not logged in.
-         */
-        int OFFLINE = 0;
-
-        /**
-         * The connection is attempting to connect.
-         */
-        int CONNECTING = 1;
-
-        /**
-         * The connection is suspended due to network not available.
-         */
-        int SUSPENDED = 2;
-
-        /**
-         * The connection is logged in and online.
-         */
-        int ONLINE = 3;
-    }
-
-    public interface AccountStatusColumns {
-        /**
-         * account id
-         * <P>Type: INTEGER</P>
-         */
-        String ACCOUNT = "account";
-
-        /**
-         * User's presence status, see definitions in {#link CommonPresenceColumn}
-         * <P>Type: INTEGER</P>
-         */
-        String PRESENCE_STATUS = "presenceStatus";
-
-        /**
-         * The connection status of this account, see {#link ConnectionStatus}
-         * <P>Type: INTEGER</P>
-         */
-        String CONNECTION_STATUS = "connStatus";
-    }
-
-    public static final class AccountStatus implements BaseColumns, AccountStatusColumns {
-        /**
-         * The content:// style URL for this table
-         */
-        public static final Uri CONTENT_URI =
-            Uri.parse("content://com.google.android.providers.talk/accountStatus");
-
-        /**
-         * The MIME type of {@link #CONTENT_URI} providing a directory of account status.
-         */
-        public static final String CONTENT_TYPE =
-                "vnd.android.cursor.dir/gtalk-account-status";
-
-        /**
-         * The MIME type of a {@link #CONTENT_URI} subdirectory of a single account status.
-         */
-        public static final String CONTENT_ITEM_TYPE =
-                "vnd.android.cursor.item/gtalk-account-status";
-
-        /**
-         * The default sort order for this table
-         */
-        public static final String DEFAULT_SORT_ORDER = "name ASC";
-    }
-
-    /**
-     * Columns from the Contacts table.
-     */
-    public interface ContactsColumns {
-        /**
-         * The username
-         * <P>Type: TEXT</P>
-         */
-        String USERNAME = "username";
-
-        /**
-         * The nickname or display name
-         * <P>Type: TEXT</P>
-         */
-        String NICKNAME = "nickname";
-
-        /**
-         * The IM provider for this contact
-         * <P>Type: INTEGER</P>
-         */
-        String PROVIDER = "provider";
-
-        /**
-         * The account (within a IM provider) for this contact
-         * <P>Type: INTEGER</P>
-         */
-        String ACCOUNT = "account";
-
-        /**
-         * The contactList this contact belongs to
-         * <P>Type: INTEGER</P>
-         */
-        String CONTACTLIST = "contactList";
-
-        /**
-         * Contact type
-         * <P>Type: INTEGER</P>
-         */
-        String TYPE = "type";
-
-        /**
-         * normal IM contact
-         */
-        int TYPE_NORMAL = 0;
-        /**
-         * temporary contact, someone not in the list of contacts that we
-         * subscribe presence for. Usually created because of the user is
-         * having a chat session with this contact.
-         */
-        int TYPE_TEMPORARY = 1;
-        /**
-         * temporary contact created for group chat.
-         */
-        int TYPE_GROUP = 2;
-        /**
-         * blocked contact.
-         */
-        int TYPE_BLOCKED = 3;
-        /**
-         * the contact is hidden. The client should always display this contact to the user.
-         */
-        int TYPE_HIDDEN = 4;
-        /**
-         * the contact is pinned. The client should always display this contact to the user.
-         */
-        int TYPE_PINNED = 5;
-
-        /**
-         * Contact subscription status
-         * <P>Type: INTEGER</P>
-         */
-        String SUBSCRIPTION_STATUS = "subscriptionStatus";
-
-        /**
-         * no pending subscription
-         */
-        int SUBSCRIPTION_STATUS_NONE = 0;
-        /**
-         * requested to subscribe
-         */
-        int SUBSCRIPTION_STATUS_SUBSCRIBE_PENDING = 1;
-        /**
-         * requested to unsubscribe
-         */
-        int SUBSCRIPTION_STATUS_UNSUBSCRIBE_PENDING = 2;
-
-        /**
-         * Contact subscription type
-         * <P>Type: INTEGER </P>
-         */
-        String SUBSCRIPTION_TYPE = "subscriptionType";
-
-        /**
-         * The user and contact have no interest in each other's presence.
-         */
-        int SUBSCRIPTION_TYPE_NONE = 0;
-        /**
-         * The user wishes to stop receiving presence updates from the contact.
-         */
-        int SUBSCRIPTION_TYPE_REMOVE = 1;
-        /**
-         * The user is interested in receiving presence updates from the contact.
-         */
-        int SUBSCRIPTION_TYPE_TO = 2;
-        /**
-         * The contact is interested in receiving presence updates from the user.
-         */
-        int SUBSCRIPTION_TYPE_FROM = 3;
-        /**
-         * The user and contact have a mutual interest in each other's presence.
-         */
-        int SUBSCRIPTION_TYPE_BOTH = 4;
-        /**
-         * This is a special type reserved for pending subscription requests
-         */
-        int SUBSCRIPTION_TYPE_INVITATIONS = 5;
-
-        /**
-         * Quick Contact: derived from Google Contact Extension's "message_count" attribute.
-         * <P>Type: INTEGER</P>
-         */
-        String QUICK_CONTACT = "qc";
-
-        /**
-         * Google Contact Extension attribute
-         *
-         * Rejected: a boolean value indicating whether a subscription request from
-         * this client was ever rejected by the user. "true" indicates that it has.
-         * This is provided so that a client can block repeated subscription requests.
-         * <P>Type: INTEGER</P>
-         */
-        String REJECTED = "rejected";
-
-        /**
-         * Off The Record status: 0 for disabled, 1 for enabled
-         * <P>Type: INTEGER </P>
-         */
-        String OTR = "otr";
-    }
-
-    /**
-     * This defines the different type of values of {@link ContactsColumns#OTR}
-     */
-    public interface OffTheRecordType {
-        /*
-         * Off the record not turned on
-         */
-        int DISABLED = 0;
-        /**
-         * Off the record turned on, but we don't know who turned it on
-         */
-        int ENABLED = 1;
-        /**
-         * Off the record turned on by the user
-         */
-        int ENABLED_BY_USER = 2;
-        /**
-         * Off the record turned on by the buddy
-         */
-        int ENABLED_BY_BUDDY = 3;
-    };
-
-    /**
-     * This table contains contacts.
-     */
-    public static final class Contacts implements BaseColumns,
-            ContactsColumns, PresenceColumns, ChatsColumns {
-        /**
-         * no public constructor since this is a utility class
-         */
-        private Contacts() {}
-
-        /**
-         * The content:// style URL for this table
-         */
-        public static final Uri CONTENT_URI =
-            Uri.parse("content://com.google.android.providers.talk/contacts");
-
-        /**
-         * The content:// style URL for contacts joined with presence
-         */
-        public static final Uri CONTENT_URI_WITH_PRESENCE =
-            Uri.parse("content://com.google.android.providers.talk/contactsWithPresence");
-
-        /**
-         * The content:// style URL for barebone contacts, not joined with any other table
-         */
-        public static final Uri CONTENT_URI_CONTACTS_BAREBONE =
-            Uri.parse("content://com.google.android.providers.talk/contactsBarebone");
-
-        /**
-         * The content:// style URL for contacts who have an open chat session
-         */
-        public static final Uri CONTENT_URI_CHAT_CONTACTS =
-            Uri.parse("content://com.google.android.providers.talk/contacts_chatting");
-
-        /**
-         * The content:// style URL for contacts who have been blocked
-         */
-        public static final Uri CONTENT_URI_BLOCKED_CONTACTS =
-            Uri.parse("content://com.google.android.providers.talk/contacts/blocked");
-
-        /**
-         * The content:// style URL for contacts by provider and account
-         */
-        public static final Uri CONTENT_URI_CONTACTS_BY =
-            Uri.parse("content://com.google.android.providers.talk/contacts");
-
-        /**
-         * The content:// style URL for contacts by provider and account,
-         * and who have an open chat session
-         */
-        public static final Uri CONTENT_URI_CHAT_CONTACTS_BY =
-            Uri.parse("content://com.google.android.providers.talk/contacts/chatting");
-
-        /**
-         * The content:// style URL for contacts by provider and account,
-         * and who are online
-         */
-        public static final Uri CONTENT_URI_ONLINE_CONTACTS_BY =
-            Uri.parse("content://com.google.android.providers.talk/contacts/online");
-
-        /**
-         * The content:// style URL for contacts by provider and account,
-         * and who are offline
-         */
-        public static final Uri CONTENT_URI_OFFLINE_CONTACTS_BY =
-            Uri.parse("content://com.google.android.providers.talk/contacts/offline");
-
-        /**
-         * The content:// style URL for operations on bulk contacts
-         */
-        public static final Uri BULK_CONTENT_URI =
-                Uri.parse("content://com.google.android.providers.talk/bulk_contacts");
-
-        /**
-         * The content:// style URL for the count of online contacts in each
-         * contact list by provider and account.
-         */
-        public static final Uri CONTENT_URI_ONLINE_COUNT =
-            Uri.parse("content://com.google.android.providers.talk/contacts/onlineCount");
-
-        /**
-         * The MIME type of {@link #CONTENT_URI} providing a directory of
-         * people.
-         */
-        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/gtalk-contacts";
-
-        /**
-         * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
-         * person.
-         */
-        public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/gtalk-contacts";
-
-        /**
-         * The default sort order for this table
-         */
-        public static final String DEFAULT_SORT_ORDER =
-                "subscriptionType DESC, last_message_date DESC," +
-                        " mode DESC, nickname COLLATE UNICODE ASC";
-
-        public static final String CHATS_CONTACT = "chats_contact";
-
-        public static final String AVATAR_HASH = "avatars_hash";
-
-        public static final String AVATAR_DATA = "avatars_data";
-    }
-
-    /**
-     * Columns from the ContactList table.
-     */
-    public interface ContactListColumns {
-        String NAME = "name";
-        String PROVIDER = "provider";
-        String ACCOUNT = "account";
-    }
-
-    /**
-     * This table contains the contact lists.
-     */
-    public static final class ContactList implements BaseColumns,
-            ContactListColumns {
-        private ContactList() {}
-
-        /**
-         * The content:// style URL for this table
-         */
-        public static final Uri CONTENT_URI =
-            Uri.parse("content://com.google.android.providers.talk/contactLists");
-
-        /**
-         * The MIME type of {@link #CONTENT_URI} providing a directory of
-         * people.
-         */
-        public static final String CONTENT_TYPE =
-                "vnd.android.cursor.dir/gtalk-contactLists";
-
-        /**
-         * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
-         * person.
-         */
-        public static final String CONTENT_ITEM_TYPE =
-                "vnd.android.cursor.item/gtalk-contactLists";
-
-        /**
-         * The default sort order for this table
-         */
-        public static final String DEFAULT_SORT_ORDER = "name COLLATE UNICODE ASC";
-
-        public static final String PROVIDER_NAME = "provider_name";
-
-        public static final String ACCOUNT_NAME = "account_name";
-    }
-
-    /**
-     * Columns from the BlockedList table.
-     */
-    public interface BlockedListColumns {
-        /**
-         * The username of the blocked contact.
-         * <P>Type: TEXT</P>
-         */
-        String USERNAME = "username";
-
-        /**
-         * The nickname of the blocked contact.
-         * <P>Type: TEXT</P>
-         */
-        String NICKNAME = "nickname";
-
-        /**
-         * The provider id of the blocked contact.
-         * <P>Type: INT</P>
-         */
-        String PROVIDER = "provider";
-
-        /**
-         * The account id of the blocked contact.
-         * <P>Type: INT</P>
-         */
-        String ACCOUNT = "account";
-    }
-
-    /**
-     * This table contains blocked lists
-     */
-    public static final class BlockedList implements BaseColumns, BlockedListColumns {
-        private BlockedList() {}
-
-        /**
-         * The content:// style URL for this table
-         */
-        public static final Uri CONTENT_URI =
-            Uri.parse("content://com.google.android.providers.talk/blockedList");
-
-        /**
-         * The MIME type of {@link #CONTENT_URI} providing a directory of
-         * people.
-         */
-        public static final String CONTENT_TYPE =
-                "vnd.android.cursor.dir/gtalk-blockedList";
-
-        /**
-         * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
-         * person.
-         */
-        public static final String CONTENT_ITEM_TYPE =
-                "vnd.android.cursor.item/gtalk-blockedList";
-
-        /**
-         * The default sort order for this table
-         */
-        public static final String DEFAULT_SORT_ORDER = "nickname ASC";
-
-        public static final String PROVIDER_NAME = "provider_name";
-
-        public static final String ACCOUNT_NAME = "account_name";
-
-        public static final String AVATAR_DATA = "avatars_data";
-    }
-
-    /**
-     * Columns from the contactsEtag table
-     */
-    public interface ContactsEtagColumns {
-        /**
-         * The roster etag, computed by the server, stored on the client. There is one etag
-         * per account roster.
-         * <P>Type: TEXT</P>
-         */
-        String ETAG = "etag";
-
-        /**
-         * The OTR etag, computed by the server, stored on the client. There is one OTR etag
-         * per account roster.
-         * <P>Type: TEXT</P>
-         */
-        String OTR_ETAG = "otr_etag";
-
-        /**
-         * The account id for the etag.
-         * <P> Type: INTEGER </P>
-         */
-        String ACCOUNT = "account";
-    }
-
-    public static final class ContactsEtag implements BaseColumns, ContactsEtagColumns {
-        private ContactsEtag() {}
-
-        public static final Cursor query(ContentResolver cr,
-                String[] projection) {
-            return cr.query(CONTENT_URI, projection, null, null, null);
-        }
-
-        public static final Cursor query(ContentResolver cr,
-                String[] projection, String where, String orderBy) {
-            return cr.query(CONTENT_URI, projection, where,
-                    null, orderBy == null ? null : orderBy);
-        }
-
-        public static final String getRosterEtag(ContentResolver resolver, long accountId) {
-            String retVal = null;
-
-            Cursor c = resolver.query(CONTENT_URI,
-                    CONTACT_ETAG_PROJECTION,
-                    ACCOUNT + "=" + accountId,
-                    null /* selection args */,
-                    null /* sort order */);
-
-            try {
-                if (c.moveToFirst()) {
-                    retVal = c.getString(COLUMN_ETAG);
-                }
-            } finally {
-                c.close();
-            }
-
-            return retVal;
-        }
-
-        public static final String getOtrEtag(ContentResolver resolver, long accountId) {
-            String retVal = null;
-
-            Cursor c = resolver.query(CONTENT_URI,
-                    CONTACT_OTR_ETAG_PROJECTION,
-                    ACCOUNT + "=" + accountId,
-                    null /* selection args */,
-                    null /* sort order */);
-
-            try {
-                if (c.moveToFirst()) {
-                    retVal = c.getString(COLUMN_OTR_ETAG);
-                }
-            } finally {
-                c.close();
-            }
-
-            return retVal;
-        }
-
-        private static final String[] CONTACT_ETAG_PROJECTION = new String[] {
-                Im.ContactsEtag.ETAG    // 0
-        };
-
-        private static int COLUMN_ETAG = 0;
-
-        private static final String[] CONTACT_OTR_ETAG_PROJECTION = new String[] {
-                Im.ContactsEtag.OTR_ETAG    // 0
-        };
-
-        private static int COLUMN_OTR_ETAG = 0;
-
-        /**
-         * The content:// style URL for this table
-         */
-        public static final Uri CONTENT_URI =
-            Uri.parse("content://com.google.android.providers.talk/contactsEtag");
-
-        /**
-         * The MIME type of {@link #CONTENT_URI} providing a directory of
-         * people.
-         */
-        public static final String CONTENT_TYPE =
-                "vnd.android.cursor.dir/gtalk-contactsEtag";
-
-        /**
-         * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
-         * person.
-         */
-        public static final String CONTENT_ITEM_TYPE =
-                "vnd.android.cursor.item/gtalk-contactsEtag";
-    }
-
-    /**
-     * Message type definition
-     */
-    public interface MessageType {
-        /* sent message */
-        int OUTGOING = 0;
-        /* received message */
-        int INCOMING = 1;
-        /* presence became available */
-        int PRESENCE_AVAILABLE = 2;
-        /* presence became away */
-        int PRESENCE_AWAY = 3;
-        /* presence became DND (busy) */
-        int PRESENCE_DND = 4;
-        /* presence became unavailable */
-        int PRESENCE_UNAVAILABLE = 5;
-        /* the message is converted to a group chat */
-        int CONVERT_TO_GROUPCHAT = 6;
-        /* generic status */
-        int STATUS = 7;
-        /* the message cannot be sent now, but will be sent later */
-        int POSTPONED = 8;
-        /* off The Record status is turned off */
-        int OTR_IS_TURNED_OFF = 9;
-        /* off the record status is turned on */
-        int OTR_IS_TURNED_ON = 10;
-        /* off the record status turned on by user */
-        int OTR_TURNED_ON_BY_USER = 11;
-        /* off the record status turned on by buddy */
-        int OTR_TURNED_ON_BY_BUDDY = 12;
-    }
-
-    /**
-     * The common columns for messages table
-     */
-    public interface MessageColumns {
-        /**
-         * The thread_id column stores the contact id of the contact the message belongs to.
-         * For groupchat messages, the thread_id stores the group id, which is the contact id
-         * of the temporary group contact created for the groupchat. So there should be no
-         * collision between groupchat message thread id and regular message thread id.
-         */
-        String THREAD_ID = "thread_id";
-
-        /**
-         * The nickname. This is used for groupchat messages to indicate the participant's
-         * nickname. For non groupchat messages, this field should be left empty.
-         */
-        String NICKNAME = "nickname";
-
-        /**
-         * The body
-         * <P>Type: TEXT</P>
-         */
-        String BODY = "body";
-
-        /**
-         * The date this message is sent or received. This represents the display date for
-         * the message.
-         * <P>Type: INTEGER</P>
-         */
-        String DATE = "date";
-
-        /**
-         * The real date for this message. While 'date' can be modified by the client
-         * to account for server time skew, the real_date is the original timestamp set
-         * by the server for incoming messages.
-         * <P>Type: INTEGER</P>
-         */
-        String REAL_DATE = "real_date";
-
-        /**
-         * Message Type, see {@link MessageType}
-         * <P>Type: INTEGER</P>
-         */
-        String TYPE = "type";
-
-        /**
-         * Error Code: 0 means no error.
-         * <P>Type: INTEGER </P>
-         */
-        String ERROR_CODE = "err_code";
-
-        /**
-         * Error Message
-         * <P>Type: TEXT</P>
-         */
-        String ERROR_MESSAGE = "err_msg";
-
-        /**
-         * Packet ID, auto assigned by the GTalkService for outgoing messages or the
-         * GTalk server for incoming messages. The packet id field is optional for messages,
-         * so it could be null.
-         * <P>Type: STRING</P>
-         */
-        String PACKET_ID = "packet_id";
-
-        /**
-         * Is groupchat message or not
-         * <P>Type: INTEGER</P>
-         */
-        String IS_GROUP_CHAT = "is_muc";
-
-        /**
-         * A hint that the UI should show the sent time of this message
-         * <P>Type: INTEGER</P>
-         */
-        String DISPLAY_SENT_TIME = "show_ts";
-
-        /*
-         * For rows which have been consolidated this is the row id of the
-         * row into which they have been consolidated.
-         */
-        String CONSOLIDATION_KEY = "consolidation_key";
-    }
-
-    /**
-     * This table contains messages.
-     */
-    public static final class Messages implements BaseColumns, MessageColumns {
-        /**
-         * no public constructor since this is a utility class
-         */
-        private Messages() {}
-
-        /**
-         * Gets the Uri to query messages by thread id.
-         *
-         * @param threadId the thread id of the message.
-         * @return the Uri
-         */
-        public static final Uri getContentUriByThreadId(long threadId) {
-            Uri.Builder builder = CONTENT_URI_MESSAGES_BY_THREAD_ID.buildUpon();
-            ContentUris.appendId(builder, threadId);
-            return builder.build();
-        }
-
-        /**
-         * @deprecated
-         *
-         * Gets the Uri to query messages by account and contact.
-         *
-         * @param accountId the account id of the contact.
-         * @param username the user name of the contact.
-         * @return the Uri
-         */
-        public static final Uri getContentUriByContact(long accountId, String username) {
-            Uri.Builder builder = CONTENT_URI_MESSAGES_BY_ACCOUNT_AND_CONTACT.buildUpon();
-            ContentUris.appendId(builder, accountId);
-            builder.appendPath(username);
-            return builder.build();
-        }
-
-        /**
-         * Gets the Uri to query messages by provider.
-         *
-         * @param providerId the service provider id.
-         * @return the Uri
-         */
-        public static final Uri getContentUriByProvider(long providerId) {
-            Uri.Builder builder = CONTENT_URI_MESSAGES_BY_PROVIDER.buildUpon();
-            ContentUris.appendId(builder, providerId);
-            return builder.build();
-        }
-
-        /**
-         * Gets the Uri to query off the record messages by account.
-         *
-         * @param accountId the account id.
-         * @return the Uri
-         */
-        public static final Uri getContentUriByAccount(long accountId) {
-            Uri.Builder builder = CONTENT_URI_BY_ACCOUNT.buildUpon();
-            ContentUris.appendId(builder, accountId);
-            return builder.build();
-        }
-
-        /**
-         * Gets the Uri to query off the record messages by thread id.
-         *
-         * @param threadId the thread id of the message.
-         * @return the Uri
-         */
-        public static final Uri getOtrMessagesContentUriByThreadId(long threadId) {
-            Uri.Builder builder = OTR_MESSAGES_CONTENT_URI_BY_THREAD_ID.buildUpon();
-            ContentUris.appendId(builder, threadId);
-            return builder.build();
-        }
-
-        /**
-         * @deprecated
-         *
-         * Gets the Uri to query off the record messages by account and contact.
-         *
-         * @param accountId the account id of the contact.
-         * @param username the user name of the contact.
-         * @return the Uri
-         */
-        public static final Uri getOtrMessagesContentUriByContact(long accountId, String username) {
-            Uri.Builder builder = OTR_MESSAGES_CONTENT_URI_BY_ACCOUNT_AND_CONTACT.buildUpon();
-            ContentUris.appendId(builder, accountId);
-            builder.appendPath(username);
-            return builder.build();
-        }
-
-        /**
-         * Gets the Uri to query off the record messages by provider.
-         *
-         * @param providerId the service provider id.
-         * @return the Uri
-         */
-        public static final Uri getOtrMessagesContentUriByProvider(long providerId) {
-            Uri.Builder builder = OTR_MESSAGES_CONTENT_URI_BY_PROVIDER.buildUpon();
-            ContentUris.appendId(builder, providerId);
-            return builder.build();
-        }
-
-        /**
-         * Gets the Uri to query off the record messages by account.
-         *
-         * @param accountId the account id.
-         * @return the Uri
-         */
-        public static final Uri getOtrMessagesContentUriByAccount(long accountId) {
-            Uri.Builder builder = OTR_MESSAGES_CONTENT_URI_BY_ACCOUNT.buildUpon();
-            ContentUris.appendId(builder, accountId);
-            return builder.build();
-        }
-
-        /**
-         * The content:// style URL for this table
-         */
-        public static final Uri CONTENT_URI =
-                Uri.parse("content://com.google.android.providers.talk/messages");
-
-        /**
-         * The content:// style URL for messages by thread id
-         */
-        public static final Uri CONTENT_URI_MESSAGES_BY_THREAD_ID =
-                Uri.parse("content://com.google.android.providers.talk/messagesByThreadId");
-
-        /**
-         * The content:// style URL for messages by account and contact
-         */
-        public static final Uri CONTENT_URI_MESSAGES_BY_ACCOUNT_AND_CONTACT =
-                Uri.parse("content://com.google.android.providers.talk/messagesByAcctAndContact");
-
-        /**
-         * The content:// style URL for messages by provider
-         */
-        public static final Uri CONTENT_URI_MESSAGES_BY_PROVIDER =
-                Uri.parse("content://com.google.android.providers.talk/messagesByProvider");
-
-        /**
-         * The content:// style URL for messages by account
-         */
-        public static final Uri CONTENT_URI_BY_ACCOUNT =
-                Uri.parse("content://com.google.android.providers.talk/messagesByAccount");
-
-        /**
-         * The content:// style url for off the record messages
-         */
-        public static final Uri OTR_MESSAGES_CONTENT_URI =
-                Uri.parse("content://com.google.android.providers.talk/otrMessages");
-
-        /**
-         * The content:// style url for off the record messages by thread id
-         */
-        public static final Uri OTR_MESSAGES_CONTENT_URI_BY_THREAD_ID =
-                Uri.parse("content://com.google.android.providers.talk/otrMessagesByThreadId");
-
-        /**
-         * The content:// style url for off the record messages by account and contact
-         */
-        public static final Uri OTR_MESSAGES_CONTENT_URI_BY_ACCOUNT_AND_CONTACT =
-                Uri.parse("content://com.google.android.providers.talk/otrMessagesByAcctAndContact");
-
-        /**
-         * The content:// style URL for off the record messages by provider
-         */
-        public static final Uri OTR_MESSAGES_CONTENT_URI_BY_PROVIDER =
-                Uri.parse("content://com.google.android.providers.talk/otrMessagesByProvider");
-
-        /**
-         * The content:// style URL for off the record messages by account
-         */
-        public static final Uri OTR_MESSAGES_CONTENT_URI_BY_ACCOUNT =
-                Uri.parse("content://com.google.android.providers.talk/otrMessagesByAccount");
-
-        /**
-         * The MIME type of {@link #CONTENT_URI} providing a directory of
-         * people.
-         */
-        public static final String CONTENT_TYPE =
-                "vnd.android.cursor.dir/gtalk-messages";
-
-        /**
-         * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
-         * person.
-         */
-        public static final String CONTENT_ITEM_TYPE =
-                "vnd.android.cursor.item/gtalk-messages";
-
-        /**
-         * The default sort order for this table
-         */
-        public static final String DEFAULT_SORT_ORDER = "date ASC";
-
-        /**
-         * The "contact" column. This is not a real column in the messages table, but a
-         * temoprary column created when querying for messages (joined with the contacts table)
-         */
-        public static final String CONTACT = "contact";
-    }
-
-    /**
-     * Columns for the GroupMember table.
-     */
-    public interface GroupMemberColumns {
-        /**
-         * The id of the group this member belongs to.
-         * <p>Type: INTEGER</p>
-         */
-        String GROUP = "groupId";
-
-        /**
-         * The full name of this member.
-         * <p>Type: TEXT</p>
-         */
-        String USERNAME = "username";
-
-        /**
-         * The nick name of this member.
-         * <p>Type: TEXT</p>
-         */
-        String NICKNAME = "nickname";
-    }
-
-    public final static class GroupMembers implements GroupMemberColumns {
-        private GroupMembers(){}
-
-        public static final Uri CONTENT_URI =
-            Uri.parse("content://com.google.android.providers.talk/groupMembers");
-
-        /**
-         * The MIME type of {@link #CONTENT_URI} providing a directory of
-         * group members.
-         */
-        public static final String CONTENT_TYPE =
-            "vnd.android.cursor.dir/gtalk-groupMembers";
-
-        /**
-         * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
-         * group member.
-         */
-        public static final String CONTENT_ITEM_TYPE =
-                "vnd.android.cursor.item/gtalk-groupMembers";
-    }
-
-    /**
-     * Columns from the Invitation table.
-     */
-    public interface InvitationColumns {
-        /**
-         * The provider id.
-         * <p>Type: INTEGER</p>
-         */
-        String PROVIDER = "providerId";
-
-        /**
-         * The account id.
-         * <p>Type: INTEGER</p>
-         */
-        String ACCOUNT = "accountId";
-
-        /**
-         * The invitation id.
-         * <p>Type: TEXT</p>
-         */
-        String INVITE_ID = "inviteId";
-
-        /**
-         * The name of the sender of the invitation.
-         * <p>Type: TEXT</p>
-         */
-        String SENDER = "sender";
-
-        /**
-         * The name of the group which the sender invite you to join.
-         * <p>Type: TEXT</p>
-         */
-        String GROUP_NAME = "groupName";
-
-        /**
-         * A note
-         * <p>Type: TEXT</p>
-         */
-        String NOTE = "note";
-
-        /**
-         * The current status of the invitation.
-         * <p>Type: TEXT</p>
-         */
-        String STATUS = "status";
-
-        int STATUS_PENDING = 0;
-        int STATUS_ACCEPTED = 1;
-        int STATUS_REJECTED = 2;
-    }
-
-    /**
-     * This table contains the invitations received from others.
-     */
-    public final static class Invitation implements InvitationColumns,
-            BaseColumns {
-        private Invitation() {
-        }
-
-        /**
-         * The content:// style URL for this table
-         */
-        public static final Uri CONTENT_URI =
-            Uri.parse("content://com.google.android.providers.talk/invitations");
-
-        /**
-         * The MIME type of {@link #CONTENT_URI} providing a directory of
-         * invitations.
-         */
-        public static final String CONTENT_TYPE =
-            "vnd.android.cursor.dir/gtalk-invitations";
-
-        /**
-         * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
-         * invitation.
-         */
-        public static final String CONTENT_ITEM_TYPE =
-                "vnd.android.cursor.item/gtalk-invitations";
-    }
-
-    /**
-     * Columns from the Avatars table
-     */
-    public interface AvatarsColumns {
-        /**
-         * The contact this avatar belongs to
-         * <P>Type: TEXT</P>
-         */
-        String CONTACT = "contact";
-
-        String PROVIDER = "provider_id";
-
-        String ACCOUNT = "account_id";
-
-        /**
-         * The hash of the image data
-         * <P>Type: TEXT</P>
-         */
-        String HASH = "hash";
-
-        /**
-         * raw image data
-         * <P>Type: BLOB</P>
-         */
-        String DATA = "data";
-    }
-
-    /**
-     * This table contains avatars.
-     */
-    public static final class Avatars implements BaseColumns, AvatarsColumns {
-        /**
-         * no public constructor since this is a utility class
-         */
-        private Avatars() {}
-
-        /**
-         * The content:// style URL for this table
-         */
-        public static final Uri CONTENT_URI =
-            Uri.parse("content://com.google.android.providers.talk/avatars");
-
-        /**
-         * The content:// style URL for avatars by provider, account and contact
-         */
-        public static final Uri CONTENT_URI_AVATARS_BY =
-                Uri.parse("content://com.google.android.providers.talk/avatarsBy");
-
-        /**
-         * The MIME type of {@link #CONTENT_URI} providing the avatars
-         */
-        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/gtalk-avatars";
-
-        /**
-         * The MIME type of a {@link #CONTENT_URI}
-         */
-        public static final String CONTENT_ITEM_TYPE =
-                "vnd.android.cursor.item/gtalk-avatars";
-
-        /**
-         * The default sort order for this table
-         */
-        public static final String DEFAULT_SORT_ORDER = "contact ASC";
-
-    }
-
-    /**
-     * Common presence columns shared between the IM and contacts presence tables
-     */
-    public interface CommonPresenceColumns {
-        /**
-         * The priority, an integer, used by XMPP presence
-         * <P>Type: INTEGER</P>
-         */
-        String PRIORITY = "priority";
-
-        /**
-         * The server defined status.
-         * <P>Type: INTEGER (one of the values below)</P>
-         */
-        String PRESENCE_STATUS = "mode";
-
-        /**
-         * Presence Status definition
-         */
-        int OFFLINE = 0;
-        int INVISIBLE = 1;
-        int AWAY = 2;
-        int IDLE = 3;
-        int DO_NOT_DISTURB = 4;
-        int AVAILABLE = 5;
-
-        /**
-         * The user defined status line.
-         * <P>Type: TEXT</P>
-         */
-        String PRESENCE_CUSTOM_STATUS = "status";
-    }
-
-    /**
-     * Columns from the Presence table.
-     */
-    public interface PresenceColumns extends CommonPresenceColumns {
-        /**
-         * The contact id
-         * <P>Type: INTEGER</P>
-         */
-        String CONTACT_ID = "contact_id";
-
-        /**
-         * The contact's JID resource, only relevant for XMPP contact
-         * <P>Type: TEXT</P>
-         */
-        String JID_RESOURCE = "jid_resource";
-
-        /**
-         * The contact's client type
-         */
-        String CLIENT_TYPE = "client_type";
-
-        /**
-         * client type definitions
-         */
-        int CLIENT_TYPE_DEFAULT = 0;
-        int CLIENT_TYPE_MOBILE = 1;
-        int CLIENT_TYPE_ANDROID = 2;
-    }
-
-    /**
-     * Contains presence infomation for contacts.
-     */
-    public static final class Presence implements BaseColumns, PresenceColumns {
-        /**
-         * The content:// style URL for this table
-         */
-        public static final Uri CONTENT_URI =
-            Uri.parse("content://com.google.android.providers.talk/presence");
-
-        /**
-         * The content URL for Talk presences for an account
-         */
-        public static final Uri CONTENT_URI_BY_ACCOUNT =
-            Uri.parse("content://com.google.android.providers.talk/presence/account");
-
-        /**
-         * The content:// style URL for operations on bulk contacts
-         */
-        public static final Uri BULK_CONTENT_URI =
-            Uri.parse("content://com.google.android.providers.talk/bulk_presence");
-
-        /**
-         * The content:// style URL for seeding presences for a given account id.
-         */
-        public static final Uri SEED_PRESENCE_BY_ACCOUNT_CONTENT_URI =
-                Uri.parse("content://com.google.android.providers.talk/seed_presence/account");
-
-        /**
-         * The MIME type of a {@link #CONTENT_URI} providing a directory of presence
-         */
-        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/gtalk-presence";
-
-        /**
-         * The default sort order for this table
-         */
-        public static final String DEFAULT_SORT_ORDER = "mode DESC";
-    }
-
-    /**
-     * Columns from the Chats table.
-     */
-    public interface ChatsColumns {
-        /**
-         * The contact ID this chat belongs to. The value is a long.
-         * <P>Type: INT</P>
-         */
-        String CONTACT_ID = "contact_id";
-
-        /**
-         * The GTalk JID resource. The value is a string.
-         * <P>Type: TEXT</P>
-         */
-        String JID_RESOURCE = "jid_resource";
-
-        /**
-         * Whether this is a groupchat or not.
-         * <P>Type: INT</P>
-         */
-        String GROUP_CHAT = "groupchat";
-
-        /**
-         * The last unread message. This both indicates that there is an
-         * unread message, and what the message is.
-         * <P>Type: TEXT</P>
-         */
-        String LAST_UNREAD_MESSAGE = "last_unread_message";
-
-        /**
-         * The last message timestamp
-         * <P>Type: INT</P>
-         */
-        String LAST_MESSAGE_DATE = "last_message_date";
-
-        /**
-         * A message that is being composed.  This indicates that there was a
-         * message being composed when the chat screen was shutdown, and what the
-         * message is.
-         * <P>Type: TEXT</P>
-         */
-        String UNSENT_COMPOSED_MESSAGE = "unsent_composed_message";
-
-        /**
-         * A value from 0-9 indicating which quick-switch chat screen slot this
-         * chat is occupying.  If none (for instance, this is the 12th active chat)
-         * then the value is -1.
-         * <P>Type: INT</P>
-         */
-        String SHORTCUT = "shortcut";
-    }
-
-    /**
-     * Contains ongoing chat sessions.
-     */
-    public static final class Chats implements BaseColumns, ChatsColumns {
-        /**
-         * no public constructor since this is a utility class
-         */
-        private Chats() {}
-
-        /**
-         * The content:// style URL for this table
-         */
-        public static final Uri CONTENT_URI =
-            Uri.parse("content://com.google.android.providers.talk/chats");
-
-        /**
-         * The content URL for all chats that belong to the account
-         */
-        public static final Uri CONTENT_URI_BY_ACCOUNT =
-            Uri.parse("content://com.google.android.providers.talk/chats/account");
-
-        /**
-         * The MIME type of {@link #CONTENT_URI} providing a directory of chats.
-         */
-        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/gtalk-chats";
-
-        /**
-         * The MIME type of a {@link #CONTENT_URI} subdirectory of a single chat.
-         */
-        public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/gtalk-chats";
-
-        /**
-         * The default sort order for this table
-         */
-        public static final String DEFAULT_SORT_ORDER = "last_message_date ASC";
-    }
-
-    /**
-     * Columns from session cookies table. Used for IMPS.
-     */
-    public static interface SessionCookiesColumns {
-        String NAME = "name";
-        String VALUE = "value";
-        String PROVIDER = "provider";
-        String ACCOUNT = "account";
-    }
-
-    /**
-     * Contains IMPS session cookies.
-     */
-    public static class SessionCookies implements SessionCookiesColumns, BaseColumns {
-        private SessionCookies() {
-        }
-
-        /**
-         * The content:// style URI for this table
-         */
-        public static final Uri CONTENT_URI =
-            Uri.parse("content://com.google.android.providers.talk/sessionCookies");
-
-        /**
-         * The content:// style URL for session cookies by provider and account
-         */
-        public static final Uri CONTENT_URI_SESSION_COOKIES_BY =
-            Uri.parse("content://com.google.android.providers.talk/sessionCookiesBy");
-
-        /**
-         * The MIME type of {@link #CONTENT_URI} providing a directory of
-         * people.
-         */
-        public static final String CONTENT_TYPE = "vnd.android-dir/gtalk-sessionCookies";
-    }
-
-    /**
-     * Columns from ProviderSettings table
-     */
-    public static interface ProviderSettingsColumns {
-         /**
-          * The id in database of the related provider
-          *
-          * <P>Type: INT</P>
-          */
-        String PROVIDER = "provider";
-
-        /**
-         * The name of the setting
-         * <P>Type: TEXT</P>
-         */
-        String NAME = "name";
-
-        /**
-         * The value of the setting
-         * <P>Type: TEXT</P>
-         */
-        String VALUE = "value";
-    }
-
-    public static class ProviderSettings implements ProviderSettingsColumns {
-        private ProviderSettings() {
-        }
-
-        /**
-         * The content:// style URI for this table
-         */
-        public static final Uri CONTENT_URI =
-                Uri.parse("content://com.google.android.providers.talk/providerSettings");
-
-        /**
-         * The MIME type of {@link #CONTENT_URI} providing provider settings
-         */
-        public static final String CONTENT_TYPE = "vnd.android-dir/gtalk-providerSettings";
-
-        /**
-         * A boolean value to indicate whether this provider should show the offline contacts
-         */
-        public static final String SHOW_OFFLINE_CONTACTS = "show_offline_contacts";
-
-        /** controls whether or not the GTalk service automatically connect to server. */
-        public static final String SETTING_AUTOMATICALLY_CONNECT_GTALK = "gtalk_auto_connect";
-
-        /** controls whether or not the GTalk service will be automatically started after boot */
-        public static final String SETTING_AUTOMATICALLY_START_SERVICE = "auto_start_service";
-
-        /** controls whether or not the offline contacts will be hided */
-        public static final String SETTING_HIDE_OFFLINE_CONTACTS = "hide_offline_contacts";
-
-        /** controls whether or not enable the GTalk notification */
-        public static final String SETTING_ENABLE_NOTIFICATION = "enable_notification";
-
-        /** specifies whether or not to vibrate */
-        public static final String SETTING_VIBRATE = "vibrate";
-
-        /** specifies the Uri string of the ringtone */
-        public static final String SETTING_RINGTONE = "ringtone";
-
-        /** specifies the Uri of the default ringtone */
-        public static final String SETTING_RINGTONE_DEFAULT =
-                "content://settings/system/notification_sound";
-
-        /** specifies whether or not to show mobile indicator to friends */
-        public static final String SETTING_SHOW_MOBILE_INDICATOR = "mobile_indicator";
-
-        /** specifies whether or not to show as away when device is idle */
-        public static final String SETTING_SHOW_AWAY_ON_IDLE = "show_away_on_idle";
-
-        /** specifies whether or not to upload heartbeat stat upon login */
-        public static final String SETTING_UPLOAD_HEARTBEAT_STAT = "upload_heartbeat_stat";
-
-        /** specifies the last heartbeat interval received from the server */
-        public static final String SETTING_HEARTBEAT_INTERVAL = "heartbeat_interval";
-
-        /** specifiy the JID resource used for Google Talk connection */
-        public static final String SETTING_JID_RESOURCE = "jid_resource";
-
-        /**
-         * Used for reliable message queue (RMQ). This is for storing the last rmq id received
-         * from the GTalk server
-         */
-        public static final String LAST_RMQ_RECEIVED = "last_rmq_rec";
-
-        /**
-         * Query the settings of the provider specified by id
-         *
-         * @param cr
-         *            the relative content resolver
-         * @param providerId
-         *            the specified id of provider
-         * @return a HashMap which contains all the settings for the specified
-         *         provider
-         */
-        public static HashMap<String, String> queryProviderSettings(ContentResolver cr,
-                long providerId) {
-            HashMap<String, String> settings = new HashMap<String, String>();
-
-            String[] projection = { NAME, VALUE };
-            Cursor c = cr.query(ContentUris.withAppendedId(CONTENT_URI, providerId), projection, null, null, null);
-            if (c == null) {
-                return null;
-            }
-
-            while(c.moveToNext()) {
-                settings.put(c.getString(0), c.getString(1));
-            }
-
-            c.close();
-
-            return settings;
-        }
-
-        /**
-         * Get the string value of setting which is specified by provider id and the setting name.
-         *
-         * @param cr The ContentResolver to use to access the settings table.
-         * @param providerId The id of the provider.
-         * @param settingName The name of the setting.
-         * @return The value of the setting if the setting exist, otherwise return null.
-         */
-        public static String getStringValue(ContentResolver cr, long providerId, String settingName) {
-            String ret = null;
-            Cursor c = getSettingValue(cr, providerId, settingName);
-            if (c != null) {
-                ret = c.getString(0);
-                c.close();
-            }
-
-            return ret;
-        }
-
-        /**
-         * Get the boolean value of setting which is specified by provider id and the setting name.
-         *
-         * @param cr The ContentResolver to use to access the settings table.
-         * @param providerId The id of the provider.
-         * @param settingName The name of the setting.
-         * @return The value of the setting if the setting exist, otherwise return false.
-         */
-        public static boolean getBooleanValue(ContentResolver cr, long providerId, String settingName) {
-            boolean ret = false;
-            Cursor c = getSettingValue(cr, providerId, settingName);
-            if (c != null) {
-                ret = c.getInt(0) != 0;
-                c.close();
-            }
-            return ret;
-        }
-
-        private static Cursor getSettingValue(ContentResolver cr, long providerId, String settingName) {
-            Cursor c = cr.query(ContentUris.withAppendedId(CONTENT_URI, providerId), new String[]{VALUE}, NAME + "=?",
-                    new String[]{settingName}, null);
-            if (c != null) {
-                if (!c.moveToFirst()) {
-                    c.close();
-                    return null;
-                }
-            }
-            return c;
-        }
-
-        /**
-         * Save a long value of setting in the table providerSetting.
-         *
-         * @param cr The ContentProvider used to access the providerSetting table.
-         * @param providerId The id of the provider.
-         * @param name The name of the setting.
-         * @param value The value of the setting.
-         */
-        public static void putLongValue(ContentResolver cr, long providerId, String name,
-                long value) {
-            ContentValues v = new ContentValues(3);
-            v.put(PROVIDER, providerId);
-            v.put(NAME, name);
-            v.put(VALUE, value);
-
-            cr.insert(CONTENT_URI, v);
-        }
-
-        /**
-         * Save a boolean value of setting in the table providerSetting.
-         *
-         * @param cr The ContentProvider used to access the providerSetting table.
-         * @param providerId The id of the provider.
-         * @param name The name of the setting.
-         * @param value The value of the setting.
-         */
-        public static void putBooleanValue(ContentResolver cr, long providerId, String name,
-                boolean value) {
-            ContentValues v = new ContentValues(3);
-            v.put(PROVIDER, providerId);
-            v.put(NAME, name);
-            v.put(VALUE, Boolean.toString(value));
-
-            cr.insert(CONTENT_URI, v);
-        }
-
-        /**
-         * Save a string value of setting in the table providerSetting.
-         *
-         * @param cr The ContentProvider used to access the providerSetting table.
-         * @param providerId The id of the provider.
-         * @param name The name of the setting.
-         * @param value The value of the setting.
-         */
-        public static void putStringValue(ContentResolver cr, long providerId, String name,
-                String value) {
-            ContentValues v = new ContentValues(3);
-            v.put(PROVIDER, providerId);
-            v.put(NAME, name);
-            v.put(VALUE, value);
-
-            cr.insert(CONTENT_URI, v);
-        }
-
-        /**
-         * A convenience method to set whether or not the GTalk service should be started
-         * automatically.
-         *
-         * @param contentResolver The ContentResolver to use to access the settings table
-         * @param autoConnect Whether the GTalk service should be started automatically.
-         */
-        public static void setAutomaticallyConnectGTalk(ContentResolver contentResolver,
-                long providerId, boolean autoConnect) {
-            putBooleanValue(contentResolver, providerId, SETTING_AUTOMATICALLY_CONNECT_GTALK,
-                    autoConnect);
-        }
-
-        /**
-         * A convenience method to set whether or not the offline contacts should be hided
-         *
-         * @param contentResolver The ContentResolver to use to access the setting table
-         * @param hideOfflineContacts Whether the offline contacts should be hided
-         */
-        public static void setHideOfflineContacts(ContentResolver contentResolver,
-                long providerId, boolean hideOfflineContacts) {
-            putBooleanValue(contentResolver, providerId, SETTING_HIDE_OFFLINE_CONTACTS,
-                    hideOfflineContacts);
-        }
-
-        /**
-         * A convenience method to set whether or not enable the GTalk notification.
-         *
-         * @param contentResolver The ContentResolver to use to access the setting table.
-         * @param enable Whether enable the GTalk notification
-         */
-        public static void setEnableNotification(ContentResolver contentResolver, long providerId,
-                boolean enable) {
-            putBooleanValue(contentResolver, providerId, SETTING_ENABLE_NOTIFICATION, enable);
-        }
-
-        /**
-         * A convenience method to set whether or not to vibrate.
-         *
-         * @param contentResolver The ContentResolver to use to access the setting table.
-         * @param vibrate Whether or not to vibrate
-         */
-        public static void setVibrate(ContentResolver contentResolver, long providerId,
-                boolean vibrate) {
-            putBooleanValue(contentResolver, providerId, SETTING_VIBRATE, vibrate);
-        }
-
-        /**
-         * A convenience method to set the Uri String of the ringtone.
-         *
-         * @param contentResolver The ContentResolver to use to access the setting table.
-         * @param ringtoneUri The Uri String of the ringtone to be set.
-         */
-        public static void setRingtoneURI(ContentResolver contentResolver, long providerId,
-                String ringtoneUri) {
-            putStringValue(contentResolver, providerId, SETTING_RINGTONE, ringtoneUri);
-        }
-
-        /**
-         * A convenience method to set whether or not to show mobile indicator.
-         *
-         * @param contentResolver The ContentResolver to use to access the setting table.
-         * @param showMobileIndicator Whether or not to show mobile indicator.
-         */
-        public static void setShowMobileIndicator(ContentResolver contentResolver, long providerId,
-                boolean showMobileIndicator) {
-            putBooleanValue(contentResolver, providerId, SETTING_SHOW_MOBILE_INDICATOR,
-                    showMobileIndicator);
-        }
-
-        /**
-         * A convenience method to set whether or not to show as away when device is idle.
-         *
-         * @param contentResolver The ContentResolver to use to access the setting table.
-         * @param showAway Whether or not to show as away when device is idle.
-         */
-        public static void setShowAwayOnIdle(ContentResolver contentResolver,
-                long providerId, boolean showAway) {
-            putBooleanValue(contentResolver, providerId, SETTING_SHOW_AWAY_ON_IDLE, showAway);
-        }
-
-        /**
-         * A convenience method to set whether or not to upload heartbeat stat.
-         *
-         * @param contentResolver The ContentResolver to use to access the setting table.
-         * @param uploadStat Whether or not to upload heartbeat stat.
-         */
-        public static void setUploadHeartbeatStat(ContentResolver contentResolver,
-                long providerId, boolean uploadStat) {
-            putBooleanValue(contentResolver, providerId, SETTING_UPLOAD_HEARTBEAT_STAT, uploadStat);
-        }
-
-        /**
-         * A convenience method to set the heartbeat interval last received from the server.
-         *
-         * @param contentResolver The ContentResolver to use to access the setting table.
-         * @param interval The heartbeat interval last received from the server.
-         */
-        public static void setHeartbeatInterval(ContentResolver contentResolver,
-                long providerId, long interval) {
-            putLongValue(contentResolver, providerId, SETTING_HEARTBEAT_INTERVAL, interval);
-        }
-
-        /**
-         * A convenience method to set the jid resource.
-         */
-        public static void setJidResource(ContentResolver contentResolver,
-                                          long providerId, String jidResource) {
-            putStringValue(contentResolver, providerId, SETTING_JID_RESOURCE, jidResource);
-        }
-
-        public static class QueryMap extends ContentQueryMap {
-            private ContentResolver mContentResolver;
-            private long mProviderId;
-
-            public QueryMap(ContentResolver contentResolver, long providerId, boolean keepUpdated,
-                    Handler handlerForUpdateNotifications) {
-                super(contentResolver.query(CONTENT_URI,
-                            new String[] {NAME,VALUE},
-                            PROVIDER + "=" + providerId,
-                            null, // no selection args
-                            null), // no sort order
-                        NAME, keepUpdated, handlerForUpdateNotifications);
-                mContentResolver = contentResolver;
-                mProviderId = providerId;
-            }
-
-            /**
-             * Set if the GTalk service should automatically connect to server.
-             *
-             * @param autoConnect if the GTalk service should auto connect to server.
-             */
-            public void setAutomaticallyConnectToGTalkServer(boolean autoConnect) {
-                ProviderSettings.setAutomaticallyConnectGTalk(mContentResolver, mProviderId,
-                        autoConnect);
-            }
-
-            /**
-             * Check if the GTalk service should automatically connect to server.
-             * @return if the GTalk service should automatically connect to server.
-             */
-            public boolean getAutomaticallyConnectToGTalkServer() {
-                return getBoolean(SETTING_AUTOMATICALLY_CONNECT_GTALK,
-                        true /* default to automatically sign in */);
-            }
-
-            /**
-             * Set whether or not the offline contacts should be hided.
-             *
-             * @param hideOfflineContacts Whether or not the offline contacts should be hided.
-             */
-            public void setHideOfflineContacts(boolean hideOfflineContacts) {
-                ProviderSettings.setHideOfflineContacts(mContentResolver, mProviderId,
-                        hideOfflineContacts);
-            }
-
-            /**
-             * Check if the offline contacts should be hided.
-             *
-             * @return Whether or not the offline contacts should be hided.
-             */
-            public boolean getHideOfflineContacts() {
-                return getBoolean(SETTING_HIDE_OFFLINE_CONTACTS,
-                        false/* by default not hide the offline contacts*/);
-            }
-
-            /**
-             * Set whether or not enable the GTalk notification.
-             *
-             * @param enable Whether or not enable the GTalk notification.
-             */
-            public void setEnableNotification(boolean enable) {
-                ProviderSettings.setEnableNotification(mContentResolver, mProviderId, enable);
-            }
-
-            /**
-             * Check if the GTalk notification is enabled.
-             *
-             * @return Whether or not enable the GTalk notification.
-             */
-            public boolean getEnableNotification() {
-                return getBoolean(SETTING_ENABLE_NOTIFICATION,
-                        true/* by default enable the notification */);
-            }
-
-            /**
-             * Set whether or not to vibrate on GTalk notification.
-             *
-             * @param vibrate Whether or not to vibrate.
-             */
-            public void setVibrate(boolean vibrate) {
-                ProviderSettings.setVibrate(mContentResolver, mProviderId, vibrate);
-            }
-
-            /**
-             * Gets whether or not to vibrate on GTalk notification.
-             *
-             * @return Whether or not to vibrate.
-             */
-            public boolean getVibrate() {
-                return getBoolean(SETTING_VIBRATE, false /* by default disable vibrate */);
-            }
-
-            /**
-             * Set the Uri for the ringtone.
-             *
-             * @param ringtoneUri The Uri of the ringtone to be set.
-             */
-            public void setRingtoneURI(String ringtoneUri) {
-                ProviderSettings.setRingtoneURI(mContentResolver, mProviderId, ringtoneUri);
-            }
-
-            /**
-             * Get the Uri String of the current ringtone.
-             *
-             * @return The Uri String of the current ringtone.
-             */
-            public String getRingtoneURI() {
-                return getString(SETTING_RINGTONE, SETTING_RINGTONE_DEFAULT);
-            }
-
-            /**
-             * Set whether or not to show mobile indicator to friends.
-             *
-             * @param showMobile whether or not to show mobile indicator.
-             */
-            public void setShowMobileIndicator(boolean showMobile) {
-                ProviderSettings.setShowMobileIndicator(mContentResolver, mProviderId, showMobile);
-            }
-
-            /**
-             * Gets whether or not to show mobile indicator.
-             *
-             * @return Whether or not to show mobile indicator.
-             */
-            public boolean getShowMobileIndicator() {
-                return getBoolean(SETTING_SHOW_MOBILE_INDICATOR,
-                        true /* by default show mobile indicator */);
-            }
-
-            /**
-             * Set whether or not to show as away when device is idle.
-             *
-             * @param showAway whether or not to show as away when device is idle.
-             */
-            public void setShowAwayOnIdle(boolean showAway) {
-                ProviderSettings.setShowAwayOnIdle(mContentResolver, mProviderId, showAway);
-            }
-
-            /**
-             * Get whether or not to show as away when device is idle.
-             *
-             * @return Whether or not to show as away when device is idle.
-             */
-            public boolean getShowAwayOnIdle() {
-                return getBoolean(SETTING_SHOW_AWAY_ON_IDLE,
-                        true /* by default show as away on idle*/);
-            }
-
-            /**
-             * Set whether or not to upload heartbeat stat.
-             *
-             * @param uploadStat whether or not to upload heartbeat stat.
-             */
-            public void setUploadHeartbeatStat(boolean uploadStat) {
-                ProviderSettings.setUploadHeartbeatStat(mContentResolver, mProviderId, uploadStat);
-            }
-
-            /**
-             * Get whether or not to upload heartbeat stat.
-             *
-             * @return Whether or not to upload heartbeat stat.
-             */
-            public boolean getUploadHeartbeatStat() {
-                return getBoolean(SETTING_UPLOAD_HEARTBEAT_STAT,
-                        false /* by default do not upload */);
-            }
-
-            /**
-             * Set the last received heartbeat interval from the server.
-             *
-             * @param interval the last received heartbeat interval from the server.
-             */
-            public void setHeartbeatInterval(long interval) {
-                ProviderSettings.setHeartbeatInterval(mContentResolver, mProviderId, interval);
-            }
-
-            /**
-             * Get the last received heartbeat interval from the server.
-             *
-             * @return the last received heartbeat interval from the server.
-             */
-            public long getHeartbeatInterval() {
-                return getLong(SETTING_HEARTBEAT_INTERVAL, 0L /* an invalid default interval */);
-            }
-
-            /**
-             * Set the JID resource.
-             *
-             * @param jidResource the jid resource to be stored.
-             */
-            public void setJidResource(String jidResource) {
-                ProviderSettings.setJidResource(mContentResolver, mProviderId, jidResource);
-            }
-            /**
-             * Get the JID resource used for the Google Talk connection
-             *
-             * @return the JID resource stored.
-             */
-            public String getJidResource() {
-                return getString(SETTING_JID_RESOURCE, null);
-            }
-
-            /**
-             * Convenience function for retrieving a single settings value
-             * as a boolean.
-             *
-             * @param name The name of the setting to retrieve.
-             * @param def Value to return if the setting is not defined.
-             * @return The setting's current value, or 'def' if it is not defined.
-             */
-            private boolean getBoolean(String name, boolean def) {
-                ContentValues values = getValues(name);
-                return values != null ? values.getAsBoolean(VALUE) : def;
-            }
-
-            /**
-             * Convenience function for retrieving a single settings value
-             * as a String.
-             *
-             * @param name The name of the setting to retrieve.
-             * @param def The value to return if the setting is not defined.
-             * @return The setting's current value or 'def' if it is not defined.
-             */
-            private String getString(String name, String def) {
-                ContentValues values = getValues(name);
-                return values != null ? values.getAsString(VALUE) : def;
-            }
-
-            /**
-             * Convenience function for retrieving a single settings value
-             * as an Integer.
-             *
-             * @param name The name of the setting to retrieve.
-             * @param def The value to return if the setting is not defined.
-             * @return The setting's current value or 'def' if it is not defined.
-             */
-            private int getInteger(String name, int def) {
-                ContentValues values = getValues(name);
-                return values != null ? values.getAsInteger(VALUE) : def;
-            }
-
-            /**
-             * Convenience function for retrieving a single settings value
-             * as a Long.
-             *
-             * @param name The name of the setting to retrieve.
-             * @param def The value to return if the setting is not defined.
-             * @return The setting's current value or 'def' if it is not defined.
-             */
-            private long getLong(String name, long def) {
-                ContentValues values = getValues(name);
-                return values != null ? values.getAsLong(VALUE) : def;
-            }
-        }
-
-    }
-
-
-    /**
-     * Columns for GTalk branding resource map cache table. This table caches the result of
-     * loading the branding resources to speed up GTalk landing page start.
-     */
-    public interface BrandingResourceMapCacheColumns {
-        /**
-         * The provider ID
-         * <P>Type: INTEGER</P>
-         */
-        String PROVIDER_ID = "provider_id";
-        /**
-         * The application resource ID
-         * <P>Type: INTEGER</P>
-         */
-        String APP_RES_ID = "app_res_id";
-        /**
-         * The plugin resource ID
-         * <P>Type: INTEGER</P>
-         */
-        String PLUGIN_RES_ID = "plugin_res_id";
-    }
-
-    /**
-     * The table for caching the result of loading GTalk branding resources.
-     */
-    public static final class BrandingResourceMapCache
-        implements BaseColumns, BrandingResourceMapCacheColumns {
-        /**
-         * The content:// style URL for this table.
-         */
-        public static final Uri CONTENT_URI =
-            Uri.parse("content://com.google.android.providers.talk/brandingResMapCache");
-    }
-
-
-
-    /**
-     * //TODO: move these to MCS specific provider.
-     * The following are MCS stuff, and should really live in a separate provider specific to
-     * MCS code.
-     */
-
-    /**
-     * Columns from OutgoingRmq table
-     */
-    public interface OutgoingRmqColumns {
-        String RMQ_ID = "rmq_id";
-        String TIMESTAMP = "ts";
-        String DATA = "data";
-        String PROTOBUF_TAG = "type";
-    }
-
-    /**
-     * //TODO: we should really move these to their own provider and database.
-     * The table for storing outgoing rmq packets.
-     */
-    public static final class OutgoingRmq implements BaseColumns, OutgoingRmqColumns {
-        private static String[] RMQ_ID_PROJECTION = new String[] {
-                RMQ_ID,
-        };
-
-        /**
-         * queryHighestRmqId
-         *
-         * @param resolver the content resolver
-         * @return the highest rmq id assigned to the rmq packet, or 0 if there are no rmq packets
-         *         in the OutgoingRmq table.
-         */
-        public static final long queryHighestRmqId(ContentResolver resolver) {
-            Cursor cursor = resolver.query(Im.OutgoingRmq.CONTENT_URI_FOR_HIGHEST_RMQ_ID,
-                    RMQ_ID_PROJECTION,
-                    null, // selection
-                    null, // selection args
-                    null  // sort
-                    );
-
-            long retVal = 0;
-            try {
-                //if (DBG) log("initializeRmqid: cursor.count= " + cursor.count());
-
-                if (cursor.moveToFirst()) {
-                    retVal = cursor.getLong(cursor.getColumnIndexOrThrow(RMQ_ID));
-                }
-            } finally {
-                cursor.close();
-            }
-
-            return retVal;
-        }
-
-        /**
-         * The content:// style URL for this table.
-         */
-        public static final Uri CONTENT_URI =
-            Uri.parse("content://com.google.android.providers.talk/outgoingRmqMessages");
-
-        /**
-         * The content:// style URL for the highest rmq id for the outgoing rmq messages
-         */
-        public static final Uri CONTENT_URI_FOR_HIGHEST_RMQ_ID =
-                Uri.parse("content://com.google.android.providers.talk/outgoingHighestRmqId");
-
-        /**
-         * The default sort order for this table.
-         */
-        public static final String DEFAULT_SORT_ORDER = "rmq_id ASC";
-    }
-
-    /**
-     * Columns for the LastRmqId table, which stores a single row for the last client rmq id
-     * sent to the server.
-     */
-    public interface LastRmqIdColumns {
-        String RMQ_ID = "rmq_id";
-    }
-
-    /**
-     * //TODO: move these out into their own provider and database
-     * The table for storing the last client rmq id sent to the server.
-     */
-    public static final class LastRmqId implements BaseColumns, LastRmqIdColumns {
-        private static String[] PROJECTION = new String[] {
-                RMQ_ID,
-        };
-
-        /**
-         * queryLastRmqId
-         *
-         * queries the last rmq id saved in the LastRmqId table.
-         *
-         * @param resolver the content resolver.
-         * @return the last rmq id stored in the LastRmqId table, or 0 if not found.
-         */
-        public static final long queryLastRmqId(ContentResolver resolver) {
-            Cursor cursor = resolver.query(Im.LastRmqId.CONTENT_URI,
-                    PROJECTION,
-                    null, // selection
-                    null, // selection args
-                    null  // sort
-                    );
-
-            long retVal = 0;
-            try {
-                if (cursor.moveToFirst()) {
-                    retVal = cursor.getLong(cursor.getColumnIndexOrThrow(RMQ_ID));
-                }
-            } finally {
-                cursor.close();
-            }
-
-            return retVal;
-        }
-
-        /**
-         * saveLastRmqId
-         *
-         * saves the rmqId to the lastRmqId table. This will override the existing row if any,
-         * as we only keep one row of data in this table.
-         *
-         * @param resolver the content resolver.
-         * @param rmqId the rmq id to be saved.
-         */
-        public static final void saveLastRmqId(ContentResolver resolver, long rmqId) {
-            ContentValues values = new ContentValues();
-
-            // always replace the first row.
-            values.put(_ID, 1);
-            values.put(RMQ_ID, rmqId);
-            resolver.insert(CONTENT_URI, values);
-        }
-
-        /**
-         * The content:// style URL for this table.
-         */
-        public static final Uri CONTENT_URI =
-            Uri.parse("content://com.google.android.providers.talk/lastRmqId");
-    }
-
-    /**
-     * Columns for the s2dRmqIds table, which stores the server-to-device message
-     * persistent ids. These are used in the RMQ2 protocol, where in the login request, the
-     * client selective acks these s2d ids to the server.
-     */
-    public interface ServerToDeviceRmqIdsColumn {
-        String RMQ_ID = "rmq_id";
-    }
-
-    public static final class ServerToDeviceRmqIds implements BaseColumns,
-            ServerToDeviceRmqIdsColumn {
-
-        /**
-         * The content:// style URL for this table.
-         */
-        public static final Uri CONTENT_URI =
-            Uri.parse("content://com.google.android.providers.talk/s2dids");
-    }
-
-}
index 762bac6..c49ec6c 100644 (file)
@@ -585,12 +585,6 @@ android.provider.ContactsContract$Presence
 android.provider.ContactsContract$RawContacts
 android.provider.Downloads
 android.provider.DrmStore$Audio
-android.provider.Im$Account
-android.provider.Im$Avatars
-android.provider.Im$Chats
-android.provider.Im$Contacts
-android.provider.Im$Messages
-android.provider.Im$Provider
 android.provider.MediaStore
 android.provider.MediaStore$Audio$Albums
 android.provider.MediaStore$Audio$Artists