Merge "Modify Wi-Fi network details settings to restricted style" into sc-dev

This commit is contained in:
TreeHugger Robot
2021-04-12 02:15:52 +00:00
committed by Android (Google) Code Review
2 changed files with 86 additions and 3 deletions

View File

@@ -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;
* <p>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<AbstractPreferenceController> 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;

View File

@@ -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 {