diff --git a/src/com/android/settings/network/MobileNetworkPreferenceController.java b/src/com/android/settings/network/MobileNetworkPreferenceController.java index bfe013bff1b..5922045bbb8 100644 --- a/src/com/android/settings/network/MobileNetworkPreferenceController.java +++ b/src/com/android/settings/network/MobileNetworkPreferenceController.java @@ -32,7 +32,6 @@ import com.android.settingslib.core.lifecycle.events.OnResume; import static android.os.UserHandle.myUserId; import static android.os.UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS; -import static com.android.settingslib.RestrictedLockUtils.hasBaseUserRestriction; public class MobileNetworkPreferenceController extends PreferenceController implements LifecycleObserver, OnResume, OnPause { @@ -41,22 +40,30 @@ public class MobileNetworkPreferenceController extends PreferenceController impl private final boolean mIsSecondaryUser; private final TelephonyManager mTelephonyManager; + private final UserManager mUserManager; private Preference mPreference; @VisibleForTesting PhoneStateListener mPhoneStateListener; public MobileNetworkPreferenceController(Context context) { super(context); - UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE); + mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); - mIsSecondaryUser = !userManager.isAdminUser(); + mIsSecondaryUser = !mUserManager.isAdminUser(); } @Override public boolean isAvailable() { - return !mIsSecondaryUser - && !Utils.isWifiOnly(mContext) - && !hasBaseUserRestriction(mContext, DISALLOW_CONFIG_MOBILE_NETWORKS, myUserId()); + return !isUserRestricted() && !Utils.isWifiOnly(mContext); + } + + public boolean isUserRestricted() { + final RestrictedLockUtilsWrapper wrapper = new RestrictedLockUtilsWrapper(); + return mIsSecondaryUser || + wrapper.hasBaseUserRestriction( + mContext, + DISALLOW_CONFIG_MOBILE_NETWORKS, + myUserId()); } @Override diff --git a/src/com/android/settings/network/RestrictedLockUtilsWrapper.java b/src/com/android/settings/network/RestrictedLockUtilsWrapper.java new file mode 100644 index 00000000000..de5b80851d3 --- /dev/null +++ b/src/com/android/settings/network/RestrictedLockUtilsWrapper.java @@ -0,0 +1,15 @@ +package com.android.settings.network; + +import android.content.Context; +import com.android.settingslib.RestrictedLockUtils; + +/** + * Wrapper class needed to be able to test classes which use RestrictedLockUtils methods. + * Unfortunately there is no way to deal with this until robolectric is updated due to the fact + * that it is a static method and it uses new API's. + */ +public class RestrictedLockUtilsWrapper { + public boolean hasBaseUserRestriction(Context context, String userRestriction, int userId) { + return RestrictedLockUtils.hasBaseUserRestriction(context, userRestriction, userId); + } +} \ No newline at end of file diff --git a/tests/robotests/src/com/android/settings/network/MobileNetworkPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/MobileNetworkPreferenceControllerTest.java index e115dad3004..66e357b53a5 100644 --- a/tests/robotests/src/com/android/settings/network/MobileNetworkPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/network/MobileNetworkPreferenceControllerTest.java @@ -26,6 +26,7 @@ import android.telephony.TelephonyManager; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; +import com.android.settings.testutils.shadow.ShadowRestrictedLockUtilsWrapper; import com.android.settingslib.core.lifecycle.Lifecycle; import org.junit.Before; @@ -87,6 +88,7 @@ public class MobileNetworkPreferenceControllerTest { } @Test + @Config(shadows = ShadowRestrictedLockUtilsWrapper.class) public void wifiOnly_prefIsNotAvailable() { when(mUserManager.isAdminUser()).thenReturn(true); when(mUserManager.hasUserRestriction(anyString(), any(UserHandle.class))) diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowMobileNetworkPreferenceController.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowMobileNetworkPreferenceController.java new file mode 100644 index 00000000000..8d7606335d2 --- /dev/null +++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowMobileNetworkPreferenceController.java @@ -0,0 +1,28 @@ +package com.android.settings.testutils.shadow; + +import android.content.Context; +import com.android.settings.network.MobileNetworkPreferenceController; +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; + +@Implements(MobileNetworkPreferenceController.class) +public class ShadowMobileNetworkPreferenceController { + private static boolean mIsRestricted = false; + + public void __constructor__(Context context) { + } + + @Implementation + public boolean isAvailable() { + return mIsRestricted ? false : true; + } + + @Implementation + public boolean isUserRestricted() { + return mIsRestricted; + } + + public static void setRestricted(boolean restricted) { + mIsRestricted = restricted; + } +} diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowRestrictedLockUtilsWrapper.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowRestrictedLockUtilsWrapper.java new file mode 100644 index 00000000000..0e0adce7bff --- /dev/null +++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowRestrictedLockUtilsWrapper.java @@ -0,0 +1,25 @@ +package com.android.settings.testutils.shadow; + +import android.content.Context; +import com.android.settings.network.RestrictedLockUtilsWrapper; +import org.robolectric.annotation.Implements; + +/** + * Shadow for the wrapper around RestrictedLockUtils. Should be removed/updated once robolectric is + * updated to allow usage of new UserManager API's. see + * {@link com.android.settingslib.RestrictedLockUtils} and + * {@link com.android.settings.network.RestrictedLockUtilsWrapper} + */ +@Implements(RestrictedLockUtilsWrapper.class) +public class ShadowRestrictedLockUtilsWrapper { + + private boolean isRestricted; + + public boolean hasBaseUserRestriction(Context context, String userRestriction, int userId) { + return isRestricted; + } + + public void setRestricted(boolean restricted) { + isRestricted = restricted; + } +}