Merge "Remove unused code in telephony fragment"
diff --git a/src/com/android/settings/network/telephony/MobileNetworkFragment.java b/src/com/android/settings/network/telephony/MobileNetworkFragment.java
index 1e788f7..df6c7ab 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkFragment.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkFragment.java
@@ -16,46 +16,24 @@
 
 package com.android.settings.network.telephony;
 
-import static android.provider.Telephony.Carriers.ENFORCE_MANAGED_URI;
-
-import android.app.ActionBar;
 import android.app.Activity;
-import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.database.ContentObserver;
 import android.os.Bundle;
-import android.os.PersistableBundle;
 import android.os.UserManager;
 import android.provider.SearchIndexableResource;
-import android.telecom.PhoneAccountHandle;
-import android.telecom.TelecomManager;
-import android.telephony.CarrierConfigManager;
-import android.telephony.ServiceState;
-import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 import android.util.Log;
-import android.view.MenuItem;
 
 import androidx.annotation.VisibleForTesting;
-import androidx.fragment.app.FragmentActivity;
 import androidx.preference.Preference;
-import androidx.preference.PreferenceFragmentCompat;
-import androidx.preference.PreferenceScreen;
 
-import com.android.ims.ImsManager;
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto;
-import com.android.internal.telephony.Phone;
-import com.android.internal.telephony.PhoneConstants;
 import com.android.internal.telephony.TelephonyIntents;
 import com.android.settings.R;
-import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.dashboard.RestrictedDashboardFragment;
 import com.android.settings.network.telephony.cdma.CdmaSubscriptionPreferenceController;
 import com.android.settings.network.telephony.cdma.CdmaSystemSelectPreferenceController;
 import com.android.settings.network.telephony.gsm.AutoSelectPreferenceController;
@@ -70,73 +48,33 @@
 import java.util.List;
 
 @SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
