diff --git a/src/com/android/settings/wifi/calling/WifiCallingSettings.java b/src/com/android/settings/wifi/calling/WifiCallingSettings.java index 1644b39825c..8a342c8a68d 100644 --- a/src/com/android/settings/wifi/calling/WifiCallingSettings.java +++ b/src/com/android/settings/wifi/calling/WifiCallingSettings.java @@ -199,6 +199,12 @@ public class WifiCallingSettings extends InstrumentedFragment implements HelpRes return imsManager.isWfcEnabledByPlatform(); } + @VisibleForTesting + boolean isWfcProvisionedOnDevice(SubscriptionInfo info) { + ImsManager imsManager = ImsManager.getInstance(getActivity(), info.getSimSlotIndex()); + return imsManager.isWfcProvisionedOnDevice(); + } + private void updateSubList() { mSil = SubscriptionUtil.getActiveSubscriptions( getContext().getSystemService(SubscriptionManager.class)); @@ -208,7 +214,8 @@ public class WifiCallingSettings extends InstrumentedFragment implements HelpRes return; } for (int i = 0; i < mSil.size(); ) { - if (!isWfcEnabledByPlatform(mSil.get(i))) { + final SubscriptionInfo info = mSil.get(i); + if (!isWfcEnabledByPlatform(info) || !isWfcProvisionedOnDevice(info)) { mSil.remove(i); } else { i++; diff --git a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsTest.java index a87ac322952..cc9ebb31646 100644 --- a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsTest.java +++ b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsTest.java @@ -19,6 +19,7 @@ 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.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; @@ -106,4 +107,30 @@ public class WifiCallingSettingsTest { (WifiCallingSettings.WifiCallingViewPagerAdapter) pager.getAdapter(); assertThat(adapter.getCount()).isEqualTo(2); } + + @Test + public void setupFragment_twoSubscriptionsOneNotProvisionedOnDevice_oneResult() { + SubscriptionInfo info1 = mock(SubscriptionInfo.class); + SubscriptionInfo info2 = mock(SubscriptionInfo.class); + when(info1.getSubscriptionId()).thenReturn(111); + when(info2.getSubscriptionId()).thenReturn(222); + + SubscriptionUtil.setActiveSubscriptionsForTesting(new ArrayList<>( + Arrays.asList(info1, info2))); + doReturn(true).when(mFragment).isWfcEnabledByPlatform(any(SubscriptionInfo.class)); + doReturn(false).when(mFragment).isWfcProvisionedOnDevice(eq(info2)); + + Intent intent = new Intent(); + intent.putExtra(Settings.EXTRA_SUB_ID, info1.getSubscriptionId()); + FragmentController.of(mFragment, intent).create(0 /* containerViewId*/, + null /* bundle */).start().resume().visible().get(); + + View view = mFragment.getView(); + RtlCompatibleViewPager pager = view.findViewById(R.id.view_pager); + assertThat(pager.getCurrentItem()).isEqualTo(0); + + WifiCallingSettings.WifiCallingViewPagerAdapter adapter = + (WifiCallingSettings.WifiCallingViewPagerAdapter) pager.getAdapter(); + assertThat(adapter.getCount()).isEqualTo(1); + } }