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
This commit is contained in:
Charles He
2017-09-02 18:45:18 +01:00
parent 3d1f6abd6f
commit 289af93896
3 changed files with 13 additions and 3 deletions

View File

@@ -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);
}

View File

@@ -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));
}
/**

View File

@@ -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<View.OnClickListener> mForgetClickListener;
@Captor private ArgumentCaptor<Preference> 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();
}