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

Commit 3df69245 authored by Bonian Chen's avatar Bonian Chen Committed by Android (Google) Code Review
Browse files

Merge "[Settings] Code refactor - NetworkModePreference" into tm-dev

parents 14ffe2a2 d5460431
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -66,6 +66,7 @@ android_library {
        "net-utils-framework-common",
        "settings-contextual-card-protos-lite",
        "settings-log-bridge-protos-lite",
        "settings-telephony-protos-lite",
        "contextualcards",
        "settings-logtags",
        "statslog-settings",
+9 −0
Original line number Diff line number Diff line
@@ -24,3 +24,12 @@ java_library_static {
    },
    srcs: ["settings_log_bridge.proto"],
}

java_library_static {
    name: "settings-telephony-protos-lite",
    host_supported: true,
    proto: {
        type: "lite",
    },
    srcs: ["network_mode_choices.proto"],
}
+112 −0
Original line number Diff line number Diff line
syntax = "proto2";

package com.android.settings.intelligence;
option java_multiple_files = false;
option java_package = "com.android.settings.network.telephony";
option java_outer_classname = "NetworkModeChoicesProto";

// EnabledNetworks is a list which tries to categorized the entries of popup menu
// based on carrier network types available to the end user.

// Next tag: 13
enum EnabledNetworks {
    // No EnabledNetworks specified.
    ENABLED_NETWORKS_UNSPECIFIED = 0;

    // For the case where either unsupported or unable to categorized properly.
    ENABLED_NETWORKS_UNKNOWN = 1;

    // For the case where CDMA is supported and LTE is not prioritized over
    // CDMA.
    ENABLED_NETWORKS_CDMA_CHOICES = 2;

    // For the case where CDMA is supported and LTE is not available.
    ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES = 3;

    // For the case where CDMA is supported and LTE is available.
    ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES = 4;

    // For the case where TDSCDMA is primary network type.
    ENABLED_NETWORKS_TDSCDMA_CHOICES = 5;

    // For the case where GSM and LTE options are removed from the menu.
    ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES = 6;

    // For the case where GSM and 4G options are removed from the menu.
    ENABLED_NETWORKS_EXCEPT_GSM_4G_CHOICES = 7;

    // For the case where GSM is removed from the menu, and both 4G/LTE are not an
    // option.
    ENABLED_NETWORKS_EXCEPT_GSM_CHOICES = 8;

    // For the case where LTE is disabled.
    ENABLED_NETWORKS_EXCEPT_LTE_CHOICES = 9;

    // For the case where GSM related carrier with 4G/LTE supported.
    ENABLED_NETWORKS_4G_CHOICES = 10;

    // For the case where GSM related carrier without 4G/LTE supported.
    ENABLED_NETWORKS_CHOICES = 11;

    // For the case where world mode is enabled.
    PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE = 12;
}

// A request for popup menu.

// Next tag: 4
message UiOptions {
    // Mapping to popup menu categories.
    required EnabledNetworks type = 1;

    // Resource which provides a list of network type values for this popup menu.
    required int32 choices = 2;

    // Presentation format of a continuous popop menu entries.
    // Each format may contains any numbers of popop menu entries.

    // Next tag: 12
    enum PresentFormat {

        // No PresentFormat specified.
        PRESENT_FORMAT_UNSPECIFIED = 0;

        // Append a CDMA 1x network option into popup menu.
        add1xEntry = 1;

        // Append a 2G network option into popup menu.
        add2gEntry = 2;

        // Append a 3G network option into popup menu.
        add3gEntry = 3;

        // Append a global mode option into popup menu.
        addGlobalEntry = 4;

        // Append a CDMA/LTE global mode option into popup menu.
        addWorldModeCdmaEntry = 5;

        // Append a GSM/LTE global mode option into popup menu.
        addWorldModeGsmEntry = 6;

        // Append a 4G network option into popup menu.
        add4gEntry = 7;

        // Append a LTE network option into popup menu.
        addLteEntry = 8;

        // Append a 5G network option into popup menu.
        add5gEntry = 9;

        // Append both 5G and 4G network options into popup menu.
        add5gAnd4gEntry = 10;

        // Append both 5G and LTE network options into popup menu.
        add5gAndLteEntry = 11;
    }

    // Format of popup menu entries.
    // The length of this entry need to be less than the network type values
    // referenced from "choices" field.
    repeated PresentFormat format = 3;
}
+110 −141
Original line number Diff line number Diff line
@@ -39,11 +39,14 @@ import com.android.settings.R;
import com.android.settings.network.AllowedNetworkTypesListener;
import com.android.settings.network.CarrierConfigCache;
import com.android.settings.network.SubscriptionsChangeListener;
import com.android.settings.network.telephony.NetworkModeChoicesProto.EnabledNetworks;
import com.android.settings.network.telephony.NetworkModeChoicesProto.UiOptions;
import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
import java.util.stream.Stream;

