OSDN Git Service

Settings: use subid & imsi for MSIM apn lookups
authorRoman Birg <roman@cyngn.com>
Wed, 1 Jun 2016 17:39:30 +0000 (10:39 -0700)
committerGerrit Code Review <gerrit@cyanogenmod.org>
Wed, 8 Jun 2016 03:22:40 +0000 (20:22 -0700)
Ticket: PAELLA-158

Change-Id: Icca65a9a46533e1bbcfd4dd08e974d736ea1253b
Signed-off-by: Roman Birg <roman@cyngn.com>
src/com/android/settings/ApnSettings.java

index 697094a..0459a13 100644 (file)
@@ -72,8 +72,12 @@ public class ApnSettings extends SettingsPreferenceFragment implements
     public static final String PREFERRED_APN_URI =
         "content://telephony/carriers/preferapn";
 
+    public static final Uri PREFERRED_MSIM_APN_URI =
+            Uri.parse("content://telephony/carriers/preferapn/subIdImsi");
+
     public static final String APN_ID = "apn_id";
     public static final String SUB_ID = "sub_id";
+    public static final String EXTRA_IMSI = "imsi";
     public static final String MVNO_TYPE = "mvno_type";
     public static final String MVNO_MATCH_DATA = "mvno_match_data";
 
@@ -117,6 +121,8 @@ public class ApnSettings extends SettingsPreferenceFragment implements
     private boolean mHideImsApn;
     private boolean mAllowAddingApns;
 
+    private String mImsi;
+
     private final BroadcastReceiver mMobileStateReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
@@ -157,6 +163,11 @@ public class ApnSettings extends SettingsPreferenceFragment implements
         final int subId = activity.getIntent().getIntExtra(SUB_ID,
                 SubscriptionManager.INVALID_SUBSCRIPTION_ID);
 
+        mImsi = activity.getIntent().getStringExtra(EXTRA_IMSI);
+        if (mImsi == null) {
+            mImsi = "";
+        }
+
         mUm = (UserManager) getSystemService(Context.USER_SERVICE);
 
         mMobileStateFilter = new IntentFilter(
@@ -408,19 +419,34 @@ public class ApnSettings extends SettingsPreferenceFragment implements
 
         ContentValues values = new ContentValues();
         values.put(APN_ID, mSelectedKey);
-        resolver.update(PREFERAPN_URI, values, null, null);
+        if (TelephonyManager.getDefault().getPhoneCount() > 1) {
+            Uri qUri = Uri.withAppendedPath(PREFERRED_MSIM_APN_URI,
+                    String.valueOf(mSubscriptionInfo.getSubscriptionId()));
+            qUri = Uri.withAppendedPath(qUri, mImsi);
+            resolver.update(qUri, values, null, null);
+        } else {
+            resolver.update(PREFERAPN_URI, values, null, null);
+        }
     }
 
     private String getSelectedApnKey() {
         String key = null;
 
-        Cursor cursor = getContentResolver().query(PREFERAPN_URI, new String[] {"_id"},
-                null, null, Telephony.Carriers.DEFAULT_SORT_ORDER);
-        if (cursor.getCount() > 0) {
-            cursor.moveToFirst();
-            key = cursor.getString(ID_INDEX);
+        Uri uri;
+        if (TelephonyManager.getDefault().getPhoneCount() > 1) {
+            uri = Uri.withAppendedPath(PREFERRED_MSIM_APN_URI,
+                    String.valueOf(mSubscriptionInfo.getSubscriptionId()));
+            uri = Uri.withAppendedPath(uri, mImsi);
+        } else {
+            uri = PREFERAPN_URI;
+        }
+        try (Cursor cursor = getContentResolver().query(uri, new String[] {"_id"},
+                null, null, Telephony.Carriers.DEFAULT_SORT_ORDER)) {
+            if (cursor != null && cursor.getCount() > 0) {
+                cursor.moveToFirst();
+                key = cursor.getString(ID_INDEX);
+            }
         }
-        cursor.close();
         return key;
     }