bug #2236535: when entering MMS compose screen via an address in an intent, replace the matching contact cache with the intent address.

- this is basically another path in which we have the actual dest address (in the intent). When the compose screen finds the
matching cached contact, it should replace the contact's address with the specified address in the intent, in case the
cached contact has a bad address.

Change-Id: Id55500e212df5dcd47ff7a1858bc99d4b4656df1
diff --git a/src/com/android/mms/data/ContactList.java b/src/com/android/mms/data/ContactList.java
index a2615ee..96fdc4e 100644
--- a/src/com/android/mms/data/ContactList.java
+++ b/src/com/android/mms/data/ContactList.java
@@ -22,11 +22,17 @@
         return list;
     }
 
-    public static ContactList getByNumbers(String semiSepNumbers, boolean canBlock) {
+    public static ContactList getByNumbers(String semiSepNumbers,
+                                           boolean canBlock,
+                                           boolean replaceNumber) {
         ContactList list = new ContactList();
         for (String number : semiSepNumbers.split(";")) {
             if (!TextUtils.isEmpty(number)) {
-                list.add(Contact.get(number, canBlock));
+                Contact contact = Contact.get(number, canBlock);
+                if (replaceNumber) {
+                    contact.setNumber(number);
+                }
+                list.add(contact);
             }
         }
         return list;
diff --git a/src/com/android/mms/data/Conversation.java b/src/com/android/mms/data/Conversation.java
index 95be170..7119607 100644
--- a/src/com/android/mms/data/Conversation.java
+++ b/src/com/android/mms/data/Conversation.java
@@ -164,7 +164,8 @@
         }
 
         String recipient = uri.getSchemeSpecificPart();
-        return get(context, ContactList.getByNumbers(recipient, false));
+        return get(context, ContactList.getByNumbers(recipient,
+                false /* don't block */, true /* replace number */));
     }
 
     /**
@@ -183,7 +184,8 @@
             return false;       // it's a thread id for a conversation
         }
         String recipient = uri.getSchemeSpecificPart();
-        ContactList incomingRecipient = ContactList.getByNumbers(recipient, false);
+        ContactList incomingRecipient = ContactList.getByNumbers(recipient,
+                false /* don't block */, false /* don't replace number */);
         return mRecipients.equals(incomingRecipient);
     }
 
diff --git a/src/com/android/mms/ui/ComposeMessageActivity.java b/src/com/android/mms/ui/ComposeMessageActivity.java
index 5217c72..c1969f9 100644
--- a/src/com/android/mms/ui/ComposeMessageActivity.java
+++ b/src/com/android/mms/ui/ComposeMessageActivity.java
@@ -2910,7 +2910,9 @@
     private void initActivityState(Bundle bundle, Intent intent) {
         if (bundle != null) {
             String recipients = bundle.getString("recipients");
-            mConversation = Conversation.get(this, ContactList.getByNumbers(recipients, false));
+            mConversation = Conversation.get(this,
+                    ContactList.getByNumbers(recipients,
+                            false /* don't block */, true /* replace number */));
             mExitOnSent = bundle.getBoolean("exit_on_sent", false);
             mWorkingMessage.readStateFromBundle(bundle);
             return;
@@ -2931,8 +2933,8 @@
                 // special intent extra parameter to specify the address
                 String address = intent.getStringExtra("address");
                 if (!TextUtils.isEmpty(address)) {
-                    mConversation = Conversation.get(this,
-                            ContactList.getByNumbers(address, false));
+                    mConversation = Conversation.get(this, ContactList.getByNumbers(address,
+                            false /* don't block */, true /* replace number */));
                 } else {
                     mConversation = Conversation.createNew(this);
                 }