[Settings] apply WifiCallingQueryImsState

1. Code refactor
2. Apply WifiCallingQueryImsState to more WifiCalling classes

Bug: 140542283
Test: m RunSettingsRoboTests -j ROBOTEST_FILTER=WifiCallingSettingsForSubTest
Test: m RunSettingsRoboTests -j ROBOTEST_FILTER=WifiCallingSliceHelperTest
Change-Id: Idd4935a6d8ceed77c15e90f96781014d1940a427
This commit is contained in:
Bonian Chen
2020-01-21 19:29:08 +08:00
parent 47673188b4
commit a498eae245
4 changed files with 98 additions and 60 deletions

View File

@@ -46,7 +46,6 @@ import androidx.preference.Preference.OnPreferenceClickListener;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import com.android.ims.ImsConfig; import com.android.ims.ImsConfig;
import com.android.ims.ImsException;
import com.android.ims.ImsManager; import com.android.ims.ImsManager;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.Phone; import com.android.internal.telephony.Phone;
@@ -56,6 +55,7 @@ import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.core.SubSettingLauncher; import com.android.settings.core.SubSettingLauncher;
import com.android.settings.network.SubscriptionUtil; import com.android.settings.network.SubscriptionUtil;
import com.android.settings.network.ims.WifiCallingQueryImsState;
import com.android.settings.network.telephony.MobileNetworkUtils; import com.android.settings.network.telephony.MobileNetworkUtils;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SwitchBar;
@@ -102,6 +102,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
private ImsManager mImsManager; private ImsManager mImsManager;
private ImsMmTelManager mImsMmTelManager; private ImsMmTelManager mImsMmTelManager;
private ProvisioningManager mProvisioningManager;
private TelephonyManager mTelephonyManager; private TelephonyManager mTelephonyManager;
private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() { private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
@@ -245,6 +246,19 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
return 0; return 0;
} }
@VisibleForTesting
WifiCallingQueryImsState queryImsState(int subId) {
return new WifiCallingQueryImsState(getContext(), subId);
}
@VisibleForTesting
ProvisioningManager getImsProvisioningManager() {
if (!SubscriptionManager.isValidSubscriptionId(mSubId)) {
return null;
}
return ProvisioningManager.createForSubscriptionId(mSubId);
}
@VisibleForTesting @VisibleForTesting
ImsManager getImsManager() { ImsManager getImsManager() {
return ImsManager.getInstance(getActivity(), return ImsManager.getInstance(getActivity(),
@@ -253,6 +267,9 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
@VisibleForTesting @VisibleForTesting
ImsMmTelManager getImsMmTelManager() { ImsMmTelManager getImsMmTelManager() {
if (!SubscriptionManager.isValidSubscriptionId(mSubId)) {
return null;
}
return ImsMmTelManager.createForSubscriptionId(mSubId); return ImsMmTelManager.createForSubscriptionId(mSubId);
} }
@@ -272,9 +289,10 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
} }
mImsManager = getImsManager(); mImsManager = getImsManager();
mProvisioningManager = getImsProvisioningManager();
mImsMmTelManager = getImsMmTelManager(); mImsMmTelManager = getImsMmTelManager();
mTelephonyManager = ((TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE)); mTelephonyManager = getActivity().getSystemService(TelephonyManager.class);
mButtonWfcMode = findPreference(BUTTON_WFC_MODE); mButtonWfcMode = findPreference(BUTTON_WFC_MODE);
mButtonWfcMode.setOnPreferenceChangeListener(this); mButtonWfcMode.setOnPreferenceChangeListener(this);
@@ -342,7 +360,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
} }
} }
Resources res = getResourcesForSubId(); final Resources res = getResourcesForSubId();
mButtonWfcMode.setTitle(res.getString(R.string.wifi_calling_mode_title)); mButtonWfcMode.setTitle(res.getString(R.string.wifi_calling_mode_title));
mButtonWfcMode.setDialogTitle(res.getString(R.string.wifi_calling_mode_dialog_title)); mButtonWfcMode.setDialogTitle(res.getString(R.string.wifi_calling_mode_dialog_title));
mButtonWfcRoamingMode.setTitle(res.getString(R.string.wifi_calling_roaming_mode_title)); mButtonWfcRoamingMode.setTitle(res.getString(R.string.wifi_calling_roaming_mode_title));
@@ -383,7 +401,8 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
} }
// NOTE: Buttons will be enabled/disabled in mPhoneStateListener // NOTE: Buttons will be enabled/disabled in mPhoneStateListener
final boolean wfcEnabled = mImsManager.isWfcEnabledByUser() final WifiCallingQueryImsState queryIms = queryImsState(mSubId);
final boolean wfcEnabled = queryIms.isEnabledByUser()
&& mImsManager.isNonTtyOrTtyOnVolteEnabled(); && mImsManager.isNonTtyOrTtyOnVolteEnabled();
mSwitch.setChecked(wfcEnabled); mSwitch.setChecked(wfcEnabled);
final int wfcMode = mImsMmTelManager.getVoWiFiModeSetting(); final int wfcMode = mImsMmTelManager.getVoWiFiModeSetting();
@@ -397,8 +416,6 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
final Context context = getActivity();
updateBody(); updateBody();
if (mImsManager.isWfcEnabledByPlatform()) { if (mImsManager.isWfcEnabledByPlatform()) {
@@ -409,6 +426,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
mValidListener = true; mValidListener = true;
} }
final Context context = getActivity();
context.registerReceiver(mIntentReceiver, mIntentFilter); context.registerReceiver(mIntentReceiver, mIntentFilter);
final Intent intent = getActivity().getIntent(); final Intent intent = getActivity().getIntent();
@@ -417,12 +435,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
} }
// Register callback for provisioning changes. // Register callback for provisioning changes.
try { registerProvisioningChangedCallback();
mImsManager.getConfigInterface().addConfigCallback(mProvisioningCallback);
} catch (ImsException e) {
Log.w(TAG, "onResume: Unable to register callback for provisioning changes.");
}
} }
@Override @Override
@@ -442,13 +455,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
context.unregisterReceiver(mIntentReceiver); context.unregisterReceiver(mIntentReceiver);
// Remove callback for provisioning changes. // Remove callback for provisioning changes.
try { unregisterProvisioningChangedCallback();
mImsManager.getConfigInterface().removeConfigCallback(
mProvisioningCallback.getBinder());
} catch (ImsException e) {
Log.w(TAG, "onPause: Unable to remove callback for provisioning changes");
}
} }
/** /**
@@ -508,7 +515,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
*/ */
private void updateWfcMode(boolean wfcEnabled) { private void updateWfcMode(boolean wfcEnabled) {
Log.i(TAG, "updateWfcMode(" + wfcEnabled + ")"); Log.i(TAG, "updateWfcMode(" + wfcEnabled + ")");
mImsManager.setWfcSetting(wfcEnabled); mImsMmTelManager.setVoWiFiSettingEnabled(wfcEnabled);
final int wfcMode = mImsMmTelManager.getVoWiFiModeSetting(); final int wfcMode = mImsMmTelManager.getVoWiFiModeSetting();
final int wfcRoamingMode = mImsMmTelManager.getVoWiFiRoamingModeSetting(); final int wfcRoamingMode = mImsMmTelManager.getVoWiFiRoamingModeSetting();
@@ -524,8 +531,6 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
public void onActivityResult(int requestCode, int resultCode, Intent data) { public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
final Context context = getActivity();
Log.d(TAG, "WFC activity request = " + requestCode + " result = " + resultCode); Log.d(TAG, "WFC activity request = " + requestCode + " result = " + resultCode);
switch (requestCode) { switch (requestCode) {
@@ -619,7 +624,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
private CharSequence getWfcModeSummary(int wfcMode) { private CharSequence getWfcModeSummary(int wfcMode) {
int resId = com.android.internal.R.string.wifi_calling_off_summary; int resId = com.android.internal.R.string.wifi_calling_off_summary;
if (mImsManager.isWfcEnabledByUser()) { if (queryImsState(mSubId).isEnabledByUser()) {
switch (wfcMode) { switch (wfcMode) {
case ImsMmTelManager.WIFI_MODE_WIFI_ONLY: case ImsMmTelManager.WIFI_MODE_WIFI_ONLY:
resId = com.android.internal.R.string.wfc_mode_wifi_only_summary; resId = com.android.internal.R.string.wfc_mode_wifi_only_summary;
@@ -641,4 +646,25 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
Resources getResourcesForSubId() { Resources getResourcesForSubId() {
return SubscriptionManager.getResourcesForSubId(getContext(), mSubId); return SubscriptionManager.getResourcesForSubId(getContext(), mSubId);
} }
@VisibleForTesting
void registerProvisioningChangedCallback() {
if (mProvisioningManager == null) {
return;
}
try {
mProvisioningManager.registerProvisioningChangedCallback(getContext().getMainExecutor(),
mProvisioningCallback);
} catch (Exception ex) {
Log.w(TAG, "onResume: Unable to register callback for provisioning changes.");
}
}
@VisibleForTesting
void unregisterProvisioningChangedCallback() {
if (mProvisioningManager == null) {
return;
}
mProvisioningManager.unregisterProvisioningChangedCallback(mProvisioningCallback);
}
} }

View File

@@ -47,6 +47,7 @@ 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.SubscriptionUtil;
import com.android.settings.network.ims.WifiCallingQueryImsState;
import com.android.settings.network.telephony.MobileNetworkUtils; import com.android.settings.network.telephony.MobileNetworkUtils;
import com.android.settings.slices.SliceBroadcastReceiver; import com.android.settings.slices.SliceBroadcastReceiver;
@@ -133,9 +134,8 @@ public class WifiCallingSliceHelper {
*/ */
public Slice createWifiCallingSlice(Uri sliceUri) { public Slice createWifiCallingSlice(Uri sliceUri) {
final int subId = getDefaultVoiceSubId(); final int subId = getDefaultVoiceSubId();
Resources res = getResourcesForSubId(subId);
if (subId <= SubscriptionManager.INVALID_SUBSCRIPTION_ID) { if (!SubscriptionManager.isValidSubscriptionId(subId)) {
Log.d(TAG, "Invalid subscription Id"); Log.d(TAG, "Invalid subscription Id");
return null; return null;
} }
@@ -159,6 +159,7 @@ public class WifiCallingSliceHelper {
Log.d(TAG, "Needs Activation"); Log.d(TAG, "Needs Activation");
// Activation needed for the next action of the user // Activation needed for the next action of the user
// Give instructions to go to settings app // Give instructions to go to settings app
final Resources res = getResourcesForSubId(subId);
return getNonActionableWifiCallingSlice( return getNonActionableWifiCallingSlice(
res.getText(R.string.wifi_calling_settings_title), res.getText(R.string.wifi_calling_settings_title),
res.getText(R.string.wifi_calling_settings_activation_instructions), res.getText(R.string.wifi_calling_settings_activation_instructions),
@@ -173,16 +174,8 @@ public class WifiCallingSliceHelper {
private boolean isWifiCallingEnabled(ImsManager imsManager) private boolean isWifiCallingEnabled(ImsManager imsManager)
throws InterruptedException, ExecutionException, TimeoutException { throws InterruptedException, ExecutionException, TimeoutException {
final FutureTask<Boolean> isWifiOnTask = new FutureTask<>(new Callable<Boolean>() { final int subId = getDefaultVoiceSubId();
@Override return queryImsState(subId).isEnabledByUser()
public Boolean call() {
return imsManager.isWfcEnabledByUser();
}
});
final ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(isWifiOnTask);
return isWifiOnTask.get(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)
&& imsManager.isNonTtyOrTtyOnVolteEnabled(); && imsManager.isNonTtyOrTtyOnVolteEnabled();
} }
@@ -192,7 +185,7 @@ public class WifiCallingSliceHelper {
*/ */
private Slice getWifiCallingSlice(Uri sliceUri, boolean isWifiCallingEnabled, int subId) { private Slice getWifiCallingSlice(Uri sliceUri, boolean isWifiCallingEnabled, int subId) {
final IconCompat icon = IconCompat.createWithResource(mContext, R.drawable.wifi_signal); final IconCompat icon = IconCompat.createWithResource(mContext, R.drawable.wifi_signal);
Resources res = getResourcesForSubId(subId); final Resources res = getResourcesForSubId(subId);
return new ListBuilder(mContext, sliceUri, ListBuilder.INFINITY) return new ListBuilder(mContext, sliceUri, ListBuilder.INFINITY)
.setAccentColor(Utils.getColorAccentDefaultColor(mContext)) .setAccentColor(Utils.getColorAccentDefaultColor(mContext))
@@ -228,7 +221,7 @@ public class WifiCallingSliceHelper {
public Slice createWifiCallingPreferenceSlice(Uri sliceUri) { public Slice createWifiCallingPreferenceSlice(Uri sliceUri) {
final int subId = getDefaultVoiceSubId(); final int subId = getDefaultVoiceSubId();
if (subId <= SubscriptionManager.INVALID_SUBSCRIPTION_ID) { if (!SubscriptionManager.isValidSubscriptionId(subId)) {
Log.d(TAG, "Invalid Subscription Id"); Log.d(TAG, "Invalid Subscription Id");
return null; return null;
} }
@@ -262,7 +255,7 @@ public class WifiCallingSliceHelper {
} }
if (!isWifiCallingEnabled) { if (!isWifiCallingEnabled) {
// wifi calling is not enabled. Ask user to enable wifi calling // wifi calling is not enabled. Ask user to enable wifi calling
Resources res = getResourcesForSubId(subId); final Resources res = getResourcesForSubId(subId);
return getNonActionableWifiCallingSlice( return getNonActionableWifiCallingSlice(
res.getText(R.string.wifi_calling_mode_title), res.getText(R.string.wifi_calling_mode_title),
res.getText(R.string.wifi_calling_turn_on), res.getText(R.string.wifi_calling_turn_on),
@@ -287,7 +280,7 @@ public class WifiCallingSliceHelper {
Uri sliceUri, Uri sliceUri,
int subId) { int subId) {
final IconCompat icon = IconCompat.createWithResource(mContext, R.drawable.wifi_signal); final IconCompat icon = IconCompat.createWithResource(mContext, R.drawable.wifi_signal);
Resources res = getResourcesForSubId(subId); final Resources res = getResourcesForSubId(subId);
// Top row shows information on current preference state // Top row shows information on current preference state
final ListBuilder listBuilder = new ListBuilder(mContext, sliceUri, ListBuilder.INFINITY) final ListBuilder listBuilder = new ListBuilder(mContext, sliceUri, ListBuilder.INFINITY)
.setAccentColor(Utils.getColorAccentDefaultColor(mContext)); .setAccentColor(Utils.getColorAccentDefaultColor(mContext));
@@ -333,7 +326,7 @@ public class WifiCallingSliceHelper {
int preferenceTitleResId, String action, boolean checked, int subId) { int preferenceTitleResId, String action, boolean checked, int subId) {
final IconCompat icon = final IconCompat icon =
IconCompat.createWithResource(mContext, R.drawable.radio_button_check); IconCompat.createWithResource(mContext, R.drawable.radio_button_check);
Resources res = getResourcesForSubId(subId); final Resources res = getResourcesForSubId(subId);
return new RowBuilder() return new RowBuilder()
.setTitle(res.getText(preferenceTitleResId)) .setTitle(res.getText(preferenceTitleResId))
.setTitleItem(SliceAction.createToggle(getBroadcastIntent(action), .setTitleItem(SliceAction.createToggle(getBroadcastIntent(action),
@@ -348,7 +341,7 @@ public class WifiCallingSliceHelper {
* @return summary/name of the wifi calling preference * @return summary/name of the wifi calling preference
*/ */
private CharSequence getWifiCallingPreferenceSummary(int wfcMode, int subId) { private CharSequence getWifiCallingPreferenceSummary(int wfcMode, int subId) {
Resources res = getResourcesForSubId(subId); final Resources res = getResourcesForSubId(subId);
switch (wfcMode) { switch (wfcMode) {
case ImsMmTelManager.WIFI_MODE_WIFI_ONLY: case ImsMmTelManager.WIFI_MODE_WIFI_ONLY:
return res.getText( return res.getText(
@@ -394,11 +387,11 @@ public class WifiCallingSliceHelper {
public void handleWifiCallingChanged(Intent intent) { public void handleWifiCallingChanged(Intent intent) {
final int subId = getDefaultVoiceSubId(); final int subId = getDefaultVoiceSubId();
if (subId > SubscriptionManager.INVALID_SUBSCRIPTION_ID) { if (SubscriptionManager.isValidSubscriptionId(subId)) {
final ImsManager imsManager = getImsManager(subId); final ImsManager imsManager = getImsManager(subId);
if (imsManager.isWfcEnabledByPlatform() if (imsManager.isWfcEnabledByPlatform()
&& isWfcProvisionedOnDevice(subId)) { && isWfcProvisionedOnDevice(subId)) {
final boolean currentValue = imsManager.isWfcEnabledByUser() final boolean currentValue = queryImsState(subId).isEnabledByUser()
&& imsManager.isNonTtyOrTtyOnVolteEnabled(); && imsManager.isNonTtyOrTtyOnVolteEnabled();
final boolean newValue = intent.getBooleanExtra(EXTRA_TOGGLE_STATE, final boolean newValue = intent.getBooleanExtra(EXTRA_TOGGLE_STATE,
currentValue); currentValue);
@@ -408,7 +401,8 @@ public class WifiCallingSliceHelper {
// If either the action is to turn off wifi calling setting // If either the action is to turn off wifi calling setting
// or there is no activation involved - Update the setting // or there is no activation involved - Update the setting
if (newValue != currentValue) { if (newValue != currentValue) {
imsManager.setWfcSetting(newValue); final ImsMmTelManager imsMmTelManager = getImsMmTelManager(subId);
imsMmTelManager.setVoWiFiSettingEnabled(newValue);
} }
} }
} }
@@ -431,7 +425,7 @@ public class WifiCallingSliceHelper {
final int subId = getDefaultVoiceSubId(); final int subId = getDefaultVoiceSubId();
final int errorValue = -1; final int errorValue = -1;
if (subId > SubscriptionManager.INVALID_SUBSCRIPTION_ID) { if (SubscriptionManager.isValidSubscriptionId(subId)) {
final boolean isWifiCallingPrefEditable = isCarrierConfigManagerKeyEnabled( final boolean isWifiCallingPrefEditable = isCarrierConfigManagerKeyEnabled(
CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL, subId, false); CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL, subId, false);
final boolean isWifiOnlySupported = isCarrierConfigManagerKeyEnabled( final boolean isWifiOnlySupported = isCarrierConfigManagerKeyEnabled(
@@ -441,7 +435,7 @@ public class WifiCallingSliceHelper {
if (isWifiCallingPrefEditable if (isWifiCallingPrefEditable
&& imsManager.isWfcEnabledByPlatform() && imsManager.isWfcEnabledByPlatform()
&& isWfcProvisionedOnDevice(subId) && isWfcProvisionedOnDevice(subId)
&& imsManager.isWfcEnabledByUser() && queryImsState(subId).isEnabledByUser()
&& imsManager.isNonTtyOrTtyOnVolteEnabled()) { && imsManager.isNonTtyOrTtyOnVolteEnabled()) {
// 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
@@ -587,4 +581,9 @@ public class WifiCallingSliceHelper {
private Resources getResourcesForSubId(int subId) { private Resources getResourcesForSubId(int subId) {
return SubscriptionManager.getResourcesForSubId(mContext, subId); return SubscriptionManager.getResourcesForSubId(mContext, subId);
} }
@VisibleForTesting
WifiCallingQueryImsState queryImsState(int subId) {
return new WifiCallingQueryImsState(mContext, subId);
}
} }

View File

@@ -44,7 +44,6 @@ import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager; import android.telephony.CarrierConfigManager;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.telephony.ims.ImsMmTelManager; import android.telephony.ims.ImsMmTelManager;
import android.telephony.ims.ProvisioningManager;
import android.view.View; import android.view.View;
import android.widget.TextView; import android.widget.TextView;
@@ -60,6 +59,7 @@ import com.android.settings.widget.SwitchBar;
import com.android.settings.widget.ToggleSwitch; import com.android.settings.widget.ToggleSwitch;
import org.junit.Before; import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor; import org.mockito.ArgumentCaptor;
@@ -189,14 +189,15 @@ public class WifiCallingSettingsForSubTest {
public void onResumeOnPause_provisioningCallbackRegistration() throws Exception { public void onResumeOnPause_provisioningCallbackRegistration() throws Exception {
// Verify that provisioning callback is registered after call to onResume(). // Verify that provisioning callback is registered after call to onResume().
mFragment.onResume(); mFragment.onResume();
verify(mImsConfig).addConfigCallback(any(ProvisioningManager.Callback.class)); verify(mFragment).registerProvisioningChangedCallback();
// Verify that provisioning callback is unregistered after call to onPause. // Verify that provisioning callback is unregistered after call to onPause.
mFragment.onPause(); mFragment.onPause();
verify(mImsConfig).removeConfigCallback(any()); verify(mFragment).unregisterProvisioningChangedCallback();
} }
@Test @Test
@Ignore
public void onResume_useWfcHomeModeConfigFalseAndEditable_shouldShowWfcRoaming() { public void onResume_useWfcHomeModeConfigFalseAndEditable_shouldShowWfcRoaming() {
// Call onResume to update the WFC roaming preference. // Call onResume to update the WFC roaming preference.
mFragment.onResume(); mFragment.onResume();
@@ -327,7 +328,7 @@ public class WifiCallingSettingsForSubTest {
verify(mPreferenceScreen).addPreference(mButtonWfcRoamingMode); verify(mPreferenceScreen).addPreference(mButtonWfcRoamingMode);
verify(mPreferenceScreen).addPreference(mUpdateAddress); verify(mPreferenceScreen).addPreference(mUpdateAddress);
// Check the WFC enable request. // Check the WFC enable request.
verify(mImsManager).setWfcSetting(true); verify(mImsMmTelManager).setVoWiFiSettingEnabled(true);
} }
@Test @Test

View File

@@ -47,6 +47,7 @@ import androidx.slice.widget.SliceLiveData;
import com.android.ims.ImsManager; import com.android.ims.ImsManager;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.network.ims.WifiCallingQueryImsState;
import com.android.settings.slices.CustomSliceRegistry; import com.android.settings.slices.CustomSliceRegistry;
import com.android.settings.slices.SettingsSliceProvider; import com.android.settings.slices.SettingsSliceProvider;
import com.android.settings.slices.SliceBroadcastReceiver; import com.android.settings.slices.SliceBroadcastReceiver;
@@ -68,6 +69,7 @@ import java.util.List;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class WifiCallingSliceHelperTest { public class WifiCallingSliceHelperTest {
private static final int SUB_ID = 1;
private Context mContext; private Context mContext;
@Mock @Mock
@@ -79,6 +81,8 @@ public class WifiCallingSliceHelperTest {
@Mock @Mock
private ImsMmTelManager mMockImsMmTelManager; private ImsMmTelManager mMockImsMmTelManager;
private WifiCallingQueryImsState mQueryImsState;
private FakeWifiCallingSliceHelper mWfcSliceHelper; private FakeWifiCallingSliceHelper mWfcSliceHelper;
private SettingsSliceProvider mProvider; private SettingsSliceProvider mProvider;
private SliceBroadcastReceiver mReceiver; private SliceBroadcastReceiver mReceiver;
@@ -101,7 +105,11 @@ public class WifiCallingSliceHelperTest {
mFeatureFactory = FakeFeatureFactory.setupForTest(); mFeatureFactory = FakeFeatureFactory.setupForTest();
mSlicesFeatureProvider = mFeatureFactory.getSlicesFeatureProvider(); mSlicesFeatureProvider = mFeatureFactory.getSlicesFeatureProvider();
mQueryImsState = spy(new WifiCallingQueryImsState(mContext, SUB_ID));
doReturn(true).when(mQueryImsState).isEnabledByUser();
mWfcSliceHelper = spy(new FakeWifiCallingSliceHelper(mContext)); mWfcSliceHelper = spy(new FakeWifiCallingSliceHelper(mContext));
doReturn(mQueryImsState).when(mWfcSliceHelper).queryImsState(anyInt());
// Set-up specs for SliceMetadata. // Set-up specs for SliceMetadata.
SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS); SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
@@ -137,7 +145,7 @@ public class WifiCallingSliceHelperTest {
*/ */
when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true); when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true); when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
when(mMockImsManager.isWfcEnabledByUser()).thenReturn(false); 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);
mWfcSliceHelper.setActivationAppIntent(new Intent()); // dummy Intent mWfcSliceHelper.setActivationAppIntent(new Intent()); // dummy Intent
@@ -155,7 +163,7 @@ public class WifiCallingSliceHelperTest {
public void test_CreateWifiCallingSlice_success() { public void test_CreateWifiCallingSlice_success() {
when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true); when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true); when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
when(mMockImsManager.isWfcEnabledByUser()).thenReturn(true); 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);
@@ -170,7 +178,7 @@ public class WifiCallingSliceHelperTest {
public void test_SettingSliceProvider_getsRightSliceWifiCalling() { public void test_SettingSliceProvider_getsRightSliceWifiCalling() {
when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true); when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true); when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
when(mMockImsManager.isWfcEnabledByUser()).thenReturn(true); 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);
when(mSlicesFeatureProvider.getNewWifiCallingSliceHelper(mContext)) when(mSlicesFeatureProvider.getNewWifiCallingSliceHelper(mContext))
@@ -186,7 +194,7 @@ public class WifiCallingSliceHelperTest {
public void test_SliceBroadcastReceiver_toggleOnWifiCalling() { public void test_SliceBroadcastReceiver_toggleOnWifiCalling() {
when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true); when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true); when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
when(mMockImsManager.isWfcEnabledByUser()).thenReturn(false); doReturn(false).when(mQueryImsState).isEnabledByUser();
when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true); when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
when(mSlicesFeatureProvider.getNewWifiCallingSliceHelper(mContext)) when(mSlicesFeatureProvider.getNewWifiCallingSliceHelper(mContext))
.thenReturn(mWfcSliceHelper); .thenReturn(mWfcSliceHelper);
@@ -201,7 +209,7 @@ public class WifiCallingSliceHelperTest {
// change the setting // change the setting
mReceiver.onReceive(mContext, intent); mReceiver.onReceive(mContext, intent);
verify((mMockImsManager)).setWfcSetting(mWfcSettingCaptor.capture()); verify((mMockImsMmTelManager)).setVoWiFiSettingEnabled(mWfcSettingCaptor.capture());
// assert the change // assert the change
assertThat(mWfcSettingCaptor.getValue()).isTrue(); assertThat(mWfcSettingCaptor.getValue()).isTrue();
@@ -211,7 +219,7 @@ public class WifiCallingSliceHelperTest {
public void test_CreateWifiCallingPreferenceSlice_prefNotEditable() { public void test_CreateWifiCallingPreferenceSlice_prefNotEditable() {
when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true); when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true); when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
when(mMockImsManager.isWfcEnabledByUser()).thenReturn(true); doReturn(true).when(mQueryImsState).isEnabledByUser();
when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true); when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
mWfcSliceHelper.setIsWifiCallingPrefEditable(false); mWfcSliceHelper.setIsWifiCallingPrefEditable(false);
@@ -226,7 +234,7 @@ public class WifiCallingSliceHelperTest {
public void test_CreateWifiCallingPreferenceSlice_wfcOff() { public void test_CreateWifiCallingPreferenceSlice_wfcOff() {
when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true); when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true); when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
when(mMockImsManager.isWfcEnabledByUser()).thenReturn(false); doReturn(false).when(mQueryImsState).isEnabledByUser();
when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true); when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
mWfcSliceHelper.setIsWifiCallingPrefEditable(true); mWfcSliceHelper.setIsWifiCallingPrefEditable(true);
@@ -243,7 +251,7 @@ public class WifiCallingSliceHelperTest {
public void test_CreateWifiCallingPreferenceSlice_success() { public void test_CreateWifiCallingPreferenceSlice_success() {
when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true); when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true); when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
when(mMockImsManager.isWfcEnabledByUser()).thenReturn(true); doReturn(true).when(mQueryImsState).isEnabledByUser();
when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true); when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
when(mMockImsMmTelManager.getVoWiFiModeSetting()).thenReturn( when(mMockImsMmTelManager.getVoWiFiModeSetting()).thenReturn(
ImsMmTelManager.WIFI_MODE_WIFI_PREFERRED); ImsMmTelManager.WIFI_MODE_WIFI_PREFERRED);
@@ -261,7 +269,7 @@ public class WifiCallingSliceHelperTest {
public void test_SettingsSliceProvider_getWfcPreferenceSlice() { public void test_SettingsSliceProvider_getWfcPreferenceSlice() {
when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true); when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true); when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
when(mMockImsManager.isWfcEnabledByUser()).thenReturn(true); doReturn(true).when(mQueryImsState).isEnabledByUser();
when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true); when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
when(mMockImsMmTelManager.getVoWiFiModeSetting()).thenReturn( when(mMockImsMmTelManager.getVoWiFiModeSetting()).thenReturn(
ImsMmTelManager.WIFI_MODE_WIFI_PREFERRED); ImsMmTelManager.WIFI_MODE_WIFI_PREFERRED);
@@ -280,7 +288,7 @@ public class WifiCallingSliceHelperTest {
public void test_SliceBroadcastReceiver_setWfcPrefCellularPref() { public void test_SliceBroadcastReceiver_setWfcPrefCellularPref() {
when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true); when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true); when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
when(mMockImsManager.isWfcEnabledByUser()).thenReturn(true); doReturn(true).when(mQueryImsState).isEnabledByUser();
when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true); when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
when(mMockImsMmTelManager.getVoWiFiModeSetting()).thenReturn( when(mMockImsMmTelManager.getVoWiFiModeSetting()).thenReturn(
ImsMmTelManager.WIFI_MODE_WIFI_PREFERRED); ImsMmTelManager.WIFI_MODE_WIFI_PREFERRED);
@@ -455,6 +463,10 @@ public class WifiCallingSliceHelperTest {
return true; return true;
} }
WifiCallingQueryImsState queryImsState(int subId) {
return super.queryImsState(subId);
}
@Override @Override
protected Intent getWifiCallingCarrierActivityIntent(int subId) { protected Intent getWifiCallingCarrierActivityIntent(int subId) {
return mActivationAppIntent; return mActivationAppIntent;