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

Commit dcf00c9d authored by Vinit Deshpande's avatar Vinit Deshpande
Browse files

Implement 'Available via Passpoint' feature [DO NOT MERGE]

This also fixes the issues related to explicit connection
to passpoint AP, and fixes occassional mention of
'connected via Wi-Fi Assistent'

Change-Id: I152cebafa6259194f1d09a6972a3508156335cb6
(cherry picked from commit ff783cd6)
parent fc40600e
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -69,6 +69,8 @@
    <string name="connected_via_wfa">Connected via Wi\u2011Fi assistant</string>
    <!-- Status message of Wi-Fi when it is connected by Passpoint configuration. [CHAR LIMIT=NONE] -->
    <string name="connected_via_passpoint">Connected via %1$s</string>
    <!-- Status message of Wi-Fi when network has matching passpoint credentials. [CHAR LIMIT=NONE] -->
    <string name="available_via_passpoint">Available via %1$s</string>

    <!-- Bluetooth settings.  Message when a device is disconnected -->
    <string name="bluetooth_disconnected">Disconnected</string>
+43 −10
Original line number Diff line number Diff line
@@ -200,6 +200,9 @@ public class AccessPoint implements Comparable<AccessPoint> {
    }

    public boolean matches(WifiConfiguration config) {
        if (config.isPasspoint() && mConfig != null && mConfig.isPasspoint())
            return config.FQDN.equals(mConfig.providerFriendlyName);
        else
            return ssid.equals(removeDoubleQuotes(config.SSID)) && security == getSecurity(config);
    }

