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

Commit a54eaa6a authored by Nate Jiang's avatar Nate Jiang Committed by Android (Google) Code Review
Browse files

Merge "Enable/disable auto-join for Suggestions"

parents 9f183ebe 7ff93c71
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -30811,6 +30811,7 @@ package android.net.wifi {
    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsAppInteractionRequired(boolean);
    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsEnhancedOpen(boolean);
    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsHiddenSsid(boolean);
    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsInitialAutoJoinEnabled(boolean);
    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsMetered(boolean);
    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsUserInteractionRequired(boolean);
    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setPasspointConfig(@NonNull android.net.wifi.hotspot2.PasspointConfiguration);
+51 −4
Original line number Diff line number Diff line
@@ -122,6 +122,12 @@ public final class WifiNetworkSuggestion implements Parcelable {
         * Whether the setCredentialSharedWithUser have been called.
         */
        private boolean mIsSharedWithUserSet;

        /**
         * Whether this network is initialized with auto-join enabled (the default) or not.
         */
        private boolean mIsInitialAutoJoinEnabled;

        /**
         * Pre-shared key for use with WAPI-PSK networks.
         */
@@ -148,6 +154,7 @@ public final class WifiNetworkSuggestion implements Parcelable {
            mIsMetered = false;
            mIsSharedWithUser = true;
            mIsSharedWithUserSet = false;
            mIsInitialAutoJoinEnabled = true;
            mPriority = UNASSIGNED_PRIORITY;
            mCarrierId = TelephonyManager.UNKNOWN_CARRIER_ID;
            mWapiPskPassphrase = null;
@@ -440,6 +447,27 @@ public final class WifiNetworkSuggestion implements Parcelable {
            return this;
        }

        /**
         * Specifies whether the suggestion is created with auto-join enabled or disabled. The
         * user may modify the auto-join configuration of a suggestion directly once the device
         * associates to the network.
         * <p>
         * If auto-join is initialized as disabled the user may still be able to manually connect
         * to the network. Therefore, disabling auto-join only makes sense if
         * {@link #setCredentialSharedWithUser(boolean)} is set to true (the default) which
         * itself implies a secure (non-open) network.
         * <p>
         * If not set, defaults to true (i.e. auto-join is initialized as enabled).
         *
         * @param enabled true for initializing with auto-join enabled (the default), false to
         *                initializing with auto-join disabled.
         * @return Instance of (@link {@link Builder} to enable chaining of the builder method.
         */
        public @NonNull Builder setIsInitialAutoJoinEnabled(boolean enabled) {
            mIsInitialAutoJoinEnabled = enabled;
            return this;
        }

        private void setSecurityParamsInWifiConfiguration(
                @NonNull WifiConfiguration configuration) {
            if (!TextUtils.isEmpty(mWpa2PskPassphrase)) { // WPA-PSK network.
@@ -587,7 +615,6 @@ public final class WifiNetworkSuggestion implements Parcelable {
                            + "suggestion with Passpoint configuration");
                }
                wifiConfiguration = buildWifiConfigurationForPasspoint();

            } else {
                if (mSsid == null) {
                    throw new IllegalStateException("setSsid should be invoked for suggestion");
@@ -608,6 +635,12 @@ public final class WifiNetworkSuggestion implements Parcelable {
                    }
                    mIsSharedWithUser = false;
                }

                if (!mIsSharedWithUser && !mIsInitialAutoJoinEnabled) {
                    throw new IllegalStateException("Should have not a network with both "
                            + "setIsUserAllowedToManuallyConnect and "
                            + "setIsAutoJoinEnabled set to false");
                }
            }

            return new WifiNetworkSuggestion(
@@ -615,7 +648,8 @@ public final class WifiNetworkSuggestion implements Parcelable {
                    mPasspointConfiguration,
                    mIsAppInteractionRequired,
                    mIsUserInteractionRequired,
                    mIsSharedWithUser);
                    mIsSharedWithUser,
                    mIsInitialAutoJoinEnabled);
        }
    }

@@ -642,6 +676,7 @@ public final class WifiNetworkSuggestion implements Parcelable {
     * @hide
     */
    public final boolean isUserInteractionRequired;

    /**
     * Whether app share credential with the user, allow user use provided credential to
     * connect network manually.
@@ -649,6 +684,12 @@ public final class WifiNetworkSuggestion implements Parcelable {
     */
    public final boolean isUserAllowedToManuallyConnect;

    /**
     * Whether the suggestion will be initialized as auto-joined or not.
     * @hide
     */
    public final boolean isInitialAutoJoinEnabled;

    /** @hide */
    public WifiNetworkSuggestion() {
        this.wifiConfiguration = null;
@@ -656,6 +697,7 @@ public final class WifiNetworkSuggestion implements Parcelable {
        this.isAppInteractionRequired = false;
        this.isUserInteractionRequired = false;
        this.isUserAllowedToManuallyConnect = true;
        this.isInitialAutoJoinEnabled = true;
    }

    /** @hide */
@@ -663,7 +705,8 @@ public final class WifiNetworkSuggestion implements Parcelable {
                                 @Nullable PasspointConfiguration passpointConfiguration,
                                 boolean isAppInteractionRequired,
                                 boolean isUserInteractionRequired,
                                 boolean isUserAllowedToManuallyConnect) {
                                 boolean isUserAllowedToManuallyConnect,
                                 boolean isInitialAutoJoinEnabled) {
        checkNotNull(networkConfiguration);
        this.wifiConfiguration = networkConfiguration;
        this.passpointConfiguration = passpointConfiguration;
@@ -671,6 +714,7 @@ public final class WifiNetworkSuggestion implements Parcelable {
        this.isAppInteractionRequired = isAppInteractionRequired;
        this.isUserInteractionRequired = isUserInteractionRequired;
        this.isUserAllowedToManuallyConnect = isUserAllowedToManuallyConnect;
        this.isInitialAutoJoinEnabled = isInitialAutoJoinEnabled;
    }

    public static final @NonNull Creator<WifiNetworkSuggestion> CREATOR =
@@ -682,7 +726,8 @@ public final class WifiNetworkSuggestion implements Parcelable {
                            in.readParcelable(null), // PasspointConfiguration
                            in.readBoolean(), // isAppInteractionRequired
                            in.readBoolean(), // isUserInteractionRequired
                            in.readBoolean()  // isSharedCredentialWithUser
                            in.readBoolean(), // isSharedCredentialWithUser
                            in.readBoolean()  // isAutoJoinEnabled
                    );
                }

@@ -704,6 +749,7 @@ public final class WifiNetworkSuggestion implements Parcelable {
        dest.writeBoolean(isAppInteractionRequired);
        dest.writeBoolean(isUserInteractionRequired);
        dest.writeBoolean(isUserAllowedToManuallyConnect);
        dest.writeBoolean(isInitialAutoJoinEnabled);
    }

    @Override
@@ -744,6 +790,7 @@ public final class WifiNetworkSuggestion implements Parcelable {
                .append(", isAppInteractionRequired=").append(isAppInteractionRequired)
                .append(", isUserInteractionRequired=").append(isUserInteractionRequired)
                .append(", isUserAllowedToManuallyConnect=").append(isUserAllowedToManuallyConnect)
                .append(", isInitialAutoJoinEnabled=").append(isInitialAutoJoinEnabled)
                .append(" ]");
        return sb.toString();
    }
+53 −14
Original line number Diff line number Diff line
@@ -32,8 +32,6 @@ import org.junit.Test;
 */
@SmallTest
public class WifiNetworkSuggestionTest {
    private static final int TEST_UID = 45677;
    private static final int TEST_UID_OTHER = 45673;
    private static final String TEST_SSID = "\"Test123\"";
    private static final String TEST_BSSID = "12:12:12:12:12:12";
    private static final String TEST_SSID_1 = "\"Test1234\"";
@@ -61,7 +59,8 @@ public class WifiNetworkSuggestionTest {
        assertEquals(WifiConfiguration.METERED_OVERRIDE_NONE,
                suggestion.wifiConfiguration.meteredOverride);
        assertEquals(-1, suggestion.wifiConfiguration.priority);
        assertEquals(false, suggestion.isUserAllowedToManuallyConnect);
        assertFalse(suggestion.isUserAllowedToManuallyConnect);
        assertTrue(suggestion.isInitialAutoJoinEnabled);
    }

    /**
@@ -90,7 +89,8 @@ public class WifiNetworkSuggestionTest {
        assertEquals(WifiConfiguration.METERED_OVERRIDE_NONE,
                suggestion.wifiConfiguration.meteredOverride);
        assertEquals(0, suggestion.wifiConfiguration.priority);
        assertEquals(false, suggestion.isUserAllowedToManuallyConnect);
        assertFalse(suggestion.isUserAllowedToManuallyConnect);
        assertTrue(suggestion.isInitialAutoJoinEnabled);
    }

    /**
@@ -105,6 +105,7 @@ public class WifiNetworkSuggestionTest {
                .setSsid(TEST_SSID)
                .setWpa2Passphrase(TEST_PRESHARED_KEY)
                .setIsUserInteractionRequired(true)
                .setIsInitialAutoJoinEnabled(false)
                .setIsMetered(true)
                .build();

@@ -119,6 +120,7 @@ public class WifiNetworkSuggestionTest {
                suggestion.wifiConfiguration.meteredOverride);
        assertEquals(-1, suggestion.wifiConfiguration.priority);
        assertTrue(suggestion.isUserAllowedToManuallyConnect);
        assertFalse(suggestion.isInitialAutoJoinEnabled);
    }

    /**
@@ -140,6 +142,7 @@ public class WifiNetworkSuggestionTest {
        assertNull(suggestion.wifiConfiguration.preSharedKey);
        assertTrue(suggestion.wifiConfiguration.requirePMF);
        assertFalse(suggestion.isUserAllowedToManuallyConnect);
        assertTrue(suggestion.isInitialAutoJoinEnabled);
    }

    /**
@@ -152,6 +155,7 @@ public class WifiNetworkSuggestionTest {
                .setSsid(TEST_SSID)
                .setWpa3Passphrase(TEST_PRESHARED_KEY)
                .setCredentialSharedWithUser(true)
                .setIsInitialAutoJoinEnabled(false)
                .build();

        assertEquals("\"" + TEST_SSID + "\"", suggestion.wifiConfiguration.SSID);
@@ -161,6 +165,7 @@ public class WifiNetworkSuggestionTest {
                suggestion.wifiConfiguration.preSharedKey);
        assertTrue(suggestion.wifiConfiguration.requirePMF);
        assertTrue(suggestion.isUserAllowedToManuallyConnect);
        assertFalse(suggestion.isInitialAutoJoinEnabled);
    }


@@ -191,6 +196,7 @@ public class WifiNetworkSuggestionTest {
        // allowedSuiteBCiphers are set according to the loaded certificate and cannot be tested
        // here.
        assertTrue(suggestion.isUserAllowedToManuallyConnect);
        assertTrue(suggestion.isInitialAutoJoinEnabled);
    }

    /**
@@ -526,7 +532,7 @@ public class WifiNetworkSuggestionTest {
        configuration.BSSID = TEST_BSSID;
        configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        WifiNetworkSuggestion suggestion = new WifiNetworkSuggestion(
                configuration, null, false, true, true);
                configuration, null, false, true, true, false);

        Parcel parcelW = Parcel.obtain();
        suggestion.writeToParcel(parcelW, 0);
@@ -548,6 +554,8 @@ public class WifiNetworkSuggestionTest {
                parcelSuggestion.isAppInteractionRequired);
        assertEquals(suggestion.isUserInteractionRequired,
                parcelSuggestion.isUserInteractionRequired);
        assertEquals(suggestion.isInitialAutoJoinEnabled,
                parcelSuggestion.isInitialAutoJoinEnabled);
    }

    /**
@@ -580,6 +588,8 @@ public class WifiNetworkSuggestionTest {
                parcelSuggestion.isAppInteractionRequired);
        assertEquals(suggestion.isUserInteractionRequired,
                parcelSuggestion.isUserInteractionRequired);
        assertEquals(suggestion.isInitialAutoJoinEnabled,
                parcelSuggestion.isInitialAutoJoinEnabled);
    }

    /**
@@ -593,14 +603,14 @@ public class WifiNetworkSuggestionTest {
        configuration.BSSID = TEST_BSSID;
        configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
        WifiNetworkSuggestion suggestion =
                new WifiNetworkSuggestion(configuration, null, true, false, true);
                new WifiNetworkSuggestion(configuration, null, true, false, true, true);

        WifiConfiguration configuration1 = new WifiConfiguration();
        configuration1.SSID = TEST_SSID;
        configuration1.BSSID = TEST_BSSID;
        configuration1.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
        WifiNetworkSuggestion suggestion1 =
                new WifiNetworkSuggestion(configuration1, null, false, true, true);
                new WifiNetworkSuggestion(configuration1, null, false, true, true, false);

        assertEquals(suggestion, suggestion1);
        assertEquals(suggestion.hashCode(), suggestion1.hashCode());
@@ -616,13 +626,13 @@ public class WifiNetworkSuggestionTest {
        configuration.SSID = TEST_SSID;
        configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        WifiNetworkSuggestion suggestion =
                new WifiNetworkSuggestion(configuration, null, false, false, true);
                new WifiNetworkSuggestion(configuration, null, false, false, true, false);

        WifiConfiguration configuration1 = new WifiConfiguration();
        configuration1.SSID = TEST_SSID_1;
        configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        WifiNetworkSuggestion suggestion1 =
                new WifiNetworkSuggestion(configuration1, null, false, false, true);
                new WifiNetworkSuggestion(configuration1, null, false, false, true, false);

        assertNotEquals(suggestion, suggestion1);
    }
@@ -638,13 +648,13 @@ public class WifiNetworkSuggestionTest {
        configuration.BSSID = TEST_BSSID;
        configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        WifiNetworkSuggestion suggestion =
                new WifiNetworkSuggestion(configuration, null,  false, false, true);
                new WifiNetworkSuggestion(configuration, null,  false, false, true, true);

        WifiConfiguration configuration1 = new WifiConfiguration();
        configuration1.SSID = TEST_SSID;
        configuration1.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        WifiNetworkSuggestion suggestion1 =
                new WifiNetworkSuggestion(configuration1, null, false, false, true);
                new WifiNetworkSuggestion(configuration1, null, false, false, true, true);

        assertNotEquals(suggestion, suggestion1);
    }
@@ -659,13 +669,13 @@ public class WifiNetworkSuggestionTest {
        configuration.SSID = TEST_SSID;
        configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        WifiNetworkSuggestion suggestion =
                new WifiNetworkSuggestion(configuration, null, false, false, true);
                new WifiNetworkSuggestion(configuration, null, false, false, true, true);

        WifiConfiguration configuration1 = new WifiConfiguration();
        configuration1.SSID = TEST_SSID;
        configuration1.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
        WifiNetworkSuggestion suggestion1 =
                new WifiNetworkSuggestion(configuration1, null, false, false, true);
                new WifiNetworkSuggestion(configuration1, null, false, false, true, true);

        assertNotEquals(suggestion, suggestion1);
    }
@@ -714,9 +724,38 @@ public class WifiNetworkSuggestionTest {
     */
    @Test(expected = IllegalStateException.class)
    public void testSetIsUserAllowedToManuallyConnectToWithOpenNetwork() {
        WifiNetworkSuggestion suggestion = new WifiNetworkSuggestion.Builder()
        new WifiNetworkSuggestion.Builder()
                .setSsid(TEST_SSID)
                .setCredentialSharedWithUser(true)
                .build();
    }

    /**
     * Ensure {@link WifiNetworkSuggestion.Builder#build()} throws an exception
     * when {@link WifiNetworkSuggestion.Builder#setIsInitialAutoJoinEnabled(boolean)} to
     * false on a open network suggestion.
     */
    @Test(expected = IllegalStateException.class)
    public void testSetIsAutoJoinDisabledWithOpenNetwork() {
        new WifiNetworkSuggestion.Builder()
                .setSsid(TEST_SSID)
                .setIsInitialAutoJoinEnabled(false)
                .build();
    }

    /**
     * Ensure {@link WifiNetworkSuggestion.Builder#build()} throws an exception
     * when set both {@link WifiNetworkSuggestion.Builder#setIsInitialAutoJoinEnabled(boolean)}
     * and {@link WifiNetworkSuggestion.Builder#setCredentialSharedWithUser(boolean)} (boolean)}
     * to false on a network suggestion.
     */
    @Test(expected = IllegalStateException.class)
    public void testSetIsAutoJoinDisabledWithSecureNetworkNotSharedWithUser() {
        new WifiNetworkSuggestion.Builder()
                .setSsid(TEST_SSID)
                .setWpa2Passphrase(TEST_PRESHARED_KEY)
                .setCredentialSharedWithUser(false)
                .setIsInitialAutoJoinEnabled(false)
                .build();
    }
}