Merge "MAP: Add developer option to control map version"
diff --git a/src/com/android/settings/ResetNetworkConfirm.java b/src/com/android/settings/ResetNetworkConfirm.java
index 609a2d6..c4e4baf 100644
--- a/src/com/android/settings/ResetNetworkConfirm.java
+++ b/src/com/android/settings/ResetNetworkConfirm.java
@@ -47,7 +47,6 @@
 import androidx.annotation.VisibleForTesting;
 import androidx.appcompat.app.AlertDialog;
 
-import com.android.ims.ImsManager;
 import com.android.internal.telephony.PhoneConstants;
 import com.android.settings.core.InstrumentedFragment;
 import com.android.settings.enterprise.ActionDisabledByAdminDialogHelper;
@@ -126,8 +125,6 @@
                 }
             }
 
-            ImsManager.getInstance(mContext,
-                    SubscriptionManager.getPhoneId(mSubId)).factoryReset();
             restoreDefaultApn(mContext);
             if (mEraseEsim) {
                 return RecoverySystem.wipeEuiccData(mContext, mPackageName);
diff --git a/src/com/android/settings/development/compat/PlatformCompatDashboard.java b/src/com/android/settings/development/compat/PlatformCompatDashboard.java
index dab45f2..53c6e9f 100644
--- a/src/com/android/settings/development/compat/PlatformCompatDashboard.java
+++ b/src/com/android/settings/development/compat/PlatformCompatDashboard.java
@@ -16,7 +16,9 @@
 
 package com.android.settings.development.compat;
 
+import static com.android.settings.development.AppPicker.EXTRA_DEBUGGABLE;
 import static com.android.settings.development.DevelopmentOptionsActivityRequestCodes.REQUEST_COMPAT_CHANGE_APP;
+import static com.android.internal.compat.OverrideAllowedState.ALLOWED;
 
 import android.app.Activity;
 import android.app.settings.SettingsEnums;
@@ -25,7 +27,9 @@
 import android.content.Intent;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
 import android.graphics.drawable.Drawable;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.RemoteException;
 import android.os.ServiceManager;
@@ -37,9 +41,12 @@
 import androidx.preference.PreferenceCategory;
 import androidx.preference.SwitchPreference;
 
+import com.android.internal.compat.AndroidBuildClassifier;
 import com.android.internal.compat.CompatibilityChangeConfig;
 import com.android.internal.compat.CompatibilityChangeInfo;
 import com.android.internal.compat.IPlatformCompat;
+import com.android.internal.compat.IOverrideValidator;
+import com.android.internal.compat.OverrideAllowedState;
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.development.AppPicker;
@@ -61,6 +68,8 @@
 
     private CompatibilityChangeInfo[] mChanges;
 
+    private AndroidBuildClassifier mAndroidBuildClassifier = new AndroidBuildClassifier();
+
     @VisibleForTesting
     String mSelectedApp;
 
@@ -114,17 +123,21 @@
         if (requestCode == REQUEST_COMPAT_CHANGE_APP) {
             if (resultCode == Activity.RESULT_OK) {
                 mSelectedApp = data.getAction();
-                addPreferences();
+                try {
+                    final ApplicationInfo applicationInfo = getApplicationInfo();
+                    addPreferences(applicationInfo);
+                } catch (PackageManager.NameNotFoundException e) {
+                    startAppPicker();
+                }
             }
             return;
         }
         super.onActivityResult(requestCode, resultCode, data);
     }
 
