diff --git a/res/layout/wifi_dpp_choose_saved_wifi_network_fragment.xml b/res/layout/wifi_dpp_choose_saved_wifi_network_fragment.xml index ed288f06053..3606ccd17da 100644 --- a/res/layout/wifi_dpp_choose_saved_wifi_network_fragment.xml +++ b/res/layout/wifi_dpp_choose_saved_wifi_network_fragment.xml @@ -22,28 +22,24 @@ 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"> - + + + android:layout_height="wrap_content"/> - - - - - - - + accessPoints = mWifiTracker.getAccessPoints(); - - mAccessPointsPreferenceCategory.setVisible(true); - - cacheRemoveAllPrefs(mAccessPointsPreferenceCategory); + // TODO(b/128942314): Lists reachable AccessPoints on top of the list + final List savedAccessPoints = + WifiSavedConfigUtils.getAllConfigs(getContext(), mWifiManager); + Collections.sort(savedAccessPoints, SavedNetworkComparator.INSTANCE); int index = 0; - for (; index < accessPoints.size(); index++) { - AccessPoint accessPoint = accessPoints.get(index); - // Check if this access point is valid for DPP. - if (isValidForDppConfiguration(accessPoint)) { - final String key = accessPoint.getKey(); + mAccessPointsPreferenceCategory.removeAll(); + for (AccessPoint savedAccessPoint : savedAccessPoints) { + if (isValidForDppConfiguration(savedAccessPoint)) { + // Replaces with an AccessPoint from scanned result for signal information + savedAccessPoint = getScannedAccessPointIfAvailable(savedAccessPoint); + final AccessPointPreference preference = + createAccessPointPreference(savedAccessPoint); - final AccessPointPreference pref = (AccessPointPreference) getCachedPreference(key); - if (pref != null) { - pref.setOrder(index); - continue; - } - final AccessPointPreference preference = createAccessPointPreference(accessPoint); - preference.setKey(key); - preference.setOrder(index); + preference.setOrder(index++); + preference.setEnabled(savedAccessPoint.isReachable()); + savedAccessPoint.setListener(this); - mAccessPointsPreferenceCategory.addPreference(preference); - accessPoint.setListener(this); preference.refresh(); + mAccessPointsPreferenceCategory.addPreference(preference); } } - removeCachedPrefs(mAccessPointsPreferenceCategory); mAddPreference.setOrder(index); mAccessPointsPreferenceCategory.addPreference(mAddPreference); if (mIsTest) { - mFakeNetworkPreference.setOrder(index + 1); mAccessPointsPreferenceCategory.addPreference(mFakeNetworkPreference); } } + private AccessPoint getScannedAccessPointIfAvailable(AccessPoint savedAccessPoint) { + final List 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) { return new AccessPointPreference(accessPoint, getPrefContext(), mUserBadgeCache, R.drawable.ic_wifi_signal_0, /* forSavedNetworks */ false);