173f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler/* 273f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler * Copyright (C) 2017 The Android Open Source Project 373f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler * 473f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler * Licensed under the Apache License, Version 2.0 (the "License"); 573f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler * you may not use this file except in compliance with the License. 673f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler * You may obtain a copy of the License at 773f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler * 873f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler * http://www.apache.org/licenses/LICENSE-2.0 973f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler * 1073f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler * Unless required by applicable law or agreed to in writing, software 1173f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler * distributed under the License is distributed on an "AS IS" BASIS, 1273f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1373f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler * See the License for the specific language governing permissions and 1473f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler * limitations under the License. 1573f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler */ 1673f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler 1773f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantlerpackage com.android.settingslib.deviceinfo; 1873f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler 19f6631bf618477372bca3d4accae96553af2ae1d3Tony Mantlerimport static com.google.common.truth.Truth.assertWithMessage; 20f6631bf618477372bca3d4accae96553af2ae1d3Tony Mantlerimport static org.mockito.ArgumentMatchers.anyInt; 2173f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantlerimport static org.mockito.Mockito.doReturn; 22f6631bf618477372bca3d4accae96553af2ae1d3Tony Mantlerimport static org.mockito.Mockito.mock; 2373f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler 2473f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantlerimport android.content.Context; 25f6631bf618477372bca3d4accae96553af2ae1d3Tony Mantlerimport android.os.PersistableBundle; 2673f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantlerimport android.support.v7.preference.Preference; 2773f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantlerimport android.support.v7.preference.PreferenceScreen; 28f6631bf618477372bca3d4accae96553af2ae1d3Tony Mantlerimport android.telephony.CarrierConfigManager; 29f6631bf618477372bca3d4accae96553af2ae1d3Tony Mantlerimport android.telephony.SubscriptionManager; 3073f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler 3173f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantlerimport com.android.settingslib.SettingsLibRobolectricTestRunner; 3273f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantlerimport com.android.settingslib.core.lifecycle.Lifecycle; 3373f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler 3473f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantlerimport org.junit.Before; 3573f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantlerimport org.junit.Test; 3673f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantlerimport org.junit.runner.RunWith; 3773f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantlerimport org.mockito.Mock; 3873f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantlerimport org.mockito.MockitoAnnotations; 3973f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantlerimport org.robolectric.annotation.Config; 40f6631bf618477372bca3d4accae96553af2ae1d3Tony Mantlerimport org.robolectric.annotation.Implementation; 41f6631bf618477372bca3d4accae96553af2ae1d3Tony Mantlerimport org.robolectric.annotation.Implements; 4273f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler 4373f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler@RunWith(SettingsLibRobolectricTestRunner.class) 4473f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantlerpublic class ImsStatusPreferenceControllerTest { 4573f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler @Mock 4673f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler private Context mContext; 4773f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler @Mock 4873f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler private Lifecycle mLifecycle; 4973f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler @Mock 5073f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler private PreferenceScreen mScreen; 5173f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler @Mock 5273f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler private Preference mPreference; 5373f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler 5473f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler @Before 5573f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler public void setUp() { 5673f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler MockitoAnnotations.initMocks(this); 5773f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler doReturn(mPreference).when(mScreen) 5873f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler .findPreference(AbstractImsStatusPreferenceController.KEY_IMS_REGISTRATION_STATE); 5973f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler } 6073f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler 6173f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler @Test 6273f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler @Config(shadows = ShadowSubscriptionManager.class) 6373f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler public void testIsAvailable() { 6473f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler CarrierConfigManager carrierConfigManager = mock(CarrierConfigManager.class); 6573f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler doReturn(carrierConfigManager).when(mContext).getSystemService(CarrierConfigManager.class); 6673f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler 6773f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler PersistableBundle config = new PersistableBundle(1); 6873f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler config.putBoolean(CarrierConfigManager.KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL, true); 6973f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler doReturn(config).when(carrierConfigManager).getConfigForSubId(anyInt()); 7073f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler 7173f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler final AbstractImsStatusPreferenceController imsStatusPreferenceController = 7273f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler new ConcreteImsStatusPreferenceController(mContext, mLifecycle); 7373f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler 74f6631bf618477372bca3d4accae96553af2ae1d3Tony Mantler assertWithMessage("Should be available when IMS registration is true").that( 75f6631bf618477372bca3d4accae96553af2ae1d3Tony Mantler imsStatusPreferenceController.isAvailable()).isTrue(); 7673f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler 7773f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler config.putBoolean(CarrierConfigManager.KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL, false); 7873f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler 79f6631bf618477372bca3d4accae96553af2ae1d3Tony Mantler assertWithMessage("Should not be available when IMS registration is false") 80f6631bf618477372bca3d4accae96553af2ae1d3Tony Mantler .that(imsStatusPreferenceController.isAvailable()).isFalse(); 8173f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler 8273f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler doReturn(null).when(carrierConfigManager).getConfigForSubId(anyInt()); 8373f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler 84f6631bf618477372bca3d4accae96553af2ae1d3Tony Mantler assertWithMessage("Should not be available when IMS registration is false") 85f6631bf618477372bca3d4accae96553af2ae1d3Tony Mantler .that(imsStatusPreferenceController.isAvailable()).isFalse(); 8673f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler 8773f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler doReturn(null).when(mContext).getSystemService(CarrierConfigManager.class); 8873f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler 89f6631bf618477372bca3d4accae96553af2ae1d3Tony Mantler assertWithMessage("Should not be available when CarrierConfigManager service is null") 90f6631bf618477372bca3d4accae96553af2ae1d3Tony Mantler .that(imsStatusPreferenceController.isAvailable()).isFalse(); 9173f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler } 9273f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler 9373f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler @Implements(SubscriptionManager.class) 9473f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler public static class ShadowSubscriptionManager { 9573f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler @Implementation 9673f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler public static int getDefaultDataSubscriptionId() { 9773f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler return 1234; 9873f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler } 9973f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler } 10073f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler 10173f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler private static class ConcreteImsStatusPreferenceController 10273f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler extends AbstractImsStatusPreferenceController { 10373f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler 10473f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler public ConcreteImsStatusPreferenceController(Context context, 10573f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler Lifecycle lifecycle) { 10673f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler super(context, lifecycle); 10773f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler } 10873f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler } 10973f950dd04a579a11829f6fe426217bc4c1b7a25Tony Mantler} 110