-    private void addPreferences() {
+    private void addPreferences(ApplicationInfo applicationInfo) {
         getPreferenceScreen().removeAll();
-        getPreferenceScreen().addPreference(
-                createAppPreference(getApplicationInfo().loadIcon(getPackageManager())));
+        getPreferenceScreen().addPreference(createAppPreference(applicationInfo));
         // Differentiate compatibility changes into default enabled, default disabled and enabled
         // after target sdk.
         final CompatibilityChangeConfig configMappings = getAppChangeMappings();
@@ -161,7 +174,7 @@
         try {
             final ApplicationInfo applicationInfo = getApplicationInfo();
             return getPlatformCompat().getAppConfig(applicationInfo);
-        } catch (RemoteException e) {
+        } catch (RemoteException | PackageManager.NameNotFoundException e) {
             throw new RuntimeException("Could not get app config!", e);
         }
     }
@@ -180,7 +193,15 @@
                 change.getName() != null ? change.getName() : "Change_" + change.getId();
         item.setSummary(changeName);
         item.setKey(changeName);
-        item.setEnabled(true);
+        boolean shouldEnable = true;
+        try {
+            shouldEnable = getPlatformCompat().getOverrideValidator()
+                           .getOverrideAllowedState(change.getId(), mSelectedApp)
+                           .state == ALLOWED;
+        } catch (RemoteException e) {
+            throw new RuntimeException("Could not check if change can be overridden for app.", e);
+        }
+        item.setEnabled(shouldEnable);
         item.setChecked(currentValue);
         item.setOnPreferenceChangeListener(
                 new CompatChangePreferenceChangeListener(change.getId()));
@@ -192,12 +213,8 @@
      *
      * @return an {@link ApplicationInfo} instance.
      */
-    ApplicationInfo getApplicationInfo() {
-        try {
-            return getPackageManager().getApplicationInfo(mSelectedApp, 0);
-        } catch (PackageManager.NameNotFoundException e) {
-            throw new RuntimeException("Could not get ApplicationInfo for selected app!", e);
-        }
+    ApplicationInfo getApplicationInfo() throws PackageManager.NameNotFoundException {
+        return getPackageManager().getApplicationInfo(mSelectedApp, 0);
     }
 
     /**
@@ -206,9 +223,10 @@
      * <p>The {@link Preference} contains the icon, package name and target SDK for the selected
      * app. Selecting this preference will also re-trigger the app selection dialog.</p>
      */
-    Preference createAppPreference(Drawable icon) {
-        final ApplicationInfo applicationInfo = getApplicationInfo();
-        final Preference appPreference = new Preference(getPreferenceScreen().getContext());
+    Preference createAppPreference(ApplicationInfo applicationInfo) {
+        final Context context = getPreferenceScreen().getContext();
+        final Drawable icon = applicationInfo.loadIcon(context.getPackageManager());
+        final Preference appPreference = new Preference(context);
         appPreference.setIcon(icon);
         appPreference.setSummary(mSelectedApp
                 + " SDK "
@@ -243,6 +261,11 @@
 
     private void startAppPicker() {
         final Intent intent = new Intent(getContext(), AppPicker.class);
+        // If build is neither userdebug nor eng, only include debuggable apps
+        final boolean debuggableBuild = mAndroidBuildClassifier.isDebuggableBuild();
+        if (!debuggableBuild) {
+            intent.putExtra(AppPicker.EXTRA_DEBUGGABLE, true /* value */);
+        }
         startActivityForResult(intent, REQUEST_COMPAT_CHANGE_APP);
     }
 
diff --git a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
index 675a1ba..f7ed1d0 100644
--- a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
+++ b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
@@ -26,12 +26,12 @@
 import android.os.PersistableBundle;
 import android.provider.Settings;
 import android.telephony.CarrierConfigManager;
-import android.telephony.RadioAccessFamily;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 import android.util.Log;
 
+
 import androidx.annotation.VisibleForTesting;
 import androidx.lifecycle.Lifecycle;
 import androidx.lifecycle.LifecycleObserver;
@@ -42,6 +42,7 @@
 
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConstants;
+import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
 import com.android.settings.R;
 
 import java.util.ArrayList;
@@ -194,18 +195,18 @@
                             R.array.enabled_networks_cdma_values);
                 } else {
                     switch (settingsNetworkMode) {
-                        case TelephonyManager.NETWORK_MODE_CDMA_EVDO:
-                        case TelephonyManager.NETWORK_MODE_CDMA_NO_EVDO:
-                        case TelephonyManager.NETWORK_MODE_EVDO_NO_CDMA:
+                        case TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO:
+                        case TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO:
+                        case TelephonyManagerConstants.NETWORK_MODE_EVDO_NO_CDMA:
                             preference.setEntries(
                                     R.array.enabled_networks_cdma_no_lte_choices);
                             preference.setEntryValues(
                                     R.array.enabled_networks_cdma_no_lte_values);
                             break;
-                        case TelephonyManager.NETWORK_MODE_GLOBAL:
-                        case TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO:
-                        case TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
-                        case TelephonyManager.NETWORK_MODE_LTE_ONLY:
+                        case TelephonyManagerConstants.NETWORK_MODE_GLOBAL:
+                        case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
+                        case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
+                        case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
                             preference.setEntries(
                                     R.array.enabled_networks_cdma_only_lte_choices);
                             preference.setEntryValues(
@@ -279,7 +280,7 @@
     }
 
     /***
-     * Preferred network list add 5G item.
+     * Generate preferred network choices list for 5G
      *
      * @string/enabled_networks_cdma_choices
      *         Before            |        After
@@ -364,9 +365,9 @@
                 new5gEntryValue = transformLteEntryValueTo5gEntryValue(oldEntryValue);
             } else if (mContext.getString(R.string.network_global).equals(oldEntry)) {
                 //oldEntry: network_global
-                //oldEntryValue: TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA
+                //oldEntryValue: TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA
                 oldEntryValue = Integer.toString(
-                        TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
+                        TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
             }
 
             if (!TextUtils.isEmpty(new5gEntry)) {
@@ -382,124 +383,151 @@
     }
 
     /**
-     * LTE network mode transform to 5G network mode.
+     * transform LTE network mode to 5G network mode.
      *
-     * @param networkMode this is LTE network mode.
-     * @return 5G network mode.
+     * @param networkMode an LTE network mode without 5G.
+     * @return the corresponding network mode with 5G.
      */
     private CharSequence transformLteEntryValueTo5gEntryValue(CharSequence networkMode) {
         int networkModeInt = Integer.valueOf(networkMode.toString());
-        return Integer.toString(addNrToNetworkType(networkModeInt));
+        return Integer.toString(addNrToLteNetworkType(networkModeInt));
+    }
+    private int addNrToLteNetworkType(int networkType) {
+        switch(networkType) {
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
+                return TelephonyManagerConstants.NETWORK_MODE_NR_LTE;
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
+                return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO;
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA:
+                return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA;
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
+                return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA;
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_WCDMA:
+                return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_WCDMA;
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA:
+                return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA;
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM:
+                return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM;
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
+                return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_WCDMA;
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
+                return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA;
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
+                return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA;
+            default:
+                return networkType; // not LTE
+        }
     }
 
-    private int addNrToNetworkType(int networkType) {
-        long networkTypeBitmasks = RadioAccessFamily.getRafFromNetworkType(networkType);
-        networkTypeBitmasks |= mTelephonyManager.NETWORK_TYPE_BITMASK_NR;
-        return RadioAccessFamily.getNetworkTypeFromRaf((int) networkTypeBitmasks);
-    }
-
+    /**
+     * Sets the display string for the network mode choice and selects the corresponding item
+     *
+     * @param preference ListPreference for selecting the preferred network mode.
+     * @param networkMode the current network mode. The current mode might not be an option in the
+     *                    choice list. The nearest choice is selected instead
+     */
     private void updatePreferenceValueAndSummary(ListPreference preference, int networkMode) {
         preference.setValue(Integer.toString(networkMode));
         switch (networkMode) {
-            case TelephonyManager.NETWORK_MODE_TDSCDMA_WCDMA:
-            case TelephonyManager.NETWORK_MODE_TDSCDMA_GSM_WCDMA:
-            case TelephonyManager.NETWORK_MODE_TDSCDMA_GSM:
+            case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_WCDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM:
                 preference.setValue(
-                        Integer.toString(TelephonyManager.NETWORK_MODE_TDSCDMA_GSM_WCDMA));
+                        Integer.toString(TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA));
                 preference.setSummary(R.string.network_3G);
                 break;
-            case TelephonyManager.NETWORK_MODE_WCDMA_ONLY:
-            case TelephonyManager.NETWORK_MODE_GSM_UMTS:
-            case TelephonyManager.NETWORK_MODE_WCDMA_PREF:
+            case TelephonyManagerConstants.NETWORK_MODE_WCDMA_ONLY:
+            case TelephonyManagerConstants.NETWORK_MODE_GSM_UMTS:
+            case TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF:
                 if (!mIsGlobalCdma) {
-                    preference.setValue(Integer.toString(TelephonyManager.NETWORK_MODE_WCDMA_PREF));
+                    preference.setValue(Integer.toString(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF));
                     preference.setSummary(R.string.network_3G);
                 } else {
-                    preference.setValue(Integer.toString(TelephonyManager
+                    preference.setValue(Integer.toString(TelephonyManagerConstants
                             .NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
                     preference.setSummary(R.string.network_global);
                 }
                 break;
-            case TelephonyManager.NETWORK_MODE_GSM_ONLY:
+            case TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY:
                 if (!mIsGlobalCdma) {
                     preference.setValue(
-                            Integer.toString(TelephonyManager.NETWORK_MODE_GSM_ONLY));
+                            Integer.toString(TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY));
                     preference.setSummary(R.string.network_2G);
                 } else {
                     preference.setValue(
-                            Integer.toString(TelephonyManager
+                            Integer.toString(TelephonyManagerConstants
                                     .NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
                     preference.setSummary(R.string.network_global);
                 }
                 break;
-            case TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA:
                 if (MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
                     preference.setSummary(
                             R.string.preferred_network_mode_lte_gsm_umts_summary);
                     break;
                 }
-            case TelephonyManager.NETWORK_MODE_LTE_ONLY:
-            case TelephonyManager.NETWORK_MODE_LTE_WCDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_WCDMA:
                 if (!mIsGlobalCdma) {
                     preference.setValue(
-                            Integer.toString(TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA));
+                            Integer.toString(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
                     preference.setSummary(
                             mShow4GForLTE ? R.string.network_4G : R.string.network_lte);
                 } else {
                     preference.setValue(
-                            Integer.toString(TelephonyManager
+                            Integer.toString(TelephonyManagerConstants
                                     .NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
                     preference.setSummary(R.string.network_global);
                 }
                 break;
-            case TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO:
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
                 if (MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
                     preference.setSummary(
                             R.string.preferred_network_mode_lte_cdma_summary);
                 } else {
                     preference.setValue(
-                            Integer.toString(TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO));
+                            Integer.toString(TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO));
                     preference.setSummary(
                             mDisplay5gList ? R.string.network_lte_pure : R.string.network_lte);
                 }
                 break;
-            case TelephonyManager.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
-                preference.setValue(Integer.toString(TelephonyManager
+            case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
+                preference.setValue(Integer.toString(TelephonyManagerConstants
                         .NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA));
                 preference.setSummary(R.string.network_3G);
                 break;
-            case TelephonyManager.NETWORK_MODE_CDMA_EVDO:
-            case TelephonyManager.NETWORK_MODE_EVDO_NO_CDMA:
-            case TelephonyManager.NETWORK_MODE_GLOBAL:
+            case TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO:
+            case TelephonyManagerConstants.NETWORK_MODE_EVDO_NO_CDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_GLOBAL:
                 preference.setValue(
-                        Integer.toString(TelephonyManager.NETWORK_MODE_CDMA_EVDO));
+                        Integer.toString(TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO));
                 preference.setSummary(R.string.network_3G);
                 break;
-            case TelephonyManager.NETWORK_MODE_CDMA_NO_EVDO:
+            case TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO:
                 preference.setValue(
-                        Integer.toString(TelephonyManager.NETWORK_MODE_CDMA_NO_EVDO));
+                        Integer.toString(TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO));
                 preference.setSummary(R.string.network_1x);
                 break;
-            case TelephonyManager.NETWORK_MODE_TDSCDMA_ONLY:
+            case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_ONLY:
                 preference.setValue(
-                        Integer.toString(TelephonyManager.NETWORK_MODE_TDSCDMA_ONLY));
+                        Integer.toString(TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_ONLY));
                 preference.setSummary(R.string.network_3G);
                 break;
-            case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM:
-            case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
-            case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA:
-            case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
-            case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
-            case TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM:
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
                 if (MobileNetworkUtils.isTdscdmaSupported(mContext, mSubId)) {
                     preference.setValue(
-                            Integer.toString(TelephonyManager
+                            Integer.toString(TelephonyManagerConstants
                                     .NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA));
                     preference.setSummary(
                             mDisplay5gList ? R.string.network_lte_pure : R.string.network_lte);
                 } else {
                     preference.setValue(
-                            Integer.toString(TelephonyManager
+                            Integer.toString(TelephonyManagerConstants
                                     .NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
                     if (mTelephonyManager.getPhoneType() == PhoneConstants.PHONE_TYPE_CDMA
                             || mIsGlobalCdma
@@ -516,15 +544,15 @@
                     }
                 }
                 break;
-            case TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO:
-            case TelephonyManager.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO:
+            case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
                 preference.setValue(Integer.toString(networkMode));
                 preference.setSummary(mContext.getString(R.string.network_5G)
                         + mContext.getString(R.string.network_recommended));
                 break;
-            case TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA:
                 preference.setValue(
-                        Integer.toString(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA));
+                        Integer.toString(TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA));
                 if (mTelephonyManager.getPhoneType() == PhoneConstants.PHONE_TYPE_CDMA
                         || mIsGlobalCdma
                         || MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
diff --git a/src/com/android/settings/network/telephony/MobileNetworkUtils.java b/src/com/android/settings/network/telephony/MobileNetworkUtils.java
index 73d964a..a4fa845 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkUtils.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkUtils.java
@@ -56,6 +56,7 @@
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.core.BasePreferenceController;
+import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
 import com.android.settingslib.development.DevelopmentSettingsEnabler;
 import com.android.settingslib.graph.SignalDrawable;
 
@@ -305,8 +306,8 @@
                     context.getContentResolver(),
                     android.provider.Settings.Global.PREFERRED_NETWORK_MODE + subId,
                     Phone.PREFERRED_NT_MODE);
-            if (settingsNetworkMode == TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA
-                    || settingsNetworkMode == TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO) {
+            if (settingsNetworkMode == TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA
+                    || settingsNetworkMode == TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO) {
                 return true;
             }
 
@@ -333,8 +334,8 @@
                 android.provider.Settings.Global.PREFERRED_NETWORK_MODE + subId,
                 Phone.PREFERRED_NT_MODE);
         if (isWorldMode(context, subId)) {
-            if (networkMode == TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO
-                    || networkMode == TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA) {
+            if (networkMode == TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO
+                    || networkMode == TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA) {
                 return true;
             } else if (shouldSpeciallyUpdateGsmCdma(context, subId)) {
                 return true;
@@ -397,7 +398,7 @@
                 context.getContentResolver(),
                 android.provider.Settings.Global.PREFERRED_NETWORK_MODE + subId,
                 Phone.PREFERRED_NT_MODE);
-        if (networkMode == TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO
+        if (networkMode == TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO
                 && isWorldMode(context, subId)) {
             return false;
         }
@@ -410,7 +411,7 @@
         }
 
         if (isWorldMode(context, subId)) {
-            if (networkMode == TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA) {
+            if (networkMode == TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA) {
                 return true;
             }
         }
@@ -515,12 +516,12 @@
                 context.getContentResolver(),
                 android.provider.Settings.Global.PREFERRED_NETWORK_MODE + subId,
                 Phone.PREFERRED_NT_MODE);
-        if (networkMode == TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM
-                || networkMode == TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA
-                || networkMode == TelephonyManager.NETWORK_MODE_LTE_TDSCDMA
-                || networkMode == TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_WCDMA
-                || networkMode == TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA
-                || networkMode == TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA) {
+        if (networkMode == TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM
+                || networkMode == TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA
+                || networkMode == TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA
+                || networkMode == TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA
+                || networkMode == TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA
+                || networkMode == TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA) {
             if (!isTdscdmaSupported(context, subId) && isWorldMode(context, subId)) {
                 return true;
             }
diff --git a/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java
index 89e2d5b8..72be4f4 100644
--- a/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java
+++ b/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java
@@ -29,6 +29,7 @@
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConstants;
 import com.android.settings.R;
+import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
 
 /**
  * Preference controller for "Preferred network mode"
@@ -113,48 +114,48 @@
 
     private int getPreferredNetworkModeSummaryResId(int NetworkMode) {
         switch (NetworkMode) {
-            case TelephonyManager.NETWORK_MODE_TDSCDMA_GSM_WCDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA:
                 return R.string.preferred_network_mode_tdscdma_gsm_wcdma_summary;
-            case TelephonyManager.NETWORK_MODE_TDSCDMA_GSM:
+            case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM:
                 return R.string.preferred_network_mode_tdscdma_gsm_summary;
-            case TelephonyManager.NETWORK_MODE_WCDMA_PREF:
+            case TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF:
                 return R.string.preferred_network_mode_wcdma_perf_summary;
-            case TelephonyManager.NETWORK_MODE_GSM_ONLY:
+            case TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY:
                 return R.string.preferred_network_mode_gsm_only_summary;
-            case TelephonyManager.NETWORK_MODE_TDSCDMA_WCDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_WCDMA:
                 return R.string.preferred_network_mode_tdscdma_wcdma_summary;
-            case TelephonyManager.NETWORK_MODE_WCDMA_ONLY:
+            case TelephonyManagerConstants.NETWORK_MODE_WCDMA_ONLY:
                 return R.string.preferred_network_mode_wcdma_only_summary;
-            case TelephonyManager.NETWORK_MODE_GSM_UMTS:
+            case TelephonyManagerConstants.NETWORK_MODE_GSM_UMTS:
                 return R.string.preferred_network_mode_gsm_wcdma_summary;
-            case TelephonyManager.NETWORK_MODE_CDMA_EVDO:
+            case TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO:
                 switch (mTelephonyManager.getLteOnCdmaMode()) {
                     case PhoneConstants.LTE_ON_CDMA_TRUE:
                         return R.string.preferred_network_mode_cdma_summary;
                     default:
                         return R.string.preferred_network_mode_cdma_evdo_summary;
                 }
-            case TelephonyManager.NETWORK_MODE_CDMA_NO_EVDO:
+            case TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO:
                 return R.string.preferred_network_mode_cdma_only_summary;
-            case TelephonyManager.NETWORK_MODE_EVDO_NO_CDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_EVDO_NO_CDMA:
                 return R.string.preferred_network_mode_evdo_only_summary;
-            case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA:
                 return R.string.preferred_network_mode_lte_tdscdma_summary;
-            case TelephonyManager.NETWORK_MODE_LTE_ONLY:
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
                 return R.string.preferred_network_mode_lte_summary;
-            case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM:
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM:
                 return R.string.preferred_network_mode_lte_tdscdma_gsm_summary;
-            case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
                 return R.string.preferred_network_mode_lte_tdscdma_gsm_wcdma_summary;
-            case TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA:
                 return R.string.preferred_network_mode_lte_gsm_wcdma_summary;
-            case TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO:
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
                 return R.string.preferred_network_mode_lte_cdma_evdo_summary;
-            case TelephonyManager.NETWORK_MODE_TDSCDMA_ONLY:
+            case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_ONLY:
                 return R.string.preferred_network_mode_tdscdma_summary;
-            case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
                 return R.string.preferred_network_mode_lte_tdscdma_cdma_evdo_gsm_wcdma_summary;
-            case TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
                 if (mTelephonyManager.getPhoneType() == PhoneConstants.PHONE_TYPE_CDMA
                         || mIsGlobalCdma
                         || MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
@@ -162,13 +163,13 @@
                 } else {
                     return R.string.preferred_network_mode_lte_summary;
                 }
-            case TelephonyManager.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
                 return R.string.preferred_network_mode_tdscdma_cdma_evdo_gsm_wcdma_summary;
-            case TelephonyManager.NETWORK_MODE_GLOBAL:
+            case TelephonyManagerConstants.NETWORK_MODE_GLOBAL:
                 return R.string.preferred_network_mode_cdma_evdo_gsm_wcdma_summary;
-            case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
                 return R.string.preferred_network_mode_lte_tdscdma_wcdma_summary;
-            case TelephonyManager.NETWORK_MODE_LTE_WCDMA:
+            case TelephonyManagerConstants.NETWORK_MODE_LTE_WCDMA:
                 return R.string.preferred_network_mode_lte_wcdma_summary;
             default:
                 return R.string.preferred_network_mode_global_summary;
diff --git a/src/com/android/settings/network/telephony/TelephonyConstants.java b/src/com/android/settings/network/telephony/TelephonyConstants.java
new file mode 100644
index 0000000..cfae572
--- /dev/null
+++ b/src/com/android/settings/network/telephony/TelephonyConstants.java
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.network.telephony;
+
+
+/**
+ * Contains hidden constants copied from the platform.
+ */
+public class TelephonyConstants {
+
+    /**
+     * Copied from {@link android.telephony.TelephonyManager}
+     */
+    public static class TelephonyManagerConstants {
+
+        // Network modes are in turn copied from RILConstants
+        // with one difference: NETWORK_MODE_CDMA is named NETWORK_MODE_CDMA_EVDO
+
+        /** GSM, WCDMA (WCDMA preferred) */
+        public static final int NETWORK_MODE_WCDMA_PREF = 0;
+
+        /** GSM only */
+        public static final int NETWORK_MODE_GSM_ONLY = 1;
+
+        /** WCDMA only */
+        public static final int NETWORK_MODE_WCDMA_ONLY = 2;
+
+        /** GSM, WCDMA (auto mode, according to PRL) */
+        public static final int NETWORK_MODE_GSM_UMTS = 3;
+
+        /** CDMA and EvDo (auto mode, according to PRL)
+         * this is NETWORK_MODE_CDMA in RILConstants.java
+         */
+        public static final int NETWORK_MODE_CDMA_EVDO = 4;
+
+        /** CDMA only */
+        public static final int NETWORK_MODE_CDMA_NO_EVDO = 5;
+
+        /** EvDo only */
+        public static final int NETWORK_MODE_EVDO_NO_CDMA = 6;
+
+        /** GSM, WCDMA, CDMA, and EvDo (auto mode, according to PRL) */
+        public static final int NETWORK_MODE_GLOBAL = 7;
+
+        /** LTE, CDMA and EvDo */
+        public static final int NETWORK_MODE_LTE_CDMA_EVDO = 8;
+
+        /** LTE, GSM and WCDMA */
+        public static final int NETWORK_MODE_LTE_GSM_WCDMA = 9;
+
+        /** LTE, CDMA, EvDo, GSM, and WCDMA */
+        public static final int NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA = 10;
+
+        /** LTE only mode. */
+        public static final int NETWORK_MODE_LTE_ONLY = 11;
+
+        /** LTE and WCDMA */
+        public static final int NETWORK_MODE_LTE_WCDMA = 12;
+
+        /** TD-SCDMA only */
+        public static final int NETWORK_MODE_TDSCDMA_ONLY = 13;
+
+        /** TD-SCDMA and WCDMA */
+        public static final int NETWORK_MODE_TDSCDMA_WCDMA = 14;
+
+        /** LTE and TD-SCDMA*/
+        public static final int NETWORK_MODE_LTE_TDSCDMA = 15;
+
+        /** TD-SCDMA and GSM */
+        public static final int NETWORK_MODE_TDSCDMA_GSM = 16;
+
+        /** TD-SCDMA, GSM and LTE */
+        public static final int NETWORK_MODE_LTE_TDSCDMA_GSM = 17;
+
+        /** TD-SCDMA, GSM and WCDMA */
+        public static final int NETWORK_MODE_TDSCDMA_GSM_WCDMA = 18;
+
+        /** LTE, TD-SCDMA and WCDMA */
+        public static final int NETWORK_MODE_LTE_TDSCDMA_WCDMA = 19;
+
+        /** LTE, TD-SCDMA, GSM, and WCDMA */
+        public static final int NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA = 20;
+
+        /** TD-SCDMA, CDMA, EVDO, GSM and WCDMA */
+        public static final int NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA = 21;
+
+        /** LTE, TDCSDMA, CDMA, EVDO, GSM and WCDMA */
+        public static final int NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA = 22;
+
+        /** NR 5G only mode */
+        public static final int NETWORK_MODE_NR_ONLY = 23;
+
+        /** NR 5G, LTE */
+        public static final int NETWORK_MODE_NR_LTE = 24;
+
+        /** NR 5G, LTE, CDMA and EvDo */
+        public static final int NETWORK_MODE_NR_LTE_CDMA_EVDO = 25;
+
+        /** NR 5G, LTE, GSM and WCDMA */
+        public static final int NETWORK_MODE_NR_LTE_GSM_WCDMA = 26;
+
+        /** NR 5G, LTE, CDMA, EvDo, GSM and WCDMA */
+        public static final int NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA = 27;
+
+        /** NR 5G, LTE and WCDMA */
+        public static final int NETWORK_MODE_NR_LTE_WCDMA = 28;
+
+        /** NR 5G, LTE and TDSCDMA */
+        public static final int NETWORK_MODE_NR_LTE_TDSCDMA = 29;
+
+        /** NR 5G, LTE, TD-SCDMA and GSM */
+        public static final int NETWORK_MODE_NR_LTE_TDSCDMA_GSM = 30;
+
+        /** NR 5G, LTE, TD-SCDMA, WCDMA */
+        public static final int NETWORK_MODE_NR_LTE_TDSCDMA_WCDMA = 31;
+
+        /** NR 5G, LTE, TD-SCDMA, GSM and WCDMA */
+        public static final int NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA = 32;
+
+        /** NR 5G, LTE, TD-SCDMA, CDMA, EVDO, GSM and WCDMA */
+        public static final int NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA = 33;
+    }
+
+
+}
diff --git a/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java b/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java
index 5f259f8..c988bf8 100644
--- a/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java
+++ b/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java
@@ -24,6 +24,7 @@
 import androidx.preference.Preference;
 
 import com.android.internal.telephony.Phone;
+import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
 
 /**
  * Preference controller for "System Select"
@@ -54,7 +55,7 @@
                 Settings.Global.PREFERRED_NETWORK_MODE + mSubId,
                 Phone.PREFERRED_NT_MODE);
         listPreference.setEnabled(
-                settingsNetworkMode != TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA);
+                settingsNetworkMode != TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
     }
 
     @Override
diff --git a/tests/robotests/src/com/android/settings/development/compat/PlatformCompatDashboardTest.java b/tests/robotests/src/com/android/settings/development/compat/PlatformCompatDashboardTest.java
index 693ed45..d0cb97a 100644
--- a/tests/robotests/src/com/android/settings/development/compat/PlatformCompatDashboardTest.java
+++ b/tests/robotests/src/com/android/settings/development/compat/PlatformCompatDashboardTest.java
@@ -16,16 +16,23 @@
 
 package com.android.settings.development.compat;
 
+import static com.android.internal.compat.OverrideAllowedState.ALLOWED;
+import static com.android.internal.compat.OverrideAllowedState.DISABLED_NOT_DEBUGGABLE;
+
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
 import android.compat.Compatibility.ChangeConfig;
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.graphics.drawable.Drawable;
 import android.os.RemoteException;
@@ -38,7 +45,9 @@
 
 import com.android.internal.compat.CompatibilityChangeConfig;
 import com.android.internal.compat.CompatibilityChangeInfo;
+import com.android.internal.compat.IOverrideValidator;
 import com.android.internal.compat.IPlatformCompat;
+import com.android.internal.compat.OverrideAllowedState;
 import com.android.settings.R;
 
 import org.junit.Before;
@@ -66,6 +75,10 @@
     private ApplicationInfo mApplicationInfo;
     @Mock
     private PreferenceManager mPreferenceManager;
+    @Mock
+    private IOverrideValidator mOverrideValidator;
+    @Mock
+    private PackageManager mPackageManager;
 
     private Context mContext;
     private CompatibilityChangeInfo[] mChanges;
@@ -81,7 +94,11 @@
         mChanges[3] = new CompatibilityChangeInfo(4L, "Enabled_After_SDK_1_2", 1, false, "");
         mChanges[4] = new CompatibilityChangeInfo(5L, "Enabled_After_SDK_2", 2, false, "");
         when(mPlatformCompat.listAllChanges()).thenReturn(mChanges);
-        mContext = RuntimeEnvironment.application;
+        when(mPlatformCompat.getOverrideValidator()).thenReturn(mOverrideValidator);
+        // By default, allow any change
+        when(mOverrideValidator.getOverrideAllowedState(anyLong(),anyString()))
+            .thenReturn(new OverrideAllowedState(ALLOWED, -1, -1));
+        mContext = spy(RuntimeEnvironment.application);
         mPreferenceManager = new PreferenceManager(mContext);
         mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
         mApplicationInfo.packageName = APP_NAME;
@@ -91,6 +108,7 @@
         doReturn(mPlatformCompat).when(mDashboard).getPlatformCompat();
         doReturn(mPreferenceScreen).when(mDashboard).getPreferenceScreen();
         doReturn(mPreferenceManager).when(mDashboard).getPreferenceManager();
+        doReturn(mPackageManager).when(mContext).getPackageManager();
     }
 
     @Test
@@ -107,8 +125,10 @@
     @Test
     public void createAppPreference_targetSdkEquals1_summaryReturnsAppNameAndTargetSdk() {
         mApplicationInfo.targetSdkVersion = 1;
+        Drawable icon = mock(Drawable.class);
+        when(mApplicationInfo.loadIcon(any(PackageManager.class))).thenReturn(icon);
 
-        Preference appPreference = mDashboard.createAppPreference(any(Drawable.class));
+        Preference appPreference = mDashboard.createAppPreference(mApplicationInfo);
 
         assertThat(appPreference.getSummary()).isEqualTo(APP_NAME + " SDK 1");
     }
@@ -128,6 +148,7 @@
         assertThat(enabledPreference.getSummary()).isEqualTo(mChanges[0].getName());
         assertThat(enabledPreference instanceof SwitchPreference).isTrue();
         assertThat(enabledSwitchPreference.isChecked()).isTrue();
+        assertThat(enabledSwitchPreference.isEnabled()).isTrue();
     }
 
     @Test
@@ -139,10 +160,32 @@
 
         Preference disabledPreference = mDashboard.createPreferenceForChange(mContext,
                 disabledChange, config);
-        
+
         assertThat(disabledPreference.getSummary()).isEqualTo(mChanges[1].getName());
         SwitchPreference disabledSwitchPreference = (SwitchPreference) disabledPreference;
         assertThat(disabledSwitchPreference.isChecked()).isFalse();
+        assertThat(disabledSwitchPreference.isEnabled()).isTrue();
+    }
+
+    @Test
+    public void createPreferenceForChange_cannotOverride_createDisabledEntry()
+                    throws RemoteException {
+        CompatibilityChangeInfo enabledChange = mChanges[0];
+        CompatibilityChangeConfig config = new CompatibilityChangeConfig(
+                new ChangeConfig(new HashSet<Long>(Arrays.asList(enabledChange.getId())),
+                        new HashSet<Long>()));
+        when(mOverrideValidator.getOverrideAllowedState(anyLong(),anyString()))
+            .thenReturn(new OverrideAllowedState(DISABLED_NOT_DEBUGGABLE, -1, -1));
+
+        Preference preference = mDashboard.createPreferenceForChange(mContext, enabledChange,
+                config);
+
+        SwitchPreference switchPreference = (SwitchPreference) preference;
+
+        assertThat(preference.getSummary()).isEqualTo(mChanges[0].getName());
+        assertThat(preference instanceof SwitchPreference).isTrue();
+        assertThat(switchPreference.isChecked()).isTrue();
+        assertThat(switchPreference.isEnabled()).isFalse();
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java
index 773041d..99c8e55 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java
@@ -25,7 +25,6 @@
 
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
@@ -45,6 +44,7 @@
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
+import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
 import org.junit.Before;
@@ -171,12 +171,12 @@
     public void updateState_updateByNetworkMode() {
         Settings.Global.putInt(mContext.getContentResolver(),
                 Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
-                TelephonyManager.NETWORK_MODE_TDSCDMA_GSM_WCDMA);
+                TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA);
 
         mController.updateState(mPreference);
 
         assertThat(mPreference.getValue()).isEqualTo(
-                String.valueOf(TelephonyManager.NETWORK_MODE_TDSCDMA_GSM_WCDMA));
+                String.valueOf(TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA));
         assertThat(mPreference.getSummary()).isEqualTo("3G");
     }
 
@@ -184,12 +184,12 @@
     public void updateState_updateByNetworkMode_useDefaultValue() {
         Settings.Global.putInt(mContext.getContentResolver(),
                 Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
-                TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA);
+                TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
 
         mController.updateState(mPreference);
 
         assertThat(mPreference.getValue()).isEqualTo(
-                String.valueOf(TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA));
+                String.valueOf(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
     }
 
     /**
@@ -392,27 +392,27 @@
     @Test
     public void onPreferenceChange_updateSuccess() {
         doReturn(true).when(mTelephonyManager).setPreferredNetworkType(SUB_ID,
-                TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA);
+                TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
 
         mController.onPreferenceChange(mPreference,
-                String.valueOf(TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA));
+                String.valueOf(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
 
         assertThat(Settings.Global.getInt(mContext.getContentResolver(),
                 Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID, 0)).isEqualTo(
-                TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA);
+                TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
     }
 
     @Test
     public void onPreferenceChange_updateFail() {
         doReturn(false).when(mTelephonyManager).setPreferredNetworkType(SUB_ID,
-                TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA);
+                TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
 
         mController.onPreferenceChange(mPreference,
-                String.valueOf(TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA));
+                String.valueOf(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
 
         assertThat(Settings.Global.getInt(mContext.getContentResolver(),
                 Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID, 0)).isNotEqualTo(
-                TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA);
+                TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
     }
 
     @Test
@@ -421,24 +421,24 @@
         doReturn(mPreference).when(screen).findPreference(KEY);
         Settings.Global.putInt(mContext.getContentResolver(),
                 Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
-                TelephonyManager.NETWORK_MODE_TDSCDMA_GSM_WCDMA);
+                TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA);
         mController.displayPreference(screen);
         mController.updateState(mPreference);
         mLifecycle.handleLifecycleEvent(ON_START);
 
         assertThat(Integer.parseInt(mPreference.getValue())).isEqualTo(
-                TelephonyManager.NETWORK_MODE_TDSCDMA_GSM_WCDMA);
+                TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA);
         assertThat(mPreference.getSummary()).isEqualTo("3G");
 
 
         Settings.Global.putInt(mContext.getContentResolver(),
                 Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
-                TelephonyManager.NETWORK_MODE_GSM_ONLY);
+                TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY);
         final Uri uri = Settings.Global.getUriFor(Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID);
         mContext.getContentResolver().notifyChange(uri, null);
 
         assertThat(Integer.parseInt(mPreference.getValue())).isEqualTo(
-                TelephonyManager.NETWORK_MODE_GSM_ONLY);
+                TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY);
         assertThat(mPreference.getSummary()).isEqualTo("2G");
     }
 }
diff --git a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java
index bf1ee8a..b1ef202 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java
@@ -41,6 +41,7 @@
 import android.telephony.TelephonyManager;
 
 import com.android.internal.telephony.PhoneConstants;
+import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -181,7 +182,7 @@
 
         Settings.Global.putInt(mContext.getContentResolver(),
                 android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1,
-                TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA);
+                TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
 
         assertThat(MobileNetworkUtils.isCdmaOptions(mContext, SUB_ID_1)).isTrue();
     }
@@ -255,7 +256,7 @@
 
         Settings.Global.putInt(mContext.getContentResolver(),
                 android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1,
-                TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM);
+                TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM);
         assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue();
     }
 
@@ -266,7 +267,7 @@
 
         Settings.Global.putInt(mContext.getContentResolver(),
                 android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1,
-                TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA);
+                TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA);
         assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue();
     }
 
@@ -277,7 +278,7 @@
 
         Settings.Global.putInt(mContext.getContentResolver(),
                 android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1,
-                TelephonyManager.NETWORK_MODE_LTE_TDSCDMA);
+                TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA);
         assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue();
     }
 
@@ -288,7 +289,7 @@
 
         Settings.Global.putInt(mContext.getContentResolver(),
                 android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1,
-                TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_WCDMA);
+                TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA);
         assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue();
     }
 
@@ -299,7 +300,7 @@
 
         Settings.Global.putInt(mContext.getContentResolver(),
                 android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1,
-                TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA);
+                TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA);
         assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue();
     }
 
@@ -310,7 +311,7 @@
 
         Settings.Global.putInt(mContext.getContentResolver(),
                 android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1,
-                TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
+                TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
         assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue();
     }
 
diff --git a/tests/robotests/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceControllerTest.java
index 9c03389..08eb2ef 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceControllerTest.java
@@ -37,6 +37,7 @@
 import androidx.preference.ListPreference;
 
 import com.android.settings.R;
+import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -127,12 +128,12 @@
     public void updateState_updateByNetworkMode() {
         Settings.Global.putInt(mContext.getContentResolver(),
                 Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
-                TelephonyManager.NETWORK_MODE_TDSCDMA_GSM_WCDMA);
+                TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA);
 
         mController.updateState(mPreference);
 
         assertThat(mPreference.getValue()).isEqualTo(
-                String.valueOf(TelephonyManager.NETWORK_MODE_TDSCDMA_GSM_WCDMA));
+                String.valueOf(TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA));
         assertThat(mPreference.getSummary()).isEqualTo(
                 mContext.getString(R.string.preferred_network_mode_tdscdma_gsm_wcdma_summary));
     }
@@ -140,26 +141,26 @@
     @Test
     public void onPreferenceChange_updateSuccess() {
         doReturn(true).when(mTelephonyManager).setPreferredNetworkType(SUB_ID,
-                TelephonyManager.NETWORK_MODE_LTE_TDSCDMA);
+                TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA);
 
         mController.onPreferenceChange(mPreference,
-                String.valueOf(TelephonyManager.NETWORK_MODE_LTE_TDSCDMA));
+                String.valueOf(TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA));
 
         assertThat(Settings.Global.getInt(mContext.getContentResolver(),
                 Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID, 0)).isEqualTo(
-                TelephonyManager.NETWORK_MODE_LTE_TDSCDMA);
+                TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA);
     }
 
     @Test
     public void onPreferenceChange_updateFail() {
         doReturn(false).when(mTelephonyManager).setPreferredNetworkType(SUB_ID,
-                TelephonyManager.NETWORK_MODE_LTE_TDSCDMA);
+                TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA);
 
         mController.onPreferenceChange(mPreference,
-                String.valueOf(TelephonyManager.NETWORK_MODE_LTE_TDSCDMA));
+                String.valueOf(TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA));
 
         assertThat(Settings.Global.getInt(mContext.getContentResolver(),
                 Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID, 0)).isNotEqualTo(
-                TelephonyManager.NETWORK_MODE_LTE_TDSCDMA);
+                TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceControllerTest.java
index fee6099..1a7fd86 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceControllerTest.java
@@ -33,6 +33,8 @@
 import androidx.preference.ListPreference;
 import androidx.preference.PreferenceManager;
 
+import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -118,7 +120,7 @@
                 mTelephonyManager).getCdmaRoamingMode();
         Settings.Global.putInt(mContext.getContentResolver(),
                 Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
-                TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA);
+                TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
 
         mController.updateState(mPreference);
 
diff --git a/tests/unit/src/com/android/settings/wifi/WifiCallingSettingUiTest.java b/tests/unit/src/com/android/settings/wifi/WifiCallingSettingUiTest.java
index 3198914..c3b63e8 100644
--- a/tests/unit/src/com/android/settings/wifi/WifiCallingSettingUiTest.java
+++ b/tests/unit/src/com/android/settings/wifi/WifiCallingSettingUiTest.java
@@ -30,6 +30,7 @@
 import static org.junit.matchers.JUnitMatchers.containsString;
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.nullable;
 import static org.mockito.Mockito.doReturn;
 
 import android.app.Activity;
@@ -106,7 +107,8 @@
                 .when(mSubscriptionController).queryLocalInterface(anyString());
         mImsManagerInstances.put(0, mImsManager0);
         mImsManagerInstances.put(1, mImsManager1);
-        doReturn(mSils).when(mSubscriptionController).getActiveSubscriptionInfoList(anyString());
+        doReturn(mSils).when(mSubscriptionController).getActiveSubscriptionInfoList(anyString(),
+                nullable(String.class));
         doReturn(0).when(mSubscriptionController).getPhoneId(0);
         doReturn(1).when(mSubscriptionController).getPhoneId(1);
         doReturn(0).when(mSubscriptionInfo0).getSubscriptionId();