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

Commit fc435e37 authored by SongFerngWang's avatar SongFerngWang
Browse files

Replace allowedNetworkTypes with allowedNetworkTypesForReason

- Replace getAllowedNetworkTypes with
getallowedNetworkTypesForReason(ALLOWED_NETWORK_TYPES_REASON_CARRIER)
- Replace "Settings.Global.PREFERRED_NETWORK_MODE" with
"getAllowedNetworkTypesForReason(USER)"
- Move EnabledNetworkModePreferenceControllerTest from robotests to unit
- Replace KEY_NR_ENABLED_BOOL with KEY_CARRIER_NR_AVAILABILITY_INT
- Rename PreferredNetworkModeContentObserver to AllowedNetworkTypesListener
Bug: 161434786
Test: build pass.
(PASS)atest CdmaSystemSelectPreferenceControllerTest
(PASS)atest PreferredNetworkModePreferenceControllerTest
(PASS)atest AllowedNetworkTypesListenerTest
(PASS)atest EnabledNetworkModePreferenceControllerTest
(PASS)atest MobileNetworkUtilsTest

Change-Id: I2b981569ad11cf70a558c1952cc2e077464328d8
Merged-In: I2b981569ad11cf70a558c1952cc2e077464328d8
parent 19113600
Loading
Loading
Loading
Loading
+93 −0
Original line number Diff line number Diff line
@@ -17,50 +17,77 @@
package com.android.settings.network;

import android.content.Context;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.provider.Settings;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;

import androidx.annotation.VisibleForTesting;

import java.util.Map;
import java.util.concurrent.Executor;


/**
 * {@link ContentObserver} to listen to Preferred Network Mode change
 * {@link PhoneStateListener} to listen to Allowed Network Types changed
 */
