diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java index 19ebd36d881..b622a3c308d 100644 --- a/src/com/android/settings/network/NetworkProviderSettings.java +++ b/src/com/android/settings/network/NetworkProviderSettings.java @@ -212,6 +212,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment protected boolean mIsRestricted; @VisibleForTesting boolean mIsAdmin = true; + @VisibleForTesting + boolean mIsGuest = false; @VisibleForTesting AirplaneModeEnabler mAirplaneModeEnabler; @@ -302,13 +304,14 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment addPreferences(); mIsRestricted = isUiRestricted(); - mIsAdmin = isAdminUser(); + updateUserType(); } - private boolean isAdminUser() { - final UserManager userManager = getSystemService(UserManager.class); - if (userManager == null) return true; - return userManager.isAdminUser(); + private void updateUserType() { + UserManager userManager = getSystemService(UserManager.class); + if (userManager == null) return; + mIsAdmin = userManager.isAdminUser(); + mIsGuest = userManager.isGuestUser(); } private void addPreferences() { @@ -1400,7 +1403,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - if (!mAirplaneModeEnabler.isAirplaneModeOn()) { + if (!mIsGuest && !mAirplaneModeEnabler.isAirplaneModeOn()) { MenuItem item = menu.add(0, MENU_FIX_CONNECTIVITY, 0, R.string.fix_connectivity); item.setIcon(R.drawable.ic_repair_24dp); item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); @@ -1447,6 +1450,11 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment } private void fixConnectivity() { + if (mIsGuest) { + Log.e(TAG, "Can't reset network because the user is a guest."); + EventLog.writeEvent(0x534e4554, "252995826", UserHandle.myUserId(), "User is a guest"); + return; + } if (mInternetResetHelper == null) { mInternetResetHelper = new InternetResetHelper(getContext(), getLifecycle()); mInternetResetHelper.setResettingPreference(mResetInternetPreference); diff --git a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java index b347ac086b7..5573ca3dcb6 100644 --- a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java +++ b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java @@ -15,6 +15,7 @@ */ package com.android.settings.network; +import static com.android.settings.network.NetworkProviderSettings.MENU_FIX_CONNECTIVITY; 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_MODIFY; @@ -135,6 +136,8 @@ public class NetworkProviderSettingsTest { @Mock private ContextMenu mContextMenu; @Mock + private Menu mMenu; + @Mock private MenuItem mMenuItem; @Mock InternetUpdater mInternetUpdater; @@ -147,6 +150,8 @@ public class NetworkProviderSettingsTest { @Before public void setUp() { + when(mMenu.add(anyInt(), anyInt(), anyInt(), anyInt())).thenReturn(mMenuItem); + mNetworkProviderSettings = spy(new NetworkProviderSettings() { @Override boolean showAnySubscriptionInfo(Context context) { return true; } @@ -483,24 +488,39 @@ public class NetworkProviderSettingsTest { } @Test - public void onCreateOptionsMenu_airplanModeOn_fixConnectivityMenuInvisible() { - doReturn(true).when(mAirplaneModeEnabler).isAirplaneModeOn(); - final Menu menu = mock(Menu.class); - mNetworkProviderSettings.onCreateOptionsMenu(menu, null /* inflater */); + public void onCreateOptionsMenu_isGuest_neverAddFixConnectivityMenu() { + mNetworkProviderSettings.mIsGuest = true; - verify(menu, never()).add(anyInt(), eq(NetworkProviderSettings.MENU_FIX_CONNECTIVITY), - anyInt(), eq(R.string.fix_connectivity)); + mNetworkProviderSettings.onCreateOptionsMenu(mMenu, null /* inflater */); + + verify(mMenu, never()).add(anyInt(), eq(MENU_FIX_CONNECTIVITY), anyInt(), anyInt()); } @Test - public void onCreateOptionsMenu_airplanModeOff_fixConnectivityMenuVisible() { - doReturn(false).when(mAirplaneModeEnabler).isAirplaneModeOn(); - final Menu menu = mock(Menu.class); - when(menu.add(anyInt(), anyInt(), anyInt(), anyInt())).thenReturn(mock(MenuItem.class)); - mNetworkProviderSettings.onCreateOptionsMenu(menu, null /* inflater */); + public void onCreateOptionsMenu_isNotGuest_addFixConnectivityMenu() { + mNetworkProviderSettings.mIsGuest = false; - verify(menu).add(anyInt(), eq(NetworkProviderSettings.MENU_FIX_CONNECTIVITY), - anyInt(), eq(R.string.fix_connectivity)); + mNetworkProviderSettings.onCreateOptionsMenu(mMenu, null /* inflater */); + + verify(mMenu).add(anyInt(), eq(MENU_FIX_CONNECTIVITY), anyInt(), anyInt()); + } + + @Test + public void onCreateOptionsMenu_isAirplaneModeOn_neverAddFixConnectivityMenu() { + doReturn(true).when(mAirplaneModeEnabler).isAirplaneModeOn(); + + mNetworkProviderSettings.onCreateOptionsMenu(mMenu, null /* inflater */); + + verify(mMenu, never()).add(anyInt(), eq(MENU_FIX_CONNECTIVITY), anyInt(), anyInt()); + } + + @Test + public void onCreateOptionsMenu_isNotAirplaneModeOn_addFixConnectivityMenu() { + doReturn(false).when(mAirplaneModeEnabler).isAirplaneModeOn(); + + mNetworkProviderSettings.onCreateOptionsMenu(mMenu, null /* inflater */); + + verify(mMenu).add(anyInt(), eq(MENU_FIX_CONNECTIVITY), anyInt(), anyInt()); } @Test