-public class MobileNetworkFragment extends DashboardFragment implements
-        Preference.OnPreferenceChangeListener {
+public class MobileNetworkFragment extends RestrictedDashboardFragment {
 
-    // debug data
     private static final String LOG_TAG = "NetworkSettings";
-    private static final boolean DBG = true;
     public static final int REQUEST_CODE_EXIT_ECM = 17;
     @VisibleForTesting
     static final String KEY_CLICKED_PREF = "key_clicked_pref";
 
     //String keys for preference lookup
-    private static final String BUTTON_PREFERED_NETWORK_MODE = "preferred_network_mode_key";
-    private static final String BUTTON_ROAMING_KEY = "button_roaming_key";
-    private static final String BUTTON_CDMA_LTE_DATA_SERVICE_KEY = "cdma_lte_data_service_key";
-    private static final String BUTTON_ENABLED_NETWORKS_KEY = "enabled_networks_key";
-    private static final String BUTTON_4G_LTE_KEY = "enhanced_4g_lte";
-    private static final String BUTTON_CELL_BROADCAST_SETTINGS = "cell_broadcast_settings";
-    private static final String BUTTON_CARRIER_SETTINGS_KEY = "carrier_settings_key";
     private static final String BUTTON_CDMA_SYSTEM_SELECT_KEY = "cdma_system_select_key";
     private static final String BUTTON_CDMA_SUBSCRIPTION_KEY = "cdma_subscription_key";
-    private static final String BUTTON_CARRIER_SETTINGS_EUICC_KEY =
-            "carrier_settings_euicc_key";
-    private static final String BUTTON_MOBILE_DATA_ENABLE_KEY = "mobile_data_enable";
-    private static final String BUTTON_DATA_USAGE_KEY = "data_usage_summary";
-    private static final String BUTTON_ADVANCED_OPTIONS_KEY = "advanced_options";
-    private static final String CATEGORY_CALLING_KEY = "calling";
-    private static final String CATEGORY_GSM_APN_EXPAND_KEY = "category_gsm_apn_key";
-    private static final String CATEGORY_CDMA_APN_EXPAND_KEY = "category_cdma_apn_key";
-    private static final String BUTTON_GSM_APN_EXPAND_KEY = "button_gsm_apn_key";
-    private static final String BUTTON_CDMA_APN_EXPAND_KEY = "button_cdma_apn_key";
 
-    private static final String EXTRA_EXIT_ECM_RESULT = "exit_ecm_result";
-    private static final String LEGACY_ACTION_CONFIGURE_PHONE_ACCOUNT =
-            "android.telecom.action.CONNECTION_SERVICE_CONFIGURE";
-
-    private final BroadcastReceiver
-            mPhoneChangeReceiver = new PhoneChangeReceiver();
-    private final ContentObserver
-            mDpcEnforcedContentObserver = new DpcApnEnforcedObserver();
-
-    static final int preferredNetworkMode = Phone.PREFERRED_NT_MODE;
-
-    private SubscriptionManager mSubscriptionManager;
     private TelephonyManager mTelephonyManager;
-    private CarrierConfigManager mCarrierConfigManager;
-    private int mSubId;
+    private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
 
     private CdmaSystemSelectPreferenceController mCdmaSystemSelectPreferenceController;
     private CdmaSubscriptionPreferenceController mCdmaSubscriptionPreferenceController;
 
-    private static final String iface = "rmnet0"; //TODO: this will go away
-    private List<SubscriptionInfo> mActiveSubInfos;
-
-    private UserManager mUm;
-    private ImsManager mImsMgr;
-    private boolean mOkClicked;
-
+    private UserManager mUserManager;
     private String mClickedPrefKey;
-    private boolean mShow4GForLTE;
-    private boolean mIsGlobalCdma;
-    private boolean mOnlyAutoSelectInHomeNW;
-    private boolean mUnavailable;
+
+    public MobileNetworkFragment() {
+        super(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS);
+    }
 
     @Override
     public int getMetricsCategory() {
-        //TODO(b/114749736): add metrics id for it
-        return 0;
+        return MetricsProto.MetricsEvent.MOBILE_NETWORK;
     }
 
     /**
@@ -149,13 +87,9 @@
         if (super.onPreferenceTreeClick(preference)) {
             return true;
         }
-        sendMetricsEventPreferenceClicked(getPreferenceScreen(), preference);
         final String key = preference.getKey();
 
-        /** TODO: Refactor and get rid of the if's using subclasses */
-        if (preference.getKey().equals(BUTTON_4G_LTE_KEY)) {
-            return true;
-        } else if (TextUtils.equals(key, BUTTON_CDMA_SYSTEM_SELECT_KEY)
+        if (TextUtils.equals(key, BUTTON_CDMA_SYSTEM_SELECT_KEY)
                 || TextUtils.equals(key, BUTTON_CDMA_SUBSCRIPTION_KEY)) {
             if (mTelephonyManager.getEmergencyCallbackMode()) {
                 startActivityForResult(
@@ -169,35 +103,6 @@
         return false;
     }
 
-    private final SubscriptionManager.OnSubscriptionsChangedListener
-            mOnSubscriptionsChangeListener
-            = new SubscriptionManager.OnSubscriptionsChangedListener() {
-        @Override
-        public void onSubscriptionsChanged() {
-            if (DBG) log("onSubscriptionsChanged:");
-            initializeSubscriptions();
-        }
-    };
-
-    private void initializeSubscriptions() {
-        final FragmentActivity activity = getActivity();
-        if (activity == null) {
-            // Process preferences in activity only if its not destroyed
-            return;
-        }
-        updatePhone();
-        updateBody();
-        if (DBG) log("initializeSubscriptions:-");
-    }
-
-    private void updatePhone() {
-        if (mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
-            mImsMgr = ImsManager.getInstance(getContext(),
-                    SubscriptionManager.getPhoneId(mSubId));
-            mTelephonyManager = new TelephonyManager(getContext(), mSubId);
-        }
-    }
-
     @Override
     public void onAttach(Context context) {
         super.onAttach(context);
@@ -241,33 +146,8 @@
         super.onCreate(icicle);
         final Context context = getContext();
 
-        if (context == null) {
-            Log.e(LOG_TAG, "onCreate:- with no valid activity.");
-            return;
-        }
-
-        mUm = (UserManager) context.getSystemService(Context.USER_SERVICE);
-        mSubscriptionManager = SubscriptionManager.from(context);
-        mTelephonyManager = (TelephonyManager) context.getSystemService(
-                Context.TELEPHONY_SERVICE);
-        mCarrierConfigManager = new CarrierConfigManager(getContext());
-
-        try {
-            Context con = context.createPackageContext("com.android.systemui", 0);
-            int id = con.getResources().getIdentifier("config_show4GForLTE",
-                    "bool", "com.android.systemui");
-            mShow4GForLTE = con.getResources().getBoolean(id);
-        } catch (PackageManager.NameNotFoundException e) {
-            Log.e(LOG_TAG, "NameNotFoundException for show4GFotLTE");
-            mShow4GForLTE = false;
-        }
-
-        // Initialize mActiveSubInfo
-        int max = mSubscriptionManager.getActiveSubscriptionInfoCountMax();
-        mActiveSubInfos = mSubscriptionManager.getActiveSubscriptionInfoList();
-
-        updatePhone();
-        Log.i(LOG_TAG, "onCreate:-");
+        mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
+        mTelephonyManager = TelephonyManager.from(context).createForSubscriptionId(mSubId);
 
         onRestoreInstance(icicle);
     }
@@ -280,81 +160,13 @@
     }
 
     @Override
-    public void onActivityCreated(Bundle savedInstanceState) {
-        super.onActivityCreated(savedInstanceState);
-        if (mUm.hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS)
-                || !mUm.isSystemUser()) {
-            mUnavailable = true;
-            //TODO(b/114749736): migrate telephony_disallowed_preference_screen.xml
-        } else {
-            initializeSubscriptions();
-        }
-    }
-
-    private class PhoneChangeReceiver extends BroadcastReceiver {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            Log.i(LOG_TAG, "onReceive:");
-            if (getActivity() == null || getContext() == null) {
-                // Received broadcast and activity is in the process of being torn down.
-                return;
-            }
-            // When the radio changes (ex: CDMA->GSM), refresh all options.
-            updateBody();
-        }
-    }
-
-    private class DpcApnEnforcedObserver extends ContentObserver {
-        DpcApnEnforcedObserver() {
-            super(null);
-        }
-
-        @Override
-        public void onChange(boolean selfChange) {
-            Log.i(LOG_TAG, "DPC enforced onChange:");
-            if (getActivity() == null || getContext() == null) {
-                // Received content change and activity is in the process of being torn down.
-                return;
-            }
-            updateBody();
-        }
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        Log.i(LOG_TAG, "onResume:+");
-
-        if (mUnavailable) {
-            Log.i(LOG_TAG, "onResume:- ignore mUnavailable == false");
-            return;
-        }
-
-        // upon resumption from the sub-activity, make sure we re-enable the
-        // preferences.
-        getPreferenceScreen().setEnabled(true);
-
-        mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
-
-        final Context context = getContext();
-        IntentFilter intentFilter = new IntentFilter(
-                TelephonyIntents.ACTION_RADIO_TECHNOLOGY_CHANGED);
-        context.registerReceiver(mPhoneChangeReceiver, intentFilter);
-        context.getContentResolver().registerContentObserver(ENFORCE_MANAGED_URI, false,
-                mDpcEnforcedContentObserver);
-
-        Log.i(LOG_TAG, "onResume:-");
-
-    }
-
-    @Override
     protected int getPreferenceScreenResId() {
         return R.xml.network_setting_fragment;
     }
 
     @Override
     protected String getLogTag() {
-        return null;
+        return LOG_TAG;
     }
 
     @Override
@@ -363,156 +175,6 @@
         outState.putString(KEY_CLICKED_PREF, mClickedPrefKey);
     }
 
-    private boolean hasActiveSubscriptions() {
-        return mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID;
-    }
-
-    private void updateBodyBasicFields(FragmentActivity activity, PreferenceScreen prefSet,
-            int phoneSubId, boolean hasActiveSubscriptions) {
-        Context context = getContext();
-
-        ActionBar actionBar = activity.getActionBar();
-        if (actionBar != null) {
-            // android.R.id.home will be triggered in onOptionsItemSelected()
-            actionBar.setDisplayHomeAsUpEnabled(true);
-        }
-    }
-
-    private void updateBody() {
-        final FragmentActivity activity = getActivity();
-        final PreferenceScreen prefSet = getPreferenceScreen();
-        final boolean hasActiveSubscriptions = hasActiveSubscriptions();
-
-        if (activity == null) {
-            Log.e(LOG_TAG, "updateBody with no valid activity.");
-            return;
-        }
-
-        if (prefSet == null) {
-            Log.e(LOG_TAG, "updateBody with no null prefSet.");
-            return;
-        }
-
-        updateBodyBasicFields(activity, prefSet, mSubId, hasActiveSubscriptions);
-
-        if (hasActiveSubscriptions) {
-            updateBodyAdvancedFields(activity, prefSet, mSubId, hasActiveSubscriptions);
-        }
-    }
-
-    private void updateBodyAdvancedFields(FragmentActivity activity, PreferenceScreen prefSet,
-            int phoneSubId, boolean hasActiveSubscriptions) {
-        boolean isLteOnCdma = mTelephonyManager.getLteOnCdmaMode()
-                == PhoneConstants.LTE_ON_CDMA_TRUE;
-
-        if (DBG) {
-            log("updateBody: isLteOnCdma=" + isLteOnCdma + " phoneSubId=" + phoneSubId);
-        }
-
-        int settingsNetworkMode = android.provider.Settings.Global.getInt(
-                getContext().getContentResolver(),
-                android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId,
-                preferredNetworkMode);
-
-        PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
-        mIsGlobalCdma = isLteOnCdma
-                && carrierConfig.getBoolean(CarrierConfigManager.KEY_SHOW_CDMA_CHOICES_BOOL);
-        if (carrierConfig.getBoolean(
-                CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL)) {
-        } else if (carrierConfig.getBoolean(CarrierConfigManager
-                .KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL)
-                && !mTelephonyManager.getServiceState().getRoaming()
-                && mTelephonyManager.getServiceState().getDataRegState()
-                == ServiceState.STATE_IN_SERVICE) {
-
-            final int phoneType = mTelephonyManager.getPhoneType();
-            if (phoneType == PhoneConstants.PHONE_TYPE_GSM) {
-                updateGsmUmtsOptions(this, prefSet, phoneSubId);
-            } else {
-                throw new IllegalStateException("Unexpected phone type: " + phoneType);
-            }
-            // Since pref is being hidden from user, set network mode to default
-            // in case it is currently something else. That is possible if user
-            // changed the setting while roaming and is now back to home network.
-            settingsNetworkMode = preferredNetworkMode;
-        } else if (carrierConfig.getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL)) {
-            // set the listener for the mButtonPreferredNetworkMode list preference so we can issue
-            // change Preferred Network Mode.
-
-            updateGsmUmtsOptions(this, prefSet, phoneSubId);
-        }
-
-        final boolean missingDataServiceUrl = TextUtils.isEmpty(
-                android.provider.Settings.Global.getString(activity.getContentResolver(),
-                        android.provider.Settings.Global.SETUP_PREPAID_DATA_SERVICE_URL));
-
-        // Enable link to CMAS app settings depending on the value in config.xml.
-        final boolean isCellBroadcastAppLinkEnabled = activity.getResources().getBoolean(
-                com.android.internal.R.bool.config_cellBroadcastAppLinks);
-        if (!mUm.isAdminUser() || !isCellBroadcastAppLinkEnabled
-                || mUm.hasUserRestriction(UserManager.DISALLOW_CONFIG_CELL_BROADCASTS)) {
-            PreferenceScreen root = getPreferenceScreen();
-            Preference ps = findPreference(BUTTON_CELL_BROADCAST_SETTINGS);
-            if (ps != null) {
-                root.removePreference(ps);
-            }
-        }
-
-        mOnlyAutoSelectInHomeNW = carrierConfig.getBoolean(
-                CarrierConfigManager.KEY_ONLY_AUTO_SELECT_IN_HOME_NETWORK_BOOL);
-        Preference ps;
-        ps = findPreference(BUTTON_CELL_BROADCAST_SETTINGS);
-        if (ps != null) {
-            ps.setEnabled(hasActiveSubscriptions);
-        }
-        ps = findPreference(CATEGORY_GSM_APN_EXPAND_KEY);
-        if (ps != null) {
-            ps.setEnabled(hasActiveSubscriptions);
-        }
-        ps = findPreference(CATEGORY_CDMA_APN_EXPAND_KEY);
-        if (ps != null) {
-            ps.setEnabled(hasActiveSubscriptions);
-        }
-        ps = findPreference(BUTTON_CARRIER_SETTINGS_KEY);
-        if (ps != null) {
-            ps.setEnabled(hasActiveSubscriptions);
-        }
-        ps = findPreference(CATEGORY_CALLING_KEY);
-        if (ps != null) {
-            ps.setEnabled(hasActiveSubscriptions);
-        }
-    }
-
-    @Override
-    public void onPause() {
-        super.onPause();
-        if (DBG) log("onPause:+");
-
-        mSubscriptionManager
-                .removeOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
-
-        final Context context = getActivity();
-        context.unregisterReceiver(mPhoneChangeReceiver);
-        context.getContentResolver().unregisterContentObserver(mDpcEnforcedContentObserver);
-        if (DBG) log("onPause:-");
-    }
-
-    /**
-     * Implemented to support onPreferenceChangeListener to look for preference
-     * changes specifically on CLIR.
-     *
-     * @param preference is the preference to be changed, should be mButtonCLIR.
-     * @param objValue should be the value of the selection, NOT its localized
-     * display value.
-     */
-    public boolean onPreferenceChange(Preference preference, Object objValue) {
-        sendMetricsEventPreferenceChanged(getPreferenceScreen(), preference, objValue);
-
-        updateBody();
-        // always let the preference setting proceed.
-        return true;
-    }
-
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         switch (requestCode) {
@@ -532,202 +194,6 @@
         }
     }
 
