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

Commit 762f75f1 authored by jackqdyulei's avatar jackqdyulei
Browse files

Add network selection preferences

1. Toggle to decide whether to auto select
2. Preference to go to network selection page

Bug: 114749736
Test: RunSettingsRoboTests
Change-Id: Ie9d8e9353bf2a99b8cba1fb14d5a440a43fde66e
parent 227526a8
Loading
Loading
Loading
Loading
+0 −22
Original line number Diff line number Diff line
@@ -16,28 +16,6 @@
-->

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <com.android.settings.network.telephony.NetworkOperators
        android:key="network_operators_category_key"
        android:title="@string/network_operator_category"
        android:persistent="false">

        <SwitchPreference
            android:key="button_auto_select_key"
            android:title="@string/select_automatically"
            android:persistent="false"/>

        <com.android.settings.network.telephony.NetworkSelectListPreference
            android:key="button_network_select_key"
            android:title="@string/network_select_title"
            android:persistent="false"/>

        <Preference
            android:key="button_choose_network_key"
            android:title="@string/choose_network_title"
            android:fragment="com.android.phone.NetworkSelectSetting" />
    </com.android.settings.network.telephony.NetworkOperators>

    <!--We want separate APN setting from reset of settings because-->
    <!--we want user to change it with caution.-->
    <PreferenceCategory
+17 −0
Original line number Diff line number Diff line
@@ -127,6 +127,23 @@
            settings:controller="com.android.settings.network.telephony.cdma.CdmaApnPreferenceController"/>
    </PreferenceCategory>

    <PreferenceCategory
        android:key="network_operators_category_key"
        android:title="@string/network_operator_category"
        settings:controller="com.android.settings.widget.PreferenceCategoryController">

        <SwitchPreference
            android:key="auto_select_key"
            android:title="@string/select_automatically"
            settings:controller="com.android.settings.network.telephony.gsm.AutoSelectPreferenceController"/>

        <Preference
            android:key="choose_network_key"
            android:title="@string/choose_network_title"
            android:fragment="com.android.phone.NetworkSelectSetting"
            settings:controller="com.android.settings.network.telephony.gsm.OpenNetworkSelectPagePreferenceController"/>
    </PreferenceCategory>

    <Preference
        android:key="carrier_settings_key"
        android:title="@string/carrier_settings_title"
