diff options
3 files changed, 161 insertions, 2 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/Utils.java b/packages/SettingsLib/src/com/android/settingslib/Utils.java index 8def03648558..d90386f904ec 100644 --- a/packages/SettingsLib/src/com/android/settingslib/Utils.java +++ b/packages/SettingsLib/src/com/android/settingslib/Utils.java @@ -12,9 +12,7 @@ import android.content.res.ColorStateList; import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.graphics.Color; -import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.net.ConnectivityManager; import android.os.BatteryManager; @@ -297,4 +295,9 @@ public class Utils { } return defaultDays; } + + public static boolean isWifiOnly(Context context) { + return !context.getSystemService(ConnectivityManager.class) + .isNetworkSupported(ConnectivityManager.TYPE_MOBILE); + } } diff --git a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractSimStatusImeiInfoPreferenceController.java b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractSimStatusImeiInfoPreferenceController.java new file mode 100644 index 000000000000..a78440c271c9 --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractSimStatusImeiInfoPreferenceController.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settingslib.deviceinfo; + +import android.content.Context; +import android.os.UserManager; + +import com.android.settingslib.Utils; +import com.android.settingslib.core.AbstractPreferenceController; + +public abstract class AbstractSimStatusImeiInfoPreferenceController + extends AbstractPreferenceController { + public AbstractSimStatusImeiInfoPreferenceController(Context context) { + super(context); + } + + @Override + public boolean isAvailable() { + return mContext.getSystemService(UserManager.class).isAdminUser() + && !Utils.isWifiOnly(mContext); + } +} diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/SimStatusImeiInfoPreferenceControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/SimStatusImeiInfoPreferenceControllerTest.java new file mode 100644 index 000000000000..28409fae45e6 --- /dev/null +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/SimStatusImeiInfoPreferenceControllerTest.java @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settingslib.deviceinfo; + +import static com.google.common.truth.Truth.assertThat; + +import static org.robolectric.shadow.api.Shadow.extract; + +import android.net.ConnectivityManager; +import android.os.UserManager; +import android.util.SparseBooleanArray; + +import com.android.settingslib.SettingsLibRobolectricTestRunner; +import com.android.settingslib.TestConfig; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; + +@RunWith(SettingsLibRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, + shadows = {SimStatusImeiInfoPreferenceControllerTest.ShadowUserManager.class, + SimStatusImeiInfoPreferenceControllerTest.ShadowConnectivityManager.class}) +public class SimStatusImeiInfoPreferenceControllerTest { + + private AbstractSimStatusImeiInfoPreferenceController mController; + + @Before + public void setUp() { + mController = new AbstractSimStatusImeiInfoPreferenceController( + RuntimeEnvironment.application) { + @Override + public String getPreferenceKey() { + return null; + } + }; + } + + @Test + public void testIsAvailable_isAdminAndHasMobile_shouldReturnTrue() { + ShadowUserManager userManager = + extract(RuntimeEnvironment.application.getSystemService(UserManager.class)); + userManager.setIsAdminUser(true); + ShadowConnectivityManager connectivityManager = + extract(RuntimeEnvironment.application.getSystemService(ConnectivityManager.class)); + connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, true); + + assertThat(mController.isAvailable()).isTrue(); + } + + @Test + public void testIsAvailable_isAdminButNoMobile_shouldReturnFalse() { + ShadowUserManager userManager = + extract(RuntimeEnvironment.application.getSystemService(UserManager.class)); + userManager.setIsAdminUser(true); + ShadowConnectivityManager connectivityManager = + extract(RuntimeEnvironment.application.getSystemService(ConnectivityManager.class)); + connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, false); + + assertThat(mController.isAvailable()).isFalse(); + } + + @Test + public void testIsAvailable_isNotAdmin_shouldReturnFalse() { + ShadowUserManager userManager = + extract(RuntimeEnvironment.application.getSystemService(UserManager.class)); + userManager.setIsAdminUser(false); + + assertThat(mController.isAvailable()).isFalse(); + } + + @Implements(UserManager.class) + public static class ShadowUserManager extends org.robolectric.shadows.ShadowUserManager { + + private boolean mAdminUser; + + public void setIsAdminUser(boolean isAdminUser) { + mAdminUser = isAdminUser; + } + + @Implementation + public boolean isAdminUser() { + return mAdminUser; + } + } + + @Implements(ConnectivityManager.class) + public static class ShadowConnectivityManager + extends org.robolectric.shadows.ShadowConnectivityManager { + + private final SparseBooleanArray mSupportedNetworkTypes = new SparseBooleanArray(); + + public void setNetworkSupported(int networkType, boolean supported) { + mSupportedNetworkTypes.put(networkType, supported); + } + + @Implementation + public boolean isNetworkSupported(int networkType) { + return mSupportedNetworkTypes.get(networkType); + } + } +} |