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;
private String[] mReadOnlyApnTypes;
private String[] mReadOnlyApnFields;
private boolean mReadOnlyApn;
+ private String mUserEnteredApnType;
/**
* Standard projection for the interesting columns of a normal note.
mReadOnlyApn = false;
mReadOnlyApnTypes = null;
mReadOnlyApnFields = null;
+ mUserEnteredApnType = null;
CarrierConfigManager configManager = (CarrierConfigManager)
getSystemService(Context.CARRIER_CONFIG_SERVICE);
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);
}
callUpdate = setStringValueAndCheckIfDiff(values,
Telephony.Carriers.TYPE,
- checkNotSet(mApnType.getText()),
+ checkNotSet(getUserEnteredApnType()),
callUpdate,
TYPE_INDEX);
// 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) {
}
}
+ 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) {