Loading src/com/android/settings/network/NetworkProviderSettings.java +30 −2 Original line number Diff line number Diff line Loading @@ -34,9 +34,11 @@ import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.Handler; import android.os.PowerManager; import android.os.UserManager; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.EventLog; import android.util.FeatureFlagUtils; import android.util.Log; import android.view.ContextMenu; Loading Loading @@ -204,6 +206,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment * by the Test DPC tool in AFW mode. */ protected boolean mIsRestricted; @VisibleForTesting boolean mIsAdmin = true; @VisibleForTesting AirplaneModeEnabler mAirplaneModeEnabler; Loading Loading @@ -294,6 +298,13 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment addPreferences(); mIsRestricted = isUiRestricted(); mIsAdmin = isAdminUser(); } private boolean isAdminUser() { final UserManager userManager = getSystemService(UserManager.class); if (userManager == null) return true; return userManager.isAdminUser(); } private void addPreferences() { Loading Loading @@ -566,7 +577,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment if (mSelectedWifiEntry.canDisconnect()) { if (mSelectedWifiEntry.canShare()) { menu.add(Menu.NONE, MENU_ID_SHARE, 0 /* order */, R.string.share); addShareMenuIfSuitable(menu); } menu.add(Menu.NONE, MENU_ID_DISCONNECT, 1 /* order */, R.string.wifi_disconnect_button_text); Loading @@ -575,7 +586,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment // "forget" for normal saved network. And "disconnect" for ephemeral network because it // could only be disconnected and be put in blocklists so it won't be used again. if (canForgetNetwork()) { menu.add(Menu.NONE, MENU_ID_FORGET, 0 /* order */, R.string.forget); addForgetMenuIfSuitable(menu); } WifiConfiguration config = mSelectedWifiEntry.getWifiConfiguration(); Loading @@ -590,6 +601,23 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment } } @VisibleForTesting void addShareMenuIfSuitable(ContextMenu menu) { if (mIsAdmin) { menu.add(Menu.NONE, MENU_ID_SHARE, 0 /* order */, R.string.share); return; } Log.w(TAG, "Don't add the Wi-Fi share menu because the user is not an admin."); EventLog.writeEvent(0x534e4554, "206986392", -1 /* UID */, "User is not an admin"); } @VisibleForTesting void addForgetMenuIfSuitable(ContextMenu menu) { if (mIsAdmin) { menu.add(Menu.NONE, MENU_ID_FORGET, 0 /* order */, R.string.forget); } } private boolean canForgetNetwork() { return mSelectedWifiEntry.canForget() && !WifiUtils.isNetworkLockedDown(getActivity(), mSelectedWifiEntry.getWifiConfiguration()); Loading src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java +1 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,7 @@ public class WifiNetworkDetailsFragment extends RestrictedDashboardFragment impl @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setIfOnlyAvailableForAdmins(true); mIsUiRestricted = isUiRestricted(); } Loading tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java +53 −12 Original line number Diff line number Diff line Loading @@ -15,6 +15,9 @@ */ package com.android.settings.network; import static com.android.settings.network.NetworkProviderSettings.MENU_ID_DISCONNECT; import static com.android.settings.network.NetworkProviderSettings.MENU_ID_FORGET; import static com.android.settings.network.NetworkProviderSettings.MENU_ID_SHARE; import static com.android.settings.wifi.WifiConfigUiBase2.MODE_CONNECT; import static com.android.settings.wifi.WifiConfigUiBase2.MODE_MODIFY; Loading Loading @@ -77,6 +80,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; Loading Loading @@ -118,6 +122,8 @@ public class NetworkProviderSettingsTest { @Mock private LayoutPreference mResetInternetPreference; @Mock private ContextMenu mContextMenu; @Mock private MenuItem mMenuItem; @Mock InternetUpdater mInternetUpdater; Loading Loading @@ -321,12 +327,10 @@ public class NetworkProviderSettingsTest { final View view = mock(View.class); when(view.getTag()).thenReturn(connectedWifiEntryPreference); final ContextMenu menu = mock(ContextMenu.class); mNetworkProviderSettings.onCreateContextMenu(menu, view, null /* info */); mNetworkProviderSettings.onCreateContextMenu(mContextMenu, view, null /* info */); verify(menu).add(anyInt(), eq(NetworkProviderSettings.MENU_ID_FORGET), anyInt(), anyInt()); verify(menu).add(anyInt(), eq(NetworkProviderSettings.MENU_ID_DISCONNECT), anyInt(), anyInt()); verify(mContextMenu).add(anyInt(), eq(MENU_ID_FORGET), anyInt(), anyInt()); verify(mContextMenu).add(anyInt(), eq(MENU_ID_DISCONNECT), anyInt(), anyInt()); } @Test Loading @@ -346,10 +350,9 @@ public class NetworkProviderSettingsTest { final View view = mock(View.class); when(view.getTag()).thenReturn(connectedWifiEntryPreference); final ContextMenu menu = mock(ContextMenu.class); mNetworkProviderSettings.onCreateContextMenu(menu, view, null /* info */); mNetworkProviderSettings.onCreateContextMenu(mContextMenu, view, null /* info */); verify(menu).add(anyInt(), eq(NetworkProviderSettings.MENU_ID_SHARE), anyInt(), anyInt()); verify(mContextMenu).add(anyInt(), eq(MENU_ID_SHARE), anyInt(), anyInt()); } @Test Loading @@ -369,11 +372,9 @@ public class NetworkProviderSettingsTest { final View view = mock(View.class); when(view.getTag()).thenReturn(connectedWifiEntryPreference); final ContextMenu menu = mock(ContextMenu.class); mNetworkProviderSettings.onCreateContextMenu(menu, view, null /* info */); mNetworkProviderSettings.onCreateContextMenu(mContextMenu, view, null /* info */); verify(menu, never()) .add(anyInt(), eq(NetworkProviderSettings.MENU_ID_SHARE), anyInt(), anyInt()); verify(mContextMenu, never()).add(anyInt(), eq(MENU_ID_SHARE), anyInt(), anyInt()); } @Test Loading Loading @@ -680,6 +681,46 @@ public class NetworkProviderSettingsTest { verify(mAirplaneModeEnabler).stop(); } @Test public void addShareMenuIfSuitable_isAdmin_addMenu() { mNetworkProviderSettings.mIsAdmin = true; Mockito.reset(mContextMenu); mNetworkProviderSettings.addShareMenuIfSuitable(mContextMenu); verify(mContextMenu).add(anyInt(), eq(MENU_ID_SHARE), anyInt(), anyInt()); } @Test public void addShareMenuIfSuitable_isNotAdmin_notAddMenu() { mNetworkProviderSettings.mIsAdmin = false; Mockito.reset(mContextMenu); mNetworkProviderSettings.addShareMenuIfSuitable(mContextMenu); verify(mContextMenu, never()).add(anyInt(), eq(MENU_ID_SHARE), anyInt(), anyInt()); } @Test public void addForgetMenuIfSuitable_isAdmin_addMenu() { mNetworkProviderSettings.mIsAdmin = true; Mockito.reset(mContextMenu); mNetworkProviderSettings.addForgetMenuIfSuitable(mContextMenu); verify(mContextMenu).add(anyInt(), eq(MENU_ID_FORGET), anyInt(), anyInt()); } @Test public void addForgetMenuIfSuitable_isNotAdmin_notAddMenu() { mNetworkProviderSettings.mIsAdmin = false; Mockito.reset(mContextMenu); mNetworkProviderSettings.addForgetMenuIfSuitable(mContextMenu); verify(mContextMenu, never()).add(anyInt(), eq(MENU_ID_FORGET), anyInt(), anyInt()); } @Implements(PreferenceFragmentCompat.class) public static class ShadowPreferenceFragmentCompat { Loading Loading
src/com/android/settings/network/NetworkProviderSettings.java +30 −2 Original line number Diff line number Diff line Loading @@ -34,9 +34,11 @@ import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.Handler; import android.os.PowerManager; import android.os.UserManager; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.EventLog; import android.util.FeatureFlagUtils; import android.util.Log; import android.view.ContextMenu; Loading Loading @@ -204,6 +206,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment * by the Test DPC tool in AFW mode. */ protected boolean mIsRestricted; @VisibleForTesting boolean mIsAdmin = true; @VisibleForTesting AirplaneModeEnabler mAirplaneModeEnabler; Loading Loading @@ -294,6 +298,13 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment addPreferences(); mIsRestricted = isUiRestricted(); mIsAdmin = isAdminUser(); } private boolean isAdminUser() { final UserManager userManager = getSystemService(UserManager.class); if (userManager == null) return true; return userManager.isAdminUser(); } private void addPreferences() { Loading Loading @@ -566,7 +577,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment if (mSelectedWifiEntry.canDisconnect()) { if (mSelectedWifiEntry.canShare()) { menu.add(Menu.NONE, MENU_ID_SHARE, 0 /* order */, R.string.share); addShareMenuIfSuitable(menu); } menu.add(Menu.NONE, MENU_ID_DISCONNECT, 1 /* order */, R.string.wifi_disconnect_button_text); Loading @@ -575,7 +586,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment // "forget" for normal saved network. And "disconnect" for ephemeral network because it // could only be disconnected and be put in blocklists so it won't be used again. if (canForgetNetwork()) { menu.add(Menu.NONE, MENU_ID_FORGET, 0 /* order */, R.string.forget); addForgetMenuIfSuitable(menu); } WifiConfiguration config = mSelectedWifiEntry.getWifiConfiguration(); Loading @@ -590,6 +601,23 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment } } @VisibleForTesting void addShareMenuIfSuitable(ContextMenu menu) { if (mIsAdmin) { menu.add(Menu.NONE, MENU_ID_SHARE, 0 /* order */, R.string.share); return; } Log.w(TAG, "Don't add the Wi-Fi share menu because the user is not an admin."); EventLog.writeEvent(0x534e4554, "206986392", -1 /* UID */, "User is not an admin"); } @VisibleForTesting void addForgetMenuIfSuitable(ContextMenu menu) { if (mIsAdmin) { menu.add(Menu.NONE, MENU_ID_FORGET, 0 /* order */, R.string.forget); } } private boolean canForgetNetwork() { return mSelectedWifiEntry.canForget() && !WifiUtils.isNetworkLockedDown(getActivity(), mSelectedWifiEntry.getWifiConfiguration()); Loading
src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java +1 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,7 @@ public class WifiNetworkDetailsFragment extends RestrictedDashboardFragment impl @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setIfOnlyAvailableForAdmins(true); mIsUiRestricted = isUiRestricted(); } Loading
tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java +53 −12 Original line number Diff line number Diff line Loading @@ -15,6 +15,9 @@ */ package com.android.settings.network; import static com.android.settings.network.NetworkProviderSettings.MENU_ID_DISCONNECT; import static com.android.settings.network.NetworkProviderSettings.MENU_ID_FORGET; import static com.android.settings.network.NetworkProviderSettings.MENU_ID_SHARE; import static com.android.settings.wifi.WifiConfigUiBase2.MODE_CONNECT; import static com.android.settings.wifi.WifiConfigUiBase2.MODE_MODIFY; Loading Loading @@ -77,6 +80,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; Loading Loading @@ -118,6 +122,8 @@ public class NetworkProviderSettingsTest { @Mock private LayoutPreference mResetInternetPreference; @Mock private ContextMenu mContextMenu; @Mock private MenuItem mMenuItem; @Mock InternetUpdater mInternetUpdater; Loading Loading @@ -321,12 +327,10 @@ public class NetworkProviderSettingsTest { final View view = mock(View.class); when(view.getTag()).thenReturn(connectedWifiEntryPreference); final ContextMenu menu = mock(ContextMenu.class); mNetworkProviderSettings.onCreateContextMenu(menu, view, null /* info */); mNetworkProviderSettings.onCreateContextMenu(mContextMenu, view, null /* info */); verify(menu).add(anyInt(), eq(NetworkProviderSettings.MENU_ID_FORGET), anyInt(), anyInt()); verify(menu).add(anyInt(), eq(NetworkProviderSettings.MENU_ID_DISCONNECT), anyInt(), anyInt()); verify(mContextMenu).add(anyInt(), eq(MENU_ID_FORGET), anyInt(), anyInt()); verify(mContextMenu).add(anyInt(), eq(MENU_ID_DISCONNECT), anyInt(), anyInt()); } @Test Loading @@ -346,10 +350,9 @@ public class NetworkProviderSettingsTest { final View view = mock(View.class); when(view.getTag()).thenReturn(connectedWifiEntryPreference); final ContextMenu menu = mock(ContextMenu.class); mNetworkProviderSettings.onCreateContextMenu(menu, view, null /* info */); mNetworkProviderSettings.onCreateContextMenu(mContextMenu, view, null /* info */); verify(menu).add(anyInt(), eq(NetworkProviderSettings.MENU_ID_SHARE), anyInt(), anyInt()); verify(mContextMenu).add(anyInt(), eq(MENU_ID_SHARE), anyInt(), anyInt()); } @Test Loading @@ -369,11 +372,9 @@ public class NetworkProviderSettingsTest { final View view = mock(View.class); when(view.getTag()).thenReturn(connectedWifiEntryPreference); final ContextMenu menu = mock(ContextMenu.class); mNetworkProviderSettings.onCreateContextMenu(menu, view, null /* info */); mNetworkProviderSettings.onCreateContextMenu(mContextMenu, view, null /* info */); verify(menu, never()) .add(anyInt(), eq(NetworkProviderSettings.MENU_ID_SHARE), anyInt(), anyInt()); verify(mContextMenu, never()).add(anyInt(), eq(MENU_ID_SHARE), anyInt(), anyInt()); } @Test Loading Loading @@ -680,6 +681,46 @@ public class NetworkProviderSettingsTest { verify(mAirplaneModeEnabler).stop(); } @Test public void addShareMenuIfSuitable_isAdmin_addMenu() { mNetworkProviderSettings.mIsAdmin = true; Mockito.reset(mContextMenu); mNetworkProviderSettings.addShareMenuIfSuitable(mContextMenu); verify(mContextMenu).add(anyInt(), eq(MENU_ID_SHARE), anyInt(), anyInt()); } @Test public void addShareMenuIfSuitable_isNotAdmin_notAddMenu() { mNetworkProviderSettings.mIsAdmin = false; Mockito.reset(mContextMenu); mNetworkProviderSettings.addShareMenuIfSuitable(mContextMenu); verify(mContextMenu, never()).add(anyInt(), eq(MENU_ID_SHARE), anyInt(), anyInt()); } @Test public void addForgetMenuIfSuitable_isAdmin_addMenu() { mNetworkProviderSettings.mIsAdmin = true; Mockito.reset(mContextMenu); mNetworkProviderSettings.addForgetMenuIfSuitable(mContextMenu); verify(mContextMenu).add(anyInt(), eq(MENU_ID_FORGET), anyInt(), anyInt()); } @Test public void addForgetMenuIfSuitable_isNotAdmin_notAddMenu() { mNetworkProviderSettings.mIsAdmin = false; Mockito.reset(mContextMenu); mNetworkProviderSettings.addForgetMenuIfSuitable(mContextMenu); verify(mContextMenu, never()).add(anyInt(), eq(MENU_ID_FORGET), anyInt(), anyInt()); } @Implements(PreferenceFragmentCompat.class) public static class ShadowPreferenceFragmentCompat { Loading