diff --git a/src/com/android/settings/wifi/AddWifiNetworkPreference.java b/src/com/android/settings/wifi/AddWifiNetworkPreference.java index 18205391525..6aafbcacfb1 100644 --- a/src/com/android/settings/wifi/AddWifiNetworkPreference.java +++ b/src/com/android/settings/wifi/AddWifiNetworkPreference.java @@ -19,28 +19,25 @@ package com.android.settings.wifi; import android.content.Context; import android.content.res.Resources; import android.graphics.drawable.Drawable; +import android.os.UserManager; import android.util.Log; import android.widget.ImageButton; import androidx.annotation.DrawableRes; -import androidx.preference.Preference; import androidx.preference.PreferenceViewHolder; -import com.android.internal.annotations.VisibleForTesting; import com.android.settings.R; import com.android.settings.wifi.dpp.WifiDppUtils; -import com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils; +import com.android.settingslib.RestrictedPreference; /** * The Preference for users to add Wi-Fi networks in WifiSettings */ -public class AddWifiNetworkPreference extends Preference { +public class AddWifiNetworkPreference extends RestrictedPreference { private static final String TAG = "AddWifiNetworkPreference"; private final Drawable mScanIconDrawable; - @VisibleForTesting - boolean mIsAddWifiConfigAllow; public AddWifiNetworkPreference(Context context) { super(context); @@ -51,8 +48,7 @@ public class AddWifiNetworkPreference extends Preference { setTitle(R.string.wifi_add_network); mScanIconDrawable = getDrawable(R.drawable.ic_scan_24dp); - mIsAddWifiConfigAllow = WifiEnterpriseRestrictionUtils.isAddWifiConfigAllowed(context); - updatePreferenceForRestriction(); + checkRestrictionAndSetDisabled(UserManager.DISALLOW_ADD_WIFI_CONFIG); } @Override @@ -79,12 +75,4 @@ public class AddWifiNetworkPreference extends Preference { } return buttonIcon; } - - @VisibleForTesting - void updatePreferenceForRestriction() { - if (!mIsAddWifiConfigAllow) { - setEnabled(false); - setSummary(R.string.not_allowed_by_ent); - } - } } diff --git a/src/com/android/settings/wifi/WifiEntryPreference.java b/src/com/android/settings/wifi/WifiEntryPreference.java index fedd9c977e9..5763abdbd81 100644 --- a/src/com/android/settings/wifi/WifiEntryPreference.java +++ b/src/com/android/settings/wifi/WifiEntryPreference.java @@ -21,6 +21,7 @@ import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.graphics.drawable.StateListDrawable; +import android.os.UserManager; import android.text.TextUtils; import android.view.View; import android.widget.ImageButton; @@ -30,10 +31,10 @@ import android.widget.TextView; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; -import androidx.preference.Preference; import androidx.preference.PreferenceViewHolder; import com.android.settingslib.R; +import com.android.settingslib.RestrictedPreference; import com.android.settingslib.Utils; import com.android.settingslib.wifi.WifiUtils; import com.android.wifitrackerlib.BaseWifiTracker; @@ -42,7 +43,8 @@ import com.android.wifitrackerlib.WifiEntry; /** * Preference to display a WifiEntry in a wifi picker. */ -public class WifiEntryPreference extends Preference implements WifiEntry.WifiEntryCallback, +public class WifiEntryPreference extends RestrictedPreference implements + WifiEntry.WifiEntryCallback, View.OnClickListener { private static final int[] STATE_SECURED = { @@ -86,6 +88,7 @@ public class WifiEntryPreference extends Preference implements WifiEntry.WifiEnt mWifiEntry = wifiEntry; mWifiEntry.setListener(this); mIconInjector = iconInjector; + checkRestrictionAndSetDisabled(UserManager.DISALLOW_ADD_WIFI_CONFIG); refresh(); } @@ -309,5 +312,4 @@ public class WifiEntryPreference extends Preference implements WifiEntry.WifiEnt } return buttonIcon; } - } diff --git a/tests/robotests/src/com/android/settings/wifi/AddWifiNetworkPreferenceTest.java b/tests/robotests/src/com/android/settings/wifi/AddWifiNetworkPreferenceTest.java index 04ecdabf9fb..5f88eb2a083 100644 --- a/tests/robotests/src/com/android/settings/wifi/AddWifiNetworkPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/wifi/AddWifiNetworkPreferenceTest.java @@ -17,61 +17,56 @@ package com.android.settings.wifi; import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; - import android.content.Context; import android.os.UserManager; import androidx.test.core.app.ApplicationProvider; -import com.android.settings.R; +import com.android.settingslib.RestrictedLockUtils; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; +import org.mockito.Spy; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; -import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; @RunWith(RobolectricTestRunner.class) +@Config(shadows = ShadowRestrictedPreference.class) public class AddWifiNetworkPreferenceTest { - private Context mContext; - private AddWifiNetworkPreference mPreference; + @Rule + public final MockitoRule mMockitoRule = MockitoJUnit.rule(); + @Spy + Context mContext = ApplicationProvider.getApplicationContext(); - @Mock - private UserManager mUserManager; + private AddWifiNetworkPreference mPreference; @Before public void setUp() { - MockitoAnnotations.initMocks(this); - - mContext = spy(ApplicationProvider.getApplicationContext()); - when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager); mPreference = new AddWifiNetworkPreference(mContext); - } @Test public void updatePreferenceForRestriction_isAddWifiConfigAllowed_prefIsEnabled() { - mPreference.mIsAddWifiConfigAllow = true; + // If the user is allowed to add Wi-Fi configuration then the EnforcedAdmin will be null. + RestrictedLockUtils.EnforcedAdmin enforcedAdmin = null; - mPreference.updatePreferenceForRestriction(); + mPreference.setDisabledByAdmin(enforcedAdmin); assertThat(mPreference.isEnabled()).isTrue(); - assertThat(mPreference.getSummary()).isNull(); } @Test public void updatePreferenceForRestriction_isAddWifiConfigNotAllowed_prefIsDisabled() { - mPreference.mIsAddWifiConfigAllow = false; + RestrictedLockUtils.EnforcedAdmin enforcedAdmin = new RestrictedLockUtils.EnforcedAdmin( + null /* component */, UserManager.DISALLOW_ADD_WIFI_CONFIG, null /* user */); - mPreference.updatePreferenceForRestriction(); + mPreference.setDisabledByAdmin(enforcedAdmin); assertThat(mPreference.isEnabled()).isFalse(); - assertThat(mPreference.getSummary()) - .isEqualTo(mContext.getString(R.string.not_allowed_by_ent)); } } diff --git a/tests/robotests/src/com/android/settings/wifi/ConnectedWifiEntryPreferenceTest.java b/tests/robotests/src/com/android/settings/wifi/ConnectedWifiEntryPreferenceTest.java index 401fdcff6e7..46a6132ab56 100644 --- a/tests/robotests/src/com/android/settings/wifi/ConnectedWifiEntryPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/wifi/ConnectedWifiEntryPreferenceTest.java @@ -35,8 +35,10 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; @RunWith(RobolectricTestRunner.class) +@Config(shadows = ShadowRestrictedPreference.class) public class ConnectedWifiEntryPreferenceTest { @Mock diff --git a/tests/robotests/src/com/android/settings/wifi/LongPressWifiEntryPreferenceTest.java b/tests/robotests/src/com/android/settings/wifi/LongPressWifiEntryPreferenceTest.java index fd7cc8943c9..efc2018ec85 100644 --- a/tests/robotests/src/com/android/settings/wifi/LongPressWifiEntryPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/wifi/LongPressWifiEntryPreferenceTest.java @@ -36,8 +36,10 @@ import org.mockito.Spy; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; @RunWith(RobolectricTestRunner.class) +@Config(shadows = ShadowRestrictedPreference.class) public class LongPressWifiEntryPreferenceTest { @Rule diff --git a/tests/robotests/src/com/android/settings/wifi/ShadowRestrictedPreference.java b/tests/robotests/src/com/android/settings/wifi/ShadowRestrictedPreference.java new file mode 100644 index 00000000000..4135ea080e7 --- /dev/null +++ b/tests/robotests/src/com/android/settings/wifi/ShadowRestrictedPreference.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2022 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.settings.wifi; + +import com.android.settingslib.RestrictedPreference; + +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; + +@Implements(RestrictedPreference.class) +public class ShadowRestrictedPreference { + + @Implementation + public void checkRestrictionAndSetDisabled(String userRestriction) { + // do nothing + } +} diff --git a/tests/robotests/src/com/android/settings/wifi/WifiEntryPreferenceTest.java b/tests/robotests/src/com/android/settings/wifi/WifiEntryPreferenceTest.java index a5d63dbd34d..0f51ef3874a 100644 --- a/tests/robotests/src/com/android/settings/wifi/WifiEntryPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/wifi/WifiEntryPreferenceTest.java @@ -40,11 +40,13 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; import java.util.ArrayList; import java.util.List; @RunWith(RobolectricTestRunner.class) +@Config(shadows = ShadowRestrictedPreference.class) public class WifiEntryPreferenceTest { private Context mContext; diff --git a/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java index 649f4cb45e4..b7c7270b908 100644 --- a/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java +++ b/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java @@ -70,6 +70,7 @@ import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowToast; @RunWith(RobolectricTestRunner.class) +@Config(shadows = ShadowRestrictedPreference.class) public class WifiSettingsTest { private static final int NUM_NETWORKS = 4; diff --git a/tests/robotests/src/com/android/settings/wifi/dpp/WifiNetworkListFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/dpp/WifiNetworkListFragmentTest.java index e78f1c11348..e99b64003a2 100644 --- a/tests/robotests/src/com/android/settings/wifi/dpp/WifiNetworkListFragmentTest.java +++ b/tests/robotests/src/com/android/settings/wifi/dpp/WifiNetworkListFragmentTest.java @@ -36,6 +36,7 @@ import androidx.preference.Preference; import androidx.preference.PreferenceCategory; import androidx.test.InstrumentationRegistry; +import com.android.settings.wifi.ShadowRestrictedPreference; import com.android.settings.wifi.WifiEntryPreference; import com.android.wifitrackerlib.SavedNetworkTracker; import com.android.wifitrackerlib.WifiEntry; @@ -45,10 +46,12 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; import java.util.Arrays; @RunWith(RobolectricTestRunner.class) +@Config(shadows = ShadowRestrictedPreference.class) public class WifiNetworkListFragmentTest { private WifiNetworkListFragment mWifiNetworkListFragment; private Context mContext;