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

Commit 10001060 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Check wfc roaming config when read"

parents 30090771 f9c68dc9
Loading
Loading
Loading
Loading
+21 −2
Original line number Diff line number Diff line
@@ -21,8 +21,10 @@ import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Looper;
import android.os.PersistableBundle;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
import android.telephony.CarrierConfigManager;
import android.telephony.PhoneStateListener;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -50,17 +52,24 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont

    private TelephonyManager mTelephonyManager;
    @VisibleForTesting
    CarrierConfigManager mCarrierConfigManager;
    @VisibleForTesting
    ImsManager mImsManager;
    @VisibleForTesting
    PhoneAccountHandle mSimCallManager;
    private PhoneCallStateListener mPhoneStateListener;
    private Preference mPreference;
    private boolean mEditableWfcRoamingMode;
    private boolean mUseWfcHomeModeForRoaming;

    public WifiCallingPreferenceController(Context context, String key) {
        super(context, key);
        mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
        mTelephonyManager = context.getSystemService(TelephonyManager.class);
        mSimCallManager = context.getSystemService(TelecomManager.class).getSimCallManager();
        mPhoneStateListener = new PhoneCallStateListener(Looper.getMainLooper());
        mEditableWfcRoamingMode = true;
        mUseWfcHomeModeForRoaming = false;
    }

    @Override
@@ -109,9 +118,9 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont
        } else {
            int resId = com.android.internal.R.string.wifi_calling_off_summary;
            if (mImsManager.isWfcEnabledByUser()) {
                boolean wfcRoamingEnabled = mEditableWfcRoamingMode && !mUseWfcHomeModeForRoaming;
                final boolean isRoaming = mTelephonyManager.isNetworkRoaming();
                int wfcMode = mImsManager.getWfcMode(isRoaming);

                int wfcMode = mImsManager.getWfcMode(isRoaming && wfcRoamingEnabled);
                switch (wfcMode) {
                    case ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY:
                        resId = com.android.internal.R.string.wfc_mode_wifi_only_summary;
@@ -137,6 +146,16 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont
        mSubId = subId;
        mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
        mImsManager = ImsManager.getInstance(mContext, SubscriptionManager.getPhoneId(mSubId));
        if (mCarrierConfigManager != null) {
            final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
            if (carrierConfig != null) {
                mEditableWfcRoamingMode = carrierConfig.getBoolean(
                        CarrierConfigManager.KEY_EDITABLE_WFC_ROAMING_MODE_BOOL);
                mUseWfcHomeModeForRoaming = carrierConfig.getBoolean(
                        CarrierConfigManager
                                .KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL);
            }
        }
    }

    private class PhoneCallStateListener extends PhoneStateListener {
+47 −0
Original line number Diff line number Diff line
@@ -18,11 +18,14 @@ package com.android.settings.network.telephony;

import static com.google.common.truth.Truth.assertThat;

import static org.junit.Assert.assertNull;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;

@@ -32,6 +35,7 @@ import androidx.preference.PreferenceScreen;

import com.android.ims.ImsConfig;
import com.android.ims.ImsManager;
import com.android.internal.R;
import com.android.settings.core.BasePreferenceController;

import org.junit.Before;
@@ -46,6 +50,8 @@ import org.robolectric.RuntimeEnvironment;
public class WifiCallingPreferenceControllerTest {
    private static final int SUB_ID = 2;

    @Mock
    private CarrierConfigManager mCarrierConfigManager;
    @Mock
    private TelephonyManager mTelephonyManager;
    @Mock
@@ -57,6 +63,7 @@ public class WifiCallingPreferenceControllerTest {
    private Preference mPreference;
    private PreferenceCategory mPreferenceCategory;
    private Context mContext;
    private PersistableBundle mCarrierConfig;

    @Before
    public void setUp() {
@@ -69,10 +76,14 @@ public class WifiCallingPreferenceControllerTest {

        mPreference = new Preference(mContext);
        mController = new WifiCallingPreferenceController(mContext, "wifi_calling");
        mController.mCarrierConfigManager = mCarrierConfigManager;
        mController.init(SUB_ID);
        mController.mImsManager = mImsManager;
        mPreference.setKey(mController.getPreferenceKey());

        mCarrierConfig = new PersistableBundle();
        when(mCarrierConfigManager.getConfigForSubId(SUB_ID)).thenReturn(mCarrierConfig);

        mPreferenceCategory = new PreferenceCategory(mContext);
        when(mPreferenceScreen.findPreference(
                WifiCallingPreferenceController.KEY_PREFERENCE_CATEGORY)).thenReturn(
@@ -102,6 +113,42 @@ public class WifiCallingPreferenceControllerTest {
        assertThat(mPreference.isEnabled()).isFalse();
    }

    @Test
    public void updateState_wfcNonRoaming() {
        assertNull(mController.mSimCallManager);
        mCarrierConfig.putBoolean(CarrierConfigManager.KEY_EDITABLE_WFC_ROAMING_MODE_BOOL, false);
        // update the config value by calling init again.
        mController.init(SUB_ID);
        mController.mImsManager = mImsManager;

        when(mImsManager.getWfcMode(true)).thenReturn(
                ImsConfig.WfcModeFeatureValueConstants.WIFI_PREFERRED);
        when(mImsManager.getWfcMode(false)).thenReturn(
                ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED);
        when(mImsManager.isWfcEnabledByUser()).thenReturn(true);
        when(mTelephonyManager.isNetworkRoaming()).thenReturn(true);

        mController.updateState(mPreference);
        assertThat(mPreference.getSummary())
                .isEqualTo(mContext.getString(R.string.wfc_mode_cellular_preferred_summary));
    }

    @Test
    public void updateState_wfcRoaming() {
        assertNull(mController.mSimCallManager);

        when(mImsManager.getWfcMode(true)).thenReturn(
                ImsConfig.WfcModeFeatureValueConstants.WIFI_PREFERRED);
        when(mImsManager.getWfcMode(false)).thenReturn(
                ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED);
        when(mImsManager.isWfcEnabledByUser()).thenReturn(true);
        when(mTelephonyManager.isNetworkRoaming()).thenReturn(true);

        mController.updateState(mPreference);
        assertThat(mPreference.getSummary())
                .isEqualTo(mContext.getString(R.string.wfc_mode_wifi_preferred_summary));
    }

    @Test
    public void displayPreference_notAvailable_setCategoryInvisible() {
        mController.init(SubscriptionManager.INVALID_SUBSCRIPTION_ID);