From 289af93896190038de3bdd7527625bb45d37dae5 Mon Sep 17 00:00:00 2001 From: Charles He Date: Sat, 2 Sep 2017 18:45:18 +0100 Subject: [PATCH] Enforce wifi config lockdown on details page. Fixes the bug that, on the new WifiDetailPreference page, the "Forget" button is not disabled properly for wifi configs created and protected by DevicePolicyManger. Robolectric test to follow in a separate CL. Test: manual, by locking down wifi config with TestDPC Test: make RunSettingsRoboTests Bug: 64971700 Bug: 65396674 Change-Id: I27740eabd5eb94415e4258c9c80f91df2d9ab476 --- src/com/android/settings/wifi/WifiSettings.java | 2 +- .../wifi/details/WifiDetailPreferenceController.java | 6 +++++- .../wifi/details/WifiDetailPreferenceControllerTest.java | 8 +++++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index 89e5b74c5dd..2e1dc83ff66 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -1132,7 +1132,7 @@ public class WifiSettings extends RestrictedSettingsFragment * @param config The WiFi config. * @return true if the config is not editable through Settings. */ - static boolean isEditabilityLockedDown(Context context, WifiConfiguration config) { + public static boolean isEditabilityLockedDown(Context context, WifiConfiguration config) { return !canModifyNetwork(context, config); } diff --git a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java index f427e1cdce3..9dec71d31de 100644 --- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java +++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java @@ -19,6 +19,8 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL; import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED; import static android.net.NetworkCapabilities.TRANSPORT_WIFI; +import static com.android.settings.wifi.WifiSettings.isEditabilityLockedDown; + import android.app.Fragment; import android.content.BroadcastReceiver; import android.content.Context; @@ -464,7 +466,9 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController * Returns whether the network represented by this preference can be forgotten. */ private boolean canForgetNetwork() { - return mWifiInfo != null && mWifiInfo.isEphemeral() || mWifiConfig != null; + // TODO(65396674): create test for the locked down scenario + return (mWifiInfo != null && mWifiInfo.isEphemeral()) + || (mWifiConfig != null && !isEditabilityLockedDown(mContext, mWifiConfig)); } /** diff --git a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java index bdbe48addd0..4bc4c34649c 100644 --- a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java @@ -18,12 +18,15 @@ package com.android.settings.wifi.details; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -138,7 +141,7 @@ public class WifiDetailPreferenceControllerTest { @Captor private ArgumentCaptor mForgetClickListener; @Captor private ArgumentCaptor mIpv6AddressCaptor; - private Context mContext = RuntimeEnvironment.application; + private Context mContext; private Lifecycle mLifecycle; private LinkProperties mLinkProperties; private WifiDetailPreferenceController mController; @@ -199,6 +202,7 @@ public class WifiDetailPreferenceControllerTest { public void setUp() { MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application); mLifecycle = new Lifecycle(); when(mockAccessPoint.getConfig()).thenReturn(mockWifiConfig); @@ -230,6 +234,8 @@ public class WifiDetailPreferenceControllerTest { .thenReturn(mockHeaderController); when(mockHeaderController.setSummary(anyString())).thenReturn(mockHeaderController); + doReturn(null).when(mContext).getSystemService(eq(Context.DEVICE_POLICY_SERVICE)); + setupMockedPreferenceScreen(); mController = newWifiDetailPreferenceController(); }