Merge "Enhance ImsManager tests to include tests for roaming setting"
diff --git a/tests/telephonytests/src/com/android/internal/telephony/ims/ImsManagerTest.java b/tests/telephonytests/src/com/android/internal/telephony/ims/ImsManagerTest.java
index fbb579e..267b005 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/ims/ImsManagerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/ims/ImsManagerTest.java
@@ -22,6 +22,7 @@
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.timeout;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -31,6 +32,8 @@
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
+import android.telephony.ims.ImsMmTelManager;
+import android.telephony.ims.ProvisioningManager;
import android.telephony.ims.stub.ImsConfigImplBase;
import android.test.suitebuilder.annotation.SmallTest;
@@ -245,11 +248,12 @@
}
/**
- * Tests that when a WFC mode is set for home/roaming, that setting is sent to the ImsService
- * correctly.
+ * Tests that when WFC is enabled/disabled for home/roaming, that setting is sent to the
+ * ImsService correctly.
*
* Preconditions:
* - CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL = true
+ * - CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_ENABLED_BOOL = true
*/
@Test @SmallTest
public void testSetWfcSetting_true_shouldSetWfcModeWrtRoamingState() throws Exception {
@@ -274,6 +278,10 @@
verify(mImsConfigImplBaseMock, timeout(1000)).setConfig(
eq(ImsConfig.ConfigConstants.VOICE_OVER_WIFI_MODE),
eq(ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED));
+ // Roaming is enabled
+ verify(mImsConfigImplBaseMock, timeout(1000)).setConfig(
+ eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_ROAMING_ENABLED_OVERRIDE),
+ eq(ProvisioningManager.PROVISIONING_VALUE_ENABLED));
// Not roaming
doReturn(false).when(mTelephonyManager).isNetworkRoaming(eq(mSubId[0]));
@@ -283,6 +291,283 @@
verify(mImsConfigImplBaseMock, timeout(1000)).setConfig(
eq(ImsConfig.ConfigConstants.VOICE_OVER_WIFI_MODE),
eq(ImsConfig.WfcModeFeatureValueConstants.WIFI_PREFERRED));
+ // Roaming is enabled
+ verify(mImsConfigImplBaseMock, timeout(1000)).setConfig(
+ eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_ROAMING_ENABLED_OVERRIDE),
+ eq(ProvisioningManager.PROVISIONING_VALUE_DISABLED));
+
+
+ // Turn off WFC and ensure that roaming setting is disabled.
+ doReturn(false).when(mTelephonyManager).isNetworkRoaming(eq(mSubId[0]));
+ imsManager.setWfcSetting(false);
+ verify(mImsConfigImplBaseMock, timeout(1000)).setConfig(
+ eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_ROAMING_ENABLED_OVERRIDE),
+ eq(ProvisioningManager.PROVISIONING_VALUE_DISABLED));
+ }
+
+
+ /**
+ * Tests that when user changed WFC setting while NOT roaming, that setting is ignored and false
+ * is sent to the ImsService correctly when changing the roaming mode.
+ *
+ * Preconditions:
+ * - CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL = true
+ * - CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_ENABLED_BOOL = true
+ */
+ @Test @SmallTest
+ public void testSetWfcSetting_shouldSetWfcModeRoamingDisabledUserEnabled() throws Exception {
+ // The user has previously enabled "WFC while roaming" setting in UI and then turned WFC
+ // off.
+ doReturn(String.valueOf(1 /*true*/))
+ .when(mSubscriptionController).getSubscriptionProperty(
+ anyInt(),
+ eq(SubscriptionManager.WFC_IMS_ROAMING_ENABLED),
+ anyString());
+
+ ImsManager imsManager = initializeProvisionedValues();
+
+ // We are currently on the home network, not roaming.
+ doReturn(false).when(mTelephonyManager).isNetworkRoaming(eq(mSubId[0]));
+
+ // User enables WFC from UI
+ imsManager.setWfcSetting(true /*enabled*/);
+ verify(mImsConfigImplBaseMock, timeout(1000)).setConfig(
+ eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_MODE_OVERRIDE),
+ eq(ImsMmTelManager.WIFI_MODE_CELLULAR_PREFERRED));
+ verify(mImsConfigImplBaseMock, timeout(1000)).setConfig(
+ eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_ROAMING_ENABLED_OVERRIDE),
+ // Should be disabled, even if the user enabled the "WFC while roaming" setting.
+ // This is because we are on the home network, so the vendor ImsService expects this
+ // value to be disabled until we move into a roaming network.
+ eq(ProvisioningManager.PROVISIONING_VALUE_DISABLED));
+ }
+
+ /**
+ * Tests that when user changed WFC setting while roaming, that the correct user setting
+ * is sent to the ImsService when changing the roaming mode.
+ *
+ * Preconditions:
+ * - CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL = true
+ * - CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_ENABLED_BOOL = true
+ */
+ @Test @SmallTest
+ public void testSetWfcSetting_shouldSetWfcModeRoamingEnabledUserEnabled() throws Exception {
+ // The user has previously enabled "WFC while roaming" setting in UI and then turned WFC
+ // off.
+ doReturn(String.valueOf(1 /*true*/))
+ .when(mSubscriptionController).getSubscriptionProperty(
+ anyInt(),
+ eq(SubscriptionManager.WFC_IMS_ROAMING_ENABLED),
+ anyString());
+
+ ImsManager imsManager = initializeProvisionedValues();
+
+ // The device is currently roaming
+ doReturn(true).when(mTelephonyManager).isNetworkRoaming(eq(mSubId[0]));
+
+ // The user has enabled WFC in the UI while the device is roaming.
+ imsManager.setWfcSetting(true /*enabled*/);
+
+ verify(mImsConfigImplBaseMock, timeout(1000)).setConfig(
+ eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_MODE_OVERRIDE),
+ // Default for roaming is WFC_IMS_ROAMING_MODE_DEFAULT_VAL
+ eq(ImsMmTelManager.WIFI_MODE_WIFI_PREFERRED));
+ verify(mImsConfigImplBaseMock, timeout(1000)).setConfig(
+ eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_ROAMING_ENABLED_OVERRIDE),
+ // Should be enabled because user enabled the setting in the UI previously.
+ eq(ProvisioningManager.PROVISIONING_VALUE_ENABLED));
+ }
+
+ /**
+ * Tests that when a WFC mode is updated for home, that setting is sent to the
+ * ImsService correctly or ignored if the roaming mode is changed.
+ *
+ * Preconditions:
+ * - CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL = true
+ * - CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_ENABLED_BOOL = true
+ */
+ @Test @SmallTest
+ public void testSetWfcMode_shouldSetWfcModeRoamingDisabled() throws Exception {
+ ImsManager imsManager = initializeProvisionedValues();
+
+ // the device is not currently roaming
+ doReturn(false).when(mTelephonyManager).isNetworkRoaming(eq(mSubId[0]));
+
+ // set the WFC roaming mode while the device is not roaming, so any changes to roaming mode
+ // should be ignored
+ imsManager.setWfcMode(ImsMmTelManager.WIFI_MODE_CELLULAR_PREFERRED, true /*IsRoaming*/);
+ verify(mImsConfigImplBaseMock, never()).setConfig(
+ eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_MODE_OVERRIDE),
+ anyInt());
+ verify(mImsConfigImplBaseMock, never()).setConfig(
+ eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_ROAMING_ENABLED_OVERRIDE),
+ anyInt());
+
+ // set home WFC mode setting while not roaming, the configuration should be set correctly.
+ imsManager.setWfcMode(ImsMmTelManager.WIFI_MODE_CELLULAR_PREFERRED, false /*IsRoaming*/);
+ verify(mImsConfigImplBaseMock, timeout(1000)).setConfig(
+ eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_MODE_OVERRIDE),
+ eq(ImsMmTelManager.WIFI_MODE_CELLULAR_PREFERRED));
+ verify(mImsConfigImplBaseMock, timeout(1000)).setConfig(
+ eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_ROAMING_ENABLED_OVERRIDE),
+ // Should be set to disabled, even if the user enabled the "WFC while roaming"
+ // setting. This is because we are on the home network, so the vendor ImsService
+ // expects this value to be disabled until we move into a roaming network.
+ eq(ProvisioningManager.PROVISIONING_VALUE_DISABLED));
+ }
+
+ /**
+ * Tests that when a WFC mode is updated for roaming while WFC is enabled, that setting is sent
+ * to the ImsService correctly when changing the roaming mode or ignored if the home setting is
+ * changed.
+ *
+ * Preconditions:
+ * - CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL = true
+ * - CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_ENABLED_BOOL = true
+ */
+ @Test @SmallTest
+ public void testSetWfcMode_wfcEnabledShouldSetWfcModeRoamingEnabled() throws Exception {
+ ImsManager imsManager = initializeProvisionedValues();
+
+ // The user has previously enabled WFC in the settings UI.
+ doReturn(String.valueOf(1 /*true*/))
+ .when(mSubscriptionController).getSubscriptionProperty(
+ anyInt(),
+ eq(SubscriptionManager.WFC_IMS_ENABLED),
+ anyString());
+
+ // The device is roaming
+ doReturn(true).when(mTelephonyManager).isNetworkRoaming(eq(mSubId[0]));
+
+ // The carrier app has changed the WFC mode for roaming while the device is home. The
+ // result of this operation is that the neither the WFC mode or the roaming enabled
+ // configuration should change.
+ imsManager.setWfcMode(ImsMmTelManager.WIFI_MODE_CELLULAR_PREFERRED, false /*IsRoaming*/);
+ verify(mImsConfigImplBaseMock, never()).setConfig(
+ eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_MODE_OVERRIDE),
+ anyInt());
+ verify(mImsConfigImplBaseMock, never()).setConfig(
+ eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_ROAMING_ENABLED_OVERRIDE),
+ anyInt());
+
+ // The carrier app has set the WFC mode for roaming while the device is roaming. The
+ // WFC mode should be updated to reflect the roaming setting and the roaming enabled
+ // configuration should be changed to enabled.
+ imsManager.setWfcMode(ImsMmTelManager.WIFI_MODE_CELLULAR_PREFERRED, true /*IsRoaming*/);
+ verify(mImsConfigImplBaseMock, timeout(1000)).setConfig(
+ eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_MODE_OVERRIDE),
+ eq(ImsMmTelManager.WIFI_MODE_CELLULAR_PREFERRED));
+ verify(mImsConfigImplBaseMock, timeout(1000)).setConfig(
+ eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_ROAMING_ENABLED_OVERRIDE),
+ // Should be set to the user setting for WFC roaming (default true for test)
+ eq(ProvisioningManager.PROVISIONING_VALUE_ENABLED));
+ }
+
+ /**
+ * Tests that when a WFC mode is updated for roaming while WFC is disabled, the WFC roaming
+ * setting is always set to disabled.
+ *
+ * Preconditions:
+ * - CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL = true
+ * - CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_ENABLED_BOOL = true
+ */
+ @Test @SmallTest
+ public void testSetWfcMode_WfcDisabledShouldNotSetWfcModeRoamingEnabled() throws Exception {
+ ImsManager imsManager = initializeProvisionedValues();
+
+ // The user has previously disabled WFC in the settings UI.
+ doReturn(String.valueOf(0 /*false*/))
+ .when(mSubscriptionController).getSubscriptionProperty(
+ anyInt(),
+ eq(SubscriptionManager.WFC_IMS_ENABLED),
+ anyString());
+
+ // The device is roaming
+ doReturn(true).when(mTelephonyManager).isNetworkRoaming(eq(mSubId[0]));
+
+ // WFC is disabled and the carrier app has set the WFC mode for roaming while the device is
+ // roaming. The WFC mode should be updated to reflect the roaming setting and the roaming
+ // enabled configuration should be disabled because WFC is disabled.
+ imsManager.setWfcMode(ImsMmTelManager.WIFI_MODE_CELLULAR_PREFERRED, true /*IsRoaming*/);
+ verify(mImsConfigImplBaseMock, timeout(1000)).setConfig(
+ eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_MODE_OVERRIDE),
+ eq(ImsMmTelManager.WIFI_MODE_CELLULAR_PREFERRED));
+ verify(mImsConfigImplBaseMock, timeout(1000)).setConfig(
+ eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_ROAMING_ENABLED_OVERRIDE),
+ // WFC roaming is disabled because WFC is disabled.
+ eq(ProvisioningManager.PROVISIONING_VALUE_DISABLED));
+ }
+
+ /**
+ * Tests that when user changed WFC mode while not roaming, that setting is ignored and false is
+ * sent to the ImsService correctly when changing the roaming mode.
+ *
+ * Preconditions:
+ * - CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL = true
+ * - CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_ENABLED_BOOL = true
+ */
+ @Test @SmallTest
+ public void testSetWfcMode_shouldSetWfcModeRoamingDisabledUserEnabled() throws Exception {
+ // The user has enabled the "WFC while roaming" setting in the UI previously while WFC was
+ // enabled
+ doReturn(String.valueOf(1 /*true*/))
+ .when(mSubscriptionController).getSubscriptionProperty(
+ anyInt(),
+ eq(SubscriptionManager.WFC_IMS_ROAMING_ENABLED),
+ anyString());
+
+ ImsManager imsManager = initializeProvisionedValues();
+
+ // The device is currently on the home network
+ doReturn(false).when(mTelephonyManager).isNetworkRoaming(eq(mSubId[0]));
+
+ // The user has changed the WFC mode in the UI for the non-roaming configuration
+ imsManager.setWfcMode(ImsMmTelManager.WIFI_MODE_CELLULAR_PREFERRED, false /*IsRoaming*/);
+ verify(mImsConfigImplBaseMock, timeout(1000)).setConfig(
+ eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_MODE_OVERRIDE),
+ // ensure that the correct cellular preferred config change is sent
+ eq(ImsMmTelManager.WIFI_MODE_CELLULAR_PREFERRED));
+ verify(mImsConfigImplBaseMock, timeout(1000)).setConfig(
+ eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_ROAMING_ENABLED_OVERRIDE),
+ // Should be set to disabled, even if the user enabled the "WFC while roaming"
+ // setting. This is because we are on the home network, so the vendor ImsService
+ // expects this value to be disabled until we move into a roaming network.
+ eq(ProvisioningManager.PROVISIONING_VALUE_DISABLED));
+ }
+
+ /**
+ * Tests that when user changed WFC mode while roaming, that setting is sent to the
+ * ImsService correctly when changing the roaming mode.
+ *
+ * Preconditions:
+ * - CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL = true
+ * - CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_ENABLED_BOOL = true
+ */
+ @Test @SmallTest
+ public void testSetWfcMode_shouldSetWfcModeRoamingEnabledUserDisabled() throws Exception {
+ // The user disabled "WFC while roaming" setting in the UI
+ doReturn(String.valueOf(0 /*false*/))
+ .when(mSubscriptionController).getSubscriptionProperty(
+ anyInt(),
+ eq(SubscriptionManager.WFC_IMS_ROAMING_ENABLED),
+ anyString());
+
+ ImsManager imsManager = initializeProvisionedValues();
+
+ // the device is currently roaming
+ doReturn(true).when(mTelephonyManager).isNetworkRoaming(eq(mSubId[0]));
+
+ // The carrier app has changed the WFC mode while roaming, so we must set the WFC mode
+ // to the new configuration.
+ imsManager.setWfcMode(ImsMmTelManager.WIFI_MODE_CELLULAR_PREFERRED, true /*IsRoaming*/);
+ verify(mImsConfigImplBaseMock, timeout(1000)).setConfig(
+ eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_MODE_OVERRIDE),
+ eq(ImsMmTelManager.WIFI_MODE_CELLULAR_PREFERRED));
+ verify(mImsConfigImplBaseMock, timeout(1000)).setConfig(
+ eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_ROAMING_ENABLED_OVERRIDE),
+ // Should be set to the user's setting for WFC roaming (user previously set to false
+ // in the UI above).
+ eq(ProvisioningManager.PROVISIONING_VALUE_DISABLED));
}
/**