Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e0f437c0 authored by Aleksander Morgado's avatar Aleksander Morgado
Browse files

Use isMobileDataCapable/isVoiceCapable helpers in deviceinfo/simstatus

Disabling telephony support may be done either with the
config_show_sim_info config option, or based on whether
TelephonyManager reports data capabilities. The isMobileDataCapable()
helper method ensures both ways are supported.

Additionally, the logic is also updated to explicitly check for voice
support, so that disabling this telephony element happens only when
both mobile data and voice are unsupported.

The unit tests are updated to consider both no-data and no-voice
cases, by mocking both Resources and TelephonyManager.

Bug: 395714454
Test: mm && atest SimStatusPreferenceControllerTest
Flag: EXEMPT bugfix
Change-Id: I429dfc86a373a2a445d63f78ab6441e85f51bf51
parent 40bb8897
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -32,9 +32,8 @@ import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen;

import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.network.SubscriptionUtil;
import com.android.settingslib.Utils;
import com.android.settingslib.search.SearchIndexableRaw;

import java.util.List;
@@ -73,8 +72,7 @@ public class SimStatusPreferenceController extends BasePreferenceController {

    @Override
    public int getAvailabilityStatus() {
        if (!SubscriptionUtil.isSimHardwareVisible(mContext)
                || Utils.isWifiOnly(mContext)
        if ((!Utils.isMobileDataCapable(mContext) && !Utils.isVoiceCapable(mContext))
                || getSimSlotIndex() == SubscriptionManager.INVALID_SIM_SLOT_INDEX) {
            return UNSUPPORTED_ON_DEVICE;
        }
@@ -87,7 +85,7 @@ public class SimStatusPreferenceController extends BasePreferenceController {
    @Override
    public void displayPreference(PreferenceScreen screen) {
        super.displayPreference(screen);
        if ((!SubscriptionUtil.isSimHardwareVisible(mContext)) || (mSlotSimStatus == null)) {
        if (!isAvailable() || (mSlotSimStatus == null)) {
            return;
        }
        String basePreferenceKey = mSlotSimStatus.getPreferenceKey(
+28 −4
Original line number Diff line number Diff line
@@ -117,6 +117,7 @@ public class SimStatusPreferenceControllerTest {
        // Availability defaults
        when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true);
        when(mTelephonyManager.isDataCapable()).thenReturn(true);
        when(mTelephonyManager.isDeviceVoiceCapable()).thenReturn(true);
        when(mUserManager.isAdminUser()).thenReturn(true);

        when(mScreen.getContext()).thenReturn(mContext);
@@ -215,7 +216,7 @@ public class SimStatusPreferenceControllerTest {
    }

    @Test
    public void getAvailabilityStatus_showSimInfo_telephonyDataCapable_userAdmindisplayed() {
    public void getAvailabilityStatus_default_displayed() {
        SlotSimStatus slotSimStatus = new TestSlotSimStatus(mContext);
        mController.init(mFragment, slotSimStatus);

@@ -225,7 +226,7 @@ public class SimStatusPreferenceControllerTest {
    }

    @Test
    public void getAvailabilityStatus_notShowSimInfo_telephonyDataCapable_userAdmin_notDisplayed() {
    public void getAvailabilityStatus_notShowSimInfo_notDisplayed() {
        SlotSimStatus slotSimStatus = new TestSlotSimStatus(mContext);
        mController.init(mFragment, slotSimStatus);

@@ -235,17 +236,40 @@ public class SimStatusPreferenceControllerTest {
    }

    @Test
    public void getAvailabilityStatus_showSimInfo_notTelephonyDataCapable_userAdmin_notDisplayed() {
    public void getAvailabilityStatus_voiceCapable_notDataCapable_displayed() {
        SlotSimStatus slotSimStatus = new TestSlotSimStatus(mContext);
        mController.init(mFragment, slotSimStatus);

        when(mTelephonyManager.isDataCapable()).thenReturn(false);
        when(mTelephonyManager.isDeviceVoiceCapable()).thenReturn(true);
        assertThat(mController.getAvailabilityStatus()).isEqualTo(
                BasePreferenceController.AVAILABLE);
    }

    @Test
    public void getAvailabilityStatus_notVoiceCapable_dataCapable_displayed() {
        SlotSimStatus slotSimStatus = new TestSlotSimStatus(mContext);
        mController.init(mFragment, slotSimStatus);

        when(mTelephonyManager.isDataCapable()).thenReturn(true);
        when(mTelephonyManager.isDeviceVoiceCapable()).thenReturn(false);
        assertThat(mController.getAvailabilityStatus()).isEqualTo(
                BasePreferenceController.AVAILABLE);
    }

    @Test
    public void getAvailabilityStatus_notVoiceCapable_notDataCapable_notDisplayed() {
        SlotSimStatus slotSimStatus = new TestSlotSimStatus(mContext);
        mController.init(mFragment, slotSimStatus);

        when(mTelephonyManager.isDataCapable()).thenReturn(false);
        when(mTelephonyManager.isDeviceVoiceCapable()).thenReturn(false);
        assertThat(mController.getAvailabilityStatus()).isEqualTo(
                BasePreferenceController.UNSUPPORTED_ON_DEVICE);
    }

    @Test
    public void getAvailabilityStatus_showSimInfo_telephonyDataCapable_notUserAdmin_notDisplayed() {
    public void getAvailabilityStatus_notUserAdmin_notDisplayed() {
        SlotSimStatus slotSimStatus = new TestSlotSimStatus(mContext);
        mController.init(mFragment, slotSimStatus);