From fc83170c707fae7ff2c76a94ebb20a55f39c8db3 Mon Sep 17 00:00:00 2001 From: Yuyang Huang Date: Mon, 21 Aug 2023 17:48:48 +0900 Subject: [PATCH] Add newApi linter check for mDNS library The mDNS library need to be backported to some internal library which support minSdk 21. Therefore, updated the build rules to add the linter check. Bug: 296175311 Test: TH Change-Id: Iae0bffa315dc6de2339a05f595b13480fa7385ae --- .../src/android/net/nsd/OffloadServiceInfo.java | 3 +++ service-t/Android.bp | 4 ++++ .../src/com/android/server/NsdService.java | 3 +++ .../mdns/EnqueueMdnsQueryCallable.java | 8 ++++++-- .../connectivity/mdns/ExecutorProvider.java | 5 +++-- .../connectivity/mdns/MdnsAdvertiser.java | 3 +++ .../server/connectivity/mdns/MdnsAnnouncer.java | 3 +++ .../connectivity/mdns/MdnsDiscoveryManager.java | 9 +++++++-- .../mdns/MdnsInterfaceAdvertiser.java | 3 +++ .../connectivity/mdns/MdnsInterfaceSocket.java | 3 +++ .../mdns/MdnsMultinetworkSocketClient.java | 3 +++ .../server/connectivity/mdns/MdnsPacket.java | 4 ---- .../connectivity/mdns/MdnsPacketRepeater.java | 3 +++ .../server/connectivity/mdns/MdnsProber.java | 3 +++ .../connectivity/mdns/MdnsReplySender.java | 3 +++ .../connectivity/mdns/MdnsResponseDecoder.java | 6 +++--- .../connectivity/mdns/MdnsSearchOptions.java | 17 +++++++++-------- .../mdns/MdnsServiceTypeClient.java | 6 +++--- .../connectivity/mdns/MdnsSocketProvider.java | 4 +++- .../mdns/MulticastPacketReader.java | 4 ++-- .../connectivity/mdns/util/MdnsUtils.java | 16 +++++++++++++++- .../mdns/MdnsResponseDecoderTests.java | 10 ++++------ 22 files changed, 89 insertions(+), 34 deletions(-) diff --git a/framework-t/src/android/net/nsd/OffloadServiceInfo.java b/framework-t/src/android/net/nsd/OffloadServiceInfo.java index 2c839bc7b7..d5dbf19e76 100644 --- a/framework-t/src/android/net/nsd/OffloadServiceInfo.java +++ b/framework-t/src/android/net/nsd/OffloadServiceInfo.java @@ -19,7 +19,9 @@ package android.net.nsd; import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.RequiresApi; import android.annotation.SystemApi; +import android.os.Build; import android.os.Parcel; import android.os.Parcelable; @@ -38,6 +40,7 @@ import java.util.Objects; * @hide */ @SystemApi +@RequiresApi(Build.VERSION_CODES.TIRAMISU) public final class OffloadServiceInfo implements Parcelable { @NonNull private final Key mKey; diff --git a/service-t/Android.bp b/service-t/Android.bp index 08527a35d2..7e2d2f46a5 100644 --- a/service-t/Android.bp +++ b/service-t/Android.bp @@ -91,6 +91,10 @@ java_library { java_library { name: "service-connectivity-mdns-standalone-build-test", sdk_version: "core_platform", + min_sdk_version: "21", + lint: { + error_checks: ["NewApi"], + }, srcs: [ "src/com/android/server/connectivity/mdns/**/*.java", ":framework-connectivity-t-mdns-standalone-build-sources", diff --git a/service-t/src/com/android/server/NsdService.java b/service-t/src/com/android/server/NsdService.java index 1250e656aa..fc6c6e4212 100644 --- a/service-t/src/com/android/server/NsdService.java +++ b/service-t/src/com/android/server/NsdService.java @@ -35,6 +35,7 @@ import static com.android.server.connectivity.mdns.util.MdnsUtils.Clock; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.RequiresApi; import android.app.ActivityManager; import android.content.Context; import android.content.Intent; @@ -59,6 +60,7 @@ import android.net.nsd.OffloadEngine; import android.net.nsd.OffloadServiceInfo; import android.net.wifi.WifiManager; import android.os.Binder; +import android.os.Build; import android.os.Handler; import android.os.HandlerThread; import android.os.IBinder; @@ -120,6 +122,7 @@ import java.util.regex.Pattern; * * @hide */ +@RequiresApi(Build.VERSION_CODES.TIRAMISU) public class NsdService extends INsdManager.Stub { private static final String TAG = "NsdService"; private static final String MDNS_TAG = "mDnsConnector"; diff --git a/service-t/src/com/android/server/connectivity/mdns/EnqueueMdnsQueryCallable.java b/service-t/src/com/android/server/connectivity/mdns/EnqueueMdnsQueryCallable.java index fa3b646e9e..1582fb66b4 100644 --- a/service-t/src/com/android/server/connectivity/mdns/EnqueueMdnsQueryCallable.java +++ b/service-t/src/com/android/server/connectivity/mdns/EnqueueMdnsQueryCallable.java @@ -19,6 +19,7 @@ package com.android.server.connectivity.mdns; import static com.android.server.connectivity.mdns.MdnsServiceTypeClient.INVALID_TRANSACTION_ID; import android.annotation.NonNull; +import android.os.Build; import android.text.TextUtils; import android.util.Pair; @@ -220,7 +221,9 @@ public class EnqueueMdnsQueryCallable implements Callable= Build.VERSION_CODES.TIRAMISU + && requestSender instanceof MdnsMultinetworkSocketClient) { ((MdnsMultinetworkSocketClient) requestSender).sendPacketRequestingUnicastResponse( packet, socketKey, onlyUseIpv6OnIpv6OnlyNetworks); } else { @@ -228,7 +231,8 @@ public class EnqueueMdnsQueryCallable implements Callable= Build.VERSION_CODES.TIRAMISU + && requestSender instanceof MdnsMultinetworkSocketClient) { ((MdnsMultinetworkSocketClient) requestSender) .sendPacketRequestingMulticastResponse( packet, socketKey, onlyUseIpv6OnIpv6OnlyNetworks); diff --git a/service-t/src/com/android/server/connectivity/mdns/ExecutorProvider.java b/service-t/src/com/android/server/connectivity/mdns/ExecutorProvider.java index 161669b15e..5d75b48681 100644 --- a/service-t/src/com/android/server/connectivity/mdns/ExecutorProvider.java +++ b/service-t/src/com/android/server/connectivity/mdns/ExecutorProvider.java @@ -17,7 +17,8 @@ package com.android.server.connectivity.mdns; import android.annotation.NonNull; -import android.util.ArraySet; + +import com.android.server.connectivity.mdns.util.MdnsUtils; import java.util.Set; import java.util.concurrent.ScheduledExecutorService; @@ -30,7 +31,7 @@ import java.util.concurrent.ScheduledThreadPoolExecutor; public class ExecutorProvider { private final Set serviceTypeClientSchedulerExecutors = - new ArraySet<>(); + MdnsUtils.newSet(); /** Returns a new {@link ScheduledExecutorService} instance. */ public ScheduledExecutorService newServiceTypeClientSchedulerExecutor() { diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsAdvertiser.java b/service-t/src/com/android/server/connectivity/mdns/MdnsAdvertiser.java index ce13747664..a946bca40b 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsAdvertiser.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsAdvertiser.java @@ -21,12 +21,14 @@ import static com.android.server.connectivity.mdns.MdnsRecord.MAX_LABEL_LENGTH; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.RequiresApi; import android.net.LinkAddress; import android.net.Network; import android.net.nsd.NsdManager; import android.net.nsd.NsdServiceInfo; import android.net.nsd.OffloadEngine; import android.net.nsd.OffloadServiceInfo; +import android.os.Build; import android.os.Looper; import android.util.ArrayMap; import android.util.Log; @@ -50,6 +52,7 @@ import java.util.function.Consumer; * * All methods except the constructor must be called on the looper thread. */ +@RequiresApi(Build.VERSION_CODES.TIRAMISU) public class MdnsAdvertiser { private static final String TAG = MdnsAdvertiser.class.getSimpleName(); static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG); diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsAnnouncer.java b/service-t/src/com/android/server/connectivity/mdns/MdnsAnnouncer.java index fd2c32e439..d9bc64305f 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsAnnouncer.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsAnnouncer.java @@ -18,6 +18,8 @@ package com.android.server.connectivity.mdns; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.RequiresApi; +import android.os.Build; import android.os.Looper; import com.android.internal.annotations.VisibleForTesting; @@ -31,6 +33,7 @@ import java.util.List; * * This allows maintaining other hosts' caches up-to-date. See RFC6762 8.3. */ +@RequiresApi(Build.VERSION_CODES.TIRAMISU) public class MdnsAnnouncer extends MdnsPacketRepeater { private static final long ANNOUNCEMENT_INITIAL_DELAY_MS = 1000L; @VisibleForTesting diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsDiscoveryManager.java b/service-t/src/com/android/server/connectivity/mdns/MdnsDiscoveryManager.java index d55098cdeb..24e9fa8977 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsDiscoveryManager.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsDiscoveryManager.java @@ -35,6 +35,7 @@ import com.android.server.connectivity.mdns.util.MdnsUtils; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * This class keeps tracking the set of registered {@link MdnsServiceBrowserListener} instances, and @@ -102,8 +103,12 @@ public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback { } public void remove(@NonNull MdnsServiceTypeClient client) { - final int index = clients.indexOfValue(client); - clients.removeAt(index); + for (int i = 0; i < clients.size(); ++i) { + if (Objects.equals(client, clients.valueAt(i))) { + clients.removeAt(i); + break; + } + } } public boolean isEmpty() { diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsInterfaceAdvertiser.java b/service-t/src/com/android/server/connectivity/mdns/MdnsInterfaceAdvertiser.java index 6454959d9d..40dfd571fa 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsInterfaceAdvertiser.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsInterfaceAdvertiser.java @@ -20,8 +20,10 @@ import static com.android.server.connectivity.mdns.MdnsConstants.NO_PACKET; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.RequiresApi; import android.net.LinkAddress; import android.net.nsd.NsdServiceInfo; +import android.os.Build; import android.os.Handler; import android.os.Looper; @@ -39,6 +41,7 @@ import java.util.List; /** * A class that handles advertising services on a {@link MdnsInterfaceSocket} tied to an interface. */ +@RequiresApi(Build.VERSION_CODES.TIRAMISU) public class MdnsInterfaceAdvertiser implements MulticastPacketReader.PacketHandler { private static final boolean DBG = MdnsAdvertiser.DBG; @VisibleForTesting diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsInterfaceSocket.java b/service-t/src/com/android/server/connectivity/mdns/MdnsInterfaceSocket.java index 534f8d0dc8..63dd703612 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsInterfaceSocket.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsInterfaceSocket.java @@ -20,8 +20,10 @@ import static com.android.server.connectivity.mdns.MdnsSocket.MULTICAST_IPV4_ADD import static com.android.server.connectivity.mdns.MdnsSocket.MULTICAST_IPV6_ADDRESS; import android.annotation.NonNull; +import android.annotation.RequiresApi; import android.net.LinkAddress; import android.net.util.SocketUtils; +import android.os.Build; import android.os.Handler; import android.os.Looper; import android.os.ParcelFileDescriptor; @@ -49,6 +51,7 @@ import java.util.List; * @see MulticastSocket for javadoc of each public method. * @see MulticastSocket for javadoc of each public method. */ +@RequiresApi(Build.VERSION_CODES.TIRAMISU) public class MdnsInterfaceSocket { private static final String TAG = MdnsInterfaceSocket.class.getSimpleName(); @NonNull private final MulticastSocket mMulticastSocket; diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClient.java b/service-t/src/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClient.java index 2ef7368138..4ba691212f 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClient.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClient.java @@ -20,8 +20,10 @@ import static com.android.server.connectivity.mdns.util.MdnsUtils.ensureRunningO import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.RequiresApi; import android.net.LinkAddress; import android.net.Network; +import android.os.Build; import android.os.Handler; import android.os.Looper; import android.util.ArrayMap; @@ -40,6 +42,7 @@ import java.util.List; * * *

This class is not thread safe. */ +@RequiresApi(Build.VERSION_CODES.TIRAMISU) public class MdnsMultinetworkSocketClient implements MdnsSocketClientBase { private static final String TAG = MdnsMultinetworkSocketClient.class.getSimpleName(); private static final boolean DBG = MdnsDiscoveryManager.DBG; diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsPacket.java b/service-t/src/com/android/server/connectivity/mdns/MdnsPacket.java index 27002b9cc6..7fa3f845ea 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsPacket.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsPacket.java @@ -18,7 +18,6 @@ package com.android.server.connectivity.mdns; import android.annotation.NonNull; import android.annotation.Nullable; -import android.util.Log; import java.io.EOFException; import java.io.IOException; @@ -206,9 +205,6 @@ public class MdnsPacket { default: { try { - if (MdnsAdvertiser.DBG) { - Log.i(TAG, "Skipping parsing of record of unhandled type " + type); - } skipMdnsRecord(reader, isQuestion); return null; } catch (IOException e) { diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsPacketRepeater.java b/service-t/src/com/android/server/connectivity/mdns/MdnsPacketRepeater.java index 12ed1396fd..fd0f5c9eaf 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsPacketRepeater.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsPacketRepeater.java @@ -21,6 +21,8 @@ import static com.android.server.connectivity.mdns.MdnsRecordRepository.IPV6_ADD import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.RequiresApi; +import android.os.Build; import android.os.Handler; import android.os.Looper; import android.os.Message; @@ -34,6 +36,7 @@ import java.net.InetSocketAddress; * A class used to send several packets at given time intervals. * @param The type of the request providing packet repeating parameters. */ +@RequiresApi(Build.VERSION_CODES.TIRAMISU) public abstract class MdnsPacketRepeater { private static final boolean DBG = MdnsAdvertiser.DBG; private static final InetSocketAddress[] ALL_ADDRS = new InetSocketAddress[] { diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsProber.java b/service-t/src/com/android/server/connectivity/mdns/MdnsProber.java index ba37f32659..f2b562ace3 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsProber.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsProber.java @@ -17,6 +17,8 @@ package com.android.server.connectivity.mdns; import android.annotation.NonNull; +import android.annotation.RequiresApi; +import android.os.Build; import android.os.Looper; import com.android.internal.annotations.VisibleForTesting; @@ -33,6 +35,7 @@ import java.util.List; * * TODO: implement receiving replies and handling conflicts. */ +@RequiresApi(Build.VERSION_CODES.TIRAMISU) public class MdnsProber extends MdnsPacketRepeater { private static final long CONFLICT_RETRY_DELAY_MS = 5_000L; diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsReplySender.java b/service-t/src/com/android/server/connectivity/mdns/MdnsReplySender.java index 71057fbbb2..3d64b5ab04 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsReplySender.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsReplySender.java @@ -19,6 +19,8 @@ package com.android.server.connectivity.mdns; import static com.android.server.connectivity.mdns.util.MdnsUtils.ensureRunningOnHandlerThread; import android.annotation.NonNull; +import android.annotation.RequiresApi; +import android.os.Build; import android.os.Handler; import android.os.Looper; import android.os.Message; @@ -41,6 +43,7 @@ import java.util.Collections; * * TODO: implement sending after a delay, combining queued replies and duplicate answer suppression */ +@RequiresApi(Build.VERSION_CODES.TIRAMISU) public class MdnsReplySender { private static final boolean DBG = MdnsAdvertiser.DBG; private static final int MSG_SEND = 1; diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsResponseDecoder.java b/service-t/src/com/android/server/connectivity/mdns/MdnsResponseDecoder.java index 2f10bde9c7..a3cc0eba5b 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsResponseDecoder.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsResponseDecoder.java @@ -20,7 +20,6 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.net.Network; import android.util.ArrayMap; -import android.util.ArraySet; import android.util.Pair; import com.android.server.connectivity.mdns.util.MdnsUtils; @@ -29,6 +28,7 @@ import java.io.EOFException; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Set; /** A class that decodes mDNS responses from UDP packets. */ public class MdnsResponseDecoder { @@ -125,7 +125,7 @@ public class MdnsResponseDecoder { * 2) A copy of the original responses with some of them have records * update or only contains receive time updated. */ - public Pair, ArrayList> augmentResponses( + public Pair, ArrayList> augmentResponses( @NonNull MdnsPacket mdnsPacket, @NonNull Collection existingResponses, int interfaceIndex, @Nullable Network network) { @@ -136,7 +136,7 @@ public class MdnsResponseDecoder { records.addAll(mdnsPacket.authorityRecords); records.addAll(mdnsPacket.additionalRecords); - final ArraySet modified = new ArraySet<>(); + final Set modified = MdnsUtils.newSet(); final ArrayList responses = new ArrayList<>(existingResponses.size()); final ArrayMap augmentedToOriginal = new ArrayMap<>(); for (MdnsResponse existing : existingResponses) { diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsSearchOptions.java b/service-t/src/com/android/server/connectivity/mdns/MdnsSearchOptions.java index f09596d118..63835d9f54 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsSearchOptions.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsSearchOptions.java @@ -22,7 +22,8 @@ import android.net.Network; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; -import android.util.ArraySet; + +import com.android.server.connectivity.mdns.util.MdnsUtils; import java.util.ArrayList; import java.util.Collection; @@ -46,11 +47,11 @@ public class MdnsSearchOptions implements Parcelable { public MdnsSearchOptions createFromParcel(Parcel source) { return new MdnsSearchOptions( source.createStringArrayList(), - source.readBoolean(), - source.readBoolean(), + source.readInt() == 1, + source.readInt() == 1, source.readParcelable(null), source.readString(), - source.readBoolean(), + source.readInt() == 1, source.readInt()); } @@ -165,11 +166,11 @@ public class MdnsSearchOptions implements Parcelable { @Override public void writeToParcel(Parcel out, int flags) { out.writeStringList(subtypes); - out.writeBoolean(isPassiveMode); - out.writeBoolean(removeExpiredService); + out.writeInt(isPassiveMode ? 1 : 0); + out.writeInt(removeExpiredService ? 1 : 0); out.writeParcelable(mNetwork, 0); out.writeString(resolveInstanceName); - out.writeBoolean(onlyUseIpv6OnIpv6OnlyNetworks); + out.writeInt(onlyUseIpv6OnIpv6OnlyNetworks ? 1 : 0); out.writeInt(numOfQueriesBeforeBackoff); } @@ -184,7 +185,7 @@ public class MdnsSearchOptions implements Parcelable { private String resolveInstanceName; private Builder() { - subtypes = new ArraySet<>(); + subtypes = MdnsUtils.newSet(); } /** diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java b/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java index 861d8d10e8..bbe8f4c555 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java @@ -27,7 +27,6 @@ import android.os.Looper; import android.os.Message; import android.text.TextUtils; import android.util.ArrayMap; -import android.util.ArraySet; import android.util.Pair; import com.android.internal.annotations.VisibleForTesting; @@ -42,6 +41,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.Set; import java.util.concurrent.ScheduledExecutorService; /** @@ -414,11 +414,11 @@ public class MdnsServiceTypeClient { currentList.add(additionalResponse); } } - final Pair, ArrayList> augmentedResult = + final Pair, ArrayList> augmentedResult = responseDecoder.augmentResponses(packet, currentList, socketKey.getInterfaceIndex(), socketKey.getNetwork()); - final ArraySet modifiedResponse = augmentedResult.first; + final Set modifiedResponse = augmentedResult.first; final ArrayList allResponses = augmentedResult.second; for (MdnsResponse response : allResponses) { diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsSocketProvider.java b/service-t/src/com/android/server/connectivity/mdns/MdnsSocketProvider.java index 23c5a4d7fb..5c9ec09e49 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsSocketProvider.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsSocketProvider.java @@ -19,12 +19,12 @@ package com.android.server.connectivity.mdns; import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; import static android.net.NetworkCapabilities.TRANSPORT_VPN; import static android.net.NetworkCapabilities.TRANSPORT_WIFI; - import static com.android.server.connectivity.mdns.util.MdnsUtils.ensureRunningOnHandlerThread; import static com.android.server.connectivity.mdns.util.MdnsUtils.isNetworkMatched; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.RequiresApi; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -41,6 +41,7 @@ import android.net.TetheringManager.TetheringEventCallback; import android.net.wifi.p2p.WifiP2pGroup; import android.net.wifi.p2p.WifiP2pInfo; import android.net.wifi.p2p.WifiP2pManager; +import android.os.Build; import android.os.Handler; import android.os.Looper; import android.util.ArrayMap; @@ -67,6 +68,7 @@ import java.util.Objects; * to their default value (0, false or null). * */ +@RequiresApi(Build.VERSION_CODES.TIRAMISU) public class MdnsSocketProvider { private static final String TAG = MdnsSocketProvider.class.getSimpleName(); private static final boolean DBG = MdnsDiscoveryManager.DBG; diff --git a/service-t/src/com/android/server/connectivity/mdns/MulticastPacketReader.java b/service-t/src/com/android/server/connectivity/mdns/MulticastPacketReader.java index 63119ac440..3cd77a4610 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MulticastPacketReader.java +++ b/service-t/src/com/android/server/connectivity/mdns/MulticastPacketReader.java @@ -22,9 +22,9 @@ import android.annotation.NonNull; import android.os.Handler; import android.os.ParcelFileDescriptor; import android.system.Os; -import android.util.ArraySet; import com.android.net.module.util.FdEventsReader; +import com.android.server.connectivity.mdns.util.MdnsUtils; import java.io.FileDescriptor; import java.net.InetSocketAddress; @@ -39,7 +39,7 @@ public class MulticastPacketReader extends FdEventsReader mPacketHandlers = new ArraySet<>(); + private final Set mPacketHandlers = MdnsUtils.newSet(); interface PacketHandler { void handlePacket(byte[] recvbuf, int length, InetSocketAddress src); diff --git a/service-t/src/com/android/server/connectivity/mdns/util/MdnsUtils.java b/service-t/src/com/android/server/connectivity/mdns/util/MdnsUtils.java index c1c9c42390..0dcc560e46 100644 --- a/service-t/src/com/android/server/connectivity/mdns/util/MdnsUtils.java +++ b/service-t/src/com/android/server/connectivity/mdns/util/MdnsUtils.java @@ -19,6 +19,7 @@ package com.android.server.connectivity.mdns.util; import android.annotation.NonNull; import android.annotation.Nullable; import android.net.Network; +import android.os.Build; import android.os.Handler; import android.os.SystemClock; import android.util.ArraySet; @@ -34,6 +35,8 @@ import java.nio.CharBuffer; import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; import java.nio.charset.StandardCharsets; +import java.util.HashSet; +import java.util.Set; /** * Mdns utility functions. @@ -57,6 +60,17 @@ public class MdnsUtils { return new String(outChars); } + /** + * Create a ArraySet or HashSet based on the sdk version. + */ + public static Set newSet() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + return new ArraySet<>(); + } else { + return new HashSet<>(); + } + } + /** * Convert the array of labels to DNS case-insensitive lowercase. */ @@ -142,7 +156,7 @@ public class MdnsUtils { /*** Check whether the target network matches any of the current networks */ public static boolean isAnyNetworkMatched(@Nullable Network targetNetwork, - ArraySet currentNetworks) { + Set currentNetworks) { if (targetNetwork == null) { return !currentNetworks.isEmpty(); } diff --git a/tests/unit/java/com/android/server/connectivity/mdns/MdnsResponseDecoderTests.java b/tests/unit/java/com/android/server/connectivity/mdns/MdnsResponseDecoderTests.java index d71bea447c..3fc656ace6 100644 --- a/tests/unit/java/com/android/server/connectivity/mdns/MdnsResponseDecoderTests.java +++ b/tests/unit/java/com/android/server/connectivity/mdns/MdnsResponseDecoderTests.java @@ -17,10 +17,8 @@ package com.android.server.connectivity.mdns; import static android.net.InetAddresses.parseNumericAddress; - import static com.android.server.connectivity.mdns.util.MdnsUtils.Clock; import static com.android.testutils.DevSdkIgnoreRuleKt.SC_V2; - import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -343,9 +341,9 @@ public class MdnsResponseDecoderTests { assertNotNull(parsedPacket); final Network network = mock(Network.class); - responses = decoder.augmentResponses(parsedPacket, + responses = new ArraySet<>(decoder.augmentResponses(parsedPacket, /* existingResponses= */ Collections.emptyList(), - /* interfaceIndex= */ 10, network /* expireOnExit= */).first; + /* interfaceIndex= */ 10, network /* expireOnExit= */).first); assertEquals(responses.size(), 1); assertEquals(responses.valueAt(0).getInterfaceIndex(), 10); @@ -641,8 +639,8 @@ public class MdnsResponseDecoderTests { final MdnsPacket parsedPacket = MdnsResponseDecoder.parseResponse(data, data.length); assertNotNull(parsedPacket); - return decoder.augmentResponses(parsedPacket, + return new ArraySet<>(decoder.augmentResponses(parsedPacket, existingResponses, - MdnsSocket.INTERFACE_INDEX_UNSPECIFIED, mock(Network.class)).first; + MdnsSocket.INTERFACE_INDEX_UNSPECIFIED, mock(Network.class)).first); } } \ No newline at end of file