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

Commit c9aaa03d authored by Aleksander Morgado's avatar Aleksander Morgado Committed by Android (Google) Code Review
Browse files

Merge changes from topic "settings-visibility-return-fixes" into main

* changes:
  Return DISABLED_FOR_USER in deviceinfo/simstatus availability if not admin user
  Return UNSUPPORTED_ON_DEVICE in deviceinfo/simstatus when no telephony
  Added unit tests for SimStatusPreferenceController visibility
  Return DISABLED_FOR_USER in IMEI availability if not admin user
  Return UNSUPPORTED_ON_DEVICE in network/imei when no telephony
  Added unit test for MobileNetworkImeiPreferenceController visibility
  Added unit tests for ImeiInfoPreferenceController visibility
  Return UNSUPPORTED_ON_DEVICE in network/phonenumber when no telephony
parents faabe074 22c88405
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -132,10 +132,13 @@ public class ImeiInfoPreferenceController extends BasePreferenceController {

    @Override
    public int getAvailabilityStatus() {
        boolean isAvailable = SubscriptionUtil.isSimHardwareVisible(mContext) &&
                mContext.getSystemService(UserManager.class).isAdminUser() &&
                !Utils.isWifiOnly(mContext);
        return isAvailable ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
        if (!SubscriptionUtil.isSimHardwareVisible(mContext) || Utils.isWifiOnly(mContext)) {
            return UNSUPPORTED_ON_DEVICE;
        }
        if (!mContext.getSystemService(UserManager.class).isAdminUser()) {
            return DISABLED_FOR_USER;
        }
        return AVAILABLE;
    }

    @Override
+7 −6
Original line number Diff line number Diff line
@@ -37,7 +37,6 @@ import com.android.settings.network.SubscriptionUtil;
import com.android.settingslib.Utils;
import com.android.settingslib.search.SearchIndexableRaw;

import java.util.ArrayList;
import java.util.List;

public class SimStatusPreferenceController extends BasePreferenceController {
@@ -74,13 +73,15 @@ public class SimStatusPreferenceController extends BasePreferenceController {

    @Override
    public int getAvailabilityStatus() {
        if (getSimSlotIndex() == SubscriptionManager.INVALID_SIM_SLOT_INDEX) {
        if (!SubscriptionUtil.isSimHardwareVisible(mContext)
                || Utils.isWifiOnly(mContext)
                || getSimSlotIndex() == SubscriptionManager.INVALID_SIM_SLOT_INDEX) {
            return UNSUPPORTED_ON_DEVICE;
        }
        boolean isAvailable = SubscriptionUtil.isSimHardwareVisible(mContext) &&
                mContext.getSystemService(UserManager.class).isAdminUser() &&
                !Utils.isWifiOnly(mContext);
        return isAvailable ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
        if (!mContext.getSystemService(UserManager.class).isAdminUser()) {
            return DISABLED_FOR_USER;
        }
        return AVAILABLE;
    }

    @Override
+6 −6
Original line number Diff line number Diff line
@@ -64,12 +64,12 @@ class MobileNetworkImeiPreferenceController(context: Context, key: String) :
    }

    override fun getAvailabilityStatus(subId: Int): Int = when {
        !Flags.isDualSimOnboardingEnabled() -> CONDITIONALLY_UNAVAILABLE
        SubscriptionManager.isValidSubscriptionId(subId)
                && SubscriptionUtil.isSimHardwareVisible(mContext)
                && mContext.userManager.isAdminUser
                && !Utils.isWifiOnly(mContext) -> AVAILABLE
        else -> CONDITIONALLY_UNAVAILABLE
        !SubscriptionUtil.isSimHardwareVisible(mContext)
            || Utils.isWifiOnly(mContext) -> UNSUPPORTED_ON_DEVICE
        !Flags.isDualSimOnboardingEnabled()
            || !SubscriptionManager.isValidSubscriptionId(subId) -> CONDITIONALLY_UNAVAILABLE
        !mContext.userManager.isAdminUser -> DISABLED_FOR_USER
        else -> AVAILABLE
    }

    override fun displayPreference(screen: PreferenceScreen) {
+3 −3
Original line number Diff line number Diff line
@@ -44,10 +44,10 @@ constructor(
    }

    override fun getAvailabilityStatus(subId: Int): Int = when {
        !SubscriptionUtil.isSimHardwareVisible(mContext)
            || Utils.isWifiOnly(mContext) -> UNSUPPORTED_ON_DEVICE
        !Flags.isDualSimOnboardingEnabled()
            || !SubscriptionManager.isValidSubscriptionId(subId)
            || !SubscriptionUtil.isSimHardwareVisible(mContext)
            || Utils.isWifiOnly(mContext) -> CONDITIONALLY_UNAVAILABLE
            || !SubscriptionManager.isValidSubscriptionId(subId) -> CONDITIONALLY_UNAVAILABLE
        !mContext.userManager.isAdminUser -> DISABLED_FOR_USER
        else -> AVAILABLE
    }
+43 −3
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@ import static android.telephony.TelephonyManager.PHONE_TYPE_CDMA;
import static android.telephony.TelephonyManager.PHONE_TYPE_GSM;
import static android.telephony.TelephonyManager.PHONE_TYPE_NONE;

import static com.android.settings.core.BasePreferenceController.AVAILABLE;
import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.Mockito.anyInt;
@@ -43,6 +43,7 @@ import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen;

import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.deviceinfo.simstatus.SlotSimStatus;

import org.junit.Before;
@@ -90,11 +91,15 @@ public class ImeiInfoPreferenceControllerTest {

        mResources = spy(mContext.getResources());
        when(mContext.getResources()).thenReturn(mResources);
        when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true);

        mockService(Context.TELEPHONY_SERVICE, TelephonyManager.class, mTelephonyManager);
        mockService(Context.USER_SERVICE, UserManager.class, mUserManager);

        // Availability defaults
        when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true);
        when(mTelephonyManager.isDataCapable()).thenReturn(true);
        when(mUserManager.isAdminUser()).thenReturn(true);

        when(mScreen.getContext()).thenReturn(mContext);
        final String categoryKey = "device_detail_category";
        when(mScreen.findPreference(categoryKey)).thenReturn(mCategory);
@@ -109,7 +114,6 @@ public class ImeiInfoPreferenceControllerTest {
                    }
                });
        controller.init(mFragment, slotSimStatus);
        doReturn(AVAILABLE).when(controller).getAvailabilityStatus();
        doReturn(preference).when(controller).createNewPreference(mContext);

        when(mScreen.findPreference(key)).thenReturn(preference);
@@ -228,6 +232,42 @@ public class ImeiInfoPreferenceControllerTest {
        verify(mFragment).getChildFragmentManager();
    }

    @Test
    public void getAvailabilityStatus_showSimInfo_telephonyDataCapable_userAdmindisplayed() {
        setupPhoneCount(1, PHONE_TYPE_GSM, PHONE_TYPE_NONE);

        // Use defaults
        assertThat(mController.getAvailabilityStatus()).isEqualTo(
                BasePreferenceController.AVAILABLE);
    }

    @Test
    public void getAvailabilityStatus_notShowSimInfo_telephonyDataCapable_userAdmin_notDisplayed() {
        setupPhoneCount(1, PHONE_TYPE_GSM, PHONE_TYPE_NONE);

        when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(false);
        assertThat(mController.getAvailabilityStatus()).isEqualTo(
                BasePreferenceController.UNSUPPORTED_ON_DEVICE);
    }

    @Test
    public void getAvailabilityStatus_showSimInfo_notTelephonyDataCapable_userAdmin_notDisplayed() {
        setupPhoneCount(1, PHONE_TYPE_GSM, PHONE_TYPE_NONE);

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

    @Test
    public void getAvailabilityStatus_showSimInfo_telephonyDataCapable_notUserAdmin_notDisplayed() {
        setupPhoneCount(1, PHONE_TYPE_GSM, PHONE_TYPE_NONE);

        when(mUserManager.isAdminUser()).thenReturn(false);
        assertThat(mController.getAvailabilityStatus()).isEqualTo(
                BasePreferenceController.DISABLED_FOR_USER);
    }

    private <T> void mockService(String serviceName, Class<T> serviceClass, T service) {
        when(mContext.getSystemServiceName(serviceClass)).thenReturn(serviceName);
        when(mContext.getSystemService(serviceName)).thenReturn(service);
Loading