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

Commit 6775f406 authored by SongFerng Wang's avatar SongFerng Wang Committed by Gerrit Code Review
Browse files

Merge "Replace allowedNetworkTypes with allowedNetworkTypesForReason"

parents 32d2075f fc435e37
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