am c818d636: bug 2150183: fix SMS address comparison so "foo"=="foo".
Merge commit 'c818d636af8c4f3d8a0d332634d1e73a5215d06b' into eclair-plus-aosp
* commit 'c818d636af8c4f3d8a0d332634d1e73a5215d06b':
bug 2150183: fix SMS address comparison so "foo"=="foo".
diff --git a/src/com/android/providers/telephony/MmsSmsProvider.java b/src/com/android/providers/telephony/MmsSmsProvider.java
index 7830b66..3db9600 100644
--- a/src/com/android/providers/telephony/MmsSmsProvider.java
+++ b/src/com/android/providers/telephony/MmsSmsProvider.java
@@ -408,12 +408,17 @@
private long getSingleAddressId(String address) {
boolean isEmail = Mms.isEmailAddress(address);
String refinedAddress = isEmail ? address.toLowerCase() : address;
- String selection =
- isEmail
- ? "address = ?"
- : String.format("PHONE_NUMBERS_EQUAL(address, ?, %d)",
+ String selection = "address=?";
+ String[] selectionArgs;
+
+ if (isEmail) {
+ selectionArgs = new String[] { refinedAddress };
+ } else {
+ selection += " OR " + String.format("PHONE_NUMBERS_EQUAL(address, ?, %d)",
(mUseStrictPhoneNumberComparation ? 1 : 0));
- String[] selectionArgs = new String[] { refinedAddress };
+ selectionArgs = new String[] { refinedAddress, refinedAddress };
+ }
+
Cursor cursor = null;
try {
@@ -522,11 +527,12 @@
String recipientIds =
getSpaceSeparatedNumbers(
getSortedSet(getAddressIds(recipients)));
- String THREAD_QUERY = "SELECT _id FROM threads " +
- "WHERE recipient_ids = ?";
+
+ String THREAD_QUERY = "SELECT _id FROM threads " + "WHERE recipient_ids = ?";
if (DEBUG) {
- Log.v(LOG_TAG, "getThreadId THREAD_QUERY: " + THREAD_QUERY);
+ Log.v(LOG_TAG, "getThreadId THREAD_QUERY: " + THREAD_QUERY +
+ ", recipientIds=" + recipientIds);
}
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
Cursor cursor = db.rawQuery(THREAD_QUERY, new String[] { recipientIds });
@@ -821,13 +827,14 @@
* SELECT ...
* FROM pdu, (SELECT _id AS address_id
* FROM addr
- * WHERE PHONE_NUMBERS_EQUAL(addr.address, '<phoneNumber>'))
+ * WHERE (address='<phoneNumber>' OR
+ * PHONE_NUMBERS_EQUAL(addr.address, '<phoneNumber>', 1/0)))
* AS matching_addresses
* WHERE pdu._id = matching_addresses.address_id
* UNION
* SELECT ...
* FROM sms
- * WHERE PHONE_NUMBERS_EQUAL(sms.address, '<phoneNumber>');
+ * WHERE (address='<phoneNumber>' OR PHONE_NUMBERS_EQUAL(sms.address, '<phoneNumber>', 1/0));
*/
private Cursor getMessagesByPhoneNumber(
String phoneNumber, String[] projection, String selection,
@@ -840,9 +847,9 @@
String finalSmsSelection =
concatSelections(
selection,
- "PHONE_NUMBERS_EQUAL(address, " +
+ "(address=" + escapedPhoneNumber + " OR PHONE_NUMBERS_EQUAL(address, " +
escapedPhoneNumber +
- (mUseStrictPhoneNumberComparation ? ", 1)" : ", 0)"));
+ (mUseStrictPhoneNumberComparation ? ", 1))" : ", 0))"));
SQLiteQueryBuilder mmsQueryBuilder = new SQLiteQueryBuilder();
SQLiteQueryBuilder smsQueryBuilder = new SQLiteQueryBuilder();
@@ -851,9 +858,10 @@
mmsQueryBuilder.setTables(
MmsProvider.TABLE_PDU +
", (SELECT _id AS address_id " +
- "FROM addr WHERE PHONE_NUMBERS_EQUAL(addr.address, " +
+ "FROM addr WHERE (address=" + escapedPhoneNumber +
+ " OR PHONE_NUMBERS_EQUAL(addr.address, " +
escapedPhoneNumber +
- (mUseStrictPhoneNumberComparation ? ", 1)) " : ", 0)) ") +
+ (mUseStrictPhoneNumberComparation ? ", 1))) " : ", 0))) ") +
"AS matching_addresses");
smsQueryBuilder.setTables(SmsProvider.TABLE_SMS);