Merge "Add set untrusted API for networkSuggestion"

This commit is contained in:
Nate Jiang
2020-01-20 00:15:28 +00:00
committed by Android (Google) Code Review
5 changed files with 126 additions and 16 deletions

View File

@@ -30848,6 +30848,7 @@ package android.net.wifi {
field public static final String SCAN_RESULTS_AVAILABLE_ACTION = "android.net.wifi.SCAN_RESULTS";
field public static final int STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_DUPLICATE = 3; // 0x3
field public static final int STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_EXCEEDS_MAX_PER_APP = 4; // 0x4
field public static final int STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_NOT_ALLOWED = 6; // 0x6
field public static final int STATUS_NETWORK_SUGGESTIONS_ERROR_APP_DISALLOWED = 2; // 0x2
field public static final int STATUS_NETWORK_SUGGESTIONS_ERROR_INTERNAL = 1; // 0x1
field public static final int STATUS_NETWORK_SUGGESTIONS_ERROR_REMOVE_INVALID = 5; // 0x5
@@ -30965,6 +30966,7 @@ package android.net.wifi {
method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setPasspointConfig(@NonNull android.net.wifi.hotspot2.PasspointConfiguration);
method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setPriority(@IntRange(from=0) int);
method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setSsid(@NonNull String);
method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setUntrusted(boolean);
method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWapiEnterpriseConfig(@NonNull android.net.wifi.WifiEnterpriseConfig);
method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWapiPassphrase(@NonNull String);
method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWpa2EnterpriseConfig(@NonNull android.net.wifi.WifiEnterpriseConfig);

View File

@@ -938,8 +938,10 @@ public class WifiConfiguration implements Parcelable {
}
/**
* Indicate whther the network is trusted or not. Networks are considered trusted
* Indicate whether the network is trusted or not. Networks are considered trusted
* if the user explicitly allowed this network connection.
* This bit can be used by suggestion network, see
* {@link WifiNetworkSuggestion.Builder#setUnTrusted(boolean)}
* @hide
*/
public boolean trusted;

View File

@@ -193,6 +193,14 @@ public class WifiManager {
*/
public static final int STATUS_NETWORK_SUGGESTIONS_ERROR_REMOVE_INVALID = 5;
/**
* Reason code if one or more of the network suggestions added is not allowed.
*
* This error may be caused by suggestion is using SIM-based encryption method, but calling app
* is not carrier privileged.
*/
public static final int STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_NOT_ALLOWED = 6;
/** @hide */
@IntDef(prefix = { "STATUS_NETWORK_SUGGESTIONS_" }, value = {
STATUS_NETWORK_SUGGESTIONS_SUCCESS,
@@ -201,6 +209,7 @@ public class WifiManager {
STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_DUPLICATE,
STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_EXCEEDS_MAX_PER_APP,
STATUS_NETWORK_SUGGESTIONS_ERROR_REMOVE_INVALID,
STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_NOT_ALLOWED,
})
@Retention(RetentionPolicy.SOURCE)
public @interface NetworkSuggestionsStatusCode {}

View File

@@ -139,6 +139,11 @@ public final class WifiNetworkSuggestion implements Parcelable {
*/
private @Nullable WifiEnterpriseConfig mWapiEnterpriseConfig;
/**
* Whether this network will be brought up as untrusted (TRUSTED capability bit removed).
*/
private boolean mIsNetworkUntrusted;
public Builder() {
mSsid = null;
mBssid = null;
@@ -159,6 +164,7 @@ public final class WifiNetworkSuggestion implements Parcelable {
mCarrierId = TelephonyManager.UNKNOWN_CARRIER_ID;
mWapiPskPassphrase = null;
mWapiEnterpriseConfig = null;
mIsNetworkUntrusted = false;
}
/**
@@ -468,6 +474,27 @@ public final class WifiNetworkSuggestion implements Parcelable {
return this;
}
/**
* Specifies whether the system will bring up the network (if selected) as untrusted. An
* untrusted network has its {@link android.net.NetworkCapabilities#NET_CAPABILITY_TRUSTED}
* capability removed. The 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). The connectivity service may use this information to influence the overall
* network configuration of the device.
* <p>
* <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>
*
* @param isUntrusted Boolean indicating whether the network should be brought up untrusted
* (if true) or trusted (if false).
* @return Instance of {@link Builder} to enable chaining of the builder method.
*/
public @NonNull Builder setUntrusted(boolean isUntrusted) {
mIsNetworkUntrusted = isUntrusted;
return this;
}
private void setSecurityParamsInWifiConfiguration(
@NonNull WifiConfiguration configuration) {
if (!TextUtils.isEmpty(mWpa2PskPassphrase)) { // WPA-PSK network.
@@ -546,6 +573,7 @@ public final class WifiNetworkSuggestion implements Parcelable {
wifiConfiguration.meteredOverride =
mIsMetered ? WifiConfiguration.METERED_OVERRIDE_METERED
: WifiConfiguration.METERED_OVERRIDE_NONE;
wifiConfiguration.trusted = !mIsNetworkUntrusted;
mPasspointConfiguration.setCarrierId(mCarrierId);
return wifiConfiguration;
}
@@ -641,13 +669,22 @@ public final class WifiNetworkSuggestion implements Parcelable {
+ "setCredentialSharedWithUser and "
+ "setIsAutoJoinEnabled set to false");
}
if (mIsNetworkUntrusted) {
if (mIsSharedWithUserSet && mIsSharedWithUser) {
throw new IllegalStateException("Should not be both"
+ "setCredentialSharedWithUser and +"
+ "setIsNetworkAsUntrusted to true");
}
mIsSharedWithUser = false;
}
return new WifiNetworkSuggestion(
wifiConfiguration,
mPasspointConfiguration,
mIsAppInteractionRequired,
mIsUserInteractionRequired,
mIsSharedWithUser,
mIsInitialAutoJoinEnabled);
mIsInitialAutoJoinEnabled,
mIsNetworkUntrusted);
}
}
@@ -688,6 +725,13 @@ public final class WifiNetworkSuggestion implements Parcelable {
*/
public final boolean isInitialAutoJoinEnabled;
/**
* Whether this network will be brought up as untrusted (TRUSTED capability bit removed).
* @hide
*/
public final boolean isNetworkUntrusted;
/** @hide */
public WifiNetworkSuggestion() {
this.wifiConfiguration = null;
@@ -696,6 +740,7 @@ public final class WifiNetworkSuggestion implements Parcelable {
this.isUserInteractionRequired = false;
this.isUserAllowedToManuallyConnect = true;
this.isInitialAutoJoinEnabled = true;
this.isNetworkUntrusted = false;
}
/** @hide */
@@ -704,7 +749,8 @@ public final class WifiNetworkSuggestion implements Parcelable {
boolean isAppInteractionRequired,
boolean isUserInteractionRequired,
boolean isUserAllowedToManuallyConnect,
boolean isInitialAutoJoinEnabled) {
boolean isInitialAutoJoinEnabled,
boolean isNetworkUntrusted) {
checkNotNull(networkConfiguration);
this.wifiConfiguration = networkConfiguration;
this.passpointConfiguration = passpointConfiguration;
@@ -713,6 +759,7 @@ public final class WifiNetworkSuggestion implements Parcelable {
this.isUserInteractionRequired = isUserInteractionRequired;
this.isUserAllowedToManuallyConnect = isUserAllowedToManuallyConnect;
this.isInitialAutoJoinEnabled = isInitialAutoJoinEnabled;
this.isNetworkUntrusted = isNetworkUntrusted;
}
public static final @NonNull Creator<WifiNetworkSuggestion> CREATOR =
@@ -725,7 +772,8 @@ public final class WifiNetworkSuggestion implements Parcelable {
in.readBoolean(), // isAppInteractionRequired
in.readBoolean(), // isUserInteractionRequired
in.readBoolean(), // isSharedCredentialWithUser
in.readBoolean() // isAutoJoinEnabled
in.readBoolean(), // isAutoJoinEnabled
in.readBoolean()
);
}
@@ -748,6 +796,7 @@ public final class WifiNetworkSuggestion implements Parcelable {
dest.writeBoolean(isUserInteractionRequired);
dest.writeBoolean(isUserAllowedToManuallyConnect);
dest.writeBoolean(isInitialAutoJoinEnabled);
dest.writeBoolean(isNetworkUntrusted);
}
@Override
@@ -787,8 +836,9 @@ public final class WifiNetworkSuggestion implements Parcelable {
.append(", FQDN=").append(wifiConfiguration.FQDN)
.append(", isAppInteractionRequired=").append(isAppInteractionRequired)
.append(", isUserInteractionRequired=").append(isUserInteractionRequired)
.append(", isUserAllowedToManuallyConnect=").append(isUserAllowedToManuallyConnect)
.append(", isCredentialSharedWithUser=").append(isUserAllowedToManuallyConnect)
.append(", isInitialAutoJoinEnabled=").append(isInitialAutoJoinEnabled)
.append(", isUnTrusted=").append(isNetworkUntrusted)
.append(" ]");
return sb.toString();
}

View File

@@ -532,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, false);
configuration, null, false, true, true, true, false);
Parcel parcelW = Parcel.obtain();
suggestion.writeToParcel(parcelW, 0);
@@ -603,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, true);
new WifiNetworkSuggestion(configuration, null, true, false, true, true, false);
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, false);
new WifiNetworkSuggestion(configuration1, null, false, true, true, true, false);
assertEquals(suggestion, suggestion1);
assertEquals(suggestion.hashCode(), suggestion1.hashCode());
@@ -626,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, false);
new WifiNetworkSuggestion(configuration, null, false, false, true, 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, false);
new WifiNetworkSuggestion(configuration1, null, false, false, true, true, false);
assertNotEquals(suggestion, suggestion1);
}
@@ -648,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, true);
new WifiNetworkSuggestion(configuration, null, false, false, true, true, false);
WifiConfiguration configuration1 = new WifiConfiguration();
configuration1.SSID = TEST_SSID;
configuration1.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
WifiNetworkSuggestion suggestion1 =
new WifiNetworkSuggestion(configuration1, null, false, false, true, true);
new WifiNetworkSuggestion(configuration1, null, false, false, true, true, false);
assertNotEquals(suggestion, suggestion1);
}
@@ -669,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, true);
new WifiNetworkSuggestion(configuration, null, false, false, true, true, false);
WifiConfiguration configuration1 = new WifiConfiguration();
configuration1.SSID = TEST_SSID;
configuration1.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
WifiNetworkSuggestion suggestion1 =
new WifiNetworkSuggestion(configuration1, null, false, false, true, true);
new WifiNetworkSuggestion(configuration1, null, false, false, true, true, false);
assertNotEquals(suggestion, suggestion1);
}
@@ -723,8 +723,8 @@ public class WifiNetworkSuggestionTest {
* true on a open network suggestion.
*/
@Test(expected = IllegalStateException.class)
public void testSetIsUserAllowedToManuallyConnectToWithOpenNetwork() {
new WifiNetworkSuggestion.Builder()
public void testSetCredentialSharedWithUserWithOpenNetwork() {
WifiNetworkSuggestion suggestion = new WifiNetworkSuggestion.Builder()
.setSsid(TEST_SSID)
.setCredentialSharedWithUser(true)
.build();
@@ -759,6 +759,53 @@ public class WifiNetworkSuggestionTest {
.build();
}
/**
* Validate {@link WifiNetworkSuggestion.Builder#setCredentialSharedWithUser(boolean)} set the
* correct value to the WifiConfiguration.
*/
@Test
public void testSetIsNetworkAsUntrusted() {
WifiNetworkSuggestion suggestion = new WifiNetworkSuggestion.Builder()
.setSsid(TEST_SSID)
.setWpa2Passphrase(TEST_PRESHARED_KEY)
.setUntrusted(true)
.build();
assertTrue(suggestion.isNetworkUntrusted);
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 testSetIsNetworkAsUntrustedOnPasspointNetwork() {
PasspointConfiguration passpointConfiguration = PasspointTestUtils.createConfig();
WifiNetworkSuggestion suggestion = new WifiNetworkSuggestion.Builder()
.setPasspointConfig(passpointConfiguration)
.setUntrusted(true)
.build();
assertTrue(suggestion.isNetworkUntrusted);
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
* together.
*/
@Test(expected = IllegalStateException.class)
public void testSetCredentialSharedWithUserWithSetIsNetworkAsUntrusted() {
new WifiNetworkSuggestion.Builder()
.setSsid(TEST_SSID)
.setWpa2Passphrase(TEST_PRESHARED_KEY)
.setCredentialSharedWithUser(true)
.setUntrusted(true)
.build();
}
/**
* Ensure {@link WifiNetworkSuggestion.Builder#build()} throws an exception
* when set both {@link WifiNetworkSuggestion.Builder#setIsInitialAutoJoinEnabled(boolean)}