From ec5109ab6d54dced78f80e3549728e3d590bdcfb Mon Sep 17 00:00:00 2001 From: Wei Huang Date: Mon, 23 Jan 2017 20:26:20 +0900 Subject: [PATCH] Fix mvno match data is incorrect for APNs [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 | 11 ++++++++++- src/com/android/settings/ApnSettings.java | 10 ++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) mode change 100644 => 100755 src/com/android/settings/ApnPreference.java diff --git a/src/com/android/settings/ApnPreference.java b/src/com/android/settings/ApnPreference.java old mode 100644 new mode 100755 index a6ab8b7f89c..0111b26194c --- a/src/com/android/settings/ApnPreference.java +++ b/src/com/android/settings/ApnPreference.java @@ -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; + } } diff --git a/src/com/android/settings/ApnSettings.java b/src/com/android/settings/ApnSettings.java index 3dd772baf26..3d3f6c5da13 100644 --- a/src/com/android/settings/ApnSettings.java +++ b/src/com/android/settings/ApnSettings.java @@ -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);