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