Merge "Stop using NSD_ON setting" am: a37333ace6

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1895245

Change-Id: I13cc751269756ba745f4327b35e3562e3aefd689
This commit is contained in:
Paul Hu
2021-12-07 06:01:15 +00:00
committed by Automerger Merge Worker

View File

@@ -16,12 +16,9 @@
package com.android.server; package com.android.server;
import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.database.ContentObserver;
import android.net.Uri;
import android.net.nsd.INsdManager; import android.net.nsd.INsdManager;
import android.net.nsd.INsdManagerCallback; import android.net.nsd.INsdManagerCallback;
import android.net.nsd.INsdServiceConnector; import android.net.nsd.INsdServiceConnector;
@@ -33,7 +30,6 @@ import android.os.IBinder;
import android.os.Message; import android.os.Message;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.UserHandle; import android.os.UserHandle;
import android.provider.Settings;
import android.util.Base64; import android.util.Base64;
import android.util.Log; import android.util.Log;
import android.util.Pair; import android.util.Pair;
@@ -66,7 +62,6 @@ public class NsdService extends INsdManager.Stub {
private static final long CLEANUP_DELAY_MS = 10000; private static final long CLEANUP_DELAY_MS = 10000;
private final Context mContext; private final Context mContext;
private final NsdSettings mNsdSettings;
private final NsdStateMachine mNsdStateMachine; private final NsdStateMachine mNsdStateMachine;
private final DaemonConnection mDaemon; private final DaemonConnection mDaemon;
private final NativeCallbackReceiver mDaemonCallback; private final NativeCallbackReceiver mDaemonCallback;
@@ -121,30 +116,14 @@ public class NsdService extends INsdManager.Stub {
this.removeMessages(NsdManager.DAEMON_CLEANUP); this.removeMessages(NsdManager.DAEMON_CLEANUP);
} }
/**
* Observes the NSD on/off setting, and takes action when changed.
*/
private void registerForNsdSetting() {
final ContentObserver contentObserver = new ContentObserver(this.getHandler()) {
@Override
public void onChange(boolean selfChange) {
notifyEnabled(isNsdEnabled());
}
};
final Uri uri = Settings.Global.getUriFor(Settings.Global.NSD_ON);
mNsdSettings.registerContentObserver(uri, contentObserver);
}
NsdStateMachine(String name, Handler handler) { NsdStateMachine(String name, Handler handler) {
super(name, handler); super(name, handler);
addState(mDefaultState); addState(mDefaultState);
addState(mDisabledState, mDefaultState); addState(mDisabledState, mDefaultState);
addState(mEnabledState, mDefaultState); addState(mEnabledState, mDefaultState);
State initialState = isNsdEnabled() ? mEnabledState : mDisabledState; State initialState = mEnabledState;
setInitialState(initialState); setInitialState(initialState);
setLogRecSize(25); setLogRecSize(25);
registerForNsdSetting();
} }
class DefaultState extends State { class DefaultState extends State {
@@ -580,11 +559,9 @@ public class NsdService extends INsdManager.Stub {
} }
@VisibleForTesting @VisibleForTesting
NsdService(Context ctx, NsdSettings settings, Handler handler, NsdService(Context ctx, Handler handler, DaemonConnectionSupplier fn, long cleanupDelayMs) {
DaemonConnectionSupplier fn, long cleanupDelayMs) {
mCleanupDelayMs = cleanupDelayMs; mCleanupDelayMs = cleanupDelayMs;
mContext = ctx; mContext = ctx;
mNsdSettings = settings;
mNsdStateMachine = new NsdStateMachine(TAG, handler); mNsdStateMachine = new NsdStateMachine(TAG, handler);
mNsdStateMachine.start(); mNsdStateMachine.start();
mDaemonCallback = new NativeCallbackReceiver(); mDaemonCallback = new NativeCallbackReceiver();
@@ -592,12 +569,11 @@ public class NsdService extends INsdManager.Stub {
} }
public static NsdService create(Context context) throws InterruptedException { public static NsdService create(Context context) throws InterruptedException {
NsdSettings settings = NsdSettings.makeDefault(context);
HandlerThread thread = new HandlerThread(TAG); HandlerThread thread = new HandlerThread(TAG);
thread.start(); thread.start();
Handler handler = new Handler(thread.getLooper()); Handler handler = new Handler(thread.getLooper());
NsdService service = new NsdService(context, settings, handler, NsdService service =
DaemonConnection::new, CLEANUP_DELAY_MS); new NsdService(context, handler, DaemonConnection::new, CLEANUP_DELAY_MS);
service.mDaemonCallback.awaitConnection(); service.mDaemonCallback.awaitConnection();
return service; return service;
} }
@@ -669,10 +645,6 @@ public class NsdService extends INsdManager.Stub {
} }
} }
private void notifyEnabled(boolean isEnabled) {
mNsdStateMachine.sendMessage(isEnabled ? NsdManager.ENABLE : NsdManager.DISABLE);
}
private void sendNsdStateChangeBroadcast(boolean isEnabled) { private void sendNsdStateChangeBroadcast(boolean isEnabled) {
final Intent intent = new Intent(NsdManager.ACTION_NSD_STATE_CHANGED); final Intent intent = new Intent(NsdManager.ACTION_NSD_STATE_CHANGED);
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
@@ -681,14 +653,6 @@ public class NsdService extends INsdManager.Stub {
mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL); mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
} }
private boolean isNsdEnabled() {
boolean ret = mNsdSettings.isEnabled();
if (DBG) {
Log.d(TAG, "Network service discovery is " + (ret ? "enabled" : "disabled"));
}
return ret;
}
private int getUniqueId() { private int getUniqueId() {
if (++mUniqueId == INVALID_ID) return ++mUniqueId; if (++mUniqueId == INVALID_ID) return ++mUniqueId;
return mUniqueId; return mUniqueId;
@@ -1075,35 +1039,4 @@ public class NsdService extends INsdManager.Stub {
} }
} }
} }
/**
* Interface which encapsulates dependencies of NsdService that are hard to mock, hard to
* override, or have side effects on global state in unit tests.
*/
@VisibleForTesting
public interface NsdSettings {
boolean isEnabled();
void putEnabledStatus(boolean isEnabled);
void registerContentObserver(Uri uri, ContentObserver observer);
static NsdSettings makeDefault(Context context) {
final 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);
}
@Override
public void registerContentObserver(Uri uri, ContentObserver observer) {
resolver.registerContentObserver(uri, false, observer);
}
};
}
}
} }