diff options
| -rw-r--r-- | api/system-current.txt | 5 | ||||
| -rw-r--r-- | wifi/api/system-current.txt | 5 | ||||
| -rw-r--r-- | wifi/java/android/net/wifi/WifiConfiguration.java | 20 | ||||
| -rw-r--r-- | wifi/java/android/net/wifi/WifiInfo.java | 42 | ||||
| -rw-r--r-- | wifi/java/android/net/wifi/WifiNetworkSuggestion.java | 85 | ||||
| -rw-r--r-- | wifi/tests/src/android/net/wifi/WifiConfigurationTest.java | 33 | ||||
| -rw-r--r-- | wifi/tests/src/android/net/wifi/WifiInfoTest.java | 44 | ||||
| -rw-r--r-- | wifi/tests/src/android/net/wifi/WifiNetworkSuggestionTest.java | 81 |
8 files changed, 307 insertions, 8 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index 87f3f4c65520..5ef042f062b1 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -7676,8 +7676,11 @@ package android.net.wifi { method public double getSuccessfulRxPacketsPerSecond(); method public double getSuccessfulTxPacketsPerSecond(); method public boolean isEphemeral(); + method public boolean isOemPaid(); + method public boolean isOemPrivate(); method public boolean isOsuAp(); method public boolean isPasspointAp(); + method public boolean isTrusted(); method @Nullable public static String sanitizeSsid(@Nullable String); field public static final String DEFAULT_MAC_ADDRESS = "02:00:00:00:00:00"; field public static final int INVALID_RSSI = -127; // 0xffffff81 @@ -7903,11 +7906,13 @@ package android.net.wifi { public final class WifiNetworkSuggestion implements android.os.Parcelable { method @NonNull public android.net.wifi.WifiConfiguration getWifiConfiguration(); method public boolean isOemPaid(); + method public boolean isOemPrivate(); } public static final class WifiNetworkSuggestion.Builder { method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_CARRIER_PROVISIONING) public android.net.wifi.WifiNetworkSuggestion.Builder setCarrierId(int); method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setOemPaid(boolean); + method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setOemPrivate(boolean); } public class WifiScanner { diff --git a/wifi/api/system-current.txt b/wifi/api/system-current.txt index fa99da786ae5..edbd46300191 100644 --- a/wifi/api/system-current.txt +++ b/wifi/api/system-current.txt @@ -428,8 +428,11 @@ package android.net.wifi { method public double getSuccessfulRxPacketsPerSecond(); method public double getSuccessfulTxPacketsPerSecond(); method public boolean isEphemeral(); + method public boolean isOemPaid(); + method public boolean isOemPrivate(); method public boolean isOsuAp(); method public boolean isPasspointAp(); + method public boolean isTrusted(); method @Nullable public static String sanitizeSsid(@Nullable String); field public static final String DEFAULT_MAC_ADDRESS = "02:00:00:00:00:00"; field public static final int INVALID_RSSI = -127; // 0xffffff81 @@ -618,11 +621,13 @@ package android.net.wifi { public final class WifiNetworkSuggestion implements android.os.Parcelable { method @NonNull public android.net.wifi.WifiConfiguration getWifiConfiguration(); method public boolean isOemPaid(); + method public boolean isOemPrivate(); } public static final class WifiNetworkSuggestion.Builder { method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_CARRIER_PROVISIONING) public android.net.wifi.WifiNetworkSuggestion.Builder setCarrierId(int); method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setOemPaid(boolean); + method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setOemPrivate(boolean); } public class WifiScanner { diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java index 9ca64d2ae2ef..8103ff717ef3 100644 --- a/wifi/java/android/net/wifi/WifiConfiguration.java +++ b/wifi/java/android/net/wifi/WifiConfiguration.java @@ -1011,6 +1011,17 @@ public class WifiConfiguration implements Parcelable { */ public boolean oemPaid; + + /** + * Indicate whether the network is oem private or not. Networks are considered oem private + * if the corresponding connection is only available to system apps. + * + * This bit can only be used by suggestion network, see + * {@link WifiNetworkSuggestion.Builder#setOemPrivate(boolean)} + * @hide + */ + public boolean oemPrivate; + /** * True if this Wifi configuration is created from a {@link WifiNetworkSuggestion}, * false otherwise. @@ -2249,6 +2260,7 @@ public class WifiConfiguration implements Parcelable { osu = false; trusted = true; // Networks are considered trusted by default. oemPaid = false; + oemPrivate = false; fromWifiNetworkSuggestion = false; fromWifiNetworkSpecifier = false; meteredHint = false; @@ -2372,13 +2384,14 @@ public class WifiConfiguration implements Parcelable { if (this.osu) sbuf.append(" osu"); if (this.trusted) sbuf.append(" trusted"); if (this.oemPaid) sbuf.append(" oemPaid"); + if (this.oemPrivate) sbuf.append(" oemPrivate"); if (this.fromWifiNetworkSuggestion) sbuf.append(" fromWifiNetworkSuggestion"); if (this.fromWifiNetworkSpecifier) sbuf.append(" fromWifiNetworkSpecifier"); if (this.meteredHint) sbuf.append(" meteredHint"); if (this.useExternalScores) sbuf.append(" useExternalScores"); if (this.validatedInternetAccess || this.ephemeral || this.trusted || this.oemPaid - || this.fromWifiNetworkSuggestion || this.fromWifiNetworkSpecifier - || this.meteredHint || this.useExternalScores) { + || this.oemPrivate || this.fromWifiNetworkSuggestion + || this.fromWifiNetworkSpecifier || this.meteredHint || this.useExternalScores) { sbuf.append("\n"); } if (this.meteredOverride != METERED_OVERRIDE_NONE) { @@ -2943,6 +2956,7 @@ public class WifiConfiguration implements Parcelable { osu = source.osu; trusted = source.trusted; oemPaid = source.oemPaid; + oemPrivate = source.oemPrivate; fromWifiNetworkSuggestion = source.fromWifiNetworkSuggestion; fromWifiNetworkSpecifier = source.fromWifiNetworkSpecifier; meteredHint = source.meteredHint; @@ -3024,6 +3038,7 @@ public class WifiConfiguration implements Parcelable { dest.writeInt(ephemeral ? 1 : 0); dest.writeInt(trusted ? 1 : 0); dest.writeInt(oemPaid ? 1 : 0); + dest.writeInt(oemPrivate ? 1 : 0); dest.writeInt(fromWifiNetworkSuggestion ? 1 : 0); dest.writeInt(fromWifiNetworkSpecifier ? 1 : 0); dest.writeInt(meteredHint ? 1 : 0); @@ -3102,6 +3117,7 @@ public class WifiConfiguration implements Parcelable { config.ephemeral = in.readInt() != 0; config.trusted = in.readInt() != 0; config.oemPaid = in.readInt() != 0; + config.oemPrivate = in.readInt() != 0; config.fromWifiNetworkSuggestion = in.readInt() != 0; config.fromWifiNetworkSpecifier = in.readInt() != 0; config.meteredHint = in.readInt() != 0; diff --git a/wifi/java/android/net/wifi/WifiInfo.java b/wifi/java/android/net/wifi/WifiInfo.java index fe5002eb8854..774c043136e7 100644 --- a/wifi/java/android/net/wifi/WifiInfo.java +++ b/wifi/java/android/net/wifi/WifiInfo.java @@ -164,6 +164,11 @@ public class WifiInfo implements Parcelable { private boolean mOemPaid; /** + * Whether the network is oem private or not. + */ + private boolean mOemPrivate; + + /** * OSU (Online Sign Up) AP for Passpoint R2. */ private boolean mOsuAp; @@ -327,6 +332,9 @@ public class WifiInfo implements Parcelable { setFrequency(-1); setMeteredHint(false); setEphemeral(false); + setTrusted(false); + setOemPaid(false); + setOemPrivate(false); setOsuAp(false); setRequestingPackageName(null); setFQDN(null); @@ -363,7 +371,8 @@ public class WifiInfo implements Parcelable { mMeteredHint = source.mMeteredHint; mEphemeral = source.mEphemeral; mTrusted = source.mTrusted; - mTrusted = source.mOemPaid; + mOemPaid = source.mOemPaid; + mOemPrivate = source.mOemPrivate; mRequestingPackageName = source.mRequestingPackageName; mOsuAp = source.mOsuAp; @@ -722,7 +731,12 @@ public class WifiInfo implements Parcelable { mTrusted = trusted; } - /** {@hide} */ + /** + * Returns true if the current Wifi network is a trusted network, false otherwise. + * @see WifiNetworkSuggestion.Builder#setUntrusted(boolean). + * {@hide} + */ + @SystemApi public boolean isTrusted() { return mTrusted; } @@ -732,12 +746,32 @@ public class WifiInfo implements Parcelable { mOemPaid = oemPaid; } - /** {@hide} */ + /** + * Returns true if the current Wifi network is an oem paid network, false otherwise. + * @see WifiNetworkSuggestion.Builder#setOemPaid(boolean). + * {@hide} + */ + @SystemApi public boolean isOemPaid() { return mOemPaid; } /** {@hide} */ + public void setOemPrivate(boolean oemPrivate) { + mOemPrivate = oemPrivate; + } + + /** + * Returns true if the current Wifi network is an oem private network, false otherwise. + * @see WifiNetworkSuggestion.Builder#setOemPrivate(boolean). + * {@hide} + */ + @SystemApi + public boolean isOemPrivate() { + return mOemPrivate; + } + + /** {@hide} */ public void setOsuAp(boolean osuAp) { mOsuAp = osuAp; } @@ -975,6 +1009,7 @@ public class WifiInfo implements Parcelable { dest.writeInt(mEphemeral ? 1 : 0); dest.writeInt(mTrusted ? 1 : 0); dest.writeInt(mOemPaid ? 1 : 0); + dest.writeInt(mOemPrivate ? 1 : 0); dest.writeInt(score); dest.writeLong(txSuccess); dest.writeDouble(mSuccessfulTxPacketsPerSecond); @@ -1021,6 +1056,7 @@ public class WifiInfo implements Parcelable { info.mEphemeral = in.readInt() != 0; info.mTrusted = in.readInt() != 0; info.mOemPaid = in.readInt() != 0; + info.mOemPrivate = in.readInt() != 0; info.score = in.readInt(); info.txSuccess = in.readLong(); info.mSuccessfulTxPacketsPerSecond = in.readDouble(); diff --git a/wifi/java/android/net/wifi/WifiNetworkSuggestion.java b/wifi/java/android/net/wifi/WifiNetworkSuggestion.java index acae218b74e0..dc6ec907ab95 100644 --- a/wifi/java/android/net/wifi/WifiNetworkSuggestion.java +++ b/wifi/java/android/net/wifi/WifiNetworkSuggestion.java @@ -25,6 +25,7 @@ import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.net.MacAddress; import android.net.NetworkCapabilities; +import android.net.NetworkRequest; import android.net.wifi.hotspot2.PasspointConfiguration; import android.os.Parcel; import android.os.Parcelable; @@ -180,6 +181,12 @@ public final class WifiNetworkSuggestion implements Parcelable { private boolean mIsNetworkOemPaid; /** + * Whether this network will be brought up as OEM private (OEM_PRIVATE capability bit + * added). + */ + private boolean mIsNetworkOemPrivate; + + /** * Whether this network will use enhanced MAC randomization. */ private boolean mIsEnhancedMacRandomizationEnabled; @@ -206,6 +213,7 @@ public final class WifiNetworkSuggestion implements Parcelable { mWapiEnterpriseConfig = null; mIsNetworkUntrusted = false; mIsNetworkOemPaid = false; + mIsNetworkOemPrivate = false; mPriorityGroup = 0; mIsEnhancedMacRandomizationEnabled = false; mSubscriptionId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; @@ -667,6 +675,9 @@ public final class WifiNetworkSuggestion implements Parcelable { * reduce it). The connectivity service may use this information to influence the overall * network configuration of the device. * <p> + * <li> These suggestions are only considered for network selection if a + * {@link NetworkRequest} without {@link NetworkCapabilities#NET_CAPABILITY_TRUSTED} + * capability is filed. * <li> An untrusted network's credentials may not be shared with the user using * {@link #setCredentialSharedWithUser(boolean)}.</li> * <li> If not set, defaults to false (i.e. network is trusted).</li> @@ -688,7 +699,7 @@ public final class WifiNetworkSuggestion implements Parcelable { * <li>The connectivity service may use this information to influence the overall * network configuration of the device. This network is typically only available to system * apps. - * <li>On devices which support only 1 concurrent connection (indicated via + * <li>On devices which do not support concurrent connection (indicated via * {@link WifiManager#isMultiStaConcurrencySupported()}, Wi-Fi network selection process may * use this information to influence priority of the suggested network for Wi-Fi network * selection (most likely to reduce it). @@ -699,6 +710,13 @@ public final class WifiNetworkSuggestion implements Parcelable { * <p> * <li> An OEM paid network's credentials may not be shared with the user using * {@link #setCredentialSharedWithUser(boolean)}.</li> + * <li> These suggestions are only considered for network selection if a + * {@link NetworkRequest} with {@link NetworkCapabilities#NET_CAPABILITY_OEM_PAID} + * capability is filed. + * <li> Each suggestion can have both {@link #setOemPaid(boolean)} and + * {@link #setOemPrivate(boolean)} set if the app wants these suggestions considered + * for creating either an OEM paid network or OEM private network determined based on + * the {@link NetworkRequest} that is active. * <li> If not set, defaults to false (i.e. network is not OEM paid).</li> * * @param isOemPaid Boolean indicating whether the network should be brought up as OEM paid @@ -715,6 +733,48 @@ public final class WifiNetworkSuggestion implements Parcelable { return this; } + /** + * Specifies whether the system will bring up the network (if selected) as OEM private. An + * OEM private network has {@link NetworkCapabilities#NET_CAPABILITY_OEM_PRIVATE} capability + * added. + * Note: + * <li>The connectivity service may use this information to influence the overall + * network configuration of the device. This network is typically only available to system + * apps. + * <li>On devices which do not support concurrent connection (indicated via + * {@link WifiManager#isMultiStaConcurrencySupported()}, Wi-Fi network selection process may + * use this information to influence priority of the suggested network for Wi-Fi network + * selection (most likely to reduce it). + * <li>On devices which support more than 1 concurrent connections (indicated via + * {@link WifiManager#isMultiStaConcurrencySupported()}, these OEM private networks will be + * brought up as a secondary concurrent connection (primary connection will be used + * for networks available to the user and all apps. + * <p> + * <li> An OEM private network's credentials may not be shared with the user using + * {@link #setCredentialSharedWithUser(boolean)}.</li> + * <li> These suggestions are only considered for network selection if a + * {@link NetworkRequest} with {@link NetworkCapabilities#NET_CAPABILITY_OEM_PRIVATE} + * capability is filed. + * <li> Each suggestion can have both {@link #setOemPaid(boolean)} and + * {@link #setOemPrivate(boolean)} set if the app wants these suggestions considered + * for creating either an OEM paid network or OEM private network determined based on + * the {@link NetworkRequest} that is active. + * <li> If not set, defaults to false (i.e. network is not OEM private).</li> + * + * @param isOemPrivate Boolean indicating whether the network should be brought up as OEM + * private (if true) or not OEM private (if false). + * @return Instance of {@link Builder} to enable chaining of the builder method. + * @hide + */ + @SystemApi + public @NonNull Builder setOemPrivate(boolean isOemPrivate) { + if (!SdkLevel.isAtLeastS()) { + throw new UnsupportedOperationException(); + } + mIsNetworkOemPrivate = isOemPrivate; + return this; + } + private void setSecurityParamsInWifiConfiguration( @NonNull WifiConfiguration configuration) { if (!TextUtils.isEmpty(mWpa2PskPassphrase)) { // WPA-PSK network. @@ -786,6 +846,7 @@ public final class WifiNetworkSuggestion implements Parcelable { wifiConfiguration.carrierId = mCarrierId; wifiConfiguration.trusted = !mIsNetworkUntrusted; wifiConfiguration.oemPaid = mIsNetworkOemPaid; + wifiConfiguration.oemPrivate = mIsNetworkOemPrivate; wifiConfiguration.macRandomizationSetting = mIsEnhancedMacRandomizationEnabled ? WifiConfiguration.RANDOMIZATION_ENHANCED : WifiConfiguration.RANDOMIZATION_PERSISTENT; @@ -819,6 +880,7 @@ public final class WifiNetworkSuggestion implements Parcelable { wifiConfiguration.meteredOverride = mMeteredOverride; wifiConfiguration.trusted = !mIsNetworkUntrusted; wifiConfiguration.oemPaid = mIsNetworkOemPaid; + wifiConfiguration.oemPrivate = mIsNetworkOemPrivate; wifiConfiguration.subscriptionId = mSubscriptionId; mPasspointConfiguration.setCarrierId(mCarrierId); mPasspointConfiguration.setSubscriptionId(mSubscriptionId); @@ -938,6 +1000,14 @@ public final class WifiNetworkSuggestion implements Parcelable { } mIsSharedWithUser = false; } + if (mIsNetworkOemPrivate) { + if (mIsSharedWithUserSet && mIsSharedWithUser) { + throw new IllegalStateException("Should not be both" + + "setCredentialSharedWithUser and +" + + "setOemPrivate to true"); + } + mIsSharedWithUser = false; + } return new WifiNetworkSuggestion( wifiConfiguration, mPasspointConfiguration, @@ -1105,6 +1175,7 @@ public final class WifiNetworkSuggestion implements Parcelable { .append(", isInitialAutoJoinEnabled=").append(isInitialAutoJoinEnabled) .append(", isUnTrusted=").append(!wifiConfiguration.trusted) .append(", isOemPaid=").append(wifiConfiguration.oemPaid) + .append(", isOemPrivate=").append(wifiConfiguration.oemPrivate) .append(", priorityGroup=").append(priorityGroup) .append(" ]"); return sb.toString(); @@ -1212,6 +1283,18 @@ public final class WifiNetworkSuggestion implements Parcelable { } /** + * @see Builder#setOemPrivate(boolean) + * @hide + */ + @SystemApi + public boolean isOemPrivate() { + if (!SdkLevel.isAtLeastS()) { + throw new UnsupportedOperationException(); + } + return wifiConfiguration.oemPrivate; + } + + /** * Get the WifiEnterpriseConfig, or null if unset. * @see Builder#setWapiEnterpriseConfig(WifiEnterpriseConfig) * @see Builder#setWpa2EnterpriseConfig(WifiEnterpriseConfig) diff --git a/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java b/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java index b82c67b658aa..f09c37d811f9 100644 --- a/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java +++ b/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java @@ -69,6 +69,7 @@ public class WifiConfigurationTest { config.setPasspointManagementObjectTree(cookie); config.trusted = false; config.oemPaid = true; + config.oemPrivate = true; config.updateIdentifier = "1234"; config.fromWifiNetworkSpecifier = true; config.fromWifiNetworkSuggestion = true; @@ -91,8 +92,10 @@ public class WifiConfigurationTest { assertEquals(macBeforeParcel, reconfig.getRandomizedMacAddress()); assertEquals(config.updateIdentifier, reconfig.updateIdentifier); assertFalse(reconfig.trusted); - assertTrue(config.fromWifiNetworkSpecifier); - assertTrue(config.fromWifiNetworkSuggestion); + assertTrue(reconfig.fromWifiNetworkSpecifier); + assertTrue(reconfig.fromWifiNetworkSuggestion); + assertTrue(reconfig.oemPaid); + assertTrue(reconfig.oemPrivate); Parcel parcelWW = Parcel.obtain(); reconfig.writeToParcel(parcelWW, 0); @@ -103,6 +106,32 @@ public class WifiConfigurationTest { } @Test + public void testWifiConfigurationCopyConstructor() { + WifiConfiguration config = new WifiConfiguration(); + config.trusted = false; + config.oemPaid = true; + config.oemPrivate = true; + config.updateIdentifier = "1234"; + config.fromWifiNetworkSpecifier = true; + config.fromWifiNetworkSuggestion = true; + config.setRandomizedMacAddress(MacAddressUtils.createRandomUnicastAddress()); + MacAddress macBeforeParcel = config.getRandomizedMacAddress(); + config.subscriptionId = 1; + config.carrierId = 1189; + + WifiConfiguration reconfig = new WifiConfiguration(config); + + // lacking a useful config.equals, check two fields near the end. + assertEquals(macBeforeParcel, reconfig.getRandomizedMacAddress()); + assertEquals(config.updateIdentifier, reconfig.updateIdentifier); + assertFalse(reconfig.trusted); + assertTrue(reconfig.fromWifiNetworkSpecifier); + assertTrue(reconfig.fromWifiNetworkSuggestion); + assertTrue(reconfig.oemPaid); + assertTrue(reconfig.oemPrivate); + } + + @Test public void testIsOpenNetwork_IsOpen_NullWepKeys() { WifiConfiguration config = new WifiConfiguration(); config.allowedKeyManagement.clear(); diff --git a/wifi/tests/src/android/net/wifi/WifiInfoTest.java b/wifi/tests/src/android/net/wifi/WifiInfoTest.java index 06ae13a21e38..c6faf66140e2 100644 --- a/wifi/tests/src/android/net/wifi/WifiInfoTest.java +++ b/wifi/tests/src/android/net/wifi/WifiInfoTest.java @@ -17,6 +17,7 @@ package android.net.wifi; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertTrue; @@ -62,6 +63,7 @@ public class WifiInfoTest { writeWifiInfo.rxSuccess = TEST_RX_SUCCESS; writeWifiInfo.setTrusted(true); writeWifiInfo.setOemPaid(true); + writeWifiInfo.setOemPrivate(true); writeWifiInfo.setOsuAp(true); writeWifiInfo.setFQDN(TEST_FQDN); writeWifiInfo.setProviderFriendlyName(TEST_PROVIDER_NAME); @@ -83,6 +85,46 @@ public class WifiInfoTest { assertEquals(TEST_RX_SUCCESS, readWifiInfo.rxSuccess); assertTrue(readWifiInfo.isTrusted()); assertTrue(readWifiInfo.isOemPaid()); + assertTrue(readWifiInfo.isOemPrivate()); + assertTrue(readWifiInfo.isOsuAp()); + assertTrue(readWifiInfo.isPasspointAp()); + assertEquals(TEST_PACKAGE_NAME, readWifiInfo.getRequestingPackageName()); + assertEquals(TEST_FQDN, readWifiInfo.getPasspointFqdn()); + assertEquals(TEST_PROVIDER_NAME, readWifiInfo.getPasspointProviderFriendlyName()); + assertEquals(TEST_WIFI_STANDARD, readWifiInfo.getWifiStandard()); + assertEquals(TEST_MAX_SUPPORTED_TX_LINK_SPEED_MBPS, + readWifiInfo.getMaxSupportedTxLinkSpeedMbps()); + assertEquals(TEST_MAX_SUPPORTED_RX_LINK_SPEED_MBPS, + readWifiInfo.getMaxSupportedRxLinkSpeedMbps()); + } + + @Test + public void testWifiInfoCopyConstructor() throws Exception { + WifiInfo writeWifiInfo = new WifiInfo(); + writeWifiInfo.txSuccess = TEST_TX_SUCCESS; + writeWifiInfo.txRetries = TEST_TX_RETRIES; + writeWifiInfo.txBad = TEST_TX_BAD; + writeWifiInfo.rxSuccess = TEST_RX_SUCCESS; + writeWifiInfo.setTrusted(true); + writeWifiInfo.setOemPaid(true); + writeWifiInfo.setOemPrivate(true); + writeWifiInfo.setOsuAp(true); + writeWifiInfo.setFQDN(TEST_FQDN); + writeWifiInfo.setProviderFriendlyName(TEST_PROVIDER_NAME); + writeWifiInfo.setRequestingPackageName(TEST_PACKAGE_NAME); + writeWifiInfo.setWifiStandard(TEST_WIFI_STANDARD); + writeWifiInfo.setMaxSupportedTxLinkSpeedMbps(TEST_MAX_SUPPORTED_TX_LINK_SPEED_MBPS); + writeWifiInfo.setMaxSupportedRxLinkSpeedMbps(TEST_MAX_SUPPORTED_RX_LINK_SPEED_MBPS); + + WifiInfo readWifiInfo = new WifiInfo(writeWifiInfo); + + assertEquals(TEST_TX_SUCCESS, readWifiInfo.txSuccess); + assertEquals(TEST_TX_RETRIES, readWifiInfo.txRetries); + assertEquals(TEST_TX_BAD, readWifiInfo.txBad); + assertEquals(TEST_RX_SUCCESS, readWifiInfo.rxSuccess); + assertTrue(readWifiInfo.isTrusted()); + assertTrue(readWifiInfo.isOemPaid()); + assertTrue(readWifiInfo.isOemPrivate()); assertTrue(readWifiInfo.isOsuAp()); assertTrue(readWifiInfo.isPasspointAp()); assertEquals(TEST_PACKAGE_NAME, readWifiInfo.getRequestingPackageName()); @@ -110,6 +152,8 @@ public class WifiInfoTest { assertEquals(WifiManager.UNKNOWN_SSID, wifiInfo.getSSID()); assertEquals(null, wifiInfo.getBSSID()); assertEquals(-1, wifiInfo.getNetworkId()); + assertFalse(wifiInfo.isOemPaid()); + assertFalse(wifiInfo.isOemPrivate()); } /** diff --git a/wifi/tests/src/android/net/wifi/WifiNetworkSuggestionTest.java b/wifi/tests/src/android/net/wifi/WifiNetworkSuggestionTest.java index 56e79983817f..870ff0a26d58 100644 --- a/wifi/tests/src/android/net/wifi/WifiNetworkSuggestionTest.java +++ b/wifi/tests/src/android/net/wifi/WifiNetworkSuggestionTest.java @@ -223,6 +223,34 @@ public class WifiNetworkSuggestionTest { /** * Validate correctness of WifiNetworkSuggestion object created by + * {@link WifiNetworkSuggestion.Builder#build()} for OWE network. + */ + @Test + public void testWifiNetworkSuggestionBuilderForOemPrivateEnhancedOpenNetworkWithBssid() { + assumeTrue(SdkLevel.isAtLeastS()); + + WifiNetworkSuggestion suggestion = new WifiNetworkSuggestion.Builder() + .setSsid(TEST_SSID) + .setBssid(MacAddress.fromString(TEST_BSSID)) + .setOemPrivate(true) + .setIsEnhancedOpen(true) + .build(); + + assertEquals("\"" + TEST_SSID + "\"", suggestion.wifiConfiguration.SSID); + assertEquals(TEST_BSSID, suggestion.wifiConfiguration.BSSID); + assertTrue(suggestion.wifiConfiguration.allowedKeyManagement + .get(WifiConfiguration.KeyMgmt.OWE)); + assertNull(suggestion.wifiConfiguration.preSharedKey); + assertTrue(suggestion.wifiConfiguration.requirePmf); + assertTrue(suggestion.wifiConfiguration.oemPrivate); + assertTrue(suggestion.isOemPrivate()); + assertFalse(suggestion.isUserAllowedToManuallyConnect); + assertTrue(suggestion.isInitialAutoJoinEnabled); + assertNull(suggestion.getEnterpriseConfig()); + } + + /** + * Validate correctness of WifiNetworkSuggestion object created by * {@link WifiNetworkSuggestion.Builder#build()} for SAE network. */ @Test @@ -1285,6 +1313,41 @@ public class WifiNetworkSuggestionTest { } /** + * Validate {@link WifiNetworkSuggestion.Builder#setCredentialSharedWithUser(boolean)} set the + * correct value to the WifiConfiguration. + */ + @Test + public void testSetIsNetworkAsOemPrivate() { + assumeTrue(SdkLevel.isAtLeastS()); + + WifiNetworkSuggestion suggestion = new WifiNetworkSuggestion.Builder() + .setSsid(TEST_SSID) + .setWpa2Passphrase(TEST_PRESHARED_KEY) + .setOemPrivate(true) + .build(); + assertTrue(suggestion.isOemPrivate()); + assertFalse(suggestion.isUserAllowedToManuallyConnect); + } + + /** + * Validate {@link WifiNetworkSuggestion.Builder#setCredentialSharedWithUser(boolean)} set the + * correct value to the WifiConfiguration. + * Also the {@link WifiNetworkSuggestion#isUserAllowedToManuallyConnect} should be false; + */ + @Test + public void testSetIsNetworkAsOemPrivateOnPasspointNetwork() { + assumeTrue(SdkLevel.isAtLeastS()); + + PasspointConfiguration passpointConfiguration = PasspointTestUtils.createConfig(); + WifiNetworkSuggestion suggestion = new WifiNetworkSuggestion.Builder() + .setPasspointConfig(passpointConfiguration) + .setOemPrivate(true) + .build(); + assertTrue(suggestion.isOemPrivate()); + assertFalse(suggestion.isUserAllowedToManuallyConnect); + } + + /** * Ensure {@link WifiNetworkSuggestion.Builder#build()} throws an exception * when set {@link WifiNetworkSuggestion.Builder#setUntrusted(boolean)} to true and * set {@link WifiNetworkSuggestion.Builder#setCredentialSharedWithUser(boolean)} to true @@ -1320,6 +1383,24 @@ public class WifiNetworkSuggestionTest { /** * Ensure {@link WifiNetworkSuggestion.Builder#build()} throws an exception + * when set {@link WifiNetworkSuggestion.Builder#setOemPrivate(boolean)} to true and + * set {@link WifiNetworkSuggestion.Builder#setCredentialSharedWithUser(boolean)} to true + * together. + */ + @Test(expected = IllegalStateException.class) + public void testSetCredentialSharedWithUserWithSetIsNetworkAsOemPrivate() { + assumeTrue(SdkLevel.isAtLeastS()); + + new WifiNetworkSuggestion.Builder() + .setSsid(TEST_SSID) + .setWpa2Passphrase(TEST_PRESHARED_KEY) + .setCredentialSharedWithUser(true) + .setOemPrivate(true) + .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 passpoint suggestion. |