[Settings] Code refactor for Wifi calling IMS API

Replacing logics of
ImsManager#isWfcEnabledByPlatform() &
MobileNetworkUtils#isWfcProvisionedOnDevice()
into WifiCallingQueryImsState#isWifiCallingProvisioned().

Bug: 140542283
Test: m RunSettingsRoboTests -j ROBOTEST_FILTER=WifiCallingSliceHelperTest
Change-Id: I68462368669b81e10d09bbb93e74e23ea9a1f446
This commit is contained in:
Bonian Chen
2020-02-10 00:41:37 +08:00
parent 59235bd883
commit ced9489549
3 changed files with 43 additions and 74 deletions

View File

@@ -18,6 +18,15 @@ package com.android.settings.network.telephony;
import static android.provider.Telephony.Carriers.ENFORCE_MANAGED_URI; import static android.provider.Telephony.Carriers.ENFORCE_MANAGED_URI;
import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.CDMA;
import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.EVDO;
import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.GSM;
import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.LTE;
import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.NR;
import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.RAF_TD_SCDMA;
import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.RAF_UNKNOWN;
import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.WCDMA;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@@ -54,6 +63,7 @@ import com.android.internal.util.ArrayUtils;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import com.android.settings.network.ims.WifiCallingQueryImsState;
import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants; import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
import com.android.settingslib.development.DevelopmentSettingsEnabler; import com.android.settingslib.development.DevelopmentSettingsEnabler;
import com.android.settingslib.graph.SignalDrawable; import com.android.settingslib.graph.SignalDrawable;
@@ -61,15 +71,6 @@ import com.android.settingslib.graph.SignalDrawable;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.CDMA;
import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.EVDO;
import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.GSM;
import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.LTE;
import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.NR;
import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.RAF_TD_SCDMA;
import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.RAF_UNKNOWN;
import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.WCDMA;
public class MobileNetworkUtils { public class MobileNetworkUtils {
private static final String TAG = "MobileNetworkUtils"; private static final String TAG = "MobileNetworkUtils";
@@ -152,10 +153,10 @@ public class MobileNetworkUtils {
isWifiCallingEnabled = intent != null; isWifiCallingEnabled = intent != null;
} else { } else {
final WifiCallingQueryImsState queryState =
new WifiCallingQueryImsState(context, subId);
final ImsManager imsMgr = ImsManager.getInstance(context, phoneId); final ImsManager imsMgr = ImsManager.getInstance(context, phoneId);
isWifiCallingEnabled = imsMgr != null isWifiCallingEnabled = queryState.isWifiCallingProvisioned()
&& imsMgr.isWfcEnabledByPlatform()
&& isWfcProvisionedOnDevice(subId)
&& isImsServiceStateReady(imsMgr); && isImsServiceStateReady(imsMgr);
} }

View File

@@ -43,12 +43,9 @@ import androidx.slice.builders.ListBuilder.RowBuilder;
import androidx.slice.builders.SliceAction; import androidx.slice.builders.SliceAction;
import com.android.ims.ImsConfig; import com.android.ims.ImsConfig;
import com.android.ims.ImsManager;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.network.SubscriptionUtil;
import com.android.settings.network.ims.WifiCallingQueryImsState; import com.android.settings.network.ims.WifiCallingQueryImsState;
import com.android.settings.network.telephony.MobileNetworkUtils;
import com.android.settings.slices.SliceBroadcastReceiver; import com.android.settings.slices.SliceBroadcastReceiver;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
@@ -140,10 +137,7 @@ public class WifiCallingSliceHelper {
return null; return null;
} }
final ImsManager imsManager = getImsManager(subId); if (!queryImsState(subId).isWifiCallingProvisioned()) {
if (!imsManager.isWfcEnabledByPlatform()
|| !isWfcProvisionedOnDevice(subId)) {
Log.d(TAG, "Wifi calling is either not provisioned or not enabled by Platform"); Log.d(TAG, "Wifi calling is either not provisioned or not enabled by Platform");
return null; return null;
} }
@@ -168,9 +162,8 @@ public class WifiCallingSliceHelper {
} }
private boolean isWifiCallingEnabled() { private boolean isWifiCallingEnabled() {
final int subId = getDefaultVoiceSubId(); final WifiCallingQueryImsState queryState = queryImsState(getDefaultVoiceSubId());
return queryImsState(subId).isEnabledByUser() return queryState.isEnabledByUser() && queryState.isAllowUserControl();
&& queryImsState(subId).isAllowUserControl();
} }
/** /**
@@ -224,23 +217,21 @@ public class WifiCallingSliceHelper {
CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL, subId, false); CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL, subId, false);
final boolean isWifiOnlySupported = isCarrierConfigManagerKeyEnabled( final boolean isWifiOnlySupported = isCarrierConfigManagerKeyEnabled(
CarrierConfigManager.KEY_CARRIER_WFC_SUPPORTS_WIFI_ONLY_BOOL, subId, true); CarrierConfigManager.KEY_CARRIER_WFC_SUPPORTS_WIFI_ONLY_BOOL, subId, true);
final ImsManager imsManager = getImsManager(subId);
final ImsMmTelManager imsMmTelManager = getImsMmTelManager(subId);
if (!imsManager.isWfcEnabledByPlatform()
|| !isWfcProvisionedOnDevice(subId)) {
Log.d(TAG, "Wifi calling is either not provisioned or not enabled by platform");
return null;
}
if (!isWifiCallingPrefEditable) { if (!isWifiCallingPrefEditable) {
Log.d(TAG, "Wifi calling preference is not editable"); Log.d(TAG, "Wifi calling preference is not editable");
return null; return null;
} }
if (!queryImsState(subId).isWifiCallingProvisioned()) {
Log.d(TAG, "Wifi calling is either not provisioned or not enabled by platform");
return null;
}
boolean isWifiCallingEnabled = false; boolean isWifiCallingEnabled = false;
int wfcMode = -1; int wfcMode = -1;
try { try {
final ImsMmTelManager imsMmTelManager = getImsMmTelManager(subId);
isWifiCallingEnabled = isWifiCallingEnabled(); isWifiCallingEnabled = isWifiCallingEnabled();
wfcMode = getWfcMode(imsMmTelManager); wfcMode = getWfcMode(imsMmTelManager);
} catch (InterruptedException | ExecutionException | TimeoutException e) { } catch (InterruptedException | ExecutionException | TimeoutException e) {
@@ -351,10 +342,6 @@ public class WifiCallingSliceHelper {
} }
} }
protected ImsManager getImsManager(int subId) {
return ImsManager.getInstance(mContext, SubscriptionUtil.getPhoneId(mContext, subId));
}
protected ImsMmTelManager getImsMmTelManager(int subId) { protected ImsMmTelManager getImsMmTelManager(int subId) {
return ImsMmTelManager.createForSubscriptionId(subId); return ImsMmTelManager.createForSubscriptionId(subId);
} }
@@ -382,11 +369,10 @@ public class WifiCallingSliceHelper {
final int subId = getDefaultVoiceSubId(); final int subId = getDefaultVoiceSubId();
if (SubscriptionManager.isValidSubscriptionId(subId)) { if (SubscriptionManager.isValidSubscriptionId(subId)) {
final ImsManager imsManager = getImsManager(subId); final WifiCallingQueryImsState queryState = queryImsState(subId);
if (imsManager.isWfcEnabledByPlatform() if (queryState.isWifiCallingProvisioned()) {
&& isWfcProvisionedOnDevice(subId)) { final boolean currentValue = queryState.isEnabledByUser()
final boolean currentValue = queryImsState(subId).isEnabledByUser() && queryState.isAllowUserControl();
&& queryImsState(subId).isAllowUserControl();
final boolean newValue = intent.getBooleanExtra(EXTRA_TOGGLE_STATE, final boolean newValue = intent.getBooleanExtra(EXTRA_TOGGLE_STATE,
currentValue); currentValue);
final Intent activationAppIntent = final Intent activationAppIntent =
@@ -425,12 +411,11 @@ public class WifiCallingSliceHelper {
final boolean isWifiOnlySupported = isCarrierConfigManagerKeyEnabled( final boolean isWifiOnlySupported = isCarrierConfigManagerKeyEnabled(
CarrierConfigManager.KEY_CARRIER_WFC_SUPPORTS_WIFI_ONLY_BOOL, subId, true); CarrierConfigManager.KEY_CARRIER_WFC_SUPPORTS_WIFI_ONLY_BOOL, subId, true);
final ImsManager imsManager = getImsManager(subId); final WifiCallingQueryImsState queryState = queryImsState(subId);
if (isWifiCallingPrefEditable if (isWifiCallingPrefEditable
&& imsManager.isWfcEnabledByPlatform() && queryState.isWifiCallingProvisioned()
&& isWfcProvisionedOnDevice(subId) && queryState.isEnabledByUser()
&& queryImsState(subId).isEnabledByUser() && queryState.isAllowUserControl()) {
&& queryImsState(subId).isAllowUserControl()) {
// Change the preference only when wifi calling is enabled // Change the preference only when wifi calling is enabled
// And when wifi calling preference is editable for the current carrier // And when wifi calling preference is editable for the current carrier
final ImsMmTelManager imsMmTelManager = getImsMmTelManager(subId); final ImsMmTelManager imsMmTelManager = getImsMmTelManager(subId);
@@ -511,11 +496,6 @@ public class WifiCallingSliceHelper {
return SubscriptionManager.getDefaultVoiceSubscriptionId(); return SubscriptionManager.getDefaultVoiceSubscriptionId();
} }
@VisibleForTesting
boolean isWfcProvisionedOnDevice(int subId) {
return MobileNetworkUtils.isWfcProvisionedOnDevice(subId);
}
/** /**
* Returns Intent of the activation app required to activate wifi calling or null if there is no * Returns Intent of the activation app required to activate wifi calling or null if there is no
* need for activation. * need for activation.

View File

@@ -107,6 +107,7 @@ public class WifiCallingSliceHelperTest {
mQueryImsState = spy(new WifiCallingQueryImsState(mContext, SUB_ID)); mQueryImsState = spy(new WifiCallingQueryImsState(mContext, SUB_ID));
doReturn(true).when(mQueryImsState).isEnabledByUser(); doReturn(true).when(mQueryImsState).isEnabledByUser();
doReturn(true).when(mQueryImsState).isWifiCallingProvisioned();
mWfcSliceHelper = spy(new FakeWifiCallingSliceHelper(mContext)); mWfcSliceHelper = spy(new FakeWifiCallingSliceHelper(mContext));
doReturn(mQueryImsState).when(mWfcSliceHelper).queryImsState(anyInt()); doReturn(mQueryImsState).when(mWfcSliceHelper).queryImsState(anyInt());
@@ -117,6 +118,8 @@ public class WifiCallingSliceHelperTest {
@Test @Test
public void test_CreateWifiCallingSlice_invalidSubId() { public void test_CreateWifiCallingSlice_invalidSubId() {
doReturn(true).when(mQueryImsState).isEnabledByUser();
doReturn(false).when(mQueryImsState).isWifiCallingProvisioned();
mWfcSliceHelper.setDefaultVoiceSubId(-1); mWfcSliceHelper.setDefaultVoiceSubId(-1);
final Slice slice = mWfcSliceHelper.createWifiCallingSlice( final Slice slice = mWfcSliceHelper.createWifiCallingSlice(
@@ -127,7 +130,7 @@ public class WifiCallingSliceHelperTest {
@Test @Test
public void test_CreateWifiCallingSlice_wfcNotSupported() { public void test_CreateWifiCallingSlice_wfcNotSupported() {
when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(false); doReturn(false).when(mQueryImsState).isWifiCallingProvisioned();
final Slice slice = mWfcSliceHelper.createWifiCallingSlice( final Slice slice = mWfcSliceHelper.createWifiCallingSlice(
CustomSliceRegistry.WIFI_CALLING_URI); CustomSliceRegistry.WIFI_CALLING_URI);
@@ -143,8 +146,7 @@ public class WifiCallingSliceHelperTest {
turned off) we need to guide the user to wifi calling settings turned off) we need to guide the user to wifi calling settings
activity so the user can perform the activation there.(PrimaryAction) activity so the user can perform the activation there.(PrimaryAction)
*/ */
when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true); doReturn(true).when(mQueryImsState).isWifiCallingProvisioned();
when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
doReturn(false).when(mQueryImsState).isEnabledByUser(); doReturn(false).when(mQueryImsState).isEnabledByUser();
when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(false); when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(false);
when(mMockCarrierConfigManager.getConfigForSubId(1)).thenReturn(null); when(mMockCarrierConfigManager.getConfigForSubId(1)).thenReturn(null);
@@ -161,8 +163,7 @@ public class WifiCallingSliceHelperTest {
@Test @Test
public void test_CreateWifiCallingSlice_success() { public void test_CreateWifiCallingSlice_success() {
when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true); doReturn(true).when(mQueryImsState).isWifiCallingProvisioned();
when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
doReturn(true).when(mQueryImsState).isEnabledByUser(); doReturn(true).when(mQueryImsState).isEnabledByUser();
when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true); when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
when(mMockCarrierConfigManager.getConfigForSubId(1)).thenReturn(null); when(mMockCarrierConfigManager.getConfigForSubId(1)).thenReturn(null);
@@ -176,8 +177,7 @@ public class WifiCallingSliceHelperTest {
@Test @Test
public void test_SettingSliceProvider_getsRightSliceWifiCalling() { public void test_SettingSliceProvider_getsRightSliceWifiCalling() {
when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true); doReturn(true).when(mQueryImsState).isWifiCallingProvisioned();
when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
doReturn(true).when(mQueryImsState).isEnabledByUser(); doReturn(true).when(mQueryImsState).isEnabledByUser();
when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true); when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
when(mMockCarrierConfigManager.getConfigForSubId(1)).thenReturn(null); when(mMockCarrierConfigManager.getConfigForSubId(1)).thenReturn(null);
@@ -192,8 +192,7 @@ public class WifiCallingSliceHelperTest {
@Test @Test
public void test_SliceBroadcastReceiver_toggleOnWifiCalling() { public void test_SliceBroadcastReceiver_toggleOnWifiCalling() {
when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true); doReturn(true).when(mQueryImsState).isWifiCallingProvisioned();
when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
doReturn(false).when(mQueryImsState).isEnabledByUser(); doReturn(false).when(mQueryImsState).isEnabledByUser();
when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true); when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
when(mSlicesFeatureProvider.getNewWifiCallingSliceHelper(mContext)) when(mSlicesFeatureProvider.getNewWifiCallingSliceHelper(mContext))
@@ -217,8 +216,7 @@ public class WifiCallingSliceHelperTest {
@Test @Test
public void test_CreateWifiCallingPreferenceSlice_prefNotEditable() { public void test_CreateWifiCallingPreferenceSlice_prefNotEditable() {
when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true); doReturn(true).when(mQueryImsState).isWifiCallingProvisioned();
when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
doReturn(true).when(mQueryImsState).isEnabledByUser(); doReturn(true).when(mQueryImsState).isEnabledByUser();
when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true); when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
mWfcSliceHelper.setIsWifiCallingPrefEditable(false); mWfcSliceHelper.setIsWifiCallingPrefEditable(false);
@@ -232,8 +230,7 @@ public class WifiCallingSliceHelperTest {
@Test @Test
public void test_CreateWifiCallingPreferenceSlice_wfcOff() { public void test_CreateWifiCallingPreferenceSlice_wfcOff() {
when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true); doReturn(true).when(mQueryImsState).isWifiCallingProvisioned();
when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
doReturn(false).when(mQueryImsState).isEnabledByUser(); doReturn(false).when(mQueryImsState).isEnabledByUser();
when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true); when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
mWfcSliceHelper.setIsWifiCallingPrefEditable(true); mWfcSliceHelper.setIsWifiCallingPrefEditable(true);
@@ -249,8 +246,7 @@ public class WifiCallingSliceHelperTest {
@Test @Test
public void test_CreateWifiCallingPreferenceSlice_success() { public void test_CreateWifiCallingPreferenceSlice_success() {
when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true); doReturn(true).when(mQueryImsState).isWifiCallingProvisioned();
when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
doReturn(true).when(mQueryImsState).isEnabledByUser(); doReturn(true).when(mQueryImsState).isEnabledByUser();
when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true); when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
when(mMockImsMmTelManager.getVoWiFiModeSetting()).thenReturn( when(mMockImsMmTelManager.getVoWiFiModeSetting()).thenReturn(
@@ -267,8 +263,7 @@ public class WifiCallingSliceHelperTest {
@Test @Test
public void test_SettingsSliceProvider_getWfcPreferenceSlice() { public void test_SettingsSliceProvider_getWfcPreferenceSlice() {
when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true); doReturn(true).when(mQueryImsState).isWifiCallingProvisioned();
when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
doReturn(true).when(mQueryImsState).isEnabledByUser(); doReturn(true).when(mQueryImsState).isEnabledByUser();
when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true); when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
when(mMockImsMmTelManager.getVoWiFiModeSetting()).thenReturn( when(mMockImsMmTelManager.getVoWiFiModeSetting()).thenReturn(
@@ -286,8 +281,7 @@ public class WifiCallingSliceHelperTest {
} }
@Test @Test
public void test_SliceBroadcastReceiver_setWfcPrefCellularPref() { public void test_SliceBroadcastReceiver_setWfcPrefCellularPref() {
when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true); doReturn(true).when(mQueryImsState).isWifiCallingProvisioned();
when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
doReturn(true).when(mQueryImsState).isEnabledByUser(); doReturn(true).when(mQueryImsState).isEnabledByUser();
when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true); when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
when(mMockImsMmTelManager.getVoWiFiModeSetting()).thenReturn( when(mMockImsMmTelManager.getVoWiFiModeSetting()).thenReturn(
@@ -441,12 +435,6 @@ public class WifiCallingSliceHelperTest {
return mMockCarrierConfigManager; return mMockCarrierConfigManager;
} }
@Override
protected ImsManager getImsManager(int subId) {
return mMockImsManager;
}
@Override
protected ImsMmTelManager getImsMmTelManager(int subId) { protected ImsMmTelManager getImsMmTelManager(int subId) {
return mMockImsMmTelManager; return mMockImsMmTelManager;
} }