public class PreferredNetworkModeContentObserver extends ContentObserver {
public class AllowedNetworkTypesListener extends PhoneStateListener implements
        PhoneStateListener.AllowedNetworkTypesChangedListener {
    private static final String LOG_TAG = "NetworkModeListener";

    @VisibleForTesting
    OnPreferredNetworkModeChangedListener mListener;
    AllowedNetworkTypesListener.OnAllowedNetworkTypesChangedListener mListener;
    private long mAllowedNetworkType = -1;
    private Executor mExecutor;

    public PreferredNetworkModeContentObserver(Handler handler) {
        super(handler);
    public AllowedNetworkTypesListener(Executor executor) {
        super();
        mExecutor = executor;
    }

    public void setPreferredNetworkModeChangedListener(OnPreferredNetworkModeChangedListener lsn) {
    public void setAllowedNetworkTypesChangedListener(OnAllowedNetworkTypesChangedListener lsn) {
        mListener = lsn;
    }

    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        if (mListener != null) {
            mListener.onPreferredNetworkModeChanged();
        }
    /**
     * Register a PhoneStateListener for Allowed Network Types changed.
     * @param context the Context
     * @param subId the subscription id.
     */
    public void register(Context context, int subId) {
        TelephonyManager telephonyManager = context.getSystemService(
                TelephonyManager.class).createForSubscriptionId(subId);
        telephonyManager.registerPhoneStateListener(mExecutor, this);
    }

    public void register(Context context, int subId) {
        final Uri uri = Settings.Global.getUriFor(
                Settings.Global.PREFERRED_NETWORK_MODE + subId);
        context.getContentResolver().registerContentObserver(uri, false, this);
    /**
     * Unregister a PhoneStateListener for Allowed Network Types changed.
     * @param context the Context
     * @param subId the subscription id.
     */
    public void unregister(Context context, int subId) {
        TelephonyManager telephonyManager = context.getSystemService(
                TelephonyManager.class).createForSubscriptionId(subId);
        telephonyManager.unregisterPhoneStateListener(this);
    }

    public void unregister(Context context) {
        context.getContentResolver().unregisterContentObserver(this);
    @Override
    public void onAllowedNetworkTypesChanged(Map<Integer, Long> allowedNetworkTypesList) {
        long newAllowedNetworkType = allowedNetworkTypesList.get(
                TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER);
        if (mListener != null && mAllowedNetworkType != newAllowedNetworkType) {
            mListener.onAllowedNetworkTypesChanged();
            Log.d(LOG_TAG, "onAllowedNetworkChanged: " + mAllowedNetworkType);
        }
        mAllowedNetworkType = newAllowedNetworkType;
    }

    /**
     * Listener for update of Preferred Network Mode change
     */
    public interface OnPreferredNetworkModeChangedListener {
        void onPreferredNetworkModeChanged();
    public interface OnAllowedNetworkTypesChangedListener {
        /**
         * Notify the allowed network type changed.
         */
        void onAllowedNetworkTypesChanged();
    }
}
+19 −23
Original line number Diff line number Diff line
@@ -20,10 +20,7 @@ import static androidx.lifecycle.Lifecycle.Event.ON_START;
import static androidx.lifecycle.Lifecycle.Event.ON_STOP;

import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.os.PersistableBundle;
import android.provider.Settings;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -37,7 +34,7 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;

import com.android.settings.R;
import com.android.settings.network.PreferredNetworkModeContentObserver;
import com.android.settings.network.AllowedNetworkTypesListener;
import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;

import java.util.ArrayList;
@@ -53,7 +50,7 @@ public class EnabledNetworkModePreferenceController extends
        ListPreference.OnPreferenceChangeListener, LifecycleObserver {

    private static final String LOG_TAG = "EnabledNetworkMode";
    private PreferredNetworkModeContentObserver mPreferredNetworkModeObserver;
    private AllowedNetworkTypesListener mAllowedNetworkTypesListener;
    private Preference mPreference;
    private PreferenceScreen mPreferenceScreen;
    private TelephonyManager mTelephonyManager;
@@ -88,18 +85,18 @@ public class EnabledNetworkModePreferenceController extends

    @OnLifecycleEvent(ON_START)
    public void onStart() {
        if (mPreferredNetworkModeObserver == null) {
        if (mAllowedNetworkTypesListener == null) {
            return;
        }
        mPreferredNetworkModeObserver.register(mContext, mSubId);
        mAllowedNetworkTypesListener.register(mContext, mSubId);
    }

    @OnLifecycleEvent(ON_STOP)
    public void onStop() {
        if (mPreferredNetworkModeObserver == null) {
        if (mAllowedNetworkTypesListener == null) {
            return;
        }
        mPreferredNetworkModeObserver.unregister(mContext);
        mAllowedNetworkTypesListener.unregister(mContext, mSubId);
    }

    @Override
@@ -145,10 +142,10 @@ public class EnabledNetworkModePreferenceController extends
        mCarrierConfigManager = mContext.getSystemService(CarrierConfigManager.class);
        mBuilder = new PreferenceEntriesBuilder(mContext, mSubId);

        if (mPreferredNetworkModeObserver == null) {
            mPreferredNetworkModeObserver = new PreferredNetworkModeContentObserver(
                    new Handler(Looper.getMainLooper()));
            mPreferredNetworkModeObserver.setPreferredNetworkModeChangedListener(
        if (mAllowedNetworkTypesListener == null) {
            mAllowedNetworkTypesListener = new AllowedNetworkTypesListener(
                    mContext.getMainExecutor());
            mAllowedNetworkTypesListener.setAllowedNetworkTypesChangedListener(
                    () -> updatePreference());
        }

@@ -205,13 +202,12 @@ public class EnabledNetworkModePreferenceController extends
                    .createForSubscriptionId(mSubId);

            final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
            final boolean isNrEnabledFromCarrierConfig = carrierConfig != null
                    && carrierConfig.getBoolean(CarrierConfigManager.KEY_NR_ENABLED_BOOL);
            mAllowed5gNetworkType = checkSupportedRadioBitmask(
                    mTelephonyManager.getAllowedNetworkTypes(),
                    mTelephonyManager.getAllowedNetworkTypesForReason(
                            TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_CARRIER),
                    TelephonyManager.NETWORK_TYPE_BITMASK_NR);
            mSupported5gRadioAccessFamily = isNrEnabledFromCarrierConfig
                    && checkSupportedRadioBitmask(mTelephonyManager.getSupportedRadioAccessFamily(),
            mSupported5gRadioAccessFamily = checkSupportedRadioBitmask(
                    mTelephonyManager.getSupportedRadioAccessFamily(),
                    TelephonyManager.NETWORK_TYPE_BITMASK_NR);
            mIsGlobalCdma = mTelephonyManager.isLteCdmaEvdoGsmWcdmaEnabled()
                    && carrierConfig != null
@@ -370,9 +366,9 @@ public class EnabledNetworkModePreferenceController extends
        }

        private int getPreferredNetworkMode() {
            int networkMode = Settings.Global.getInt(mContext.getContentResolver(),
                    Settings.Global.PREFERRED_NETWORK_MODE + mSubId,
                    TelephonyManager.DEFAULT_PREFERRED_NETWORK_MODE);
            int networkMode = MobileNetworkUtils.getNetworkTypeFromRaf(
                    (int) mTelephonyManager.getAllowedNetworkTypesForReason(
                            TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER));
            if (!showNrList()) {
                Log.d(LOG_TAG, "Network mode :" + networkMode + " reduce NR");
                networkMode = reduceNrToLteNetworkType(networkMode);
+3 −2
Original line number Diff line number Diff line
@@ -95,8 +95,9 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc

        mShow5gLimitedDialog = carrierConfig.getBoolean(
                CarrierConfigManager.KEY_VOLTE_5G_LIMITED_ALERT_DIALOG_BOOL);
        mIsNrEnabledFromCarrierConfig = carrierConfig.getBoolean(
                CarrierConfigManager.KEY_NR_ENABLED_BOOL);
        mIsNrEnabledFromCarrierConfig = carrierConfig.getInt(
                CarrierConfigManager.KEY_CARRIER_NR_AVAILABILITY_INT)
                != CarrierConfigManager.CARRIER_NR_AVAILABILITY_NONE;
        return this;
    }

+19 −17
Original line number Diff line number Diff line
@@ -339,10 +339,10 @@ public class MobileNetworkUtils {
        }

        if (isWorldMode(context, subId)) {
            final int settingsNetworkMode = android.provider.Settings.Global.getInt(
                    context.getContentResolver(),
                    android.provider.Settings.Global.PREFERRED_NETWORK_MODE + subId,
                    TelephonyManager.DEFAULT_PREFERRED_NETWORK_MODE);
            final int settingsNetworkMode = getNetworkTypeFromRaf(
                    (int) telephonyManager.getAllowedNetworkTypesForReason(
                            TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER));

            if (settingsNetworkMode == NETWORK_MODE_LTE_GSM_WCDMA
                    || settingsNetworkMode == NETWORK_MODE_LTE_CDMA_EVDO
                    || settingsNetworkMode == NETWORK_MODE_NR_LTE_GSM_WCDMA
@@ -368,10 +368,11 @@ public class MobileNetworkUtils {
        if (isGsmBasicOptions(context, subId)) {
            return true;
        }
        final int networkMode = android.provider.Settings.Global.getInt(
                context.getContentResolver(),
                android.provider.Settings.Global.PREFERRED_NETWORK_MODE + subId,
                TelephonyManager.DEFAULT_PREFERRED_NETWORK_MODE);
        final TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class)
                .createForSubscriptionId(subId);
        final int networkMode = getNetworkTypeFromRaf(
                (int) telephonyManager.getAllowedNetworkTypesForReason(
                        TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER));
        if (isWorldMode(context, subId)) {
            if (networkMode == NETWORK_MODE_LTE_CDMA_EVDO
                    || networkMode == NETWORK_MODE_LTE_GSM_WCDMA
@@ -435,10 +436,9 @@ public class MobileNetworkUtils {
            return false;
        }

        final int networkMode = android.provider.Settings.Global.getInt(
                context.getContentResolver(),
                android.provider.Settings.Global.PREFERRED_NETWORK_MODE + subId,
                TelephonyManager.DEFAULT_PREFERRED_NETWORK_MODE);
        final int networkMode = getNetworkTypeFromRaf(
                (int) telephonyManager.getAllowedNetworkTypesForReason(
                        TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER));
        if (networkMode == TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO
                && isWorldMode(context, subId)) {
            return false;
@@ -550,15 +550,17 @@ public class MobileNetworkUtils {
     */
    @VisibleForTesting
    static boolean shouldSpeciallyUpdateGsmCdma(Context context, int subId) {
        final int networkMode = android.provider.Settings.Global.getInt(
                context.getContentResolver(),
                android.provider.Settings.Global.PREFERRED_NETWORK_MODE + subId,
                TelephonyManager.DEFAULT_PREFERRED_NETWORK_MODE);
        final TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class)
                .createForSubscriptionId(subId);
        final int networkMode = getNetworkTypeFromRaf(
                (int) telephonyManager.getAllowedNetworkTypesForReason(
                        TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER));
        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_TDSCDMA_CDMA_EVDO_GSM_WCDMA
                || networkMode == TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA) {
            if (!isTdscdmaSupported(context, subId) && isWorldMode(context, subId)) {
                return true;
+7 −9
Original line number Diff line number Diff line
@@ -20,8 +20,6 @@ import static androidx.lifecycle.Lifecycle.Event.ON_START;
import static androidx.lifecycle.Lifecycle.Event.ON_STOP;

import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.telephony.SubscriptionManager;

import androidx.lifecycle.Lifecycle;
@@ -29,7 +27,7 @@ import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.preference.PreferenceScreen;

import com.android.settings.network.PreferredNetworkModeContentObserver;
import com.android.settings.network.AllowedNetworkTypesListener;
import com.android.settings.widget.PreferenceCategoryController;

/**
@@ -39,15 +37,15 @@ public class NetworkPreferenceCategoryController extends PreferenceCategoryContr
        implements LifecycleObserver {

    private PreferenceScreen mPreferenceScreen;
    private PreferredNetworkModeContentObserver mPreferredNetworkModeObserver;
    private AllowedNetworkTypesListener mAllowedNetworkTypesListener;
    protected int mSubId;

    public NetworkPreferenceCategoryController(Context context, String key) {
        super(context, key);
        mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
        mPreferredNetworkModeObserver = new PreferredNetworkModeContentObserver(
                new Handler(Looper.getMainLooper()));
        mPreferredNetworkModeObserver.setPreferredNetworkModeChangedListener(
        mAllowedNetworkTypesListener = new AllowedNetworkTypesListener(
                context.getMainExecutor());
        mAllowedNetworkTypesListener.setAllowedNetworkTypesChangedListener(
                () -> updatePreference());
    }

@@ -57,12 +55,12 @@ public class NetworkPreferenceCategoryController extends PreferenceCategoryContr

    @OnLifecycleEvent(ON_START)
    public void onStart() {
        mPreferredNetworkModeObserver.register(mContext, mSubId);
        mAllowedNetworkTypesListener.register(mContext, mSubId);
    }

    @OnLifecycleEvent(ON_STOP)
    public void onStop() {
        mPreferredNetworkModeObserver.unregister(mContext);
        mAllowedNetworkTypesListener.unregister(mContext, mSubId);
    }

    @Override
Loading