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

Commit 3c65dc51 authored by Brad Ebinger's avatar Brad Ebinger Committed by android-build-merger
Browse files

Merge "WFC roaming mode setting can not be used with a fixed value"

am: 7296b6cb

Change-Id: I0b4bd383fe9ac1e057e652664fc3fb0a250f1eeb
parents c307426e 7296b6cb
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -89,6 +89,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
    private boolean mValidListener = false;
    private boolean mEditableWfcMode = true;
    private boolean mEditableWfcRoamingMode = true;
    private boolean mUseWfcHomeModeForRoaming = false;

    private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
    private ImsManager mImsManager;
@@ -312,6 +313,9 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
                        CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL);
                mEditableWfcRoamingMode = b.getBoolean(
                        CarrierConfigManager.KEY_EDITABLE_WFC_ROAMING_MODE_BOOL);
                mUseWfcHomeModeForRoaming = b.getBoolean(
                        CarrierConfigManager.KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL,
                        false);
                isWifiOnlySupported = b.getBoolean(
                        CarrierConfigManager.KEY_CARRIER_WFC_SUPPORTS_WIFI_ONLY_BOOL, true);
            }
@@ -496,7 +500,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
                // Don't show WFC (home) preference if it's not editable.
                preferenceScreen.removePreference(mButtonWfcMode);
            }
            if (mEditableWfcRoamingMode) {
            if (mEditableWfcRoamingMode && !mUseWfcHomeModeForRoaming) {
                preferenceScreen.addPreference(mButtonWfcRoamingMode);
            } else {
                // Don't show WFC roaming preference if it's not editable.
@@ -525,10 +529,8 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
                mImsManager.setWfcMode(buttonMode, false);
                mButtonWfcMode.setSummary(getWfcModeSummary(buttonMode));
                mMetricsFeatureProvider.action(getActivity(), getMetricsCategory(), buttonMode);
            }
            if (!mEditableWfcRoamingMode) {
                int currentWfcRoamingMode = mImsManager.getWfcMode(true);
                if (buttonMode != currentWfcRoamingMode) {

                if (mUseWfcHomeModeForRoaming) {
                    mImsManager.setWfcMode(buttonMode, true);
                    // mButtonWfcRoamingMode.setSummary is not needed; summary is selected value
                }
+127 −2
Original line number Diff line number Diff line
@@ -19,18 +19,23 @@ package com.android.settings.wifi.calling;
import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.ims.ProvisioningManager;
import android.view.View;
import android.widget.TextView;
@@ -54,17 +59,23 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers;

@RunWith(SettingsRobolectricTestRunner.class)
@RunWith(RobolectricTestRunner.class)
@Config(shadows = SettingsShadowResources.SettingsShadowTheme.class)
public class WifiCallingSettingsForSubTest {
    private static final String BUTTON_WFC_MODE = "wifi_calling_mode";
    private static final String BUTTON_WFC_ROAMING_MODE = "wifi_calling_roaming_mode";

    private TestFragment mFragment;
    private Context mContext;
    private TextView mEmptyView;
    private final PersistableBundle mBundle = new PersistableBundle();

    @Mock private static CarrierConfigManager sCarrierConfigManager;
    @Mock private ImsManager mImsManager;
    @Mock private PreferenceScreen mPreferenceScreen;
    @Mock private SettingsActivity mActivity;
@@ -72,6 +83,8 @@ public class WifiCallingSettingsForSubTest {
    @Mock private ToggleSwitch mToggleSwitch;
    @Mock private View mView;
    @Mock private ImsConfig mImsConfig;
    @Mock private ListPreference mButtonWfcMode;
    @Mock private ListPreference mButtonWfcRoamingMode;

    @Before
    public void setUp() throws NoSuchFieldException, ImsException {
@@ -90,6 +103,8 @@ public class WifiCallingSettingsForSubTest {
        when(mFragment.getArguments()).thenReturn(bundle);
        doNothing().when(mFragment).addPreferencesFromResource(anyInt());
        doReturn(mock(ListPreference.class)).when(mFragment).findPreference(any());
        doReturn(mButtonWfcMode).when(mFragment).findPreference(BUTTON_WFC_MODE);
        doReturn(mButtonWfcRoamingMode).when(mFragment).findPreference(BUTTON_WFC_ROAMING_MODE);
        doNothing().when(mFragment).finish();
        doReturn(mView).when(mFragment).getView();

@@ -102,12 +117,26 @@ public class WifiCallingSettingsForSubTest {
        doReturn(mImsManager).when(mFragment).getImsManager();
        doReturn(mImsConfig).when(mImsManager).getConfigInterface();
        doReturn(true).when(mImsManager).isWfcProvisionedOnDevice();
        doReturn(true).when(mImsManager).isWfcEnabledByUser();
        doReturn(true).when(mImsManager).isNonTtyOrTtyOnVolteEnabled();
        doReturn(ImsConfig.WfcModeFeatureValueConstants.WIFI_PREFERRED)
                .when(mImsManager).getWfcMode(anyBoolean());

        doReturn(mBundle).when(sCarrierConfigManager).getConfigForSubId(anyInt());
        setDefaultCarrierConfigValues();

        mFragment.onAttach(mContext);
        mFragment.onCreate(null);
        mFragment.onActivityCreated(null);
    }

    private void setDefaultCarrierConfigValues() {
        mBundle.putBoolean(
                CarrierConfigManager.KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL, false);
        mBundle.putBoolean(CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL, true);
        mBundle.putBoolean(CarrierConfigManager.KEY_EDITABLE_WFC_ROAMING_MODE_BOOL, true);
    }

    @Test
    public void getHelpResource_shouldReturn0() {
        assertThat(mFragment.getHelpResource()).isEqualTo(0);
@@ -143,10 +172,106 @@ public class WifiCallingSettingsForSubTest {
        verify(mImsConfig).removeConfigCallback(any());
    }

    @Test
    public void onResume_useWfcHomeModeConfigFalseAndEditable_shouldShowWfcRoaming() {
        // Call onResume to update the WFC roaming preference.
        mFragment.onResume();

        // Check that WFC roaming preference is shown.
        verify(mPreferenceScreen, times(1)).addPreference(mButtonWfcRoamingMode);
        verify(mPreferenceScreen, never()).removePreference(mButtonWfcRoamingMode);
    }

    @Test
    public void onResume_useWfcHomeModeConfigTrueAndEditable_shouldHideWfcRoaming() {
        mBundle.putBoolean(
                CarrierConfigManager.KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL, true);
        mBundle.putBoolean(CarrierConfigManager.KEY_EDITABLE_WFC_ROAMING_MODE_BOOL, true);

        // Call onResume to update the WFC roaming preference.
        mFragment.onResume();

        // Check that WFC roaming preference is hidden.
        verify(mPreferenceScreen, never()).addPreference(mButtonWfcRoamingMode);
        verify(mPreferenceScreen, times(1)).removePreference(mButtonWfcRoamingMode);
    }

    @Test
    public void onResume_useWfcHomeModeConfigFalseAndNotEditable_shouldHideWfcRoaming() {
        mBundle.putBoolean(
                CarrierConfigManager.KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL, false);
        mBundle.putBoolean(CarrierConfigManager.KEY_EDITABLE_WFC_ROAMING_MODE_BOOL, false);

        // Call onResume to update the WFC roaming preference.
        mFragment.onResume();

        // Check that WFC roaming preference is hidden.
        verify(mPreferenceScreen, never()).addPreference(mButtonWfcRoamingMode);
        verify(mPreferenceScreen, times(1)).removePreference(mButtonWfcRoamingMode);
    }

    @Test
    public void onResume_useWfcHomeModeConfigTrueAndNotEditable_shouldHideWfcRoaming() {
        mBundle.putBoolean(
                CarrierConfigManager.KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL, true);
        mBundle.putBoolean(CarrierConfigManager.KEY_EDITABLE_WFC_ROAMING_MODE_BOOL, false);

        // Call onResume to update the WFC roaming preference.
        mFragment.onResume();

        // Check that WFC roaming preference is hidden.
        verify(mPreferenceScreen, never()).addPreference(mButtonWfcRoamingMode);
        verify(mPreferenceScreen, times(1)).removePreference(mButtonWfcRoamingMode);
    }

    @Test
    public void onPreferenceChange_useWfcHomeModeConfigFalse_shouldNotSetWfcRoaming() {
        // Call onResume to update carrier config values.
        mFragment.onResume();

        // Set the WFC home mode.
        mFragment.onPreferenceChange(mButtonWfcMode,
                String.valueOf(ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED));

        // Check that only WFC home mode is set.
        verify(mImsManager, times(1)).setWfcMode(
                eq(ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED),
                eq(false));
        verify(mImsManager, never()).setWfcMode(
                eq(ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED),
                eq(true));
    }

    @Test
    public void onPreferenceChange_useWfcHomeModeConfigTrue_shouldSetWfcRoaming() {
        mBundle.putBoolean(
                CarrierConfigManager.KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL, true);

        // Call onResume to update carrier config values.
        mFragment.onResume();

        // Set the WFC home mode.
        mFragment.onPreferenceChange(mButtonWfcMode,
                String.valueOf(ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED));

        // Check that both WFC home mode and roaming mode are set.
        verify(mImsManager, times(1)).setWfcMode(
                eq(ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED),
                eq(false));
        verify(mImsManager, times(1)).setWfcMode(
                eq(ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED),
                eq(true));
    }

    protected static class TestFragment extends WifiCallingSettingsForSub {
        @Override
        protected Object getSystemService(final String name) {
            switch (name) {
                case Context.CARRIER_CONFIG_SERVICE:
                    return sCarrierConfigManager;
                default:
                    return null;
            }
        }
    }
}