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

Commit 0a663440 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Connect to OWE Wi-Fi network when QR code has no password" into main

parents be774681 efe8d52f
Loading
Loading
Loading
Loading
+21 −10
Original line number Diff line number Diff line
@@ -262,16 +262,9 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl
                continue;
            }
            canFindNetwork = true;
            final int security =
                    WifiDppUtils.getSecurityTypeFromWifiConfiguration(wifiConfiguration);
            if (security == wifiEntry.getSecurity()) {
                return REACHABLE_WIFI_NETWORK;
            }

            // Default security type of PSK/SAE transition mode WifiEntry is SECURITY_PSK and
            // there is no way to know if a WifiEntry is of transition mode. Give it a chance.
            if (security == WifiEntry.SECURITY_SAE
                    && wifiEntry.getSecurity() == WifiEntry.SECURITY_PSK) {
            int security = WifiDppUtils.getSecurityTypeFromWifiConfiguration(wifiConfiguration);
            if (isSecurityMatched(security, wifiEntry.getSecurity())) {
                Log.d(TAG, "WiFi DPP detects connection security for a matching WiFi network.");
                return REACHABLE_WIFI_NETWORK;
            }
        }
@@ -283,6 +276,24 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl
        return R.string.wifi_dpp_check_connection_no_matched_ssid;
    }

    @VisibleForTesting
    boolean isSecurityMatched(int qrSecurity, int entrySecurity) {
        if (qrSecurity == entrySecurity) {
            return true;
        }
        // Default security type of PSK/SAE transition mode WifiEntry is SECURITY_PSK and
        // there is no way to know if a WifiEntry is of transition mode. Give it a chance.
        if (qrSecurity == WifiEntry.SECURITY_SAE && entrySecurity == WifiEntry.SECURITY_PSK) {
            return true;
        }
        // If configured is no password, the Wi-Fi framework will attempt OPEN and OWE security.
        return isNoPasswordSecurity(qrSecurity) && isNoPasswordSecurity(entrySecurity);
    }

    private boolean isNoPasswordSecurity(int security) {
        return security == WifiEntry.SECURITY_NONE || security == WifiEntry.SECURITY_OWE;
    }

    @VisibleForTesting
    boolean canConnectWifi(String ssid) {
        final List<WifiEntry> wifiEntries = mWifiPickerTracker.getWifiEntries();
+25 −0
Original line number Diff line number Diff line
@@ -16,6 +16,11 @@

package com.android.settings.wifi.dpp;

import static com.android.wifitrackerlib.WifiEntry.SECURITY_NONE;
import static com.android.wifitrackerlib.WifiEntry.SECURITY_OWE;
import static com.android.wifitrackerlib.WifiEntry.SECURITY_PSK;
import static com.android.wifitrackerlib.WifiEntry.SECURITY_SAE;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.anyInt;
@@ -148,4 +153,24 @@ public class WifiDppQrCodeScannerFragmentTest {
        verify(mActivity).setResult(eq(Activity.RESULT_OK), any());
        verify(mActivity).finish();
    }

    @Test
    public void isSecurityMatched_securityNotMatch_returnFalse() {
        assertThat(mFragment.isSecurityMatched(SECURITY_NONE, SECURITY_PSK)).isFalse();
    }

    @Test
    public void isSecurityMatched_securityMatch_returnTrue() {
        assertThat(mFragment.isSecurityMatched(SECURITY_PSK, SECURITY_PSK)).isTrue();
    }

    @Test
    public void isSecurityMatched_tryPskSaeTransition_returnTrue() {
        assertThat(mFragment.isSecurityMatched(SECURITY_SAE, SECURITY_PSK)).isTrue();
    }

    @Test
    public void isSecurityMatched_noPasswordSecurity_returnTrue() {
        assertThat(mFragment.isSecurityMatched(SECURITY_NONE, SECURITY_OWE)).isTrue();
    }
}