Loading src/com/android/settings/network/NetworkProviderSettings.java +49 −25 Original line number Diff line number Diff line Loading @@ -49,9 +49,11 @@ import android.view.MenuItem; import android.view.View; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.appcompat.app.AlertDialog; import androidx.core.view.MenuProvider; import androidx.fragment.app.Fragment; import androidx.preference.Preference; import androidx.preference.PreferenceCategory; Loading Loading @@ -249,6 +251,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment ConnectedEthernetNetworkController mConnectedEthernetNetworkController; @VisibleForTesting FooterPreference mWifiStatusMessagePreference; @VisibleForTesting MenuProvider mMenuProvider; /** * Mobile networks list for provider model Loading Loading @@ -306,6 +310,44 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment mIsRestricted = isUiRestricted(); updateUserType(); mMenuProvider = new MenuProvider() { @Override public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) { MenuItem fixConnectivityItem = menu.add(0, MENU_FIX_CONNECTIVITY, 0, R.string.fix_connectivity); fixConnectivityItem.setIcon(R.drawable.ic_repair_24dp); fixConnectivityItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); } @Override public boolean onMenuItemSelected(@NonNull MenuItem menuItem) { if (menuItem.getItemId() == MENU_FIX_CONNECTIVITY) { if (isPhoneOnCall()) { showResetInternetDialog(); return true; } fixConnectivity(); return true; } return false; } @Override public void onPrepareMenu(@NonNull Menu menu) { MenuProvider.super.onPrepareMenu(menu); boolean isWifiEnabled = mWifiPickerTracker != null && mWifiPickerTracker.getWifiState() == WifiManager.WIFI_STATE_ENABLED; boolean isAirplaneModeOn = mAirplaneModeEnabler != null && mAirplaneModeEnabler.isAirplaneModeOn(); MenuItem fixConnectivityItem = menu.findItem(MENU_FIX_CONNECTIVITY); if (fixConnectivityItem == null) { return; } fixConnectivityItem.setVisible(!mIsGuest && (!isAirplaneModeOn || isWifiEnabled)); } }; } private void updateUserType() { Loading Loading @@ -425,7 +467,6 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment } } }; setHasOptionsMenu(true); if (savedInstanceState != null) { mDialogMode = savedInstanceState.getInt(SAVE_DIALOG_MODE); Loading @@ -444,12 +485,13 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment if (mNetworkMobileProviderController != null) { mNetworkMobileProviderController.setWifiPickerTrackerHelper(mWifiPickerTrackerHelper); } requireActivity().addMenuProvider(mMenuProvider); } @Override public void onAttach(Context context) { super.onAttach(context); } @Override Loading Loading @@ -807,6 +849,9 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment return; } // update the menu item requireActivity().invalidateMenu(); switch (wifiState) { case WifiManager.WIFI_STATE_ENABLED: setWifiScanMessage(/* isWifiEnabled */ true); Loading Loading @@ -1397,29 +1442,6 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment return HelpUtils.getHelpIntent(context, helpUrlString, context.getClass().getName()); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 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); } super.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(MenuItem menuItem) { if (menuItem.getItemId() == MENU_FIX_CONNECTIVITY) { if (isPhoneOnCall()) { showResetInternetDialog(); return true; } fixConnectivity(); return true; } return super.onOptionsItemSelected(menuItem); } @VisibleForTesting void showResetInternetDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); Loading Loading @@ -1462,6 +1484,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment @Override public void onAirplaneModeChanged(boolean isAirplaneModeOn) { updateAirplaneModeMsgPreference(isAirplaneModeOn /* visible */); // update the menu item requireActivity().invalidateMenu(); } /** Loading tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java +59 −21 Original line number Diff line number Diff line Loading @@ -286,7 +286,8 @@ public class NetworkProviderSettingsTest { private void setUpForOnCreate() { final FragmentActivity activity = mock(FragmentActivity.class); when(mNetworkProviderSettings.getActivity()).thenReturn(activity); doReturn(activity).when(mNetworkProviderSettings).requireActivity(); doReturn(activity).when(mNetworkProviderSettings).getActivity(); final Resources.Theme theme = mContext.getTheme(); when(activity.getTheme()).thenReturn(theme); UserManager userManager = mock(UserManager.class); Loading Loading @@ -484,59 +485,95 @@ public class NetworkProviderSettingsTest { when(controller.getConfig()).thenReturn(config); WifiDialog2.WifiDialog2Listener listener = mock(WifiDialog2.WifiDialog2Listener.class); final WifiDialog2 wifiDialog2 = spy(new WifiDialog2(mContext, listener, mWifiEntry, mode)); when(wifiDialog2.getController()).thenReturn(controller); doReturn(controller).when(wifiDialog2).getController(); return wifiDialog2; } private void mockMenuConditions(boolean isGuest, boolean isAirplaneModeOn, boolean isWifiOn) { mNetworkProviderSettings.mIsGuest = isGuest; doReturn(isAirplaneModeOn).when(mAirplaneModeEnabler).isAirplaneModeOn(); when(mMockWifiPickerTracker.getWifiState()).thenReturn( isWifiOn ? WifiManager.WIFI_STATE_ENABLED : WifiManager.WIFI_STATE_DISABLED); doReturn(mMenuItem).when(mMenu).findItem(MENU_FIX_CONNECTIVITY); mNetworkProviderSettings.mAirplaneModeEnabler = mAirplaneModeEnabler; mNetworkProviderSettings.mWifiPickerTracker = mMockWifiPickerTracker; } @Test public void onCreateOptionsMenu_isGuest_hideFixConnectivityMenu() { setUpForOnCreate(); mNetworkProviderSettings.onCreate(null); mockMenuConditions(/*isGuest=*/ true, /*isAirplaneModeOn=*/ false, /*isWifiOn=*/ true); mNetworkProviderSettings.mMenuProvider.onPrepareMenu(mMenu); verify(mMenuItem).setVisible(false); } @Test public void onCreateOptionsMenu_isGuest_neverAddFixConnectivityMenu() { mNetworkProviderSettings.mIsGuest = true; public void onCreateOptionsMenu_isNotGuest_showFixConnectivityMenu() { setUpForOnCreate(); mNetworkProviderSettings.onCreate(null); mockMenuConditions(/*isGuest=*/ false, /*isAirplaneModeOn=*/ false, /*isWifiOn=*/ true); mNetworkProviderSettings.onCreateOptionsMenu(mMenu, null /* inflater */); mNetworkProviderSettings.mMenuProvider.onPrepareMenu(mMenu); verify(mMenuItem).setVisible(true); verify(mMenu, never()).add(anyInt(), eq(MENU_FIX_CONNECTIVITY), anyInt(), anyInt()); } @Test public void onCreateOptionsMenu_isNotGuest_addFixConnectivityMenu() { mNetworkProviderSettings.mIsGuest = false; public void onCreateOptionsMenu_isAirplaneModeOnAndWifiOff_hideFixConnectivityMenu() { setUpForOnCreate(); mNetworkProviderSettings.onCreate(null); mockMenuConditions(/*isGuest=*/ false, /*isAirplaneModeOn=*/ true, /*isWifiOn=*/ false); mNetworkProviderSettings.onCreateOptionsMenu(mMenu, null /* inflater */); mNetworkProviderSettings.mMenuProvider.onPrepareMenu(mMenu); verify(mMenu).add(anyInt(), eq(MENU_FIX_CONNECTIVITY), anyInt(), anyInt()); verify(mMenuItem).setVisible(false); } @Test public void onCreateOptionsMenu_isAirplaneModeOn_neverAddFixConnectivityMenu() { doReturn(true).when(mAirplaneModeEnabler).isAirplaneModeOn(); public void onCreateOptionsMenu_isAirplaneModeOnAndWifiOn_showFixConnectivityMenu() { setUpForOnCreate(); mNetworkProviderSettings.onCreate(null); mockMenuConditions(/*isGuest=*/ false, /*isAirplaneModeOn=*/ true, /*isWifiOn=*/ true); mNetworkProviderSettings.onCreateOptionsMenu(mMenu, null /* inflater */); mNetworkProviderSettings.mMenuProvider.onPrepareMenu(mMenu); verify(mMenu, never()).add(anyInt(), eq(MENU_FIX_CONNECTIVITY), anyInt(), anyInt()); verify(mMenuItem).setVisible(true); } @Test public void onCreateOptionsMenu_isNotAirplaneModeOn_addFixConnectivityMenu() { doReturn(false).when(mAirplaneModeEnabler).isAirplaneModeOn(); public void onCreateOptionsMenu_isNotAirplaneModeOn_showFixConnectivityMenu() { setUpForOnCreate(); mNetworkProviderSettings.onCreate(null); mockMenuConditions(/*isGuest=*/ false, /*isAirplaneModeOn=*/ false, /*isWifiOn=*/ true); mNetworkProviderSettings.onCreateOptionsMenu(mMenu, null /* inflater */); mNetworkProviderSettings.mMenuProvider.onPrepareMenu(mMenu); verify(mMenu).add(anyInt(), eq(MENU_FIX_CONNECTIVITY), anyInt(), anyInt()); verify(mMenuItem).setVisible(true); } @Test public void onOptionsItemSelected_fixConnectivity_restartInternet() { mNetworkProviderSettings.mInternetResetHelper = mInternetResetHelper; setUpForOnCreate(); doReturn(false).when(mNetworkProviderSettings).isPhoneOnCall(); doReturn(NetworkProviderSettings.MENU_FIX_CONNECTIVITY).when(mMenuItem).getItemId(); doReturn(MENU_FIX_CONNECTIVITY).when(mMenuItem).getItemId(); mNetworkProviderSettings.onCreate(null); mNetworkProviderSettings.mInternetResetHelper = mInternetResetHelper; mNetworkProviderSettings.onOptionsItemSelected(mMenuItem); mNetworkProviderSettings.mMenuProvider.onMenuItemSelected(mMenuItem); verify(mInternetResetHelper).restart(); } @Test public void onAirplaneModeChanged_apmIsOn_showApmMsg() { setUpForOnCreate(); mNetworkProviderSettings.onAirplaneModeChanged(true); verify(mAirplaneModeMsgPreference).setVisible(true); Loading @@ -544,6 +581,7 @@ public class NetworkProviderSettingsTest { @Test public void onAirplaneModeChanged_apmIsOff_hideApmMsg() { setUpForOnCreate(); mNetworkProviderSettings.onAirplaneModeChanged(false); verify(mAirplaneModeMsgPreference).setVisible(false); Loading Loading
src/com/android/settings/network/NetworkProviderSettings.java +49 −25 Original line number Diff line number Diff line Loading @@ -49,9 +49,11 @@ import android.view.MenuItem; import android.view.View; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.appcompat.app.AlertDialog; import androidx.core.view.MenuProvider; import androidx.fragment.app.Fragment; import androidx.preference.Preference; import androidx.preference.PreferenceCategory; Loading Loading @@ -249,6 +251,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment ConnectedEthernetNetworkController mConnectedEthernetNetworkController; @VisibleForTesting FooterPreference mWifiStatusMessagePreference; @VisibleForTesting MenuProvider mMenuProvider; /** * Mobile networks list for provider model Loading Loading @@ -306,6 +310,44 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment mIsRestricted = isUiRestricted(); updateUserType(); mMenuProvider = new MenuProvider() { @Override public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) { MenuItem fixConnectivityItem = menu.add(0, MENU_FIX_CONNECTIVITY, 0, R.string.fix_connectivity); fixConnectivityItem.setIcon(R.drawable.ic_repair_24dp); fixConnectivityItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); } @Override public boolean onMenuItemSelected(@NonNull MenuItem menuItem) { if (menuItem.getItemId() == MENU_FIX_CONNECTIVITY) { if (isPhoneOnCall()) { showResetInternetDialog(); return true; } fixConnectivity(); return true; } return false; } @Override public void onPrepareMenu(@NonNull Menu menu) { MenuProvider.super.onPrepareMenu(menu); boolean isWifiEnabled = mWifiPickerTracker != null && mWifiPickerTracker.getWifiState() == WifiManager.WIFI_STATE_ENABLED; boolean isAirplaneModeOn = mAirplaneModeEnabler != null && mAirplaneModeEnabler.isAirplaneModeOn(); MenuItem fixConnectivityItem = menu.findItem(MENU_FIX_CONNECTIVITY); if (fixConnectivityItem == null) { return; } fixConnectivityItem.setVisible(!mIsGuest && (!isAirplaneModeOn || isWifiEnabled)); } }; } private void updateUserType() { Loading Loading @@ -425,7 +467,6 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment } } }; setHasOptionsMenu(true); if (savedInstanceState != null) { mDialogMode = savedInstanceState.getInt(SAVE_DIALOG_MODE); Loading @@ -444,12 +485,13 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment if (mNetworkMobileProviderController != null) { mNetworkMobileProviderController.setWifiPickerTrackerHelper(mWifiPickerTrackerHelper); } requireActivity().addMenuProvider(mMenuProvider); } @Override public void onAttach(Context context) { super.onAttach(context); } @Override Loading Loading @@ -807,6 +849,9 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment return; } // update the menu item requireActivity().invalidateMenu(); switch (wifiState) { case WifiManager.WIFI_STATE_ENABLED: setWifiScanMessage(/* isWifiEnabled */ true); Loading Loading @@ -1397,29 +1442,6 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment return HelpUtils.getHelpIntent(context, helpUrlString, context.getClass().getName()); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 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); } super.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(MenuItem menuItem) { if (menuItem.getItemId() == MENU_FIX_CONNECTIVITY) { if (isPhoneOnCall()) { showResetInternetDialog(); return true; } fixConnectivity(); return true; } return super.onOptionsItemSelected(menuItem); } @VisibleForTesting void showResetInternetDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); Loading Loading @@ -1462,6 +1484,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment @Override public void onAirplaneModeChanged(boolean isAirplaneModeOn) { updateAirplaneModeMsgPreference(isAirplaneModeOn /* visible */); // update the menu item requireActivity().invalidateMenu(); } /** Loading
tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java +59 −21 Original line number Diff line number Diff line Loading @@ -286,7 +286,8 @@ public class NetworkProviderSettingsTest { private void setUpForOnCreate() { final FragmentActivity activity = mock(FragmentActivity.class); when(mNetworkProviderSettings.getActivity()).thenReturn(activity); doReturn(activity).when(mNetworkProviderSettings).requireActivity(); doReturn(activity).when(mNetworkProviderSettings).getActivity(); final Resources.Theme theme = mContext.getTheme(); when(activity.getTheme()).thenReturn(theme); UserManager userManager = mock(UserManager.class); Loading Loading @@ -484,59 +485,95 @@ public class NetworkProviderSettingsTest { when(controller.getConfig()).thenReturn(config); WifiDialog2.WifiDialog2Listener listener = mock(WifiDialog2.WifiDialog2Listener.class); final WifiDialog2 wifiDialog2 = spy(new WifiDialog2(mContext, listener, mWifiEntry, mode)); when(wifiDialog2.getController()).thenReturn(controller); doReturn(controller).when(wifiDialog2).getController(); return wifiDialog2; } private void mockMenuConditions(boolean isGuest, boolean isAirplaneModeOn, boolean isWifiOn) { mNetworkProviderSettings.mIsGuest = isGuest; doReturn(isAirplaneModeOn).when(mAirplaneModeEnabler).isAirplaneModeOn(); when(mMockWifiPickerTracker.getWifiState()).thenReturn( isWifiOn ? WifiManager.WIFI_STATE_ENABLED : WifiManager.WIFI_STATE_DISABLED); doReturn(mMenuItem).when(mMenu).findItem(MENU_FIX_CONNECTIVITY); mNetworkProviderSettings.mAirplaneModeEnabler = mAirplaneModeEnabler; mNetworkProviderSettings.mWifiPickerTracker = mMockWifiPickerTracker; } @Test public void onCreateOptionsMenu_isGuest_hideFixConnectivityMenu() { setUpForOnCreate(); mNetworkProviderSettings.onCreate(null); mockMenuConditions(/*isGuest=*/ true, /*isAirplaneModeOn=*/ false, /*isWifiOn=*/ true); mNetworkProviderSettings.mMenuProvider.onPrepareMenu(mMenu); verify(mMenuItem).setVisible(false); } @Test public void onCreateOptionsMenu_isGuest_neverAddFixConnectivityMenu() { mNetworkProviderSettings.mIsGuest = true; public void onCreateOptionsMenu_isNotGuest_showFixConnectivityMenu() { setUpForOnCreate(); mNetworkProviderSettings.onCreate(null); mockMenuConditions(/*isGuest=*/ false, /*isAirplaneModeOn=*/ false, /*isWifiOn=*/ true); mNetworkProviderSettings.onCreateOptionsMenu(mMenu, null /* inflater */); mNetworkProviderSettings.mMenuProvider.onPrepareMenu(mMenu); verify(mMenuItem).setVisible(true); verify(mMenu, never()).add(anyInt(), eq(MENU_FIX_CONNECTIVITY), anyInt(), anyInt()); } @Test public void onCreateOptionsMenu_isNotGuest_addFixConnectivityMenu() { mNetworkProviderSettings.mIsGuest = false; public void onCreateOptionsMenu_isAirplaneModeOnAndWifiOff_hideFixConnectivityMenu() { setUpForOnCreate(); mNetworkProviderSettings.onCreate(null); mockMenuConditions(/*isGuest=*/ false, /*isAirplaneModeOn=*/ true, /*isWifiOn=*/ false); mNetworkProviderSettings.onCreateOptionsMenu(mMenu, null /* inflater */); mNetworkProviderSettings.mMenuProvider.onPrepareMenu(mMenu); verify(mMenu).add(anyInt(), eq(MENU_FIX_CONNECTIVITY), anyInt(), anyInt()); verify(mMenuItem).setVisible(false); } @Test public void onCreateOptionsMenu_isAirplaneModeOn_neverAddFixConnectivityMenu() { doReturn(true).when(mAirplaneModeEnabler).isAirplaneModeOn(); public void onCreateOptionsMenu_isAirplaneModeOnAndWifiOn_showFixConnectivityMenu() { setUpForOnCreate(); mNetworkProviderSettings.onCreate(null); mockMenuConditions(/*isGuest=*/ false, /*isAirplaneModeOn=*/ true, /*isWifiOn=*/ true); mNetworkProviderSettings.onCreateOptionsMenu(mMenu, null /* inflater */); mNetworkProviderSettings.mMenuProvider.onPrepareMenu(mMenu); verify(mMenu, never()).add(anyInt(), eq(MENU_FIX_CONNECTIVITY), anyInt(), anyInt()); verify(mMenuItem).setVisible(true); } @Test public void onCreateOptionsMenu_isNotAirplaneModeOn_addFixConnectivityMenu() { doReturn(false).when(mAirplaneModeEnabler).isAirplaneModeOn(); public void onCreateOptionsMenu_isNotAirplaneModeOn_showFixConnectivityMenu() { setUpForOnCreate(); mNetworkProviderSettings.onCreate(null); mockMenuConditions(/*isGuest=*/ false, /*isAirplaneModeOn=*/ false, /*isWifiOn=*/ true); mNetworkProviderSettings.onCreateOptionsMenu(mMenu, null /* inflater */); mNetworkProviderSettings.mMenuProvider.onPrepareMenu(mMenu); verify(mMenu).add(anyInt(), eq(MENU_FIX_CONNECTIVITY), anyInt(), anyInt()); verify(mMenuItem).setVisible(true); } @Test public void onOptionsItemSelected_fixConnectivity_restartInternet() { mNetworkProviderSettings.mInternetResetHelper = mInternetResetHelper; setUpForOnCreate(); doReturn(false).when(mNetworkProviderSettings).isPhoneOnCall(); doReturn(NetworkProviderSettings.MENU_FIX_CONNECTIVITY).when(mMenuItem).getItemId(); doReturn(MENU_FIX_CONNECTIVITY).when(mMenuItem).getItemId(); mNetworkProviderSettings.onCreate(null); mNetworkProviderSettings.mInternetResetHelper = mInternetResetHelper; mNetworkProviderSettings.onOptionsItemSelected(mMenuItem); mNetworkProviderSettings.mMenuProvider.onMenuItemSelected(mMenuItem); verify(mInternetResetHelper).restart(); } @Test public void onAirplaneModeChanged_apmIsOn_showApmMsg() { setUpForOnCreate(); mNetworkProviderSettings.onAirplaneModeChanged(true); verify(mAirplaneModeMsgPreference).setVisible(true); Loading @@ -544,6 +581,7 @@ public class NetworkProviderSettingsTest { @Test public void onAirplaneModeChanged_apmIsOff_hideApmMsg() { setUpForOnCreate(); mNetworkProviderSettings.onAirplaneModeChanged(false); verify(mAirplaneModeMsgPreference).setVisible(false); Loading