Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4fffc20a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

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

parents 21423623 94714cf0
Loading
Loading
Loading
Loading
+46 −2
Original line number Diff line number Diff line
@@ -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) {