Merge "NsdService: bootstrap unit tests"
This commit is contained in:
@@ -26,6 +26,8 @@ import android.net.nsd.DnsSdTxtRecord;
|
|||||||
import android.net.nsd.INsdManager;
|
import android.net.nsd.INsdManager;
|
||||||
import android.net.nsd.NsdManager;
|
import android.net.nsd.NsdManager;
|
||||||
import android.os.Binder;
|
import android.os.Binder;
|
||||||
|
import android.os.HandlerThread;
|
||||||
|
import android.os.Handler;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.os.Messenger;
|
import android.os.Messenger;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
@@ -40,6 +42,7 @@ import java.net.InetAddress;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.CountDownLatch;
|
||||||
|
|
||||||
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.internal.util.AsyncChannel;
|
import com.android.internal.util.AsyncChannel;
|
||||||
import com.android.internal.util.Protocol;
|
import com.android.internal.util.Protocol;
|
||||||
import com.android.internal.util.State;
|
import com.android.internal.util.State;
|
||||||
@@ -59,7 +62,7 @@ public class NsdService extends INsdManager.Stub {
|
|||||||
private static final boolean DBG = true;
|
private static final boolean DBG = true;
|
||||||
|
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final ContentResolver mContentResolver;
|
private final NsdSettings mNsdSettings;
|
||||||
private final NsdStateMachine mNsdStateMachine;
|
private final NsdStateMachine mNsdStateMachine;
|
||||||
private final NativeDaemonConnector mNativeConnector;
|
private final NativeDaemonConnector mNativeConnector;
|
||||||
private final CountDownLatch mNativeDaemonConnected = new CountDownLatch(1);
|
private final CountDownLatch mNativeDaemonConnected = new CountDownLatch(1);
|
||||||
@@ -108,8 +111,8 @@ public class NsdService extends INsdManager.Stub {
|
|||||||
false, contentObserver);
|
false, contentObserver);
|
||||||
}
|
}
|
||||||
|
|
||||||
NsdStateMachine(String name) {
|
NsdStateMachine(String name, Handler handler) {
|
||||||
super(name);
|
super(name, handler);
|
||||||
addState(mDefaultState);
|
addState(mDefaultState);
|
||||||
addState(mDisabledState, mDefaultState);
|
addState(mDisabledState, mDefaultState);
|
||||||
addState(mEnabledState, mDefaultState);
|
addState(mEnabledState, mDefaultState);
|
||||||
@@ -541,14 +544,15 @@ public class NsdService extends INsdManager.Stub {
|
|||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private NsdService(Context context) {
|
@VisibleForTesting
|
||||||
mContext = context;
|
NsdService(Context ctx, NsdSettings settings, Handler handler) {
|
||||||
mContentResolver = context.getContentResolver();
|
mContext = ctx;
|
||||||
|
mNsdSettings = settings;
|
||||||
|
|
||||||
mNativeConnector = new NativeDaemonConnector(new NativeCallbackReceiver(), "mdns", 10,
|
NativeCallbackReceiver callback = new NativeCallbackReceiver();
|
||||||
MDNS_TAG, 25, null);
|
mNativeConnector = new NativeDaemonConnector(callback, "mdns", 10, MDNS_TAG, 25, null);
|
||||||
|
|
||||||
mNsdStateMachine = new NsdStateMachine(TAG);
|
mNsdStateMachine = new NsdStateMachine(TAG, handler);
|
||||||
mNsdStateMachine.start();
|
mNsdStateMachine.start();
|
||||||
|
|
||||||
Thread th = new Thread(mNativeConnector, MDNS_TAG);
|
Thread th = new Thread(mNativeConnector, MDNS_TAG);
|
||||||
@@ -556,21 +560,24 @@ public class NsdService extends INsdManager.Stub {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static NsdService create(Context context) throws InterruptedException {
|
public static NsdService create(Context context) throws InterruptedException {
|
||||||
NsdService service = new NsdService(context);
|
NsdSettings settings = NsdSettings.makeDefault(context);
|
||||||
|
HandlerThread thread = new HandlerThread(TAG);
|
||||||
|
thread.start();
|
||||||
|
Handler handler = new Handler(thread.getLooper());
|
||||||
|
NsdService service = new NsdService(context, settings, handler);
|
||||||
service.mNativeDaemonConnected.await();
|
service.mNativeDaemonConnected.await();
|
||||||
return service;
|
return service;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Messenger getMessenger() {
|
public Messenger getMessenger() {
|
||||||
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INTERNET,
|
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INTERNET, "NsdService");
|
||||||
"NsdService");
|
|
||||||
return new Messenger(mNsdStateMachine.getHandler());
|
return new Messenger(mNsdStateMachine.getHandler());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setEnabled(boolean enable) {
|
public void setEnabled(boolean enable) {
|
||||||
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.CONNECTIVITY_INTERNAL,
|
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.CONNECTIVITY_INTERNAL,
|
||||||
"NsdService");
|
"NsdService");
|
||||||
Settings.Global.putInt(mContentResolver, Settings.Global.NSD_ON, enable ? 1 : 0);
|
mNsdSettings.putEnabledStatus(enable);
|
||||||
if (enable) {
|
if (enable) {
|
||||||
mNsdStateMachine.sendMessage(NsdManager.ENABLE);
|
mNsdStateMachine.sendMessage(NsdManager.ENABLE);
|
||||||
} else {
|
} else {
|
||||||
@@ -590,8 +597,10 @@ public class NsdService extends INsdManager.Stub {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean isNsdEnabled() {
|
private boolean isNsdEnabled() {
|
||||||
boolean ret = Settings.Global.getInt(mContentResolver, Settings.Global.NSD_ON, 1) == 1;
|
boolean ret = mNsdSettings.isEnabled();
|
||||||
if (DBG) Slog.d(TAG, "Network service discovery enabled " + ret);
|
if (DBG) {
|
||||||
|
Slog.d(TAG, "Network service discovery is " + (ret ? "enabled" : "disabled"));
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -927,4 +936,25 @@ public class NsdService extends INsdManager.Stub {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
public interface NsdSettings {
|
||||||
|
boolean isEnabled();
|
||||||
|
void putEnabledStatus(boolean isEnabled);
|
||||||
|
|
||||||
|
static NsdSettings makeDefault(Context context) {
|
||||||
|
ContentResolver resolver = context.getContentResolver();
|
||||||
|
return new NsdSettings() {
|
||||||
|
@Override
|
||||||
|
public boolean isEnabled() {
|
||||||
|
return Settings.Global.getInt(resolver, Settings.Global.NSD_ON, 1) == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void putEnabledStatus(boolean isEnabled) {
|
||||||
|
Settings.Global.putInt(resolver, Settings.Global.NSD_ON, isEnabled ? 1 : 0);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user