Improve UX of WifiDppChooseSavedWifiNetworkFragment

In WifiDppChooseSavedWifiNetworkFragment, it does not show the saved Wi-Fi
network which is not reachable, users may be confused about why their saved
Wi-Fi network not on the list. This change shows saved networks regardless
of signal reachable or not.

Fix WifiDppChooseSavedWifiNetworkFragment UI overlap problem, remove redundant
ScrollView and adjust ConstraintLayout parameters.

Bug: 124129645
Test: manual test
Change-Id: I86637e8722bb8f40a3b995a617dc1e22b2ae324a
This commit is contained in:
Arc Wang
2019-03-19 10:01:38 +08:00
parent 3d5ef5ec60
commit d0ceb83c95
2 changed files with 41 additions and 50 deletions

View File

@@ -22,28 +22,24 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<ScrollView <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="0dp"
android:gravity="center_horizontal"
android:orientation="vertical"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@+id/footer">
<LinearLayout <include layout="@layout/wifi_dpp_fragment_header"/>
<LinearLayout android:id="@+id/wifi_network_list_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"/>
android:gravity="center_horizontal"
android:orientation="vertical">
<include layout="@layout/wifi_dpp_fragment_header"/> </LinearLayout>
<LinearLayout android:id="@+id/wifi_network_list_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/header"/>
</LinearLayout>
</ScrollView>
<include <include
android:id="@+id/footer"
layout="@layout/wifi_dpp_fragment_footer" layout="@layout/wifi_dpp_fragment_footer"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"

View File

@@ -34,11 +34,14 @@ import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment; import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.core.SubSettingLauncher; import com.android.settings.core.SubSettingLauncher;
import com.android.settings.wifi.AddNetworkFragment; import com.android.settings.wifi.AddNetworkFragment;
import com.android.settings.wifi.savedaccesspoints.SavedNetworkComparator;
import com.android.settingslib.wifi.AccessPoint; import com.android.settingslib.wifi.AccessPoint;
import com.android.settingslib.wifi.AccessPointPreference; import com.android.settingslib.wifi.AccessPointPreference;
import com.android.settingslib.wifi.WifiSavedConfigUtils;
import com.android.settingslib.wifi.WifiTracker; import com.android.settingslib.wifi.WifiTracker;
import com.android.settingslib.wifi.WifiTrackerFactory; import com.android.settingslib.wifi.WifiTrackerFactory;
import java.util.Collections;
import java.util.List; import java.util.List;
public class WifiNetworkListFragment extends SettingsPreferenceFragment implements public class WifiNetworkListFragment extends SettingsPreferenceFragment implements
@@ -256,17 +259,6 @@ public class WifiNetworkListFragment extends SettingsPreferenceFragment implemen
return false; return false;
} }
// Can only use saved network for DPP configuration. For ephemeral connections networkId
// is invalid.
if (!accessPoint.isSaved()) {
return false;
}
// Ignore access points that are out of range.
if (!accessPoint.isReachable()) {
return false;
}
return true; return true;
} }
@@ -290,44 +282,47 @@ public class WifiNetworkListFragment extends SettingsPreferenceFragment implemen
return; return;
} }
// AccessPoints are sorted by the WifiTracker // TODO(b/128942314): Lists reachable AccessPoints on top of the list
final List<AccessPoint> accessPoints = mWifiTracker.getAccessPoints(); final List<AccessPoint> savedAccessPoints =
WifiSavedConfigUtils.getAllConfigs(getContext(), mWifiManager);
mAccessPointsPreferenceCategory.setVisible(true); Collections.sort(savedAccessPoints, SavedNetworkComparator.INSTANCE);
cacheRemoveAllPrefs(mAccessPointsPreferenceCategory);
int index = 0; int index = 0;
for (; index < accessPoints.size(); index++) { mAccessPointsPreferenceCategory.removeAll();
AccessPoint accessPoint = accessPoints.get(index); for (AccessPoint savedAccessPoint : savedAccessPoints) {
// Check if this access point is valid for DPP. if (isValidForDppConfiguration(savedAccessPoint)) {
if (isValidForDppConfiguration(accessPoint)) { // Replaces with an AccessPoint from scanned result for signal information
final String key = accessPoint.getKey(); savedAccessPoint = getScannedAccessPointIfAvailable(savedAccessPoint);
final AccessPointPreference preference =
createAccessPointPreference(savedAccessPoint);
final AccessPointPreference pref = (AccessPointPreference) getCachedPreference(key); preference.setOrder(index++);
if (pref != null) { preference.setEnabled(savedAccessPoint.isReachable());
pref.setOrder(index); savedAccessPoint.setListener(this);
continue;
}
final AccessPointPreference preference = createAccessPointPreference(accessPoint);
preference.setKey(key);
preference.setOrder(index);
mAccessPointsPreferenceCategory.addPreference(preference);
accessPoint.setListener(this);
preference.refresh(); preference.refresh();
mAccessPointsPreferenceCategory.addPreference(preference);
} }
} }
removeCachedPrefs(mAccessPointsPreferenceCategory);
mAddPreference.setOrder(index); mAddPreference.setOrder(index);
mAccessPointsPreferenceCategory.addPreference(mAddPreference); mAccessPointsPreferenceCategory.addPreference(mAddPreference);
if (mIsTest) { if (mIsTest) {
mFakeNetworkPreference.setOrder(index + 1);
mAccessPointsPreferenceCategory.addPreference(mFakeNetworkPreference); mAccessPointsPreferenceCategory.addPreference(mFakeNetworkPreference);
} }
} }
private AccessPoint getScannedAccessPointIfAvailable(AccessPoint savedAccessPoint) {
final List<AccessPoint> scannedAccessPoints = mWifiTracker.getAccessPoints();
final WifiConfiguration savedWifiConfiguration = savedAccessPoint.getConfig();
for (AccessPoint scannedAccessPoint : scannedAccessPoints) {
if (scannedAccessPoint.matches(savedWifiConfiguration)) {
return scannedAccessPoint;
}
}
return savedAccessPoint;
}
private AccessPointPreference createAccessPointPreference(AccessPoint accessPoint) { private AccessPointPreference createAccessPointPreference(AccessPoint accessPoint) {
return new AccessPointPreference(accessPoint, getPrefContext(), mUserBadgeCache, return new AccessPointPreference(accessPoint, getPrefContext(), mUserBadgeCache,
R.drawable.ic_wifi_signal_0, /* forSavedNetworks */ false); R.drawable.ic_wifi_signal_0, /* forSavedNetworks */ false);