From: TreeHugger Robot Date: Mon, 19 Jun 2017 23:21:12 +0000 (+0000) Subject: Change empty apn type in user entered APN to non-read-only types. X-Git-Tag: android-x86-9.0-r1~89^2^2~3^2~27^2~44^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=937e2d5a8e9bd1397330876304d9ecb3e86f54c6;p=android-x86%2Fpackages-apps-Settings.git Change empty apn type in user entered APN to non-read-only types. Test: Manually added APN and verified read-only and non-wildcardable types are not included Bug: 38186417 Change-Id: I07bcf1c2a950a1257446f0a7beb602fed79423b3 --- diff --git a/src/com/android/settings/ApnEditor.java b/src/com/android/settings/ApnEditor.java index c8f9dd12e1..ba160abc43 100644 --- a/src/com/android/settings/ApnEditor.java +++ b/src/com/android/settings/ApnEditor.java @@ -52,6 +52,7 @@ import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.internal.telephony.PhoneConstants; import com.android.internal.util.ArrayUtils; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; @@ -117,6 +118,7 @@ public class ApnEditor extends SettingsPreferenceFragment private String[] mReadOnlyApnTypes; private String[] mReadOnlyApnFields; private boolean mReadOnlyApn; + private String mUserEnteredApnType; /** * Standard projection for the interesting columns of a normal note. @@ -212,6 +214,7 @@ public class ApnEditor extends SettingsPreferenceFragment mReadOnlyApn = false; mReadOnlyApnTypes = null; mReadOnlyApnFields = null; + mUserEnteredApnType = null; CarrierConfigManager configManager = (CarrierConfigManager) getSystemService(Context.CARRIER_CONFIG_SERVICE); @@ -220,6 +223,11 @@ public class ApnEditor extends SettingsPreferenceFragment if (b != null) { mReadOnlyApnTypes = b.getStringArray( CarrierConfigManager.KEY_READ_ONLY_APN_TYPES_STRING_ARRAY); + if (!ArrayUtils.isEmpty(mReadOnlyApnTypes)) { + for (String apnType : mReadOnlyApnTypes) { + Log.d(TAG, "onCreate: read only APN type: " + apnType); + } + } mReadOnlyApnFields = b.getStringArray( CarrierConfigManager.KEY_READ_ONLY_APN_FIELDS_STRING_ARRAY); } @@ -951,7 +959,7 @@ public class ApnEditor extends SettingsPreferenceFragment callUpdate = setStringValueAndCheckIfDiff(values, Telephony.Carriers.TYPE, - checkNotSet(mApnType.getText()), + checkNotSet(getUserEnteredApnType()), callUpdate, TYPE_INDEX); @@ -1057,10 +1065,11 @@ public class ApnEditor extends SettingsPreferenceFragment // if carrier does not allow editing certain apn types, make sure type does not include // those if (!ArrayUtils.isEmpty(mReadOnlyApnTypes) - && apnTypesMatch(mReadOnlyApnTypes, mApnType.getText())) { + && apnTypesMatch(mReadOnlyApnTypes, getUserEnteredApnType())) { StringBuilder stringBuilder = new StringBuilder(); for (String type : mReadOnlyApnTypes) { stringBuilder.append(type).append(", "); + Log.d(TAG, "getErrorMsg: appending type: " + type); } // remove last ", " if (stringBuilder.length() >= 2) { @@ -1107,6 +1116,41 @@ public class ApnEditor extends SettingsPreferenceFragment } } + private String getUserEnteredApnType() { + if (mUserEnteredApnType != null) { + return mUserEnteredApnType; + } + + // if user has not specified a type, map it to "ALL APN TYPES THAT ARE NOT READ-ONLY" + mUserEnteredApnType = mApnType.getText(); + if (mUserEnteredApnType != null) mUserEnteredApnType = mUserEnteredApnType.trim(); + if ((TextUtils.isEmpty(mUserEnteredApnType) + || PhoneConstants.APN_TYPE_ALL.equals(mUserEnteredApnType)) + && !ArrayUtils.isEmpty(mReadOnlyApnTypes)) { + StringBuilder editableApnTypes = new StringBuilder(); + List readOnlyApnTypes = Arrays.asList(mReadOnlyApnTypes); + boolean first = true; + for (String apnType : PhoneConstants.APN_TYPES) { + // add APN type if it is not read-only and is not wild-cardable + if (!readOnlyApnTypes.contains(apnType) + && !apnType.equals(PhoneConstants.APN_TYPE_IA) + && !apnType.equals(PhoneConstants.APN_TYPE_EMERGENCY)) { + if (first) { + first = false; + } else { + editableApnTypes.append(","); + } + editableApnTypes.append(apnType); + } + } + mUserEnteredApnType = editableApnTypes.toString(); + Log.d(TAG, "getUserEnteredApnType: changed apn type to editable apn types: " + + mUserEnteredApnType); + } + + return mUserEnteredApnType; + } + public static class ErrorDialog extends InstrumentedDialogFragment { public static void showError(ApnEditor editor) {