support per carrier based iso country code
1. mcc based sim country code is coarse and inaccurate. Apply per carrier
based country code as an override
2. persist country code to simInfo db and notify change through
public API onSubscriptionChangedListener.
Bug: 64775297
Bug: 110559381
Change-Id: I3468dde4be70b9997064dd00864c83ad9bd5a63b
diff --git a/src/com/android/providers/telephony/TelephonyProvider.java b/src/com/android/providers/telephony/TelephonyProvider.java
index 4e133bf..1ad5dff 100644
--- a/src/com/android/providers/telephony/TelephonyProvider.java
+++ b/src/com/android/providers/telephony/TelephonyProvider.java
@@ -143,7 +143,7 @@
private static final boolean DBG = true;
private static final boolean VDBG = false; // STOPSHIP if true
- private static final int DATABASE_VERSION = 31 << 16;
+ private static final int DATABASE_VERSION = 32 << 16;
private static final int URL_UNKNOWN = 0;
private static final int URL_TELEPHONY = 1;
private static final int URL_CURRENT = 2;
@@ -381,7 +381,8 @@
+ SubscriptionManager.WFC_IMS_ROAMING_ENABLED + " INTEGER DEFAULT -1,"
+ SubscriptionManager.IS_OPPORTUNISTIC + " INTEGER DEFAULT 0,"
+ SubscriptionManager.GROUP_UUID + " TEXT,"
- + SubscriptionManager.IS_METERED + " INTEGER DEFAULT 1"
+ + SubscriptionManager.IS_METERED + " INTEGER DEFAULT 1,"
+ + SubscriptionManager.ISO_COUNTRY_CODE + " TEXT"
+ ");";
}
@@ -1173,6 +1174,20 @@
oldVersion = 31 << 16 | 6;
}
+ if (oldVersion < (32 << 16 | 6)) {
+ try {
+ // Try to update the siminfo table. It might not be there.
+ db.execSQL("ALTER TABLE " + SIMINFO_TABLE + " ADD COLUMN "
+ + SubscriptionManager.ISO_COUNTRY_CODE + " TEXT;");
+ } catch (SQLiteException e) {
+ if (DBG) {
+ log("onUpgrade skipping " + SIMINFO_TABLE + " upgrade. " +
+ "The table will get created in onOpen.");
+ }
+ }
+ oldVersion = 32 << 16 | 6;
+ }
+
if (DBG) {
log("dbh.onUpgrade:- db=" + db + " oldV=" + oldVersion + " newV=" + newVersion);
}
diff --git a/tests/src/com/android/providers/telephony/TelephonyDatabaseHelperTest.java b/tests/src/com/android/providers/telephony/TelephonyDatabaseHelperTest.java
index d72d2a4..6892673 100644
--- a/tests/src/com/android/providers/telephony/TelephonyDatabaseHelperTest.java
+++ b/tests/src/com/android/providers/telephony/TelephonyDatabaseHelperTest.java
@@ -87,6 +87,19 @@
}
@Test
+ public void databaseHelperOnUpgrade_hasCountryIsoField() {
+ Log.d(TAG, "databaseHelperOnUpgrade_hasCountryIsoField");
+ SQLiteDatabase db = mInMemoryDbHelper.getWritableDatabase();
+ mHelper.onUpgrade(db, (4 << 16), TelephonyProvider.DatabaseHelper.getVersion(mContext));
+
+ // the upgraded db must have the Telephony.Carriers.CARRIER_ID field
+ Cursor cursor = db.query("simInfo", null, null, null, null, null, null);
+ String[] upgradedColumns = cursor.getColumnNames();
+ Log.d(TAG, "iso columns: " + Arrays.toString(upgradedColumns));
+ assertTrue(Arrays.asList(upgradedColumns).contains(SubscriptionManager.ISO_COUNTRY_CODE));
+ }
+
+ @Test
public void databaseHelperOnUpgrade_columnsMatchNewlyCreatedDb() {
Log.d(TAG, "databaseHelperOnUpgrade_columnsMatchNewlyCreatedDb");
// (5 << 16 | 6) is the first upgrade trigger in onUpgrade