@@ -266,21 +269,47 @@ public class AccessPoint implements Comparable<AccessPoint> {
        return ssid;
    }

    public String getConfigName() {
        if (mConfig != null && mConfig.isPasspoint()) {
            return mConfig.providerFriendlyName;
        } else {
            return ssid;
        }
    }

    public DetailedState getDetailedState() {
        return mNetworkInfo != null ? mNetworkInfo.getDetailedState() : null;
    }

    public String getSavedNetworkSummary() {
        // Update to new summary
        if (mConfig != null && mConfig.isPasspoint()) {
            return "";
        } else {
            return getSettingsSummary();
        }
    }

    public String getSummary() {
        return getSettingsSummary();
    }

    public String getSettingsSummary() {
        // Update to new summary
        StringBuilder summary = new StringBuilder();

        if (isActive()) { // This is the active connection
            String passpointProvider = (mConfig != null && mConfig.isPasspoint()) ?
                    mConfig.providerFriendlyName : null;
        if (isActive() && mConfig != null && mConfig.isPasspoint()) {
            // This is the active connection on passpoint
            summary.append(getSummary(mContext, getDetailedState(),
                    networkId == WifiConfiguration.INVALID_NETWORK_ID, passpointProvider));
        } else if (mConfig != null
                && mConfig.hasNoInternetAccess()) {
                    false, mConfig.providerFriendlyName));
        } else if (isActive()) {
            // This is the active connection on non-passpoint network
            summary.append(getSummary(mContext, getDetailedState(),
                    networkId == WifiConfiguration.INVALID_NETWORK_ID));
        } else if (mConfig != null && mConfig.isPasspoint()) {
            String format = mContext.getString(R.string.available_via_passpoint);
            summary.append(String.format(format, mConfig.providerFriendlyName));
        } else if (mConfig != null && mConfig.hasNoInternetAccess()) {
            summary.append(mContext.getString(R.string.wifi_no_internet));
        } else if (mConfig != null && ((mConfig.status == WifiConfiguration.Status.DISABLED &&
                mConfig.disableReason != WifiConfiguration.DISABLED_UNKNOWN_REASON)
@@ -652,16 +681,20 @@ public class AccessPoint implements Comparable<AccessPoint> {

    void update(WifiConfiguration config) {
        mConfig = config;
        networkId = config.networkId;
        if (mAccessPointListener != null) {
            mAccessPointListener.onAccessPointChanged(this);
        }
    }
    
    public static String getSummary(Context context, String ssid, DetailedState state,
            boolean isEphemeral, String passpointProvider) {
        if (state == DetailedState.CONNECTED && isEphemeral && ssid == null) {
        if (state == DetailedState.CONNECTED && ssid == null) {
            if (TextUtils.isEmpty(passpointProvider) == false) {
                // Special case for connected + ephemeral networks.
                // Special case for connected + passpoint networks.
                String format = context.getString(R.string.connected_via_passpoint);
                return String.format(format, passpointProvider);
            } else if (isEphemeral && ssid == null) {
            } else if (isEphemeral) {
                // Special case for connected + ephemeral networks.
                return context.getString(R.string.connected_via_wfa);
            }
+28 −11
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ public class WifiTracker {
    private final WifiListener mListener;
    private final boolean mIncludeSaved;
    private final boolean mIncludeScans;
    private final boolean mIncludePasspoints;

    private boolean mSavedNetworksExist;
    private boolean mRegistered;
@@ -75,13 +76,17 @@ public class WifiTracker {

    public WifiTracker(Context context, WifiListener wifiListener, boolean includeSaved,
                       boolean includeScans) {
        this(context, wifiListener, includeSaved, includeScans,
        this(context, wifiListener, includeSaved, includeScans, false);
    }
    public WifiTracker(Context context, WifiListener wifiListener, boolean includeSaved,
            boolean includeScans, boolean includePasspoints) {
        this(context, wifiListener, includeSaved, includeScans, includePasspoints,
                (WifiManager) context.getSystemService(Context.WIFI_SERVICE));
    }

    @VisibleForTesting
    WifiTracker(Context context, WifiListener wifiListener, boolean includeSaved,
            boolean includeScans, WifiManager wifiManager) {
            boolean includeScans, boolean includePasspoints, WifiManager wifiManager) {
        if (!includeSaved && !includeScans) {
            throw new IllegalArgumentException("Must include either saved or scans");
        }
@@ -89,6 +94,7 @@ public class WifiTracker {
        mWifiManager = wifiManager;
        mIncludeSaved = includeSaved;
        mIncludeScans = includeScans;
        mIncludePasspoints = includePasspoints;
        mListener = wifiListener;

        // check if verbose logging has been turned on or off
@@ -232,16 +238,19 @@ public class WifiTracker {
                if (config.selfAdded && config.numAssociation == 0) {
                    continue;
                }
                if (config.isPasspoint()) {
                    continue;
                }
                AccessPoint accessPoint = getCachedOrCreate(config);
                if (mLastInfo != null && mLastNetworkInfo != null) {
                    if (config.isPasspoint() == false) {
                        accessPoint.update(mLastInfo, mLastNetworkInfo);
                    }
                }
                if (mIncludeSaved) {
                    if (!config.isPasspoint() || mIncludePasspoints)
                        mAccessPoints.add(accessPoint);

                    if (config.isPasspoint() == false) {
                        apMap.put(accessPoint.getSsid(), accessPoint);
                    }
                } else {
                    // If we aren't using saved networks, drop them into the cache so that
                    // we have access to their saved info.
@@ -272,6 +281,13 @@ public class WifiTracker {
                        accessPoint.update(mLastInfo, mLastNetworkInfo);
                    }

                    if (result.passpointNetwork) {
                        WifiConfiguration config = mWifiManager.getMatchingWifiConfig(result);
                        if (config != null) {
                            accessPoint.update(config);
                        }
                    }

                    if (mLastInfo != null && mLastInfo.getBSSID() != null
                            && mLastInfo.getBSSID().equals(result.BSSID)
                            && connectionConfig != null && connectionConfig.isPasspoint()) {
@@ -370,8 +386,9 @@ public class WifiTracker {
    }

    public static List<AccessPoint> getCurrentAccessPoints(Context context, boolean includeSaved,
            boolean includeScans) {
        WifiTracker tracker = new WifiTracker(context, null, includeSaved, includeScans);
            boolean includeScans, boolean includePasspoints) {
        WifiTracker tracker = new WifiTracker(context,
                null, includeSaved, includeScans, includePasspoints);
        tracker.forceUpdate();
        return tracker.getAccessPoints();
    }