diff options
4 files changed, 53 insertions, 24 deletions
diff --git a/core/api/current.txt b/core/api/current.txt index ab1805890215..da14dfeec5c8 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -7933,11 +7933,11 @@ package android.app.admin { } public final class WifiSsidPolicy implements android.os.Parcelable { - method @NonNull public static android.app.admin.WifiSsidPolicy createAllowlistPolicy(@NonNull java.util.Set<java.lang.String>); - method @NonNull public static android.app.admin.WifiSsidPolicy createDenylistPolicy(@NonNull java.util.Set<java.lang.String>); + method @NonNull public static android.app.admin.WifiSsidPolicy createAllowlistPolicy(@NonNull java.util.Set<android.net.wifi.WifiSsid>); + method @NonNull public static android.app.admin.WifiSsidPolicy createDenylistPolicy(@NonNull java.util.Set<android.net.wifi.WifiSsid>); method public int describeContents(); method public int getPolicyType(); - method @NonNull public java.util.Set<java.lang.String> getSsids(); + method @NonNull public java.util.Set<android.net.wifi.WifiSsid> getSsids(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.WifiSsidPolicy> CREATOR; field public static final int WIFI_SSID_POLICY_TYPE_ALLOWLIST = 0; // 0x0 diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index a709afe9910d..4704a24d2ca5 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -59,6 +59,7 @@ import android.graphics.drawable.Drawable; import android.net.PrivateDnsConnectivityChecker; import android.net.ProxyInfo; import android.net.Uri; +import android.net.wifi.WifiSsid; import android.nfc.NfcAdapter; import android.os.Binder; import android.os.Build; @@ -111,6 +112,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.net.InetSocketAddress; import java.net.Proxy; +import java.nio.charset.StandardCharsets; import java.security.KeyFactory; import java.security.KeyPair; import java.security.NoSuchAlgorithmException; @@ -14909,10 +14911,14 @@ public class DevicePolicyManager { mService.setSsidAllowlist(new ArrayList<>()); } else { int policyType = policy.getPolicyType(); + List<String> ssidList = new ArrayList<>(); + for (WifiSsid ssid : policy.getSsids()) { + ssidList.add(new String(ssid.getBytes(), StandardCharsets.UTF_8)); + } if (policyType == WifiSsidPolicy.WIFI_SSID_POLICY_TYPE_ALLOWLIST) { - mService.setSsidAllowlist(new ArrayList<>(policy.getSsids())); + mService.setSsidAllowlist(ssidList); } else { - mService.setSsidDenylist(new ArrayList<>(policy.getSsids())); + mService.setSsidDenylist(ssidList); } } } catch (RemoteException e) { @@ -14938,11 +14944,21 @@ public class DevicePolicyManager { try { List<String> allowlist = mService.getSsidAllowlist(); if (!allowlist.isEmpty()) { - return WifiSsidPolicy.createAllowlistPolicy(new ArraySet<>(allowlist)); + List<WifiSsid> wifiSsidAllowlist = new ArrayList<>(); + for (String ssid : allowlist) { + wifiSsidAllowlist.add( + WifiSsid.fromBytes(ssid.getBytes(StandardCharsets.UTF_8))); + } + return WifiSsidPolicy.createAllowlistPolicy(new ArraySet<>(wifiSsidAllowlist)); } List<String> denylist = mService.getSsidDenylist(); if (!denylist.isEmpty()) { - return WifiSsidPolicy.createDenylistPolicy(new ArraySet<>(denylist)); + List<WifiSsid> wifiSsidDenylist = new ArrayList<>(); + for (String ssid : denylist) { + wifiSsidDenylist.add( + WifiSsid.fromBytes(ssid.getBytes(StandardCharsets.UTF_8))); + } + return WifiSsidPolicy.createDenylistPolicy(new ArraySet<>(wifiSsidDenylist)); } } catch (RemoteException e) { throw e.rethrowFromSystemServer(); diff --git a/core/java/android/app/admin/WifiSsidPolicy.java b/core/java/android/app/admin/WifiSsidPolicy.java index 37150179cc68..a7046d41704a 100644 --- a/core/java/android/app/admin/WifiSsidPolicy.java +++ b/core/java/android/app/admin/WifiSsidPolicy.java @@ -18,6 +18,7 @@ package android.app.admin; import android.annotation.IntDef; import android.annotation.NonNull; +import android.net.wifi.WifiSsid; import android.os.Parcel; import android.os.Parcelable; import android.util.ArraySet; @@ -70,25 +71,25 @@ public final class WifiSsidPolicy implements Parcelable { public @interface WifiSsidPolicyType {} private @WifiSsidPolicyType int mPolicyType; - private ArraySet<String> mSsids; + private ArraySet<WifiSsid> mSsids; - private WifiSsidPolicy(@WifiSsidPolicyType int policyType, @NonNull Set<String> ssids) { + private WifiSsidPolicy(@WifiSsidPolicyType int policyType, @NonNull Set<WifiSsid> ssids) { mPolicyType = policyType; mSsids = new ArraySet<>(ssids); } private WifiSsidPolicy(Parcel in) { mPolicyType = in.readInt(); - mSsids = (ArraySet<String>) in.readArraySet(null); + mSsids = (ArraySet<WifiSsid>) in.readArraySet(null); } /** * Create the allowlist Wi-Fi SSID Policy. * - * @param ssids allowlist of SSIDs in UTF-8 without double quotes format + * @param ssids allowlist of {@link WifiSsid} * @throws IllegalArgumentException if the input ssids list is empty */ @NonNull - public static WifiSsidPolicy createAllowlistPolicy(@NonNull Set<String> ssids) { + public static WifiSsidPolicy createAllowlistPolicy(@NonNull Set<WifiSsid> ssids) { if (ssids.isEmpty()) { throw new IllegalArgumentException("SSID list cannot be empty"); } @@ -98,11 +99,11 @@ public final class WifiSsidPolicy implements Parcelable { /** * Create the denylist Wi-Fi SSID Policy. * - * @param ssids denylist of SSIDs in UTF-8 without double quotes format + * @param ssids denylist of {@link WifiSsid} * @throws IllegalArgumentException if the input ssids list is empty */ @NonNull - public static WifiSsidPolicy createDenylistPolicy(@NonNull Set<String> ssids) { + public static WifiSsidPolicy createDenylistPolicy(@NonNull Set<WifiSsid> ssids) { if (ssids.isEmpty()) { throw new IllegalArgumentException("SSID list cannot be empty"); } @@ -110,10 +111,10 @@ public final class WifiSsidPolicy implements Parcelable { } /** - * Returns the set of SSIDs in UTF-8 without double quotes format. + * Returns the set of {@link WifiSsid} */ @NonNull - public Set<String> getSsids() { + public Set<WifiSsid> getSsids() { return mSsids; } diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java index c877bd141220..b96bb23f8951 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java @@ -120,6 +120,7 @@ import android.graphics.Color; import android.hardware.usb.UsbManager; import android.net.ProfileNetworkPreference; import android.net.Uri; +import android.net.wifi.WifiSsid; import android.os.Build; import android.os.Build.VERSION_CODES; import android.os.Bundle; @@ -164,6 +165,7 @@ import org.mockito.stubbing.Answer; import java.io.File; import java.net.InetSocketAddress; import java.net.Proxy; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -8334,7 +8336,8 @@ public class DevicePolicyManagerTest extends DpmTestBase { @Test public void testSetSsidAllowlist_noDeviceOwnerOrPoOfOrgOwnedDevice() { - final Set<String> ssids = Collections.singleton("ssid1"); + final Set<WifiSsid> ssids = new ArraySet<>( + Arrays.asList(WifiSsid.fromBytes("ssid1".getBytes(StandardCharsets.UTF_8)))); WifiSsidPolicy policy = WifiSsidPolicy.createAllowlistPolicy(ssids); assertThrows(SecurityException.class, () -> dpm.setWifiSsidPolicy(policy)); } @@ -8343,7 +8346,8 @@ public class DevicePolicyManagerTest extends DpmTestBase { public void testSetSsidAllowlist_asDeviceOwner() throws Exception { setDeviceOwner(); - final Set<String> ssids = Collections.singleton("ssid1"); + final Set<WifiSsid> ssids = new ArraySet<>( + Arrays.asList(WifiSsid.fromBytes("ssid1".getBytes(StandardCharsets.UTF_8)))); WifiSsidPolicy policy = WifiSsidPolicy.createAllowlistPolicy(ssids); dpm.setWifiSsidPolicy(policy); assertThat(dpm.getWifiSsidPolicy().getSsids()).isEqualTo(ssids); @@ -8359,7 +8363,10 @@ public class DevicePolicyManagerTest extends DpmTestBase { configureProfileOwnerOfOrgOwnedDevice(admin1, managedProfileUserId); mContext.binder.callingUid = managedProfileAdminUid; - final Set<String> ssids = new ArraySet<>(Arrays.asList("ssid1", "ssid2", "ssid3")); + final Set<WifiSsid> ssids = new ArraySet<>( + Arrays.asList(WifiSsid.fromBytes("ssid1".getBytes(StandardCharsets.UTF_8)), + WifiSsid.fromBytes("ssid2".getBytes(StandardCharsets.UTF_8)), + WifiSsid.fromBytes("ssid3".getBytes(StandardCharsets.UTF_8)))); WifiSsidPolicy policy = WifiSsidPolicy.createAllowlistPolicy(ssids); dpm.setWifiSsidPolicy(policy); assertThat(dpm.getWifiSsidPolicy().getSsids()).isEqualTo(ssids); @@ -8371,14 +8378,15 @@ public class DevicePolicyManagerTest extends DpmTestBase { public void testSetSsidAllowlist_emptyList() throws Exception { setDeviceOwner(); - final Set<String> ssids = new ArraySet<>(); + final Set<WifiSsid> ssids = new ArraySet<>(); assertThrows(IllegalArgumentException.class, () -> WifiSsidPolicy.createAllowlistPolicy(ssids)); } @Test public void testSetSsidDenylist_noDeviceOwnerOrPoOfOrgOwnedDevice() { - final Set<String> ssids = Collections.singleton("ssid1"); + final Set<WifiSsid> ssids = new ArraySet<>( + Arrays.asList(WifiSsid.fromBytes("ssid1".getBytes(StandardCharsets.UTF_8)))); WifiSsidPolicy policy = WifiSsidPolicy.createDenylistPolicy(ssids); assertThrows(SecurityException.class, () -> dpm.setWifiSsidPolicy(policy)); } @@ -8387,7 +8395,8 @@ public class DevicePolicyManagerTest extends DpmTestBase { public void testSetSsidDenylist_asDeviceOwner() throws Exception { setDeviceOwner(); - final Set<String> ssids = Collections.singleton("ssid1"); + final Set<WifiSsid> ssids = new ArraySet<>( + Arrays.asList(WifiSsid.fromBytes("ssid1".getBytes(StandardCharsets.UTF_8)))); WifiSsidPolicy policy = WifiSsidPolicy.createDenylistPolicy(ssids); dpm.setWifiSsidPolicy(policy); assertThat(dpm.getWifiSsidPolicy().getSsids()).isEqualTo(ssids); @@ -8403,7 +8412,10 @@ public class DevicePolicyManagerTest extends DpmTestBase { configureProfileOwnerOfOrgOwnedDevice(admin1, managedProfileUserId); mContext.binder.callingUid = managedProfileAdminUid; - final Set<String> ssids = new ArraySet<>(Arrays.asList("ssid1", "ssid2", "ssid3")); + final Set<WifiSsid> ssids = new ArraySet<>( + Arrays.asList(WifiSsid.fromBytes("ssid1".getBytes(StandardCharsets.UTF_8)), + WifiSsid.fromBytes("ssid2".getBytes(StandardCharsets.UTF_8)), + WifiSsid.fromBytes("ssid3".getBytes(StandardCharsets.UTF_8)))); WifiSsidPolicy policy = WifiSsidPolicy.createDenylistPolicy(ssids); dpm.setWifiSsidPolicy(policy); assertThat(dpm.getWifiSsidPolicy().getSsids()).isEqualTo(ssids); @@ -8415,7 +8427,7 @@ public class DevicePolicyManagerTest extends DpmTestBase { public void testSetSsidDenylist_emptyList() throws Exception { setDeviceOwner(); - final Set<String> ssids = new ArraySet<>(); + final Set<WifiSsid> ssids = new ArraySet<>(); assertThrows(IllegalArgumentException.class, () -> WifiSsidPolicy.createDenylistPolicy(ssids)); } |