OSDN Git Service

Fix mvno match data is incorrect for APNs
authorWei Huang <wei.x.huang@sonymobile.com>
Mon, 23 Jan 2017 11:26:20 +0000 (20:26 +0900)
committerAmit Mahajan <amitmahajan@google.com>
Thu, 30 Mar 2017 22:54:14 +0000 (15:54 -0700)
[Cause of Defect]
When user editing an existing apn, ApnPreference won't pass
the subId to ApnEditor.
As a result, if use change the mvno type to 'imsi', ApnEditor
can NOT fetch the correct IMSI due to invalid subId.

[How To Fix]
Pass subId to ApnEditor, which is same as adding new APN.

Bug: 34646368
Test: manual - edited an existing apn
Change-Id: I79fe55ccdeb8dab0ffcc7dfb22ba680beb58b9cd

src/com/android/settings/ApnPreference.java [changed mode: 0644->0755]
src/com/android/settings/ApnSettings.java

old mode 100644 (file)
new mode 100755 (executable)
index a6ab8b7..0111b26
@@ -23,6 +23,7 @@ import android.net.Uri;
 import android.provider.Telephony;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceViewHolder;
+import android.telephony.SubscriptionManager;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.view.View;
@@ -35,6 +36,8 @@ public class ApnPreference extends Preference implements
         CompoundButton.OnCheckedChangeListener, OnClickListener {
     final static String TAG = "ApnPreference";
 
+    private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+
     public ApnPreference(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
     }
@@ -116,7 +119,9 @@ public class ApnPreference extends Preference implements
             if (context != null) {
                 int pos = Integer.parseInt(getKey());
                 Uri url = ContentUris.withAppendedId(Telephony.Carriers.CONTENT_URI, pos);
-                context.startActivity(new Intent(Intent.ACTION_EDIT, url));
+                Intent editIntent = new Intent(Intent.ACTION_EDIT, url);
+                editIntent.putExtra(ApnSettings.SUB_ID, mSubId);
+                context.startActivity(editIntent);
             }
         }
     }
@@ -128,4 +133,8 @@ public class ApnPreference extends Preference implements
     public boolean getSelectable() {
         return mSelectable;
     }
+
+    public void setSubId(int subId) {
+        mSubId = subId;
+    }
 }
index c0b9485..5e31a02 100755 (executable)
@@ -240,8 +240,9 @@ public class ApnSettings extends RestrictedSettingsFragment implements
 
     private void fillList() {
         final TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
-        final String mccmnc = mSubscriptionInfo == null ? ""
-            : tm.getSimOperator(mSubscriptionInfo.getSubscriptionId());
+        final int subId = mSubscriptionInfo != null ? mSubscriptionInfo.getSubscriptionId()
+                : SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+        final String mccmnc = mSubscriptionInfo == null ? "" : tm.getSimOperator(subId);
         Log.d(TAG, "mccmnc = " + mccmnc);
         StringBuilder where = new StringBuilder("numeric=\"" + mccmnc +
                 "\" AND NOT (type='ia' AND (apn=\"\" OR apn IS NULL)) AND user_visible!=0");
@@ -257,8 +258,8 @@ public class ApnSettings extends RestrictedSettingsFragment implements
         if (cursor != null) {
             IccRecords r = null;
             if (mUiccController != null && mSubscriptionInfo != null) {
-                r = mUiccController.getIccRecords(SubscriptionManager.getPhoneId(
-                        mSubscriptionInfo.getSubscriptionId()), UiccController.APP_FAM_3GPP);
+                r = mUiccController.getIccRecords(
+                        SubscriptionManager.getPhoneId(subId), UiccController.APP_FAM_3GPP);
             }
             PreferenceGroup apnList = (PreferenceGroup) findPreference("apn_list");
             apnList.removeAll();
@@ -285,6 +286,7 @@ public class ApnSettings extends RestrictedSettingsFragment implements
                 pref.setSummary(apn);
                 pref.setPersistent(false);
                 pref.setOnPreferenceChangeListener(this);
+                pref.setSubId(subId);
 
                 boolean selectable = ((type == null) || !type.equals("mms"));
                 pref.setSelectable(selectable);