Merge "Snap for 7187421 from 270846b61c05c6a65f158af06aeb19f09cdbc9b8 to sdk-release" into sdk-release
diff --git a/src/com/android/providers/telephony/TelephonyProvider.java b/src/com/android/providers/telephony/TelephonyProvider.java
index 8e89ab3..72b3683 100644
--- a/src/com/android/providers/telephony/TelephonyProvider.java
+++ b/src/com/android/providers/telephony/TelephonyProvider.java
@@ -98,11 +98,9 @@
 import android.os.IBinder;
 import android.os.Process;
 import android.os.RemoteException;
-import android.os.ServiceManager;
 import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.provider.Telephony;
-import android.telephony.Annotation;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 import android.telephony.data.ApnSetting;
@@ -148,7 +146,7 @@
     private static final boolean DBG = true;
     private static final boolean VDBG = false; // STOPSHIP if true
 
-    private static final int DATABASE_VERSION = 47 << 16;
+    private static final int DATABASE_VERSION = 48 << 16;
     private static final int URL_UNKNOWN = 0;
     private static final int URL_TELEPHONY = 1;
     private static final int URL_CURRENT = 2;
@@ -473,7 +471,8 @@
                 + Telephony.SimInfo.COLUMN_ALLOWED_NETWORK_TYPES + " BIGINT DEFAULT -1,"
                 + Telephony.SimInfo.COLUMN_IMS_RCS_UCE_ENABLED + " INTEGER DEFAULT 0,"
                 + Telephony.SimInfo.COLUMN_CROSS_SIM_CALLING_ENABLED + " INTEGER DEFAULT 0,"
-                + Telephony.SimInfo.COLUMN_RCS_CONFIG + " BLOB"
+                + Telephony.SimInfo.COLUMN_RCS_CONFIG + " BLOB,"
+                + Telephony.SimInfo.COLUMN_ALLOWED_NETWORK_TYPES_FOR_REASONS + " TEXT"
                 + ");";
     }
 
@@ -1517,6 +1516,36 @@
                 oldVersion = 47 << 16 | 6;
             }
 
+            if (oldVersion < (48 << 16 | 6)) {
+                try {
+                    // Try to update the siminfo table. It might not be there.
+                    db.execSQL("ALTER TABLE " + SIMINFO_TABLE + " ADD COLUMN "
+                            + Telephony.SimInfo.COLUMN_ALLOWED_NETWORK_TYPES_FOR_REASONS
+                            + " TEXT;");
+                } catch (SQLiteException e) {
+                    if (DBG) {
+                        log("onUpgrade skipping " + SIMINFO_TABLE + " upgrade. " +
+                                "The table will get created in onOpen.");
+                    }
+                }
+                try {
+                    // Migrate the old Long values over to String
+                    String[] proj = {Telephony.SimInfo.COLUMN_UNIQUE_KEY_SUBSCRIPTION_ID,
+                            Telephony.SimInfo.COLUMN_ALLOWED_NETWORK_TYPES};
+                    try (Cursor c = db.query(SIMINFO_TABLE, proj, null, null, null, null, null)) {
+                        while (c.moveToNext()) {
+                            fillInAllowedNetworkTypesStringAtCursor(db, c);
+                        }
+                    }
+
+                } catch (SQLiteException e) {
+                    if (DBG) {
+                        log("can't migrate value from COLUMN_ALLOWED_NETWORK_TYPES to "
+                                + "COLUMN_ALLOWED_NETWORK_TYPES_ALL_REASON");
+                    }
+                }
+                oldVersion = 48 << 16 | 6;
+            }
             if (DBG) {
                 log("dbh.onUpgrade:- db=" + db + " oldV=" + oldVersion + " newV=" + newVersion);
             }
@@ -4383,4 +4412,36 @@
         }
         return 0;
     }
+
+    /**
+     * Migrate the old Long values{@link Telephony.SimInfo.COLUMN_ALLOWED_NETWORK_TYPES} over to
+     * String{@link Telephony.SimInfo.COLUMN_ALLOWED_NETWORK_TYPES_ALL_REASON}
+     *
+     * @param db The sqlite database to write to
+     * @param c The {@link Telephony.SimInfo.COLUMN_ALLOWED_NETWORK_TYPES} values in the sim info
+     *         table.
+     */
+    public static void fillInAllowedNetworkTypesStringAtCursor(SQLiteDatabase db, Cursor c) {
+        long allowedNetworkTypesReasonCarrier;
+        String subId;
+        try {
+            allowedNetworkTypesReasonCarrier = c.getLong(
+                    c.getColumnIndexOrThrow(Telephony.SimInfo.COLUMN_ALLOWED_NETWORK_TYPES));
+            subId = c.getString(c.getColumnIndexOrThrow(
+                    Telephony.SimInfo.COLUMN_UNIQUE_KEY_SUBSCRIPTION_ID));
+        } catch (IllegalArgumentException e) {
+            Log.e(TAG, "Possible database corruption -- some columns not found.");
+            return;
+        }
+
+        if (allowedNetworkTypesReasonCarrier != -1) {
+            ContentValues cv = new ContentValues(1);
+
+            cv.put(Telephony.SimInfo.COLUMN_ALLOWED_NETWORK_TYPES_FOR_REASONS,
+                    "carrier=" + allowedNetworkTypesReasonCarrier);
+            db.update(SIMINFO_TABLE, cv,
+                    Telephony.SimInfo.COLUMN_UNIQUE_KEY_SUBSCRIPTION_ID + "=?",
+                    new String[]{subId});
+        }
+    }
 }