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

Commit faede7ce authored by cosmohsieh's avatar cosmohsieh Committed by Cosmo Hsieh
Browse files

Implement context menu for ConnectedAccessPointPreference

1) User wants to long press ConnectedAccessPointPreference to forget network if this
is a captive portal network.
2) Change context menu string

Bug: 113756562
Test: make RunSettingsRoboTests -j32 ROBOTEST_FILTER=com.android.settings.wifi
Change-Id: If5c45c45fe126f627eeb53a6c1873a070ad23ae8
(cherry picked from commit 9f852256)
parent e128d27a
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.content.Context;
import android.view.View;

import androidx.annotation.DrawableRes;
import androidx.fragment.app.Fragment;
import androidx.preference.PreferenceViewHolder;

import com.android.settings.R;
@@ -29,15 +30,16 @@ import com.android.settingslib.wifi.AccessPointPreference;
/**
 * An AP preference for the currently connected AP
 */
public class ConnectedAccessPointPreference extends AccessPointPreference implements
public class ConnectedAccessPointPreference extends LongPressAccessPointPreference implements
        View.OnClickListener {

    private OnGearClickListener mOnGearClickListener;
    private boolean mIsCaptivePortal;

    public ConnectedAccessPointPreference(AccessPoint accessPoint, Context context,
            UserBadgeCache cache, @DrawableRes int iconResId, boolean forSavedNetworks) {
        super(accessPoint, context, cache, iconResId, forSavedNetworks);
            UserBadgeCache cache, @DrawableRes int iconResId, boolean forSavedNetworks,
            Fragment fragment) {
        super(accessPoint, context, cache, forSavedNetworks, iconResId, fragment);
    }

    @Override
+19 −15
Original line number Diff line number Diff line
@@ -71,7 +71,6 @@ import com.android.settings.widget.SummaryUpdater.OnSummaryChangeListener;
import com.android.settings.widget.SwitchBarController;
import com.android.settings.wifi.details.WifiNetworkDetailsFragment;
import com.android.settings.wifi.dpp.WifiDppUtils;
import com.android.settings.wifi.savedaccesspoints.SavedAccessPointsWifiSettings;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.settingslib.search.SearchIndexable;
@@ -100,7 +99,8 @@ public class WifiSettings extends RestrictedSettingsFragment
    private static final String TAG = "WifiSettings";

    private static final int MENU_ID_CONNECT = Menu.FIRST + 6;
    private static final int MENU_ID_FORGET = Menu.FIRST + 7;
    @VisibleForTesting
    static final int MENU_ID_FORGET = Menu.FIRST + 7;
    private static final int MENU_ID_MODIFY = Menu.FIRST + 8;

    public static final int WIFI_DIALOG_ID = 1;
@@ -459,7 +459,7 @@ public class WifiSettings extends RestrictedSettingsFragment
                    ((LongPressAccessPointPreference) preference).getAccessPoint();
            menu.setHeaderTitle(mSelectedAccessPoint.getTitle());
            if (mSelectedAccessPoint.isConnectable()) {
                menu.add(Menu.NONE, MENU_ID_CONNECT, 0, R.string.wifi_menu_connect);
                menu.add(Menu.NONE, MENU_ID_CONNECT, 0 /* order */, R.string.wifi_connect);
            }

            WifiConfiguration config = mSelectedAccessPoint.getConfig();
@@ -468,14 +468,17 @@ public class WifiSettings extends RestrictedSettingsFragment
                return;
            }

            if (mSelectedAccessPoint.isSaved() || mSelectedAccessPoint.isEphemeral()) {
                // Allow forgetting a network if either the network is saved or ephemerally
                // connected. (In the latter case, "forget" blacklists the network so it won't
                // be used again, ephemerally).
                menu.add(Menu.NONE, MENU_ID_FORGET, 0, R.string.wifi_menu_forget);
            // "forget" for normal saved network. And "disconnect" for ephemeral network because we
            // could only disconnect it and put it in blacklists so it won't be used again.
            if (mSelectedAccessPoint.isEphemeral()) {
                menu.add(Menu.NONE, MENU_ID_FORGET, 0 /* order */,
                    R.string.wifi_disconnect_button_text);
            } else if (mSelectedAccessPoint.isSaved()) {
                menu.add(Menu.NONE, MENU_ID_FORGET, 0 /* order */, R.string.forget);
            }
            if (mSelectedAccessPoint.isSaved()) {
                menu.add(Menu.NONE, MENU_ID_MODIFY, 0, R.string.wifi_menu_modify);

            if (mSelectedAccessPoint.isSaved() && !mSelectedAccessPoint.isActive()) {
                menu.add(Menu.NONE, MENU_ID_MODIFY, 0 /* order */, R.string.wifi_modify);
            }
        }
    }
