Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8557ab05 authored by SongFerng Wang's avatar SongFerng Wang Committed by Android (Google) Code Review
Browse files

Merge "Modify the condition of MENU_FIX_CONNECTIVITY" into main

parents 6e12c484 b271e84e
Loading
Loading
Loading
Loading
+49 −25
Original line number Diff line number Diff line
@@ -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;
@@ -249,6 +251,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
    ConnectedEthernetNetworkController mConnectedEthernetNetworkController;
    @VisibleForTesting
    FooterPreference mWifiStatusMessagePreference;
    @VisibleForTesting
    MenuProvider mMenuProvider;

    /**
     * Mobile networks list for provider model
@@ -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() {
@@ -425,7 +467,6 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
                }
            }
        };
        setHasOptionsMenu(true);

        if (savedInstanceState != null) {
            mDialogMode = savedInstanceState.getInt(SAVE_DIALOG_MODE);
@@ -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
@@ -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);
@@ -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());
@@ -1462,6 +1484,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
    @Override
    public void onAirplaneModeChanged(boolean isAirplaneModeOn) {
        updateAirplaneModeMsgPreference(isAirplaneModeOn /* visible */);
        // update the menu item
        requireActivity().invalidateMenu();
    }

    /**
+59 −21
Original line number Diff line number Diff line
@@ -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);
@@ -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);
@@ -544,6 +581,7 @@ public class NetworkProviderSettingsTest {

    @Test
    public void onAirplaneModeChanged_apmIsOff_hideApmMsg() {
        setUpForOnCreate();
        mNetworkProviderSettings.onAirplaneModeChanged(false);

        verify(mAirplaneModeMsgPreference).setVisible(false);