Merge "Add MdnsDiscoveryManager constructor without looper" am: ae9b229b7e am: 3e3745f84a

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/2600006

Change-Id: I07887062dc30252fc479ce23202394eaa93ba0e9
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Treehugger Robot
2023-05-30 11:54:51 +00:00
committed by Automerger Merge Worker
6 changed files with 41 additions and 16 deletions

View File

@@ -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);
}
/**

View File

@@ -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.

View File

@@ -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;

View File

@@ -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 */

View File

@@ -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();

View File

@@ -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) {