MmsSmsProvider initialize incorrect min_match value
Because TelephonyProvider starts up earlier than carrierconfig MCC/MNC
ready, the min_match always get the default value which is 7. So we lazy
initialze the min_match to guarantee the min_match value is correct.
Bug: 174972832
Change-Id: Id287c07bbae5491b7d6679ee3090335a1b3a319f
diff --git a/src/com/android/providers/telephony/MmsSmsProvider.java b/src/com/android/providers/telephony/MmsSmsProvider.java
index f5aeadc..8e01bcc 100644
--- a/src/com/android/providers/telephony/MmsSmsProvider.java
+++ b/src/com/android/providers/telephony/MmsSmsProvider.java
@@ -305,7 +305,6 @@
private SQLiteOpenHelper mOpenHelper;
private boolean mUseStrictPhoneNumberComparation;
- private int mMinMatch;
private static final String METHOD_IS_RESTORING = "is_restoring";
private static final String IS_RESTORING_KEY = "restoring";
@@ -317,9 +316,6 @@
mUseStrictPhoneNumberComparation =
getContext().getResources().getBoolean(
com.android.internal.R.bool.config_use_strict_phone_number_comparation);
- mMinMatch =
- getContext().getResources().getInteger(
- com.android.internal.R.integer.config_phonenumber_compare_min_match);
TelephonyBackupAgent.DeferredSmsMmsRestoreService.startIfFilesExist(getContext());
return true;
}
@@ -551,12 +547,15 @@
String selection = "address=?";
String[] selectionArgs;
long retVal = -1L;
+ int minMatch =
+ getContext().getResources().getInteger(
+ com.android.internal.R.integer.config_phonenumber_compare_min_match);
if (!isPhoneNumber) {
selectionArgs = new String[] { refinedAddress };
} else {
selection += " OR PHONE_NUMBERS_EQUAL(address, ?, " +
- (mUseStrictPhoneNumberComparation ? "1)" : "0, " + mMinMatch + ")");
+ (mUseStrictPhoneNumberComparation ? "1)" : "0, " + minMatch + ")");
selectionArgs = new String[] { refinedAddress, refinedAddress };
}
@@ -1011,19 +1010,22 @@
* FROM pdu, (SELECT msg_id AS address_msg_id
* FROM addr
* WHERE (address='<phoneNumber>' OR
- * PHONE_NUMBERS_EQUAL(addr.address, '<phoneNumber>', 1/0, none/mMinMatch)))
+ * PHONE_NUMBERS_EQUAL(addr.address, '<phoneNumber>', 1/0, none/minMatch)))
* AS matching_addresses
* WHERE pdu._id = matching_addresses.address_msg_id
* UNION
* SELECT ...
* FROM sms
* WHERE (address='<phoneNumber>' OR
- * PHONE_NUMBERS_EQUAL(sms.address, '<phoneNumber>', 1/0, none/mMinMatch));
+ * PHONE_NUMBERS_EQUAL(sms.address, '<phoneNumber>', 1/0, none/minMatch));
*/
private Cursor getMessagesByPhoneNumber(
String phoneNumber, String[] projection, String selection,
String sortOrder, String smsTable, String pduTable) {
String escapedPhoneNumber = DatabaseUtils.sqlEscapeString(phoneNumber);
+ int minMatch =
+ getContext().getResources().getInteger(
+ com.android.internal.R.integer.config_phonenumber_compare_min_match);
String finalMmsSelection =
concatSelections(
selection,
@@ -1033,7 +1035,7 @@
selection,
"(address=" + escapedPhoneNumber + " OR PHONE_NUMBERS_EQUAL(address, " +
escapedPhoneNumber +
- (mUseStrictPhoneNumberComparation ? ", 1))" : ", 0, " + mMinMatch + "))"));
+ (mUseStrictPhoneNumberComparation ? ", 1))" : ", 0, " + minMatch + "))"));
SQLiteQueryBuilder mmsQueryBuilder = new SQLiteQueryBuilder();
SQLiteQueryBuilder smsQueryBuilder = new SQLiteQueryBuilder();
@@ -1045,7 +1047,7 @@
"FROM addr WHERE (address=" + escapedPhoneNumber +
" OR PHONE_NUMBERS_EQUAL(addr.address, " +
escapedPhoneNumber +
- (mUseStrictPhoneNumberComparation ? ", 1))) " : ", 0, " + mMinMatch + "))) ") +
+ (mUseStrictPhoneNumberComparation ? ", 1))) " : ", 0, " + minMatch + "))) ") +
"AS matching_addresses");
smsQueryBuilder.setTables(smsTable);