/**
@@ -187,21 +190,6 @@ public class EnabledNetworkModePreferenceController extends
        }
    }

    enum EnabledNetworks {
        ENABLED_NETWORKS_UNKNOWN,
        ENABLED_NETWORKS_CDMA_CHOICES,
        ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES,
        ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES,
        ENABLED_NETWORKS_TDSCDMA_CHOICES,
        ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES,
        ENABLED_NETWORKS_EXCEPT_GSM_4G_CHOICES,
        ENABLED_NETWORKS_EXCEPT_GSM_CHOICES,
        ENABLED_NETWORKS_EXCEPT_LTE_CHOICES,
        ENABLED_NETWORKS_4G_CHOICES,
        ENABLED_NETWORKS_CHOICES,
        PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE
    }

    private final class PreferenceEntriesBuilder {
        private CarrierConfigCache mCarrierConfigCache;
        private Context mContext;
@@ -256,163 +244,144 @@ public class EnabledNetworkModePreferenceController extends
            final boolean display2gOptions = carrierConfig
                    .getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL);
            clearAllEntries();
            String[] entryValues;
            int[] entryValuesInt;
            switch (getEnabledNetworkType()) {
            UiOptions.Builder uiOptions = UiOptions.newBuilder();
            uiOptions.setType(getEnabledNetworkType());
            switch (uiOptions.getType()) {
                case ENABLED_NETWORKS_CDMA_CHOICES:
                    entryValues = getResourcesForSubId().getStringArray(
                            R.array.enabled_networks_cdma_values);
                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
                    if (entryValuesInt.length < 4) {
                        throw new IllegalArgumentException(
                                "ENABLED_NETWORKS_CDMA_CHOICES index error.");
                    }
                    add5gEntry(addNrToLteNetworkType(entryValuesInt[0]));
                    addLteEntry(entryValuesInt[0]);
                    add3gEntry(entryValuesInt[1]);
                    if (display2gOptions) {
                        add1xEntry(entryValuesInt[2]);
                    }
                    addGlobalEntry(entryValuesInt[3]);
                    uiOptions = uiOptions
                            .setChoices(R.array.enabled_networks_cdma_values)
                            .addFormat(UiOptions.PresentFormat.add5gAndLteEntry)
                            .addFormat(UiOptions.PresentFormat.add3gEntry)
                            .addFormat(UiOptions.PresentFormat.add1xEntry)
                            .addFormat(UiOptions.PresentFormat.addGlobalEntry);
                    break;
                case ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES:
                    entryValues = getResourcesForSubId().getStringArray(
                            R.array.enabled_networks_cdma_no_lte_values);
                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
                    if (entryValuesInt.length < 2) {
                        throw new IllegalArgumentException(
                                "ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES index error.");
                    }
                    add3gEntry(entryValuesInt[0]);
                    if (display2gOptions) {
                        add1xEntry(entryValuesInt[1]);
                    }
                    uiOptions = uiOptions
                            .setChoices(R.array.enabled_networks_cdma_no_lte_values)
                            .addFormat(UiOptions.PresentFormat.add3gEntry)
                            .addFormat(UiOptions.PresentFormat.add1xEntry);
                    break;
                case ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES:
                    entryValues = getResourcesForSubId().getStringArray(
                            R.array.enabled_networks_cdma_only_lte_values);
                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
                    if (entryValuesInt.length < 2) {
                        throw new IllegalArgumentException(
                                "ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES index error.");
                    }
                    addLteEntry(entryValuesInt[0]);
                    addGlobalEntry(entryValuesInt[1]);
                    uiOptions = uiOptions
                            .setChoices(R.array.enabled_networks_cdma_only_lte_values)
                            .addFormat(UiOptions.PresentFormat.addLteEntry)
                            .addFormat(UiOptions.PresentFormat.addGlobalEntry);
                    break;
                case ENABLED_NETWORKS_TDSCDMA_CHOICES:
                    entryValues = getResourcesForSubId().getStringArray(
                            R.array.enabled_networks_tdscdma_values);
                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
                    if (entryValuesInt.length < 3) {
                        throw new IllegalArgumentException(
                                "ENABLED_NETWORKS_TDSCDMA_CHOICES index error.");
                    }
                    add5gEntry(addNrToLteNetworkType(entryValuesInt[0]));
                    addLteEntry(entryValuesInt[0]);
                    add3gEntry(entryValuesInt[1]);
                    if (display2gOptions) {
                        add2gEntry(entryValuesInt[2]);
                    }
                    uiOptions = uiOptions
                            .setChoices(R.array.enabled_networks_tdscdma_values)
                            .addFormat(UiOptions.PresentFormat.add5gAndLteEntry)
                            .addFormat(UiOptions.PresentFormat.add3gEntry)
                            .addFormat(UiOptions.PresentFormat.add2gEntry);
                    break;
                case ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES:
                    entryValues = getResourcesForSubId().getStringArray(
                            R.array.enabled_networks_except_gsm_lte_values);
                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
                    if (entryValuesInt.length < 1) {
                        throw new IllegalArgumentException(
                                "ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES index error.");
                    }
                    add3gEntry(entryValuesInt[0]);
                    uiOptions = uiOptions
                            .setChoices(R.array.enabled_networks_except_gsm_lte_values)
                            .addFormat(UiOptions.PresentFormat.add3gEntry);
                    break;
                case ENABLED_NETWORKS_EXCEPT_GSM_4G_CHOICES:
                    entryValues = getResourcesForSubId().getStringArray(
                            R.array.enabled_networks_except_gsm_values);
                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
                    if (entryValuesInt.length < 2) {
                        throw new IllegalArgumentException(
                                "ENABLED_NETWORKS_EXCEPT_GSM_4G_CHOICES index error.");
                    }
                    add5gEntry(addNrToLteNetworkType(entryValuesInt[0]));
                    add4gEntry(entryValuesInt[0]);
                    add3gEntry(entryValuesInt[1]);
                    uiOptions = uiOptions
                            .setChoices(R.array.enabled_networks_except_gsm_values)
                            .addFormat(UiOptions.PresentFormat.add5gAnd4gEntry)
                            .addFormat(UiOptions.PresentFormat.add3gEntry);
                    break;
                case ENABLED_NETWORKS_EXCEPT_GSM_CHOICES:
                    entryValues = getResourcesForSubId().getStringArray(
                            R.array.enabled_networks_except_gsm_values);
                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
                    if (entryValuesInt.length < 2) {
                        throw new IllegalArgumentException(
                                "ENABLED_NETWORKS_EXCEPT_GSM_CHOICES index error.");
                    }
                    add5gEntry(addNrToLteNetworkType(entryValuesInt[0]));
                    addLteEntry(entryValuesInt[0]);
                    add3gEntry(entryValuesInt[1]);
                    uiOptions = uiOptions
                            .setChoices(R.array.enabled_networks_except_gsm_values)
                            .addFormat(UiOptions.PresentFormat.add5gAndLteEntry)
                            .addFormat(UiOptions.PresentFormat.add3gEntry);
                    break;
                case ENABLED_NETWORKS_EXCEPT_LTE_CHOICES:
                    entryValues = getResourcesForSubId().getStringArray(
                            R.array.enabled_networks_except_lte_values);
                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
                    if (entryValuesInt.length < 2) {
                        throw new IllegalArgumentException(
                                "ENABLED_NETWORKS_EXCEPT_LTE_CHOICES index error.");
                    }
                    add3gEntry(entryValuesInt[0]);
                    if (carrierConfig.getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL)) {
                        add2gEntry(entryValuesInt[1]);
                    }
                    uiOptions = uiOptions
                            .setChoices(R.array.enabled_networks_except_lte_values)
                            .addFormat(UiOptions.PresentFormat.add3gEntry)
                            .addFormat(UiOptions.PresentFormat.add2gEntry);
                    break;
                case ENABLED_NETWORKS_4G_CHOICES:
                    entryValues = getResourcesForSubId().getStringArray(
                            R.array.enabled_networks_values);
                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
                    if (entryValuesInt.length < 3) {
                    uiOptions = uiOptions
                            .setChoices(R.array.enabled_networks_values)
                            .addFormat(UiOptions.PresentFormat.add5gAnd4gEntry)
                            .addFormat(UiOptions.PresentFormat.add3gEntry)
                            .addFormat(UiOptions.PresentFormat.add2gEntry);
                    break;
                case ENABLED_NETWORKS_CHOICES:
                    uiOptions = uiOptions
                            .setChoices(R.array.enabled_networks_values)
                            .addFormat(UiOptions.PresentFormat.add5gAndLteEntry)
                            .addFormat(UiOptions.PresentFormat.add3gEntry)
                            .addFormat(UiOptions.PresentFormat.add2gEntry);
                    break;
                case PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE:
                    uiOptions = uiOptions
                            .setChoices(R.array.preferred_network_mode_values_world_mode)
                            .addFormat(UiOptions.PresentFormat.addGlobalEntry)
                            .addFormat(UiOptions.PresentFormat.addWorldModeCdmaEntry)
                            .addFormat(UiOptions.PresentFormat.addWorldModeGsmEntry);
                    break;
                default:
                    throw new IllegalArgumentException("Not supported enabled network types.");
            }

            String[] entryValues = getResourcesForSubId().getStringArray(uiOptions.getChoices());
            final int[] entryValuesInt = Stream.of(entryValues)
                    .mapToInt(Integer::parseInt).toArray();
            final List<UiOptions.PresentFormat> formatList = uiOptions.getFormatList();
            if (entryValuesInt.length < formatList.size()) {
                throw new IllegalArgumentException(
                                "ENABLED_NETWORKS_4G_CHOICES index error.");
                        uiOptions.getType().name() + " index error.");
            }
                    add5gEntry(addNrToLteNetworkType(
                            entryValuesInt[0]));
                    add4gEntry(entryValuesInt[0]);
                    add3gEntry(entryValuesInt[1]);
            // Compose options based on given values and formats.
            IntStream.range(0, formatList.size()).forEach(entryIndex -> {
                switch (formatList.get(entryIndex)) {
                case add1xEntry:
                    if (display2gOptions) {
                        add2gEntry(entryValuesInt[2]);
                        add1xEntry(entryValuesInt[entryIndex]);
                    }
                    break;
                case ENABLED_NETWORKS_CHOICES:
                    entryValues = getResourcesForSubId().getStringArray(
                            R.array.enabled_networks_values);
                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
                    if (entryValuesInt.length < 3) {
                        throw new IllegalArgumentException("ENABLED_NETWORKS_CHOICES index error.");
                    }
                    add5gEntry(addNrToLteNetworkType(entryValuesInt[0]));
                    addLteEntry(entryValuesInt[0]);
                    add3gEntry(entryValuesInt[1]);
                case add2gEntry:
                    if (display2gOptions) {
                        add2gEntry(entryValuesInt[2]);
                        add2gEntry(entryValuesInt[entryIndex]);
                    }
                    break;
                case PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE:
                    entryValues = getResourcesForSubId().getStringArray(
                            R.array.preferred_network_mode_values_world_mode);
                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
                    if (entryValuesInt.length < 3) {
                        throw new IllegalArgumentException(
                                "PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE index error.");
                    }
                    addGlobalEntry(entryValuesInt[0]);

                case add3gEntry:
                    add3gEntry(entryValuesInt[entryIndex]);
                    break;
                case addGlobalEntry:
                    addGlobalEntry(entryValuesInt[entryIndex]);
                    break;
                case addWorldModeCdmaEntry:
                    addCustomEntry(
                            getResourcesForSubId().getString(
                                    R.string.network_world_mode_cdma_lte),
                            entryValuesInt[1]);
                            entryValuesInt[entryIndex]);
                    break;
                case addWorldModeGsmEntry:
                    addCustomEntry(
                            getResourcesForSubId().getString(
                                    R.string.network_world_mode_gsm_lte),
                            entryValuesInt[2]);
                            entryValuesInt[entryIndex]);
                    break;
                case add4gEntry:
                    add4gEntry(entryValuesInt[entryIndex]);
                    break;
                case addLteEntry:
                    addLteEntry(entryValuesInt[entryIndex]);
                    break;
                case add5gEntry:
                    add5gEntry(addNrToLteNetworkType(entryValuesInt[entryIndex]));
                    break;
                case add5gAnd4gEntry:
                    add5gEntry(addNrToLteNetworkType(entryValuesInt[entryIndex]));
                    add4gEntry(entryValuesInt[entryIndex]);
                    break;
                case add5gAndLteEntry:
                    add5gEntry(addNrToLteNetworkType(entryValuesInt[entryIndex]));
                    addLteEntry(entryValuesInt[entryIndex]);
                    break;
                default:
                    throw new IllegalArgumentException("Not supported enabled network types.");
                    throw new IllegalArgumentException("Not supported ui options format.");
                }
            });
        }

        private int getPreferredNetworkMode() {
+1 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ android_app {
        "jsr305",
        "settings-contextual-card-protos-lite",
        "settings-log-bridge-protos-lite",
	"settings-telephony-protos-lite",
        "contextualcards",
        "settings-logtags",
        "zxing-core-1.7",