From 688fa772b9867ae66643eed9f7101584d9f58971 Mon Sep 17 00:00:00 2001 From: Weng Su Date: Fri, 9 Apr 2021 23:10:24 +0800 Subject: [PATCH] Modify Wi-Fi network details settings to restricted style - Show restricted text in guest mode - Screenshot: https://screenshot.googleplex.com/Q5tbzn67EJigpVJ Bug: 177573895 Test: manual test make RunSettingsRoboTests ROBOTEST_FILTER=WifiNetworkDetailsFragment2Test Change-Id: I64c8d82518d47c7f96802f505efa380c63b9e10c --- .../details2/WifiNetworkDetailsFragment2.java | 48 +++++++++++++++++-- .../WifiNetworkDetailsFragment2Test.java | 41 ++++++++++++++++ 2 files changed, 86 insertions(+), 3 deletions(-) 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 {