diff --git a/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java b/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java
index 104761f7c88..6bc510d6b16 100644
--- a/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java
+++ b/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java
@@ -23,6 +23,7 @@ import android.app.settings.SettingsEnums;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.wifi.WifiManager;
+import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
@@ -40,7 +41,7 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.Utils;
-import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.dashboard.RestrictedDashboardFragment;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.wifi.WifiConfigUiBase2;
import com.android.settings.wifi.WifiDialog2;
@@ -62,7 +63,7 @@ import java.util.List;
*
The key of {@link WifiEntry} should be saved to the intent Extras when launching this class
* in order to properly render this page.
*/
-public class WifiNetworkDetailsFragment2 extends DashboardFragment implements
+public class WifiNetworkDetailsFragment2 extends RestrictedDashboardFragment implements
WifiDialog2.WifiDialog2Listener {
private static final String TAG = "WifiNetworkDetailsFrg2";
@@ -75,6 +76,8 @@ public class WifiNetworkDetailsFragment2 extends DashboardFragment implements
// Interval between initiating SavedNetworkTracker scans
private static final long SCAN_INTERVAL_MILLIS = 10_000;
+ @VisibleForTesting
+ boolean mIsUiRestricted;
@VisibleForTesting
NetworkDetailsTracker mNetworkDetailsTracker;
private HandlerThread mWorkerThread;
@@ -83,6 +86,34 @@ public class WifiNetworkDetailsFragment2 extends DashboardFragment implements
@VisibleForTesting
List mControllers;
+ public WifiNetworkDetailsFragment2() {
+ super(UserManager.DISALLOW_CONFIG_WIFI);
+ }
+
+ @Override
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+ setIfOnlyAvailableForAdmins(true);
+ mIsUiRestricted = isUiRestricted();
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ if (mIsUiRestricted) {
+ restrictUi();
+ }
+ }
+
+ @VisibleForTesting
+ void restrictUi() {
+ clearWifiEntryCallback();
+ if (!isUiRestrictedByOnlyAdmin()) {
+ getEmptyTextView().setText(R.string.wifi_empty_list_user_restricted);
+ }
+ getPreferenceScreen().removeAll();
+ }
+
@Override
public void onDestroy() {
mWorkerThread.quit();
@@ -126,7 +157,7 @@ public class WifiNetworkDetailsFragment2 extends DashboardFragment implements
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
- if (isEditable()) {
+ if (!mIsUiRestricted && isEditable()) {
MenuItem item = menu.add(0, Menu.FIRST, 0, R.string.wifi_modify);
item.setIcon(com.android.internal.R.drawable.ic_mode_edit);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
@@ -255,6 +286,17 @@ public class WifiNetworkDetailsFragment2 extends DashboardFragment implements
getArguments().getString(KEY_CHOSEN_WIFIENTRY_KEY));
}
+ private void clearWifiEntryCallback() {
+ if (mNetworkDetailsTracker == null) {
+ return;
+ }
+ final WifiEntry wifiEntry = mNetworkDetailsTracker.getWifiEntry();
+ if (wifiEntry == null) {
+ return;
+ }
+ wifiEntry.setListener(null);
+ }
+
private boolean isEditable() {
if (mNetworkDetailsTracker == null) {
return false;
diff --git a/tests/robotests/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2Test.java b/tests/robotests/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2Test.java
index 66b5bcb9bcc..fdd6295ab65 100644
--- a/tests/robotests/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2Test.java
+++ b/tests/robotests/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2Test.java
@@ -32,6 +32,7 @@ import android.app.settings.SettingsEnums;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
+import android.widget.TextView;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
@@ -110,6 +111,41 @@ public class WifiNetworkDetailsFragment2Test {
verify(mMenu, never()).add(anyInt(), anyInt(), anyInt(), eq(R.string.wifi_modify));
}
+ @Test
+ public void onCreateOptionsMenu_uiRestricted_shouldNotAddEditMenu() {
+ mFragment.mIsUiRestricted = true;
+
+ mFragment.onCreateOptionsMenu(mMenu, mock(MenuInflater.class));
+
+ verify(mMenu, never()).add(anyInt(), anyInt(), anyInt(), eq(R.string.wifi_modify));
+ }
+
+ @Test
+ public void restrictUi_shouldShowRestrictedText() {
+ final FakeFragment fragment = spy(new FakeFragment());
+ final PreferenceScreen screen = mock(PreferenceScreen.class);
+ final TextView restrictedText = mock(TextView.class);
+ doReturn(screen).when(fragment).getPreferenceScreen();
+ doReturn(false).when(fragment).isUiRestrictedByOnlyAdmin();
+ doReturn(restrictedText).when(fragment).getEmptyTextView();
+
+ fragment.restrictUi();
+
+ verify(restrictedText).setText(anyInt());
+ }
+
+ @Test
+ public void restrictUi_shouldRemoveAllPreferences() {
+ final FakeFragment fragment = spy(new FakeFragment());
+ final PreferenceScreen screen = mock(PreferenceScreen.class);
+ doReturn(screen).when(fragment).getPreferenceScreen();
+ doReturn(true).when(fragment).isUiRestrictedByOnlyAdmin();
+
+ fragment.restrictUi();
+
+ verify(screen).removeAll();
+ }
+
@Test
public void refreshPreferences_controllerShouldUpdateStateAndDisplayPreference() {
final FakeFragment fragment = spy(new FakeFragment());
@@ -136,6 +172,11 @@ public class WifiNetworkDetailsFragment2Test {
public void addPreferenceController(AbstractPreferenceController controller) {
super.addPreferenceController(controller);
}
+
+ @Override
+ public boolean isUiRestrictedByOnlyAdmin() {
+ return super.isUiRestrictedByOnlyAdmin();
+ }
}
public class TestController extends BasePreferenceController {