summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Quang Luong <qal@google.com> 2020-01-21 17:09:02 -0800
committer Quang Luong <qal@google.com> 2020-01-22 13:38:20 -0800
commit85f2342ed85a4e1a8f0934e72718ceae076eb6ae (patch)
treeac9d65840972ca26ee993361ea184891518408e9
parentae0c9546bfeab62dd7784bc66372dfc3b28cc02b (diff)
Allow set metered override setting for passpoint
Add API to set the metered override setting (METERED_OVERRIDE_NONE, METERED_OVERRIDE_METERED, METERED_OVERRIDE_UNMETERED) per passpoint profile. Bug: 131273033 Test: atest android.net.wifi Change-Id: I5eb2640b8fcf61031714c0a819c0cf1ed793416d
-rwxr-xr-xapi/system-current.txt2
-rw-r--r--wifi/java/android/net/wifi/IWifiManager.aidl2
-rw-r--r--wifi/java/android/net/wifi/WifiManager.java19
-rw-r--r--wifi/java/android/net/wifi/hotspot2/PasspointConfiguration.java45
-rw-r--r--wifi/java/com/android/server/wifi/BaseWifiService.java5
-rw-r--r--wifi/tests/src/android/net/wifi/WifiManagerTest.java11
-rw-r--r--wifi/tests/src/android/net/wifi/hotspot2/PasspointConfigurationTest.java3
7 files changed, 86 insertions, 1 deletions
diff --git a/api/system-current.txt b/api/system-current.txt
index e5cc38421708..aea9407e715b 100755
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -6744,6 +6744,7 @@ package android.net.wifi {
method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void save(@NonNull android.net.wifi.WifiConfiguration, @Nullable android.net.wifi.WifiManager.ActionListener);
method @RequiresPermission(android.Manifest.permission.WIFI_SET_DEVICE_MOBILITY_STATE) public void setDeviceMobilityState(int);
method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setMacRandomizationSettingPasspointEnabled(@NonNull String, boolean);
+ method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setMeteredOverridePasspoint(@NonNull String, int);
method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public boolean setSoftApConfiguration(@NonNull android.net.wifi.SoftApConfiguration);
method @Deprecated @RequiresPermission(android.Manifest.permission.CHANGE_WIFI_STATE) public boolean setWifiApConfiguration(android.net.wifi.WifiConfiguration);
method @RequiresPermission(android.Manifest.permission.WIFI_UPDATE_USABILITY_STATS_SCORE) public boolean setWifiConnectedNetworkScorer(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.WifiConnectedNetworkScorer);
@@ -7109,6 +7110,7 @@ package android.net.wifi.hotspot2 {
}
public final class PasspointConfiguration implements android.os.Parcelable {
+ method public int getMeteredOverride();
method public boolean isAutoJoinEnabled();
method public boolean isMacRandomizationEnabled();
}
diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl
index 0b5969a8999d..9ad11aad04f1 100644
--- a/wifi/java/android/net/wifi/IWifiManager.aidl
+++ b/wifi/java/android/net/wifi/IWifiManager.aidl
@@ -94,6 +94,8 @@ interface IWifiManager
void setMacRandomizationSettingPasspointEnabled(String fqdn, boolean enable);
+ void setMeteredOverridePasspoint(String fqdn, int meteredOverride);
+
boolean startScan(String packageName, String featureId);
List<android.net.wifi.ScanResult> getScanResults(String callingPackage, String callingFeatureId);
diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java
index c35303da9056..a27438779447 100644
--- a/wifi/java/android/net/wifi/WifiManager.java
+++ b/wifi/java/android/net/wifi/WifiManager.java
@@ -4317,6 +4317,25 @@ public class WifiManager {
}
/**
+ * Sets the user's choice of metered override for a Passpoint profile.
+ *
+ * @param fqdn the FQDN (fully qualified domain name) of the passpoint profile.
+ * @param meteredOverride One of three values: {@link WifiConfiguration#METERED_OVERRIDE_NONE},
+ * {@link WifiConfiguration#METERED_OVERRIDE_METERED},
+ * {@link WifiConfiguration#METERED_OVERRIDE_NOT_METERED}
+ * @hide
+ */
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
+ public void setMeteredOverridePasspoint(@NonNull String fqdn, int meteredOverride) {
+ try {
+ mService.setMeteredOverridePasspoint(fqdn, meteredOverride);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Disable an ephemeral network.
*
* @param ssid in the format of WifiConfiguration's SSID.
diff --git a/wifi/java/android/net/wifi/hotspot2/PasspointConfiguration.java b/wifi/java/android/net/wifi/hotspot2/PasspointConfiguration.java
index 7c335fc323f5..3a0d080594c8 100644
--- a/wifi/java/android/net/wifi/hotspot2/PasspointConfiguration.java
+++ b/wifi/java/android/net/wifi/hotspot2/PasspointConfiguration.java
@@ -16,6 +16,9 @@
package android.net.wifi.hotspot2;
+import static android.net.wifi.WifiConfiguration.METERED_OVERRIDE_NONE;
+import static android.net.wifi.WifiConfiguration.MeteredOverride;
+
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.net.wifi.hotspot2.pps.Credential;
@@ -438,6 +441,18 @@ public final class PasspointConfiguration implements Parcelable {
private boolean mIsMacRandomizationEnabled = true;
/**
+ * Indicates if the end user has expressed an explicit opinion about the
+ * meteredness of this network, such as through the Settings app.
+ * This value is one of {@link #METERED_OVERRIDE_NONE}, {@link #METERED_OVERRIDE_METERED},
+ * or {@link #METERED_OVERRIDE_NOT_METERED}.
+ * <p>
+ * This should always override any values from {@link WifiInfo#getMeteredHint()}.
+ *
+ * By default this field is set to {@link #METERED_OVERRIDE_NONE}.
+ */
+ private int mMeteredOverride = METERED_OVERRIDE_NONE;
+
+ /**
* Configures the auto-association status of this Passpoint configuration. A value of true
* indicates that the configuration will be considered for auto-connection, a value of false
* indicates that only manual connection will work - the framework will not auto-associate to
@@ -463,6 +478,16 @@ public final class PasspointConfiguration implements Parcelable {
}
/**
+ * Sets the metered override setting for this Passpoint configuration.
+ *
+ * @param meteredOverride One of the values in {@link MeteredOverride}
+ * @hide
+ */
+ public void setMeteredOverride(@MeteredOverride int meteredOverride) {
+ mMeteredOverride = meteredOverride;
+ }
+
+ /**
* Indicates whether the Passpoint configuration may be auto-connected to by the framework. A
* value of true indicates that auto-connection can happen, a value of false indicates that it
* cannot. However, even when auto-connection is not possible manual connection by the user is
@@ -478,6 +503,18 @@ public final class PasspointConfiguration implements Parcelable {
}
/**
+ * Indicates whether the user chose this configuration to be treated as metered or not.
+ *
+ * @return One of the values in {@link MeteredOverride}
+ * @hide
+ */
+ @SystemApi
+ @MeteredOverride
+ public int getMeteredOverride() {
+ return mMeteredOverride;
+ }
+
+ /**
* Indicates whether a randomized MAC address or device MAC address will be used for
* connections to this Passpoint network. If true, a randomized MAC address will be used.
* Otherwise, the device MAC address will be used.
@@ -534,6 +571,7 @@ public final class PasspointConfiguration implements Parcelable {
mCarrierId = source.mCarrierId;
mIsAutoJoinEnabled = source.mIsAutoJoinEnabled;
mIsMacRandomizationEnabled = source.mIsMacRandomizationEnabled;
+ mMeteredOverride = source.mMeteredOverride;
}
@Override
@@ -565,6 +603,7 @@ public final class PasspointConfiguration implements Parcelable {
dest.writeInt(mCarrierId);
dest.writeBoolean(mIsAutoJoinEnabled);
dest.writeBoolean(mIsMacRandomizationEnabled);
+ dest.writeInt(mMeteredOverride);
}
@Override
@@ -597,6 +636,7 @@ public final class PasspointConfiguration implements Parcelable {
&& mCarrierId == that.mCarrierId
&& mIsAutoJoinEnabled == that.mIsAutoJoinEnabled
&& mIsMacRandomizationEnabled == that.mIsMacRandomizationEnabled
+ && mMeteredOverride == that.mMeteredOverride
&& (mServiceFriendlyNames == null ? that.mServiceFriendlyNames == null
: mServiceFriendlyNames.equals(that.mServiceFriendlyNames));
}
@@ -607,7 +647,8 @@ public final class PasspointConfiguration implements Parcelable {
mUpdateIdentifier, mCredentialPriority, mSubscriptionCreationTimeInMillis,
mSubscriptionExpirationTimeInMillis, mUsageLimitUsageTimePeriodInMinutes,
mUsageLimitStartTimeInMillis, mUsageLimitDataLimit, mUsageLimitTimeLimitInMinutes,
- mServiceFriendlyNames, mCarrierId, mIsAutoJoinEnabled, mIsMacRandomizationEnabled);
+ mServiceFriendlyNames, mCarrierId, mIsAutoJoinEnabled, mIsMacRandomizationEnabled,
+ mMeteredOverride);
}
@Override
@@ -663,6 +704,7 @@ public final class PasspointConfiguration implements Parcelable {
builder.append("CarrierId:" + mCarrierId);
builder.append("IsAutoJoinEnabled:" + mIsAutoJoinEnabled);
builder.append("mIsMacRandomizationEnabled:" + mIsMacRandomizationEnabled);
+ builder.append("mMeteredOverride:" + mMeteredOverride);
return builder.toString();
}
@@ -770,6 +812,7 @@ public final class PasspointConfiguration implements Parcelable {
config.mCarrierId = in.readInt();
config.mIsAutoJoinEnabled = in.readBoolean();
config.mIsMacRandomizationEnabled = in.readBoolean();
+ config.mMeteredOverride = in.readInt();
return config;
}
diff --git a/wifi/java/com/android/server/wifi/BaseWifiService.java b/wifi/java/com/android/server/wifi/BaseWifiService.java
index 56fa6e23a852..c6ba6a802307 100644
--- a/wifi/java/com/android/server/wifi/BaseWifiService.java
+++ b/wifi/java/com/android/server/wifi/BaseWifiService.java
@@ -193,6 +193,11 @@ public class BaseWifiService extends IWifiManager.Stub {
}
@Override
+ public void setMeteredOverridePasspoint(String fqdn, int meteredOverride) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
public boolean startScan(String packageName, String featureId) {
throw new UnsupportedOperationException();
}
diff --git a/wifi/tests/src/android/net/wifi/WifiManagerTest.java b/wifi/tests/src/android/net/wifi/WifiManagerTest.java
index f369203e05ab..fa3ed006c11e 100644
--- a/wifi/tests/src/android/net/wifi/WifiManagerTest.java
+++ b/wifi/tests/src/android/net/wifi/WifiManagerTest.java
@@ -16,6 +16,7 @@
package android.net.wifi;
+import static android.net.wifi.WifiConfiguration.METERED_OVERRIDE_METERED;
import static android.net.wifi.WifiManager.ActionListener;
import static android.net.wifi.WifiManager.BUSY;
import static android.net.wifi.WifiManager.ERROR;
@@ -1808,6 +1809,16 @@ public class WifiManagerTest {
verify(mWifiService).setMacRandomizationSettingPasspointEnabled(fqdn, true);
}
+ /**
+ * Test behavior of
+ * {@link WifiManager#setMacRandomizationSettingPasspointEnabled(String, boolean)}
+ */
+ @Test
+ public void testSetMeteredOverridePasspoint() throws Exception {
+ final String fqdn = "FullyQualifiedDomainName";
+ mWifiManager.setMeteredOverridePasspoint(fqdn, METERED_OVERRIDE_METERED);
+ verify(mWifiService).setMeteredOverridePasspoint(fqdn, METERED_OVERRIDE_METERED);
+ }
/**
* Test behavior of {@link WifiManager#disconnect()}
diff --git a/wifi/tests/src/android/net/wifi/hotspot2/PasspointConfigurationTest.java b/wifi/tests/src/android/net/wifi/hotspot2/PasspointConfigurationTest.java
index 603e78b90ff2..654154d77b0d 100644
--- a/wifi/tests/src/android/net/wifi/hotspot2/PasspointConfigurationTest.java
+++ b/wifi/tests/src/android/net/wifi/hotspot2/PasspointConfigurationTest.java
@@ -16,6 +16,8 @@
package android.net.wifi.hotspot2;
+import static android.net.wifi.WifiConfiguration.METERED_OVERRIDE_NONE;
+
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -173,6 +175,7 @@ public class PasspointConfigurationTest {
assertFalse(config.validateForR2());
assertTrue(config.isAutoJoinEnabled());
assertTrue(config.isMacRandomizationEnabled());
+ assertTrue(config.getMeteredOverride() == METERED_OVERRIDE_NONE);
}
/**