diff options
| author | 2020-01-21 17:09:02 -0800 | |
|---|---|---|
| committer | 2020-01-22 13:38:20 -0800 | |
| commit | 85f2342ed85a4e1a8f0934e72718ceae076eb6ae (patch) | |
| tree | ac9d65840972ca26ee993361ea184891518408e9 | |
| parent | ae0c9546bfeab62dd7784bc66372dfc3b28cc02b (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
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); } /** |