Merge "Add MdnsDiscoveryManager constructor without looper" am: ae9b229b7e
Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/2600006 Change-Id: Ib3d1792030c0c7e8e6e7828fabacf8a1c8cb10ea Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -73,7 +73,6 @@ import com.android.server.connectivity.mdns.MdnsMultinetworkSocketClient;
|
||||
import com.android.server.connectivity.mdns.MdnsSearchOptions;
|
||||
import com.android.server.connectivity.mdns.MdnsServiceBrowserListener;
|
||||
import com.android.server.connectivity.mdns.MdnsServiceInfo;
|
||||
import com.android.server.connectivity.mdns.MdnsSocketClientBase;
|
||||
import com.android.server.connectivity.mdns.MdnsSocketProvider;
|
||||
import com.android.server.connectivity.mdns.util.MdnsUtils;
|
||||
|
||||
@@ -1394,8 +1393,7 @@ public class NsdService extends INsdManager.Stub {
|
||||
mMdnsSocketClient =
|
||||
new MdnsMultinetworkSocketClient(handler.getLooper(), mMdnsSocketProvider);
|
||||
mMdnsDiscoveryManager = deps.makeMdnsDiscoveryManager(new ExecutorProvider(),
|
||||
mMdnsSocketClient, LOGGER.forSubComponent("MdnsDiscoveryManager"),
|
||||
handler.getLooper());
|
||||
mMdnsSocketClient, LOGGER.forSubComponent("MdnsDiscoveryManager"));
|
||||
handler.post(() -> mMdnsSocketClient.setCallback(mMdnsDiscoveryManager));
|
||||
mAdvertiser = deps.makeMdnsAdvertiser(handler.getLooper(), mMdnsSocketProvider,
|
||||
new AdvertiserCallback(), LOGGER.forSubComponent("MdnsAdvertiser"));
|
||||
@@ -1453,9 +1451,8 @@ public class NsdService extends INsdManager.Stub {
|
||||
*/
|
||||
public MdnsDiscoveryManager makeMdnsDiscoveryManager(
|
||||
@NonNull ExecutorProvider executorProvider,
|
||||
@NonNull MdnsSocketClientBase socketClient, @NonNull SharedLog sharedLog,
|
||||
@NonNull Looper looper) {
|
||||
return new MdnsDiscoveryManager(executorProvider, socketClient, sharedLog, looper);
|
||||
@NonNull MdnsMultinetworkSocketClient socketClient, @NonNull SharedLog sharedLog) {
|
||||
return new MdnsDiscoveryManager(executorProvider, socketClient, sharedLog);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
package com.android.server.connectivity.mdns;
|
||||
|
||||
import static com.android.server.connectivity.mdns.util.MdnsUtils.ensureRunningOnHandlerThread;
|
||||
import static com.android.server.connectivity.mdns.util.MdnsUtils.isRunningOnHandlerThread;
|
||||
|
||||
import android.Manifest.permission;
|
||||
import android.annotation.NonNull;
|
||||
@@ -25,7 +24,7 @@ import android.annotation.Nullable;
|
||||
import android.annotation.RequiresPermission;
|
||||
import android.net.Network;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.HandlerThread;
|
||||
import android.util.ArrayMap;
|
||||
import android.util.Log;
|
||||
import android.util.Pair;
|
||||
@@ -53,6 +52,7 @@ public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback {
|
||||
|
||||
@NonNull private final PerNetworkServiceTypeClients perNetworkServiceTypeClients;
|
||||
@NonNull private final Handler handler;
|
||||
@Nullable private final HandlerThread handlerThread;
|
||||
|
||||
private static class PerNetworkServiceTypeClients {
|
||||
private final ArrayMap<Pair<String, Network>, MdnsServiceTypeClient> clients =
|
||||
@@ -109,23 +109,38 @@ public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback {
|
||||
}
|
||||
|
||||
public MdnsDiscoveryManager(@NonNull ExecutorProvider executorProvider,
|
||||
@NonNull MdnsSocketClientBase socketClient, @NonNull SharedLog sharedLog,
|
||||
@NonNull Looper looper) {
|
||||
@NonNull MdnsSocketClientBase socketClient, @NonNull SharedLog sharedLog) {
|
||||
this.executorProvider = executorProvider;
|
||||
this.socketClient = socketClient;
|
||||
this.sharedLog = sharedLog;
|
||||
perNetworkServiceTypeClients = new PerNetworkServiceTypeClients();
|
||||
handler = new Handler(looper);
|
||||
this.perNetworkServiceTypeClients = new PerNetworkServiceTypeClients();
|
||||
if (socketClient.getLooper() != null) {
|
||||
this.handlerThread = null;
|
||||
this.handler = new Handler(socketClient.getLooper());
|
||||
} else {
|
||||
this.handlerThread = new HandlerThread(MdnsDiscoveryManager.class.getSimpleName());
|
||||
this.handlerThread.start();
|
||||
this.handler = new Handler(handlerThread.getLooper());
|
||||
}
|
||||
}
|
||||
|
||||
private void checkAndRunOnHandlerThread(@NonNull Runnable function) {
|
||||
if (isRunningOnHandlerThread(handler)) {
|
||||
if (this.handlerThread == null) {
|
||||
function.run();
|
||||
} else {
|
||||
handler.post(function);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Do the cleanup of the MdnsDiscoveryManager
|
||||
*/
|
||||
public void shutDown() {
|
||||
if (this.handlerThread != null) {
|
||||
this.handlerThread.quitSafely();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts (or continue) to discovery mDNS services with given {@code serviceType}, and registers
|
||||
* {@code listener} for receiving mDNS service discovery responses.
|
||||
|
||||
@@ -205,6 +205,11 @@ public class MdnsMultinetworkSocketClient implements MdnsSocketClientBase {
|
||||
mSocketProvider.unrequestSocket(callback);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Looper getLooper() {
|
||||
return mHandler.getLooper();
|
||||
}
|
||||
|
||||
private void sendMdnsPacket(@NonNull DatagramPacket packet, @Nullable Network targetNetwork) {
|
||||
final boolean isIpv6 = ((InetSocketAddress) packet.getSocketAddress()).getAddress()
|
||||
instanceof Inet6Address;
|
||||
|
||||
@@ -19,6 +19,7 @@ package com.android.server.connectivity.mdns;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.net.Network;
|
||||
import android.os.Looper;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.DatagramPacket;
|
||||
@@ -61,6 +62,11 @@ public interface MdnsSocketClientBase {
|
||||
/*** Notify that the network is unrequested */
|
||||
default void notifyNetworkUnrequested(@NonNull MdnsServiceBrowserListener listener) { }
|
||||
|
||||
/*** Gets looper that used by the socket client */
|
||||
default Looper getLooper() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/*** Callback for mdns response */
|
||||
interface Callback {
|
||||
/*** Receive a mdns response */
|
||||
|
||||
@@ -179,7 +179,7 @@ public class NsdServiceTest {
|
||||
anyInt(), anyString(), anyString(), anyString(), anyInt());
|
||||
doReturn(false).when(mDeps).isMdnsDiscoveryManagerEnabled(any(Context.class));
|
||||
doReturn(mDiscoveryManager).when(mDeps)
|
||||
.makeMdnsDiscoveryManager(any(), any(), any(), any());
|
||||
.makeMdnsDiscoveryManager(any(), any(), any());
|
||||
doReturn(mSocketProvider).when(mDeps).makeMdnsSocketProvider(any(), any(), any());
|
||||
doReturn(mAdvertiser).when(mDeps).makeMdnsAdvertiser(any(), any(), any(), any());
|
||||
mService = makeService();
|
||||
|
||||
@@ -20,6 +20,7 @@ import static com.android.testutils.DevSdkIgnoreRuleKt.SC_V2;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.eq;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
@@ -97,8 +98,9 @@ public class MdnsDiscoveryManagerTests {
|
||||
thread = new HandlerThread("MdnsDiscoveryManagerTests");
|
||||
thread.start();
|
||||
handler = new Handler(thread.getLooper());
|
||||
discoveryManager = new MdnsDiscoveryManager(executorProvider, socketClient, sharedLog,
|
||||
thread.getLooper()) {
|
||||
doReturn(thread.getLooper()).when(socketClient).getLooper();
|
||||
discoveryManager = new MdnsDiscoveryManager(executorProvider, socketClient,
|
||||
sharedLog) {
|
||||
@Override
|
||||
MdnsServiceTypeClient createServiceTypeClient(@NonNull String serviceType,
|
||||
@Nullable Network network) {
|
||||
|
||||
Reference in New Issue
Block a user