From fe7c35803e6af35813ffe69b1d8f188ea28384fd Mon Sep 17 00:00:00 2001 From: Salvador Martinez Date: Mon, 7 Aug 2017 13:59:16 -0700 Subject: [PATCH] Update availability for mobile network This CL updates the availability to behave properly when a user other than the primary user is accessing it. This also makes the api return no intent if they don't have permission to access this because attempting to go to that screen will cause a crash. Also updates tests related to this change. Test: robotests still pass Bug: 64092292 Change-Id: If9913d9ae08ee3e205ff324aaeeadc755ff1d23d --- .../MobileNetworkPreferenceController.java | 19 +++++++++---- .../network/RestrictedLockUtilsWrapper.java | 15 ++++++++++ ...MobileNetworkPreferenceControllerTest.java | 2 ++ ...adowMobileNetworkPreferenceController.java | 28 +++++++++++++++++++ .../ShadowRestrictedLockUtilsWrapper.java | 25 +++++++++++++++++ 5 files changed, 83 insertions(+), 6 deletions(-) create mode 100644 src/com/android/settings/network/RestrictedLockUtilsWrapper.java create mode 100644 tests/robotests/src/com/android/settings/testutils/shadow/ShadowMobileNetworkPreferenceController.java create mode 100644 tests/robotests/src/com/android/settings/testutils/shadow/ShadowRestrictedLockUtilsWrapper.java 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; + } +}