@@ -783,10 +786,11 @@ public class WifiSettings extends RestrictedSettingsFragment
    }

    @NonNull
    private ConnectedAccessPointPreference createConnectedAccessPointPreference(
            AccessPoint accessPoint) {
        return new ConnectedAccessPointPreference(accessPoint, getPrefContext(), mUserBadgeCache,
                R.drawable.ic_wifi_signal_0, false /* forSavedNetworks */);
    @VisibleForTesting
    ConnectedAccessPointPreference createConnectedAccessPointPreference(
            AccessPoint accessPoint, Context context) {
        return new ConnectedAccessPointPreference(accessPoint, context, mUserBadgeCache,
                R.drawable.ic_wifi_signal_0, false /* forSavedNetworks */, this);
    }

    /**
@@ -839,7 +843,7 @@ public class WifiSettings extends RestrictedSettingsFragment
     */
    private void addConnectedAccessPointPreference(AccessPoint connectedAp) {
        final ConnectedAccessPointPreference pref =
                createConnectedAccessPointPreference(connectedAp);
                createConnectedAccessPointPreference(connectedAp, getPrefContext());
        registerCaptivePortalNetworkCallback(getCurrentWifiNetwork(), pref);

        // Launch details page or captive portal on click.
+1 −1
Original line number Diff line number Diff line
@@ -54,7 +54,7 @@ public class ConnectedAccessPointPreferenceTest {

        mContext = RuntimeEnvironment.application;
        mConnectedAccessPointPreference = new ConnectedAccessPointPreference(mAccessPoint, mContext,
                null, 0 /* iconResId */, false /* forSavedNetworks */);
                null, 0 /* iconResId */, false /* forSavedNetworks */, null /* fragment */);
        mConnectedAccessPointPreference.setOnGearClickListener(mOnGearClickListener);
    }

+25 −0
Original line number Diff line number Diff line
@@ -37,6 +37,8 @@ import android.os.PowerManager;
import android.os.UserManager;
import android.provider.Settings;

import android.view.ContextMenu;
import android.view.View;
import androidx.fragment.app.FragmentActivity;
import androidx.preference.Preference;

@@ -44,6 +46,7 @@ import com.android.settings.R;
import com.android.settings.datausage.DataUsagePreference;
import com.android.settings.search.SearchIndexableRaw;
import com.android.settings.testutils.shadow.ShadowDataUsageUtils;
import com.android.settingslib.wifi.AccessPoint;
import com.android.settingslib.wifi.WifiTracker;

import org.junit.Before;
@@ -205,4 +208,26 @@ public class WifiSettingsTest {
        verify(mDataUsagePreference).setVisible(true);
        verify(mDataUsagePreference).setTemplate(any(), eq(0) /*subId*/, eq(null) /*service*/);
    }

    @Test
    public void onCreateContextMenu_shouldHaveForgetMenuForConnectedAccessPreference() {
        final FragmentActivity mockActivity = mock(FragmentActivity.class);
        when(mockActivity.getApplicationContext()).thenReturn(mContext);
        when(mWifiSettings.getActivity()).thenReturn(mockActivity);

        final AccessPoint accessPoint = mock(AccessPoint.class);
        when(accessPoint.isConnectable()).thenReturn(false);
        when(accessPoint.isSaved()).thenReturn(true);
        when(accessPoint.isActive()).thenReturn(true);

        final ConnectedAccessPointPreference connectedPreference =
            mWifiSettings.createConnectedAccessPointPreference(accessPoint, mContext);
        final View view = mock(View.class);
        when(view.getTag()).thenReturn(connectedPreference);

        final ContextMenu menu = mock(ContextMenu.class);
        mWifiSettings.onCreateContextMenu(menu, view, null /* info */);

        verify(menu).add(anyInt(), eq(WifiSettings.MENU_ID_FORGET), anyInt(), anyInt());
    }
}