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

Commit d0ceb83c authored by Arc Wang's avatar Arc Wang
Browse files

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
parent 3d5ef5ec
Loading
Loading
Loading
Loading
+12 −16
Original line number Diff line number Diff line
@@ -22,28 +22,24 @@
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
            android:layout_height="match_parent"
        android:layout_height="0dp"
        android:gravity="center_horizontal"
            android:orientation="vertical">
        android:orientation="vertical"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="@+id/footer">

        <include layout="@layout/wifi_dpp_fragment_header"/>

        <LinearLayout android:id="@+id/wifi_network_list_container"
            android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_constraintTop_toBottomOf="@+id/header"/>
            android:layout_height="wrap_content"/>

    </LinearLayout>

    </ScrollView>

    <include
        android:id="@+id/footer"
        layout="@layout/wifi_dpp_fragment_footer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
+30 −35
Original line number Diff line number Diff line
@@ -34,11 +34,14 @@ import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.wifi.AddNetworkFragment;
import com.android.settings.wifi.savedaccesspoints.SavedNetworkComparator;
import com.android.settingslib.wifi.AccessPoint;
import com.android.settingslib.wifi.AccessPointPreference;
import com.android.settingslib.wifi.WifiSavedConfigUtils;
import com.android.settingslib.wifi.WifiTracker;
import com.android.settingslib.wifi.WifiTrackerFactory;

import java.util.Collections;
import java.util.List;

public class WifiNetworkListFragment extends SettingsPreferenceFragment implements
@@ -256,17 +259,6 @@ public class WifiNetworkListFragment extends SettingsPreferenceFragment implemen
            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;
    }

@@ -290,44 +282,47 @@ public class WifiNetworkListFragment extends SettingsPreferenceFragment implemen
            return;
        }

        // AccessPoints are sorted by the WifiTracker
        final List<AccessPoint> accessPoints = mWifiTracker.getAccessPoints();

        mAccessPointsPreferenceCategory.setVisible(true);

        cacheRemoveAllPrefs(mAccessPointsPreferenceCategory);
        // TODO(b/128942314): Lists reachable AccessPoints on top of the list
        final List<AccessPoint> 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<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) {
        return new AccessPointPreference(accessPoint, getPrefContext(), mUserBadgeCache,
                R.drawable.ic_wifi_signal_0, /* forSavedNetworks */ false);