[Settings] Apply ImsQueryProvisioningStat to WFC

1. Code refactor
2. Apply ImsQueryProvisioningStat class to WFC's use case

Bug: 140542283
Test: m RunSettingsRoboTests -j ROBOTEST_FILTER=WifiCallingPreferenceControllerTest
Change-Id: I8a09264f83b9fc4fce3f79ec3aeb6ae757b004e4
This commit is contained in:
Bonian Chen
2020-01-22 17:47:13 +08:00
parent 8821654a91
commit a8f14cb11e
8 changed files with 198 additions and 57 deletions

View File

@@ -18,13 +18,13 @@ package com.android.settings.wifi.calling;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.Intent;
import android.provider.Settings;
import android.telephony.SubscriptionInfo;
@@ -32,14 +32,19 @@ import android.view.View;
import androidx.fragment.app.FragmentActivity;
import com.android.ims.ImsManager;
import com.android.settings.R;
import com.android.settings.network.SubscriptionUtil;
import com.android.settings.network.ims.MockWifiCallingQueryImsState;
import com.android.settings.widget.RtlCompatibleViewPager;
import org.junit.Before;
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.shadows.androidx.fragment.FragmentController;
import java.util.ArrayList;
@@ -48,12 +53,38 @@ import java.util.Collections;
@RunWith(RobolectricTestRunner.class)
public class WifiCallingSettingsTest {
private static final int SUB_ID1 = 111;
private static final int SUB_ID2 = 222;
private Context mContext;
@Mock
private ImsManager mImsManager;
private WifiCallingSettings mFragment;
private MockWifiCallingQueryImsState mQueryImsState1;
private MockWifiCallingQueryImsState mQueryImsState2;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
mQueryImsState1 = spy(new MockWifiCallingQueryImsState(mContext, SUB_ID1));
mQueryImsState2 = spy(new MockWifiCallingQueryImsState(mContext, SUB_ID2));
doReturn(true).when(mQueryImsState1).isEnabledByUser();
doReturn(true).when(mQueryImsState2).isEnabledByUser();
doReturn(mImsManager).when(mQueryImsState1).getImsManager(anyInt());
doReturn(mImsManager).when(mQueryImsState2).getImsManager(anyInt());
doReturn(true).when(mImsManager).isWfcEnabledByPlatform();
mQueryImsState1.setIsProvisionedOnDevice(true);
mQueryImsState2.setIsProvisionedOnDevice(true);
mFragment = spy(new WifiCallingSettings());
doReturn(mQueryImsState1).when(mFragment).queryImsState(SUB_ID1);
doReturn(mQueryImsState2).when(mFragment).queryImsState(SUB_ID2);
}
@Test
@@ -65,12 +96,12 @@ public class WifiCallingSettingsTest {
@Test
public void setupFragment_oneSubscription_noCrash() {
final SubscriptionInfo info = mock(SubscriptionInfo.class);
when(info.getSubscriptionId()).thenReturn(111);
when(info.getSubscriptionId()).thenReturn(SUB_ID1);
SubscriptionUtil.setActiveSubscriptionsForTesting(new ArrayList<>(
Collections.singletonList(info)));
doReturn(true).when(mFragment).isWfcEnabledByPlatform(any(SubscriptionInfo.class));
doReturn(true).when(mFragment).isWfcProvisionedOnDevice(any(SubscriptionInfo.class));
doReturn(true).when(mImsManager).isWfcEnabledByPlatform();
mQueryImsState1.setIsProvisionedOnDevice(true);
final Intent intent = new Intent();
intent.putExtra(Settings.EXTRA_SUB_ID, info.getSubscriptionId());
@@ -88,13 +119,11 @@ public class WifiCallingSettingsTest {
public void setupFragment_twoSubscriptions_correctSelection() {
final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
when(info1.getSubscriptionId()).thenReturn(111);
when(info2.getSubscriptionId()).thenReturn(222);
when(info1.getSubscriptionId()).thenReturn(SUB_ID1);
when(info2.getSubscriptionId()).thenReturn(SUB_ID2);
SubscriptionUtil.setActiveSubscriptionsForTesting(new ArrayList<>(
Arrays.asList(info1, info2)));
doReturn(true).when(mFragment).isWfcEnabledByPlatform(any(SubscriptionInfo.class));
doReturn(true).when(mFragment).isWfcProvisionedOnDevice(any(SubscriptionInfo.class));
final Intent intent = new Intent();
intent.putExtra(Settings.EXTRA_SUB_ID, info2.getSubscriptionId());
@@ -114,14 +143,12 @@ public class WifiCallingSettingsTest {
public void setupFragment_twoSubscriptionsOneNotProvisionedOnDevice_oneResult() {
final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
when(info1.getSubscriptionId()).thenReturn(111);
when(info2.getSubscriptionId()).thenReturn(222);
when(info1.getSubscriptionId()).thenReturn(SUB_ID1);
when(info2.getSubscriptionId()).thenReturn(SUB_ID2);
SubscriptionUtil.setActiveSubscriptionsForTesting(new ArrayList<>(
Arrays.asList(info1, info2)));
doReturn(true).when(mFragment).isWfcEnabledByPlatform(any(SubscriptionInfo.class));
doReturn(true).when(mFragment).isWfcProvisionedOnDevice(eq(info1));
doReturn(false).when(mFragment).isWfcProvisionedOnDevice(eq(info2));
mQueryImsState2.setIsProvisionedOnDevice(false);
final Intent intent = new Intent();
intent.putExtra(Settings.EXTRA_SUB_ID, info1.getSubscriptionId());