From: cosmohsieh Date: Tue, 2 Apr 2019 10:05:34 +0000 (+0800) Subject: Implement context menu for ConnectedAccessPointPreference X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=faede7ceb93742d12e8bc2c22269023923d67d70;p=android-x86%2Fpackages-apps-Settings.git 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 9f8522565ad82381b9270248054cdfb319656c8c) --- diff --git a/src/com/android/settings/wifi/ConnectedAccessPointPreference.java b/src/com/android/settings/wifi/ConnectedAccessPointPreference.java index 3efbbff7f3..a31667439b 100644 --- a/src/com/android/settings/wifi/ConnectedAccessPointPreference.java +++ b/src/com/android/settings/wifi/ConnectedAccessPointPreference.java @@ -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 diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index da101485c9..e47bcc9b23 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -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. diff --git a/tests/robotests/src/com/android/settings/wifi/ConnectedAccessPointPreferenceTest.java b/tests/robotests/src/com/android/settings/wifi/ConnectedAccessPointPreferenceTest.java index c4fae41f5a..bb9971b6be 100644 --- a/tests/robotests/src/com/android/settings/wifi/ConnectedAccessPointPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/wifi/ConnectedAccessPointPreferenceTest.java @@ -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); } diff --git a/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java index 82e6717bf5..2a90b909bd 100644 --- a/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java +++ b/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java @@ -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()); + } }