OSDN Git Service

store contact_id in messages table instead of the contact name string; merge messages...
authorWei Huang <weih@google.com>
Wed, 29 Apr 2009 05:42:01 +0000 (22:42 -0700)
committerWei Huang <weih@google.com>
Wed, 29 Apr 2009 18:59:01 +0000 (11:59 -0700)
- modify the IM app to use the new Im.Messages.getContentUriByThreadId().
- corresponding changes due to android.provider.Im api change.

src/com/android/im/app/ChatView.java
src/com/android/im/service/ChatSessionAdapter.java
src/com/android/im/service/ContactListManagerAdapter.java

index 665c7a5..c9bc1d1 100644 (file)
@@ -658,9 +658,9 @@ public class ChatView extends LinearLayout {
 
         Uri uri;
         if (Im.Contacts.TYPE_GROUP == mType) {
-            uri = ContentUris.withAppendedId(Im.GroupMessages.CONTENT_URI_GROUP_MESSAGES_BY, mChatId);
+            uri = Im.Messages.getGroupChatContentUriByThreadId(mChatId);
         } else {
-            uri = Im.Messages.getContentUriByContact(mProviderId, mAccountId, mUserName);
+            uri = Im.Messages.getContentUriByThreadId(mChatId);
         }
 
         if (Log.isLoggable(ImApp.LOG_TAG, Log.DEBUG)){
@@ -1054,7 +1054,7 @@ public class ChatView extends LinearLayout {
 
             for (int i = 0 ; i < len ; i++) {
                 mColumnNames[i] = columnNames[i];
-                if (mColumnNames[i].equals(Im.BaseMessageColumns.DATE)) {
+                if (mColumnNames[i].equals(Im.Messages.DATE)) {
                     mDateColumn = i;
                 }
             }
@@ -1418,7 +1418,7 @@ public class ChatView extends LinearLayout {
         private int mScrollState;
         private boolean mNeedRequeryCursor;
 
-        private int mContactColumn;
+        private int mNicknameColumn;
         private int mBodyColumn;
         private int mDateColumn;
         private int mTypeColumn;
@@ -1438,11 +1438,11 @@ public class ChatView extends LinearLayout {
         }
 
         private void resolveColumnIndex(Cursor c) {
-            mContactColumn = c.getColumnIndexOrThrow(Im.BaseMessageColumns.CONTACT);
-            mBodyColumn = c.getColumnIndexOrThrow(Im.BaseMessageColumns.BODY);
-            mDateColumn = c.getColumnIndexOrThrow(Im.BaseMessageColumns.DATE);
-            mTypeColumn = c.getColumnIndexOrThrow(Im.BaseMessageColumns.TYPE);
-            mErrCodeColumn = c.getColumnIndexOrThrow(Im.BaseMessageColumns.ERROR_CODE);
+            mNicknameColumn = c.getColumnIndexOrThrow(Im.Messages.NICKNAME);
+            mBodyColumn = c.getColumnIndexOrThrow(Im.Messages.BODY);
+            mDateColumn = c.getColumnIndexOrThrow(Im.Messages.DATE);
+            mTypeColumn = c.getColumnIndexOrThrow(Im.Messages.TYPE);
+            mErrCodeColumn = c.getColumnIndexOrThrow(Im.Messages.ERROR_CODE);
             mDeltaColumn = c.getColumnIndexOrThrow(DeltaCursor.DELTA_COLUMN_NAME);
         }
 
@@ -1464,7 +1464,7 @@ public class ChatView extends LinearLayout {
             MessageView chatMsgView = (MessageView) view;
 
             int type = cursor.getInt(mTypeColumn);
-            String contact = isGroupChat() ? cursor.getString(mContactColumn) : mNickName;
+            String contact = isGroupChat() ? cursor.getString(mNicknameColumn) : mNickName;
             String body = cursor.getString(mBodyColumn);
             long delta = cursor.getLong(mDeltaColumn);
             boolean showTimeStamp = (delta > SHOW_TIME_STAMP_INTERVAL);
index 35c3825..c329224 100644 (file)
@@ -49,8 +49,8 @@ import java.util.List;
 
 public class ChatSessionAdapter extends IChatSession.Stub {
 
-    private static final String NON_CHAT_MESSAGE_SELECTION = Im.BaseMessageColumns.TYPE
-            + "!=" + Im.MessageType.INCOMING + " AND " + Im.BaseMessageColumns.TYPE
+    private static final String NON_CHAT_MESSAGE_SELECTION = Im.Messages.TYPE
+            + "!=" + Im.MessageType.INCOMING + " AND " + Im.Messages.TYPE
             + "!=" + Im.MessageType.OUTGOING;
 
     static final String TAG = RemoteImService.TAG;
@@ -106,8 +106,7 @@ public class ChatSessionAdapter extends IChatSession.Stub {
         mIsGroupChat = true;
         long groupId = insertGroupContactInDb(group);
         group.addMemberListener(mListenerAdapter);
-        mMessageURI = ContentUris.withAppendedId(
-                Im.GroupMessages.CONTENT_URI_GROUP_MESSAGES_BY, groupId);
+        mMessageURI = Im.Messages.getGroupChatContentUriByThreadId(groupId);
         mChatURI = ContentUris.withAppendedId(Im.Chats.CONTENT_URI, groupId);
         insertOrUpdateChat(null);
 
@@ -122,10 +121,7 @@ public class ChatSessionAdapter extends IChatSession.Stub {
             (ContactListManagerAdapter) mConnection.getContactListManager();
         long contactId = listManager.queryOrInsertContact(contact);
 
-        long provider = mConnection.getProviderId();
-        long account  = mConnection.getAccountId();
-        String address = contact.getAddress().getFullName();
-        mMessageURI = Im.Messages.getContentUriByContact(provider, account, address);
+        mMessageURI = Im.Messages.getContentUriByThreadId(contactId);
         mChatURI = ContentUris.withAppendedId(Im.Chats.CONTENT_URI, contactId);
         insertOrUpdateChat(null);
 
@@ -215,10 +211,9 @@ public class ChatSessionAdapter extends IChatSession.Stub {
     public void leave() {
         if (mIsGroupChat) {
             getGroupManager().leaveChatGroupAsync((ChatGroup)mAdaptee.getParticipant());
-            mContentResolver.delete(mMessageURI, null, null);
-        } else {
-            mContentResolver.delete(mMessageURI, null, null);
         }
+
+        mContentResolver.delete(mMessageURI, null, null);
         mContentResolver.delete(mChatURI, null, null);
         mStatusBarNotifier.dismissChatNotification(
                 mConnection.getProviderId(), getAddress());
@@ -247,11 +242,11 @@ public class ChatSessionAdapter extends IChatSession.Stub {
     void sendPostponedMessages() {
         String[] projection = new String[] {
             BaseColumns._ID,
-            Im.BaseMessageColumns.BODY,
-            Im.BaseMessageColumns.DATE,
-            Im.BaseMessageColumns.TYPE,
+            Im.Messages.BODY,
+            Im.Messages.DATE,
+            Im.Messages.TYPE,
         };
-        String selection = Im.BaseMessageColumns.TYPE + "=?";
+        String selection = "messages.type=?";
 
         Cursor c = mContentResolver.query(mMessageURI, projection, selection,
                 new String[]{Integer.toString(Im.MessageType.POSTPONED)}, null);
@@ -450,7 +445,7 @@ public class ChatSessionAdapter extends IChatSession.Stub {
     }
 
     void removeMessageInDb(int type) {
-        mContentResolver.delete(mMessageURI, Im.BaseMessageColumns.TYPE + "=?",
+        mContentResolver.delete(mMessageURI, Im.Messages.TYPE + "=?",
                 new String[]{Integer.toString(type)});
     }
 
@@ -460,12 +455,13 @@ public class ChatSessionAdapter extends IChatSession.Stub {
 
     Uri insertMessageInDb(String contact, String body, long time, int type, int errCode) {
         ContentValues values = new ContentValues(mIsGroupChat ? 4 : 3);
-        values.put(Im.BaseMessageColumns.BODY, body);
-        values.put(Im.BaseMessageColumns.DATE, time);
-        values.put(Im.BaseMessageColumns.TYPE, type);
-        values.put(Im.BaseMessageColumns.ERROR_CODE, errCode);
+        values.put(Im.Messages.BODY, body);
+        values.put(Im.Messages.DATE, time);
+        values.put(Im.Messages.TYPE, type);
+        values.put(Im.Messages.ERROR_CODE, errCode);
         if (mIsGroupChat) {
-            values.put(Im.BaseMessageColumns.CONTACT, contact);
+            values.put(Im.Messages.NICKNAME, contact);
+            values.put(Im.Messages.IS_GROUP_CHAT, 1);
         }
 
         return mContentResolver.insert(mMessageURI, values);
index eaa0a48..3454385 100644 (file)
@@ -1021,8 +1021,7 @@ public class ContactListManagerAdapter extends IContactListManager.Stub {
     }
 
     void clearHistoryMessages(String contact) {
-        Uri uri = Im.Messages.getContentUriByContact(mProviderId,
-            mAccountId, contact);
+        Uri uri = Im.Messages.getContentUriByContact(mAccountId, contact);
         mResolver.delete(uri, null, null);
     }