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

Commit d4a25fd1 authored by SongFerngWang's avatar SongFerngWang Committed by SongFerng Wang
Browse files

Use SubscriptionManager.getResourcesForSubId to get Resources

To support multi-SIM card case. The code uses the
SubscriptionManager.getResourcesForSubId to get Resources.

Bug: 171843666
Test: make RunSettingsRoboTests ROBOTEST_FILTER=\
EnabledNetworkModePreferenceControllerTest

Change-Id: Ib31e23b81bdbd3b5336b45fc73994f40d021718b
parent 76eb4019
Loading
Loading
Loading
Loading
+61 −51
Original line number Diff line number Diff line
@@ -164,7 +164,22 @@ public class EnabledNetworkModePreferenceController extends
        }
    }

    private final static class PreferenceEntriesBuilder {
    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 CarrierConfigManager mCarrierConfigManager;
        private Context mContext;
        private TelephonyManager mTelephonyManager;
@@ -181,21 +196,6 @@ public class EnabledNetworkModePreferenceController extends
        private List<String> mEntries = new ArrayList<>();
        private List<Integer> mEntriesValue = new ArrayList<>();

        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
        }

        PreferenceEntriesBuilder(Context context, int subId) {
            this.mContext = context;
            this.mSubId = subId;
@@ -226,7 +226,7 @@ public class EnabledNetworkModePreferenceController extends
            int[] entryValuesInt;
            switch (getEnabledNetworkType()) {
                case ENABLED_NETWORKS_CDMA_CHOICES:
                    entryValues = mContext.getResources().getStringArray(
                    entryValues = getResourcesForSubId().getStringArray(
                            R.array.enabled_networks_cdma_values);
                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
                    if (entryValuesInt.length < 4) {
@@ -240,7 +240,7 @@ public class EnabledNetworkModePreferenceController extends
                    addGlobalEntry(entryValuesInt[3]);
                    break;
                case ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES:
                    entryValues = mContext.getResources().getStringArray(
                    entryValues = getResourcesForSubId().getStringArray(
                            R.array.enabled_networks_cdma_no_lte_values);
                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
                    if (entryValuesInt.length < 2) {
@@ -251,7 +251,7 @@ public class EnabledNetworkModePreferenceController extends
                    add1xEntry(entryValuesInt[1]);
                    break;
                case ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES:
                    entryValues = mContext.getResources().getStringArray(
                    entryValues = getResourcesForSubId().getStringArray(
                            R.array.enabled_networks_cdma_only_lte_values);
                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
                    if (entryValuesInt.length < 2) {
@@ -262,7 +262,7 @@ public class EnabledNetworkModePreferenceController extends
                    addGlobalEntry(entryValuesInt[1]);
                    break;
                case ENABLED_NETWORKS_TDSCDMA_CHOICES:
                    entryValues = mContext.getResources().getStringArray(
                    entryValues = getResourcesForSubId().getStringArray(
                            R.array.enabled_networks_tdscdma_values);
                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
                    if (entryValuesInt.length < 3) {
@@ -275,7 +275,7 @@ public class EnabledNetworkModePreferenceController extends
                    add2gEntry(entryValuesInt[2]);
                    break;
                case ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES:
                    entryValues = mContext.getResources().getStringArray(
                    entryValues = getResourcesForSubId().getStringArray(
                            R.array.enabled_networks_except_gsm_lte_values);
                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
                    if (entryValuesInt.length < 1) {
@@ -285,7 +285,7 @@ public class EnabledNetworkModePreferenceController extends
                    add3gEntry(entryValuesInt[0]);
                    break;
                case ENABLED_NETWORKS_EXCEPT_GSM_4G_CHOICES:
                    entryValues = mContext.getResources().getStringArray(
                    entryValues = getResourcesForSubId().getStringArray(
                            R.array.enabled_networks_except_gsm_values);
                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
                    if (entryValuesInt.length < 2) {
@@ -297,7 +297,7 @@ public class EnabledNetworkModePreferenceController extends
                    add3gEntry(entryValuesInt[1]);
                    break;
                case ENABLED_NETWORKS_EXCEPT_GSM_CHOICES:
                    entryValues = mContext.getResources().getStringArray(
                    entryValues = getResourcesForSubId().getStringArray(
                            R.array.enabled_networks_except_gsm_values);
                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
                    if (entryValuesInt.length < 2) {
@@ -309,7 +309,7 @@ public class EnabledNetworkModePreferenceController extends
                    add3gEntry(entryValuesInt[1]);
                    break;
                case ENABLED_NETWORKS_EXCEPT_LTE_CHOICES:
                    entryValues = mContext.getResources().getStringArray(
                    entryValues = getResourcesForSubId().getStringArray(
                            R.array.enabled_networks_except_lte_values);
                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
                    if (entryValuesInt.length < 2) {
@@ -320,7 +320,7 @@ public class EnabledNetworkModePreferenceController extends
                    add2gEntry(entryValuesInt[1]);
                    break;
                case ENABLED_NETWORKS_4G_CHOICES:
                    entryValues = mContext.getResources().getStringArray(
                    entryValues = getResourcesForSubId().getStringArray(
                            R.array.enabled_networks_values);
                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
                    if (entryValuesInt.length < 3) {
@@ -334,7 +334,7 @@ public class EnabledNetworkModePreferenceController extends
                    add2gEntry(entryValuesInt[2]);
                    break;
                case ENABLED_NETWORKS_CHOICES:
                    entryValues = mContext.getResources().getStringArray(
                    entryValues = getResourcesForSubId().getStringArray(
                            R.array.enabled_networks_values);
                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
                    if (entryValuesInt.length < 3) {
@@ -346,7 +346,7 @@ public class EnabledNetworkModePreferenceController extends
                    add2gEntry(entryValuesInt[2]);
                    break;
                case PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE:
                    entryValues = mContext.getResources().getStringArray(
                    entryValues = getResourcesForSubId().getStringArray(
                            R.array.preferred_network_mode_values_world_mode);
                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
                    if (entryValuesInt.length < 3) {
@@ -354,9 +354,14 @@ public class EnabledNetworkModePreferenceController extends
                                "PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE index error.");
                    }
                    addGlobalEntry(entryValuesInt[0]);
                    addCustomEntry(mContext.getString(R.string.network_world_mode_cdma_lte),

                    addCustomEntry(
                            getResourcesForSubId().getString(
                                    R.string.network_world_mode_cdma_lte),
                            entryValuesInt[1]);
                    addCustomEntry(mContext.getString(R.string.network_world_mode_gsm_lte),
                    addCustomEntry(
                            getResourcesForSubId().getString(
                                    R.string.network_world_mode_gsm_lte),
                            entryValuesInt[2]);
                    break;
                default:
@@ -571,8 +576,9 @@ public class EnabledNetworkModePreferenceController extends
                case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_WCDMA:
                    setSelectedEntry(
                            TelephonyManagerConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA);
                    setSummary(mContext.getString(R.string.network_5G)
                            + mContext.getString(R.string.network_recommended));
                    setSummary(getResourcesForSubId().getString(R.string.network_5G)
                            + getResourcesForSubId().getString(
                            R.string.network_recommended));
                    break;
                case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA:
                case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM:
@@ -581,13 +587,15 @@ public class EnabledNetworkModePreferenceController extends
                case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
                    setSelectedEntry(TelephonyManagerConstants
                            .NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA);
                    setSummary(mContext.getString(R.string.network_5G)
                            + mContext.getString(R.string.network_recommended));
                    setSummary(getResourcesForSubId().getString(R.string.network_5G)
                            + getResourcesForSubId().getString(
                            R.string.network_recommended));
                    break;
                case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO:
                    setSelectedEntry(TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO);
                    setSummary(mContext.getString(R.string.network_5G)
                            + mContext.getString(R.string.network_recommended));
                    setSummary(getResourcesForSubId().getString(R.string.network_5G)
                            + getResourcesForSubId().getString(
                            R.string.network_recommended));
                    break;
                case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA:
                    setSelectedEntry(
@@ -597,13 +605,15 @@ public class EnabledNetworkModePreferenceController extends
                            || MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
                        setSummary(R.string.network_global);
                    } else {
                        setSummary(mContext.getString(R.string.network_5G)
                                + mContext.getString(R.string.network_recommended));
                        setSummary(getResourcesForSubId().getString(R.string.network_5G)
                                + getResourcesForSubId().getString(
                                R.string.network_recommended));
                    }
                    break;
                default:
                    setSummary(
                            mContext.getString(R.string.mobile_network_mode_error, networkMode));
                            getResourcesForSubId().getString(
                                    R.string.mobile_network_mode_error, networkMode));
            }
        }

@@ -613,7 +623,7 @@ public class EnabledNetworkModePreferenceController extends
         * @param networkType an LTE network mode without 5G.
         * @return the corresponding network mode with 5G.
         */
        private static int addNrToLteNetworkType(int networkType) {
        private int addNrToLteNetworkType(int networkType) {
            switch(networkType) {
                case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
                    return TelephonyManagerConstants.NETWORK_MODE_NR_LTE;
@@ -647,7 +657,7 @@ public class EnabledNetworkModePreferenceController extends
         * @param networkType an 5G network mode.
         * @return the corresponding network mode without 5G.
         */
        private static int reduceNrToLteNetworkType(int networkType) {
        private int reduceNrToLteNetworkType(int networkType) {
            switch(networkType) {
                case TelephonyManagerConstants.NETWORK_MODE_NR_LTE:
                    return TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY;
@@ -689,8 +699,8 @@ public class EnabledNetworkModePreferenceController extends
        private void add5gEntry(int value) {
            boolean isNRValue = value >= TelephonyManagerConstants.NETWORK_MODE_NR_ONLY;
            if (showNrList() && isNRValue) {
                mEntries.add(mContext.getString(R.string.network_5G)
                        + mContext.getString(R.string.network_recommended));
                mEntries.add(getResourcesForSubId().getString(R.string.network_5G)
                        + getResourcesForSubId().getString(R.string.network_recommended));
                mEntriesValue.add(value);
                mIs5gEntryDisplayed = true;
            } else {
@@ -706,7 +716,7 @@ public class EnabledNetworkModePreferenceController extends
            Log.d(LOG_TAG, "addGlobalEntry. "
                    + " supported5GRadioAccessFamily: " + mSupported5gRadioAccessFamily
                    + " allowed5GNetworkType: " + mAllowed5gNetworkType);
            mEntries.add(mContext.getString(R.string.network_global));
            mEntries.add(getResourcesForSubId().getString(R.string.network_global));
            if (showNrList()) {
                value = addNrToLteNetworkType(value);
            }
@@ -722,9 +732,9 @@ public class EnabledNetworkModePreferenceController extends
         */
        private void addLteEntry(int value) {
            if (showNrList()) {
                mEntries.add(mContext.getString(R.string.network_lte_pure));
                mEntries.add(getResourcesForSubId().getString(R.string.network_lte_pure));
            } else {
                mEntries.add(mContext.getString(R.string.network_lte));
                mEntries.add(getResourcesForSubId().getString(R.string.network_lte));
            }
            mEntriesValue.add(value);
        }
@@ -734,25 +744,25 @@ public class EnabledNetworkModePreferenceController extends
         */
        private void add4gEntry(int value) {
            if (showNrList()) {
                mEntries.add(mContext.getString(R.string.network_4G_pure));
                mEntries.add(getResourcesForSubId().getString(R.string.network_4G_pure));
            } else {
                mEntries.add(mContext.getString(R.string.network_4G));
                mEntries.add(getResourcesForSubId().getString(R.string.network_4G));
            }
            mEntriesValue.add(value);
        }

        private void add3gEntry(int value) {
            mEntries.add(mContext.getString(R.string.network_3G));
            mEntries.add(getResourcesForSubId().getString(R.string.network_3G));
            mEntriesValue.add(value);
        }

        private void add2gEntry(int value) {
            mEntries.add(mContext.getString(R.string.network_2G));
            mEntries.add(getResourcesForSubId().getString(R.string.network_2G));
            mEntriesValue.add(value);
        }

        private void add1xEntry(int value) {
            mEntries.add(mContext.getString(R.string.network_1x));
            mEntries.add(getResourcesForSubId().getString(R.string.network_1x));
            mEntriesValue.add(value);
        }

@@ -800,7 +810,7 @@ public class EnabledNetworkModePreferenceController extends
        }

        private void setSummary(int summaryResId) {
            setSummary(mContext.getString(summaryResId));
            setSummary(getResourcesForSubId().getString(summaryResId));
        }

        private void setSummary(String summary) {
+10 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.settings.network.telephony;

import android.content.Context;
import android.content.res.Resources;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
@@ -74,4 +75,13 @@ public abstract class TelephonyBasePreferenceController extends BasePreferenceCo
                mContext.getSystemService(CarrierConfigManager.class);
        return carrierConfigMgr.getConfigForSubId(subId);
    }

    /**
     * Returns the resources associated with Subscription.
     *
     * @return Resources associated with Subscription.
     */
    public Resources getResourcesForSubId() {
        return SubscriptionManager.getResourcesForSubId(mContext, mSubId);
    }
}
+10 −10
Original line number Diff line number Diff line
@@ -363,43 +363,43 @@ public class EnabledNetworkModePreferenceControllerTest {

    @Test
    public void checkResource_stringArrayLength() {
        String[] entryValues = mContext.getResources().getStringArray(
        String[] entryValues = mController.getResourcesForSubId().getStringArray(
                R.array.enabled_networks_cdma_values);
        assertEquals(4, entryValues.length);

        entryValues = mContext.getResources().getStringArray(
        entryValues = mController.getResourcesForSubId().getStringArray(
                R.array.enabled_networks_cdma_no_lte_values);
        assertEquals(2, entryValues.length);

        entryValues = mContext.getResources().getStringArray(
        entryValues = mController.getResourcesForSubId().getStringArray(
                R.array.enabled_networks_cdma_only_lte_values);
        assertEquals(2, entryValues.length);

        entryValues = mContext.getResources().getStringArray(
        entryValues = mController.getResourcesForSubId().getStringArray(
                R.array.enabled_networks_tdscdma_values);
        assertEquals(3, entryValues.length);

        entryValues = mContext.getResources().getStringArray(
        entryValues = mController.getResourcesForSubId().getStringArray(
                R.array.enabled_networks_except_gsm_lte_values);
        assertEquals(1, entryValues.length);

        entryValues = mContext.getResources().getStringArray(
        entryValues = mController.getResourcesForSubId().getStringArray(
                R.array.enabled_networks_except_gsm_values);
        assertEquals(2, entryValues.length);

        entryValues = mContext.getResources().getStringArray(
        entryValues = mController.getResourcesForSubId().getStringArray(
                R.array.enabled_networks_except_lte_values);
        assertEquals(2, entryValues.length);

        entryValues = mContext.getResources().getStringArray(
        entryValues = mController.getResourcesForSubId().getStringArray(
                R.array.enabled_networks_values);
        assertEquals(3, entryValues.length);

        entryValues = mContext.getResources().getStringArray(
        entryValues = mController.getResourcesForSubId().getStringArray(
                R.array.enabled_networks_values);
        assertEquals(3, entryValues.length);

        entryValues = mContext.getResources().getStringArray(
        entryValues = mController.getResourcesForSubId().getStringArray(
                R.array.preferred_network_mode_values_world_mode);
        assertEquals(3, entryValues.length);
    }