-    private static void log(String msg) {
-        Log.d(LOG_TAG, msg);
-    }
-
-    private static void loge(String msg) {
-        Log.e(LOG_TAG, msg);
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        final int itemId = item.getItemId();
-        if (itemId == android.R.id.home) {  // See ActionBar#setDisplayHomeAsUpEnabled()
-            // Commenting out "logical up" capability. This is a workaround for issue 5278083.
-            //
-            // Settings app may not launch this activity via UP_ACTIVITY_CLASS but the other
-            // Activity that looks exactly same as UP_ACTIVITY_CLASS ("SubSettings" Activity).
-            // At that moment, this Activity launches UP_ACTIVITY_CLASS on top of the Activity.
-            // which confuses users.
-            // TODO: introduce better mechanism for "up" capability here.
-            /*Intent intent = new Intent(Intent.ACTION_MAIN);
-            intent.setClassName(UP_ACTIVITY_PACKAGE, UP_ACTIVITY_CLASS);
-            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-            startActivity(intent);*/
-            getActivity().finish();
-            return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    private boolean isWorldMode() {
-        boolean worldModeOn = false;
-        final String configString = getResources().getString(R.string.config_world_mode);
-
-        if (!TextUtils.isEmpty(configString)) {
-            String[] configArray = configString.split(";");
-            // Check if we have World mode configuration set to True only or config is set to True
-            // and SIM GID value is also set and matches to the current SIM GID.
-            if (configArray != null &&
-                    ((configArray.length == 1 && configArray[0].equalsIgnoreCase("true"))
-                            || (configArray.length == 2 && !TextUtils.isEmpty(configArray[1])
-                            && mTelephonyManager != null
-                            && configArray[1].equalsIgnoreCase(
-                            mTelephonyManager.getGroupIdLevel1())))) {
-                worldModeOn = true;
-            }
-        }
-
-        Log.d(LOG_TAG, "isWorldMode=" + worldModeOn);
-
-        return worldModeOn;
-    }
-
-    private void controlGsmOptions(boolean enable) {
-        PreferenceScreen prefSet = getPreferenceScreen();
-        if (prefSet == null) {
-            return;
-        }
-
-        updateGsmUmtsOptions(this, prefSet, mSubId);
-
-        Preference carrierSettings = prefSet.findPreference(BUTTON_CARRIER_SETTINGS_KEY);
-        if (carrierSettings != null) {
-            prefSet.removePreference(carrierSettings);
-        }
-    }
-
-    private boolean isSupportTdscdma() {
-        if (getResources().getBoolean(R.bool.config_support_tdscdma)) {
-            return true;
-        }
-
-        String operatorNumeric = mTelephonyManager.getServiceState().getOperatorNumeric();
-        String[] numericArray = getResources().getStringArray(
-                R.array.config_support_tdscdma_roaming_on_networks);
-        if (numericArray.length == 0 || operatorNumeric == null) {
-            return false;
-        }
-        for (String numeric : numericArray) {
-            if (operatorNumeric.equals(numeric)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Metrics events related methods. it takes care of all preferences possible in this
-     * fragment(except a few that log on their own). It doesn't only include preferences in
-     * network_setting_fragment.xml, but also those defined in GsmUmtsOptions and CdmaOptions.
-     */
-    private void sendMetricsEventPreferenceClicked(
-            PreferenceScreen preferenceScreen, Preference preference) {
-        final int category = getMetricsEventCategory(preferenceScreen, preference);
-        if (category == MetricsProto.MetricsEvent.VIEW_UNKNOWN) {
-            return;
-        }
-
-        // Send MetricsEvent on click. It includes preferences other than SwitchPreferences,
-        // which send MetricsEvent in onPreferenceChange.
-        // For ListPreferences, we log it here without a value, only indicating it's clicked to
-        // open the list dialog. When a value is chosen, another MetricsEvent is logged with
-        // new value in onPreferenceChange.
-        if (preference == preferenceScreen.findPreference(BUTTON_CDMA_SYSTEM_SELECT_KEY)
-                || preference == preferenceScreen.findPreference(BUTTON_CDMA_SUBSCRIPTION_KEY)
-                || preference == preferenceScreen.findPreference(BUTTON_GSM_APN_EXPAND_KEY)
-                || preference == preferenceScreen.findPreference(BUTTON_CDMA_APN_EXPAND_KEY)
-                || preference == preferenceScreen.findPreference(BUTTON_CARRIER_SETTINGS_KEY)) {
-            MetricsLogger.action(getContext(), category);
-        }
-    }
-
-    private void sendMetricsEventPreferenceChanged(
-            PreferenceScreen preferenceScreen, Preference preference, Object newValue) {
-        final int category = getMetricsEventCategory(preferenceScreen, preference);
-        if (category == MetricsProto.MetricsEvent.VIEW_UNKNOWN) {
-            return;
-        }
-
-        // MetricsEvent logging with new value, for SwitchPreferences and ListPreferences.
-        if (preference == preferenceScreen
-                .findPreference(BUTTON_CDMA_SYSTEM_SELECT_KEY)
-                || preference == preferenceScreen
-                .findPreference(BUTTON_CDMA_SUBSCRIPTION_KEY)) {
-            // Network select preference sends metrics event in its own listener.
-            MetricsLogger.action(getContext(), category, Integer.valueOf((String) newValue));
-        }
-    }
-
-    private int getMetricsEventCategory(
-            PreferenceScreen preferenceScreen, Preference preference) {
-
-        if (preference == null) {
-            return MetricsProto.MetricsEvent.VIEW_UNKNOWN;
-        } else if (preference == preferenceScreen
-                .findPreference(BUTTON_CDMA_SYSTEM_SELECT_KEY)) {
-            return MetricsProto.MetricsEvent.ACTION_MOBILE_NETWORK_CDMA_SYSTEM_SELECT;
-        } else if (preference == preferenceScreen
-                .findPreference(BUTTON_CDMA_SUBSCRIPTION_KEY)) {
-            return MetricsProto.MetricsEvent.ACTION_MOBILE_NETWORK_CDMA_SUBSCRIPTION_SELECT;
-        } else if (preference == preferenceScreen.findPreference(BUTTON_GSM_APN_EXPAND_KEY)
-                || preference == preferenceScreen.findPreference(BUTTON_CDMA_APN_EXPAND_KEY)) {
-            return MetricsProto.MetricsEvent.ACTION_MOBILE_NETWORK_APN_SETTINGS;
-        } else if (preference == preferenceScreen.findPreference(BUTTON_CARRIER_SETTINGS_KEY)) {
-            return MetricsProto.MetricsEvent.ACTION_MOBILE_NETWORK_CARRIER_SETTINGS;
-        } else {
-            return MetricsProto.MetricsEvent.VIEW_UNKNOWN;
-        }
-    }
-
-    private void updateGsmUmtsOptions(PreferenceFragmentCompat prefFragment,
-            PreferenceScreen prefScreen, final int subId) {
-        // We don't want to re-create GsmUmtsOptions if already exists. Otherwise, the
-        // preferences inside it will also be re-created which causes unexpected behavior.
-        // For example, the open dialog gets dismissed or detached after pause / resume.
-    }
-
-    private static Intent buildPhoneAccountConfigureIntent(
-            Context context, PhoneAccountHandle accountHandle) {
-        Intent intent = buildConfigureIntent(
-                context, accountHandle, TelecomManager.ACTION_CONFIGURE_PHONE_ACCOUNT);
-
-        if (intent == null) {
-            // If the new configuration didn't work, try the old configuration intent.
-            intent = buildConfigureIntent(
-                    context, accountHandle, LEGACY_ACTION_CONFIGURE_PHONE_ACCOUNT);
-            if (intent != null) {
-                Log.w(MobileNetworkFragment.LOG_TAG,
-                        "Phone account using old configuration intent: " + accountHandle);
-            }
-        }
-        return intent;
-    }
-
-    private static Intent buildConfigureIntent(
-            Context context, PhoneAccountHandle accountHandle, String actionStr) {
-        if (accountHandle == null || accountHandle.getComponentName() == null
-                || TextUtils.isEmpty(accountHandle.getComponentName().getPackageName())) {
-            return null;
-        }
-
-        // Build the settings intent.
-        Intent intent = new Intent(actionStr);
-        intent.setPackage(accountHandle.getComponentName().getPackageName());
-        intent.addCategory(Intent.CATEGORY_DEFAULT);
-        intent.putExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, accountHandle);
-
-        // Check to see that the phone account package can handle the setting intent.
-        PackageManager pm = context.getPackageManager();
-        List<ResolveInfo> resolutions = pm.queryIntentActivities(intent, 0);
-        if (resolutions.size() == 0) {
-            intent = null;  // set no intent if the package cannot handle it.
-        }
-
-        return intent;
-    }
-
     //TODO(b/114749736): update search provider
     public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider() {
diff --git a/src/com/android/settings/network/telephony/MobileSettingsActivity.java b/src/com/android/settings/network/telephony/MobileSettingsActivity.java
index ec740c9..d712515 100644
--- a/src/com/android/settings/network/telephony/MobileSettingsActivity.java
+++ b/src/com/android/settings/network/telephony/MobileSettingsActivity.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.network.telephony;
 
+import android.app.ActionBar;
 import android.content.Intent;
 import android.os.Bundle;
 import android.telephony.SubscriptionInfo;
@@ -70,6 +71,8 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
+        //TODO(b/114749736): add phone change receiver here: ACTION_RADIO_TECHNOLOGY_CHANGED
+
         setContentView(R.layout.mobile_settings_container);
         setActionBar(findViewById(R.id.mobile_action_bar));
         mSubscriptionManager = getSystemService(SubscriptionManager.class);
@@ -80,6 +83,12 @@
 
         mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
 
+        final ActionBar actionBar = getActionBar();
+        if (actionBar != null) {
+            // android.R.id.home will be triggered in onOptionsItemSelected()
+            actionBar.setDisplayHomeAsUpEnabled(true);
+        }
+
         updateSubscriptions(savedInstanceState);
     }