Create a new PreferenceCategory for the current AP.

This highlights the currently connected ap in it's own category.

Bug: 34714183
Test: Manual inspection with connected AP, APs available but not
connected, and Wifi off.

Change-Id: I100bcf5b0bdc7b4f725f2ff630aa885dbca90332
This commit is contained in:
Sundeep Ghuman
2017-01-31 12:23:53 -08:00
parent c2ff3b972c
commit f200005086
2 changed files with 90 additions and 12 deletions

View File

@@ -20,6 +20,8 @@
android:title="@string/wifi_settings" android:title="@string/wifi_settings"
settings:keywords="@string/keywords_wifi"> settings:keywords="@string/keywords_wifi">
<PreferenceCategory android:key="connected_access_point" />
<PreferenceCategory android:key="access_points"/> <PreferenceCategory android:key="access_points"/>
<PreferenceCategory android:key="additional_settings"> <PreferenceCategory android:key="additional_settings">

View File

@@ -16,6 +16,7 @@
package com.android.settings.wifi; package com.android.settings.wifi;
import android.annotation.NonNull;
import android.app.Activity; import android.app.Activity;
import android.app.Dialog; import android.app.Dialog;
import android.app.admin.DevicePolicyManager; import android.app.admin.DevicePolicyManager;
@@ -72,7 +73,6 @@ import com.android.settingslib.wifi.AccessPointPreference;
import com.android.settingslib.wifi.WifiTracker; import com.android.settingslib.wifi.WifiTracker;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
import static android.os.UserManager.DISALLOW_CONFIG_WIFI; import static android.os.UserManager.DISALLOW_CONFIG_WIFI;
@@ -110,6 +110,7 @@ public class WifiSettings extends RestrictedSettingsFragment
private static final String SAVED_WIFI_NFC_DIALOG_STATE = "wifi_nfc_dlg_state"; private static final String SAVED_WIFI_NFC_DIALOG_STATE = "wifi_nfc_dlg_state";
private static final String PREF_KEY_EMPTY_WIFI_LIST = "wifi_empty_list"; private static final String PREF_KEY_EMPTY_WIFI_LIST = "wifi_empty_list";
private static final String PREF_KEY_CONNECTED_ACCESS_POINTS = "connected_access_point";
private static final String PREF_KEY_ACCESS_POINTS = "access_points"; private static final String PREF_KEY_ACCESS_POINTS = "access_points";
private static final String PREF_KEY_ADDITIONAL_SETTINGS = "additional_settings"; private static final String PREF_KEY_ADDITIONAL_SETTINGS = "additional_settings";
private static final String PREF_KEY_CONFIGURE_WIFI_SETTINGS = "configure_settings"; private static final String PREF_KEY_CONFIGURE_WIFI_SETTINGS = "configure_settings";
@@ -152,6 +153,7 @@ public class WifiSettings extends RestrictedSettingsFragment
private AccessPointPreference.UserBadgeCache mUserBadgeCache; private AccessPointPreference.UserBadgeCache mUserBadgeCache;
private PreferenceCategory mConnectedAccessPointPreferenceCategory;
private PreferenceCategory mAccessPointsPreferenceCategory; private PreferenceCategory mAccessPointsPreferenceCategory;
private PreferenceCategory mAdditionalSettingsPreferenceCategory; private PreferenceCategory mAdditionalSettingsPreferenceCategory;
private Preference mAddPreference; private Preference mAddPreference;
@@ -183,6 +185,10 @@ public class WifiSettings extends RestrictedSettingsFragment
new PreferenceManager.SimplePreferenceComparisonCallback()); new PreferenceManager.SimplePreferenceComparisonCallback());
addPreferencesFromResource(R.xml.wifi_settings); addPreferencesFromResource(R.xml.wifi_settings);
mConnectedAccessPointPreferenceCategory =
(PreferenceCategory) findPreference(PREF_KEY_CONNECTED_ACCESS_POINTS);
mConnectedAccessPointPreferenceCategory.setVisible(false); // initially hidden
mAccessPointsPreferenceCategory = mAccessPointsPreferenceCategory =
(PreferenceCategory) findPreference(PREF_KEY_ACCESS_POINTS); (PreferenceCategory) findPreference(PREF_KEY_ACCESS_POINTS);
mAdditionalSettingsPreferenceCategory = mAdditionalSettingsPreferenceCategory =
@@ -610,6 +616,7 @@ public class WifiSettings extends RestrictedSettingsFragment
// Safeguard from some delayed event handling // Safeguard from some delayed event handling
if (getActivity() == null) return; if (getActivity() == null) return;
if (isUiRestricted()) { if (isUiRestricted()) {
removeConnectedAccessPointPreference();
mAccessPointsPreferenceCategory.removeAll(); mAccessPointsPreferenceCategory.removeAll();
if (!isUiRestrictedByOnlyAdmin()) { if (!isUiRestrictedByOnlyAdmin()) {
addMessagePreference(R.string.wifi_empty_list_user_restricted); addMessagePreference(R.string.wifi_empty_list_user_restricted);
@@ -620,15 +627,17 @@ public class WifiSettings extends RestrictedSettingsFragment
switch (wifiState) { switch (wifiState) {
case WifiManager.WIFI_STATE_ENABLED: case WifiManager.WIFI_STATE_ENABLED:
// AccessPoints are automatically sorted with TreeSet. // AccessPoints are sorted by the WifiTracker
final Collection<AccessPoint> accessPoints = final List<AccessPoint> accessPoints = mWifiTracker.getAccessPoints();
mWifiTracker.getAccessPoints();
boolean hasAvailableAccessPoints = false; boolean hasAvailableAccessPoints = false;
int index = 0;
mAccessPointsPreferenceCategory.removePreference(mStatusMessagePreference); mAccessPointsPreferenceCategory.removePreference(mStatusMessagePreference);
cacheRemoveAllPrefs(mAccessPointsPreferenceCategory); cacheRemoveAllPrefs(mAccessPointsPreferenceCategory);
for (AccessPoint accessPoint : accessPoints) {
int index = configureConnectedAccessPointPreferenceCategory(accessPoints) ? 1 : 0;
for (; index < accessPoints.size(); index++) {
AccessPoint accessPoint = accessPoints.get(index);
// Ignore access points that are out of range. // Ignore access points that are out of range.
if (accessPoint.getLevel() != -1) { if (accessPoint.getLevel() != -1) {
String key = accessPoint.getBssid(); String key = accessPoint.getBssid();
@@ -639,15 +648,13 @@ public class WifiSettings extends RestrictedSettingsFragment
LongPressAccessPointPreference pref = (LongPressAccessPointPreference) LongPressAccessPointPreference pref = (LongPressAccessPointPreference)
getCachedPreference(key); getCachedPreference(key);
if (pref != null) { if (pref != null) {
pref.setOrder(index++); pref.setOrder(index);
continue; continue;
} }
LongPressAccessPointPreference LongPressAccessPointPreference
preference = new LongPressAccessPointPreference(accessPoint, preference = createLongPressActionPointPreference(accessPoint);
getPrefContext(), mUserBadgeCache, false,
R.drawable.ic_wifi_signal_0, this);
preference.setKey(key); preference.setKey(key);
preference.setOrder(index++); preference.setOrder(index);
if (mOpenSsid != null && mOpenSsid.equals(accessPoint.getSsidStr()) if (mOpenSsid != null && mOpenSsid.equals(accessPoint.getSsidStr())
&& !accessPoint.isSaved() && !accessPoint.isSaved()
&& accessPoint.getSecurity() != AccessPoint.SECURITY_NONE) { && accessPoint.getSecurity() != AccessPoint.SECURITY_NONE) {
@@ -690,6 +697,7 @@ public class WifiSettings extends RestrictedSettingsFragment
break; break;
case WifiManager.WIFI_STATE_ENABLING: case WifiManager.WIFI_STATE_ENABLING:
removeConnectedAccessPointPreference();
mAccessPointsPreferenceCategory.removeAll(); mAccessPointsPreferenceCategory.removeAll();
setProgressBarVisible(true); setProgressBarVisible(true);
break; break;
@@ -710,6 +718,71 @@ public class WifiSettings extends RestrictedSettingsFragment
} }
} }
@NonNull
private LongPressAccessPointPreference createLongPressActionPointPreference(
AccessPoint accessPoint) {
return new LongPressAccessPointPreference(accessPoint, getPrefContext(), mUserBadgeCache,
false, R.drawable.ic_wifi_signal_0, this);
}
/**
* Configure the ConnectedAccessPointPreferenceCategory and return true if the Category was
* shown.
*/
private boolean configureConnectedAccessPointPreferenceCategory(
List<AccessPoint> accessPoints) {
if (accessPoints.size() == 0) {
removeConnectedAccessPointPreference();
return false;
}
AccessPoint connectedAp = accessPoints.get(0);
if (!connectedAp.isActive()) {
removeConnectedAccessPointPreference();
return false;
}
// Is the preference category empty?
if (mConnectedAccessPointPreferenceCategory.getPreferenceCount() == 0) {
addConnectedAccessPointPreference(connectedAp);
return true;
}
// Is the previous currently connected SSID different from the new one?
if (!((AccessPointPreference)
mConnectedAccessPointPreferenceCategory.getPreference(0))
.getAccessPoint().getSsidStr().equals(
connectedAp.getSsidStr())) {
removeConnectedAccessPointPreference();
addConnectedAccessPointPreference(connectedAp);
return true;
}
// Else same AP is connected, nothing to do
return true;
}
/**
* Creates a Preference for the given {@link AccessPoint} and adds it to the
* {@link #mConnectedAccessPointPreferenceCategory}.
*/
private void addConnectedAccessPointPreference(AccessPoint connectedAp) {
String key = connectedAp.getBssid();
LongPressAccessPointPreference pref = (LongPressAccessPointPreference)
getCachedPreference(key);
if (pref == null) {
pref = createLongPressActionPointPreference(connectedAp);
}
mConnectedAccessPointPreferenceCategory.addPreference(pref);
mConnectedAccessPointPreferenceCategory.setVisible(true);
}
/** Removes all preferences and hide the {@link #mConnectedAccessPointPreferenceCategory}. */
private void removeConnectedAccessPointPreference() {
mConnectedAccessPointPreferenceCategory.removeAll();
mConnectedAccessPointPreferenceCategory.setVisible(false);
}
private void setConfigureWifiSettingsVisibility() { private void setConfigureWifiSettingsVisibility() {
if (isUiRestricted()) { if (isUiRestricted()) {
mAdditionalSettingsPreferenceCategory.removeAll(); mAdditionalSettingsPreferenceCategory.removeAll();
@@ -728,6 +801,7 @@ public class WifiSettings extends RestrictedSettingsFragment
if (!isUiRestrictedByOnlyAdmin()) { if (!isUiRestrictedByOnlyAdmin()) {
addMessagePreference(R.string.wifi_empty_list_user_restricted); addMessagePreference(R.string.wifi_empty_list_user_restricted);
} }
removeConnectedAccessPointPreference();
mAccessPointsPreferenceCategory.removeAll(); mAccessPointsPreferenceCategory.removeAll();
return; return;
} }
@@ -757,12 +831,14 @@ public class WifiSettings extends RestrictedSettingsFragment
mStatusMessagePreference.setText( mStatusMessagePreference.setText(
briefText, getText(R.string.wifi_scan_notify_text), clickListener); briefText, getText(R.string.wifi_scan_notify_text), clickListener);
} }
removeConnectedAccessPointPreference();
mAccessPointsPreferenceCategory.removeAll(); mAccessPointsPreferenceCategory.removeAll();
mAccessPointsPreferenceCategory.addPreference(mStatusMessagePreference); mAccessPointsPreferenceCategory.addPreference(mStatusMessagePreference);
} }
private void addMessagePreference(int messageId) { private void addMessagePreference(int messageId) {
mStatusMessagePreference.setTitle(messageId); mStatusMessagePreference.setTitle(messageId);
removeConnectedAccessPointPreference();
mAccessPointsPreferenceCategory.removeAll(); mAccessPointsPreferenceCategory.removeAll();
mAccessPointsPreferenceCategory.addPreference(mStatusMessagePreference); mAccessPointsPreferenceCategory.addPreference(mStatusMessagePreference);
} }
@@ -926,7 +1002,7 @@ public class WifiSettings extends RestrictedSettingsFragment
result.add(data); result.add(data);
// Add saved Wi-Fi access points // Add saved Wi-Fi access points
final Collection<AccessPoint> accessPoints = final List<AccessPoint> accessPoints =
WifiTracker.getCurrentAccessPoints(context, true, false, false); WifiTracker.getCurrentAccessPoints(context, true, false, false);
for (AccessPoint accessPoint : accessPoints) { for (AccessPoint accessPoint : accessPoints) {
data = new SearchIndexableRaw(context); data = new SearchIndexableRaw(context);