+3 −32
Original line number Diff line number Diff line
@@ -46,8 +46,6 @@ public class GsmUmtsOptions {
    private Preference mCategoryAPNExpand;
    Preference mCarrierSettingPref;

    private NetworkOperators mNetworkOperator;

    private static final String BUTTON_APN_EXPAND_KEY = "button_gsm_apn_key";
    private static final String CATEGORY_APN_EXPAND_KEY = "category_gsm_apn_key";
    private static final String BUTTON_CARRIER_SETTINGS_KEY = "carrier_settings_key";
@@ -65,12 +63,8 @@ public class GsmUmtsOptions {
        mPrefFragment.addPreferencesFromResource(R.xml.gsm_umts_options);
        mButtonAPNExpand = (RestrictedPreference) mPrefScreen.findPreference(BUTTON_APN_EXPAND_KEY);
        mCategoryAPNExpand = mPrefScreen.findPreference(CATEGORY_APN_EXPAND_KEY);
        mNetworkOperator = (NetworkOperators) mPrefScreen
                .findPreference(NetworkOperators.CATEGORY_NETWORK_OPERATORS_KEY);
        mCarrierSettingPref = mPrefScreen.findPreference(BUTTON_CARRIER_SETTINGS_KEY);

        mNetworkOperator.initialize();

        update(subId);
    }

@@ -78,7 +72,7 @@ public class GsmUmtsOptions {
    // When that happens, we update GsmUmtsOptions with new parameters.
    protected void update(final int subId) {
        boolean addAPNExpand = true;
        boolean addNetworkOperatorsCategory = true;

        boolean addCarrierSettings = true;
        final TelephonyManager telephonyManager = TelephonyManager.from(mPrefFragment.getContext())
                .createForSubscriptionId(subId);
@@ -88,7 +82,6 @@ public class GsmUmtsOptions {
        if (telephonyManager.getPhoneType() != PhoneConstants.PHONE_TYPE_GSM) {
            log("Not a GSM phone");
            addAPNExpand = false;
            mNetworkOperator.setEnabled(false);
        } else {
            log("Not a CDMA phone");
            PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId);
@@ -102,20 +95,6 @@ public class GsmUmtsOptions {
                    && mCategoryAPNExpand != null) {
                addAPNExpand = false;
            }
            if (!carrierConfig.getBoolean(
                    CarrierConfigManager.KEY_OPERATOR_SELECTION_EXPAND_BOOL)) {
                addNetworkOperatorsCategory = false;
            }

            if (carrierConfig.getBoolean(CarrierConfigManager.KEY_CSP_ENABLED_BOOL)) {
                if (phone.isCspPlmnEnabled()) {
                    log("[CSP] Enabling Operator Selection menu.");
                    mNetworkOperator.setEnabled(true);
                } else {
                    log("[CSP] Disabling Operator Selection menu.");
                    addNetworkOperatorsCategory = false;
                }
            }

            // Read platform settings for carrier settings
            addCarrierSettings = carrierConfig.getBoolean(
@@ -154,13 +133,6 @@ public class GsmUmtsOptions {
            mPrefScreen.removePreference(mCategoryAPNExpand);
        }

        if (addNetworkOperatorsCategory) {
            mPrefScreen.addPreference(mNetworkOperator);
            mNetworkOperator.update(subId);
        } else {
            mPrefScreen.removePreference(mNetworkOperator);
        }

        if (addCarrierSettings) {
            mPrefScreen.addPreference(mCarrierSettingPref);
        } else {
@@ -170,11 +142,10 @@ public class GsmUmtsOptions {
    }

    protected boolean preferenceTreeClick(Preference preference) {
        return mNetworkOperator.preferenceTreeClick(preference);
        return false;
    }

    protected void log(String s) {
        android.util.Log.d(LOG_TAG, s);
    }
}
 No newline at end of file
+13 −35
Original line number Diff line number Diff line
@@ -45,7 +45,6 @@ import android.view.MenuItem;
import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.FragmentActivity;
import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceScreen;

@@ -60,11 +59,15 @@ import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.network.telephony.cdma.CdmaApnPreferenceController;
import com.android.settings.network.telephony.cdma.CdmaSubscriptionPreferenceController;
import com.android.settings.network.telephony.cdma.CdmaSystemSelectPreferenceController;
import com.android.settings.network.telephony.gsm.AutoSelectPreferenceController;
import com.android.settings.network.telephony.gsm.OpenNetworkSelectPagePreferenceController;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.widget.PreferenceCategoryController;
import com.android.settingslib.search.SearchIndexable;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
@@ -219,6 +222,15 @@ public class MobileNetworkFragment extends DashboardFragment implements
        use(EuiccPreferenceController.class).init(mSubId);
        use(WifiCallingPreferenceController.class).init(mSubId);

        final OpenNetworkSelectPagePreferenceController openNetworkSelectPagePreferenceController =
                use(OpenNetworkSelectPagePreferenceController.class).init(mSubId);
        final AutoSelectPreferenceController autoSelectPreferenceController =
                use(AutoSelectPreferenceController.class)
                        .init(mSubId)
                        .addListener(openNetworkSelectPagePreferenceController);
        use(PreferenceCategoryController.class).setChildren(
                Arrays.asList(autoSelectPreferenceController));

        mCdmaSystemSelectPreferenceController = use(CdmaSystemSelectPreferenceController.class);
        mCdmaSystemSelectPreferenceController.init(getPreferenceManager(), mSubId);
        mCdmaSubscriptionPreferenceController = use(CdmaSubscriptionPreferenceController.class);
@@ -468,10 +480,6 @@ public class MobileNetworkFragment extends DashboardFragment implements
        if (ps != null) {
            ps.setEnabled(hasActiveSubscriptions);
        }
        ps = findPreference(NetworkOperators.CATEGORY_NETWORK_OPERATORS_KEY);
        if (ps != null) {
            ps.setEnabled(hasActiveSubscriptions);
        }
        ps = findPreference(BUTTON_CARRIER_SETTINGS_KEY);
        if (ps != null) {
            ps.setEnabled(hasActiveSubscriptions);
@@ -480,20 +488,6 @@ public class MobileNetworkFragment extends DashboardFragment implements
        if (ps != null) {
            ps.setEnabled(hasActiveSubscriptions);
        }
        ps = findPreference(NetworkOperators.BUTTON_AUTO_SELECT_KEY);
        if (ps != null) {
            ps.setSummary(null);
            if (mTelephonyManager.getServiceState().getRoaming()) {
                ps.setEnabled(true);
            } else {
                ps.setEnabled(!mOnlyAutoSelectInHomeNW);
                if (mOnlyAutoSelectInHomeNW) {
                    ps.setSummary(getResources().getString(
                            R.string.manual_mode_disallowed_summary,
                            mTelephonyManager.getSimOperatorName()));
                }
            }
        }
    }

    @Override
@@ -605,17 +599,7 @@ public class MobileNetworkFragment extends DashboardFragment implements

        updateGsmUmtsOptions(this, prefSet, mSubId);

        PreferenceCategory networkOperatorCategory =
                (PreferenceCategory) prefSet.findPreference(
                        NetworkOperators.CATEGORY_NETWORK_OPERATORS_KEY);
        Preference carrierSettings = prefSet.findPreference(BUTTON_CARRIER_SETTINGS_KEY);
        if (networkOperatorCategory != null) {
            if (enable) {
                networkOperatorCategory.setEnabled(true);
            } else {
                prefSet.removePreference(networkOperatorCategory);
            }
        }
        if (carrierSettings != null) {
            prefSet.removePreference(carrierSettings);
        }
@@ -688,12 +672,6 @@ public class MobileNetworkFragment extends DashboardFragment implements

        if (preference == null) {
            return MetricsProto.MetricsEvent.VIEW_UNKNOWN;
        } else if (preference == preferenceScreen
                .findPreference(NetworkOperators.BUTTON_AUTO_SELECT_KEY)) {
            return MetricsProto.MetricsEvent.ACTION_MOBILE_NETWORK_AUTO_SELECT_NETWORK_TOGGLE;
        } else if (preference == preferenceScreen
                .findPreference(NetworkOperators.BUTTON_NETWORK_SELECT_KEY)) {
            return MetricsProto.MetricsEvent.ACTION_MOBILE_NETWORK_MANUAL_SELECT_NETWORK;
        } else if (preference == preferenceScreen
                .findPreference(BUTTON_CDMA_SYSTEM_SELECT_KEY)) {
            return MetricsProto.MetricsEvent.ACTION_MOBILE_NETWORK_CDMA_SYSTEM_SELECT;
+63 −0
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@ import android.os.SystemProperties;
import android.provider.Settings;
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;
@@ -275,15 +277,43 @@ public class MobileNetworkUtils {
        return false;
    }

    /**
     * return {@code true} if we need show Gsm related settings
     */
    public static boolean isGsmOptions(Context context, int subId) {
        if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
            return false;
        }
        if (isGsmBasicOptions(context, subId)) {
            return true;
        }
        final int settingsNetworkMode = android.provider.Settings.Global.getInt(
                context.getContentResolver(),
                android.provider.Settings.Global.PREFERRED_NETWORK_MODE + subId,
                Phone.PREFERRED_NT_MODE);
        if (isWorldMode(context, subId)) {
            if (settingsNetworkMode == TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO
                    || settingsNetworkMode == TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA) {
                return true;
            } else if (settingsNetworkMode == TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA
                    && !MobileNetworkUtils.isTdscdmaSupported(context, subId)) {
                return true;
            }
        }

        return false;
    }

    private static boolean isGsmBasicOptions(Context context, int subId) {
        final TelephonyManager telephonyManager = TelephonyManager.from(context)
                .createForSubscriptionId(subId);
        final PersistableBundle carrierConfig = context.getSystemService(
                CarrierConfigManager.class).getConfigForSubId(subId);

        if (telephonyManager.getPhoneType() == PhoneConstants.PHONE_TYPE_GSM) {
            return true;
        } else if (carrierConfig.getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL)) {
            return true;
        }

        return false;
@@ -318,6 +348,39 @@ public class MobileNetworkUtils {
        return worldModeOn;
    }

    /**
     * Return {@code true} if we need show settings for network selection(i.e. Verizon)
     */
    public static boolean shouldDisplayNetworkSelectOptions(Context context, int subId) {
        final TelephonyManager telephonyManager = TelephonyManager.from(context)
                .createForSubscriptionId(subId);
        final PersistableBundle carrierConfig = context.getSystemService(
                CarrierConfigManager.class).getConfigForSubId(subId);
        if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID
                || !carrierConfig.getBoolean(
                CarrierConfigManager.KEY_OPERATOR_SELECTION_EXPAND_BOOL)
                || (carrierConfig.getBoolean(CarrierConfigManager.KEY_CSP_ENABLED_BOOL)
                && !telephonyManager.isManualNetworkSelectionAllowed())) {
            return false;
        }

        if (isGsmBasicOptions(context, subId)) {
            return true;
        }

        final int settingsNetworkMode = android.provider.Settings.Global.getInt(
                context.getContentResolver(),
                android.provider.Settings.Global.PREFERRED_NETWORK_MODE + subId,
                Phone.PREFERRED_NT_MODE);
        if (isWorldMode(context, subId)) {
            if (settingsNetworkMode == TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA) {
                return true;
            }
        }

        return false;
    }

    public static boolean isShow4GForLTE(Context context) {
        //TODO(b/117882862): move this to framework
        try {
Loading