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
This commit is contained in:
Wei Huang
2017-01-23 20:26:20 +09:00
committed by Amit Mahajan
parent b9f570ff44
commit d4cfac304a
2 changed files with 16 additions and 5 deletions

11
src/com/android/settings/ApnPreference.java Normal file → Executable file
View File

@@ -23,6 +23,7 @@ import android.net.Uri;
import android.provider.Telephony; import android.provider.Telephony;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceViewHolder; import android.support.v7.preference.PreferenceViewHolder;
import android.telephony.SubscriptionManager;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
@@ -35,6 +36,8 @@ public class ApnPreference extends Preference implements
CompoundButton.OnCheckedChangeListener, OnClickListener { CompoundButton.OnCheckedChangeListener, OnClickListener {
final static String TAG = "ApnPreference"; final static String TAG = "ApnPreference";
private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
public ApnPreference(Context context, AttributeSet attrs, int defStyle) { public ApnPreference(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle); super(context, attrs, defStyle);
} }
@@ -116,7 +119,9 @@ public class ApnPreference extends Preference implements
if (context != null) { if (context != null) {
int pos = Integer.parseInt(getKey()); int pos = Integer.parseInt(getKey());
Uri url = ContentUris.withAppendedId(Telephony.Carriers.CONTENT_URI, pos); 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() { public boolean getSelectable() {
return mSelectable; return mSelectable;
} }
public void setSubId(int subId) {
mSubId = subId;
}
} }

View File

@@ -240,8 +240,9 @@ public class ApnSettings extends RestrictedSettingsFragment implements
private void fillList() { private void fillList() {
final TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); final TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
final String mccmnc = mSubscriptionInfo == null ? "" final int subId = mSubscriptionInfo != null ? mSubscriptionInfo.getSubscriptionId()
: tm.getSimOperator(mSubscriptionInfo.getSubscriptionId()); : SubscriptionManager.INVALID_SUBSCRIPTION_ID;
final String mccmnc = mSubscriptionInfo == null ? "" : tm.getSimOperator(subId);
Log.d(TAG, "mccmnc = " + mccmnc); Log.d(TAG, "mccmnc = " + mccmnc);
StringBuilder where = new StringBuilder("numeric=\"" + mccmnc + StringBuilder where = new StringBuilder("numeric=\"" + mccmnc +
"\" AND NOT (type='ia' AND (apn=\"\" OR apn IS NULL)) AND user_visible!=0"); "\" 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) { if (cursor != null) {
IccRecords r = null; IccRecords r = null;
if (mUiccController != null && mSubscriptionInfo != null) { if (mUiccController != null && mSubscriptionInfo != null) {
r = mUiccController.getIccRecords(SubscriptionManager.getPhoneId( r = mUiccController.getIccRecords(
mSubscriptionInfo.getSubscriptionId()), UiccController.APP_FAM_3GPP); SubscriptionManager.getPhoneId(subId), UiccController.APP_FAM_3GPP);
} }
PreferenceGroup apnList = (PreferenceGroup) findPreference("apn_list"); PreferenceGroup apnList = (PreferenceGroup) findPreference("apn_list");
apnList.removeAll(); apnList.removeAll();
@@ -285,6 +286,7 @@ public class ApnSettings extends RestrictedSettingsFragment implements
pref.setSummary(apn); pref.setSummary(apn);
pref.setPersistent(false); pref.setPersistent(false);
pref.setOnPreferenceChangeListener(this); pref.setOnPreferenceChangeListener(this);
pref.setSubId(subId);
boolean selectable = ((type == null) || !type.equals("mms")); boolean selectable = ((type == null) || !type.equals("mms"));
pref.setSelectable(selectable); pref.setSelectable(selectable);