Merge "Change empty apn type in user entered APN to non-read-only types." into oc-dr1-dev

This commit is contained in:
TreeHugger Robot
2017-07-06 23:50:28 +00:00
committed by Android (Google) Code Review

View File

@@ -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<String> 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) {