Merge "More correct startup and shutdown procedures."
am: 618d4215a2
Change-Id: I4844130b04ded0fc913593081d07a6052bdc0e42
This commit is contained in:
@ -856,6 +856,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
|
|
||||||
mAvoidBadWifiTracker = createAvoidBadWifiTracker(
|
mAvoidBadWifiTracker = createAvoidBadWifiTracker(
|
||||||
mContext, mHandler, () -> rematchForAvoidBadWifiUpdate());
|
mContext, mHandler, () -> rematchForAvoidBadWifiUpdate());
|
||||||
|
mAvoidBadWifiTracker.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
private NetworkRequest createInternetRequestForTransport(
|
private NetworkRequest createInternetRequestForTransport(
|
||||||
|
@ -438,6 +438,9 @@ public class IpManager extends StateMachine {
|
|||||||
mCallback = new LoggingCallbackWrapper(callback);
|
mCallback = new LoggingCallbackWrapper(callback);
|
||||||
mNwService = nwService;
|
mNwService = nwService;
|
||||||
|
|
||||||
|
mLocalLog = new LocalLog(MAX_LOG_RECORDS);
|
||||||
|
mMsgStateLogger = new MessageHandlingLogger();
|
||||||
|
|
||||||
mNetlinkTracker = new NetlinkTracker(
|
mNetlinkTracker = new NetlinkTracker(
|
||||||
mInterfaceName,
|
mInterfaceName,
|
||||||
new NetlinkTracker.Callback() {
|
new NetlinkTracker.Callback() {
|
||||||
@ -451,48 +454,79 @@ public class IpManager extends StateMachine {
|
|||||||
super.interfaceAdded(iface);
|
super.interfaceAdded(iface);
|
||||||
if (mClatInterfaceName.equals(iface)) {
|
if (mClatInterfaceName.equals(iface)) {
|
||||||
mCallback.setNeighborDiscoveryOffload(false);
|
mCallback.setNeighborDiscoveryOffload(false);
|
||||||
|
} else if (!mInterfaceName.equals(iface)) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final String msg = "interfaceAdded(" + iface +")";
|
||||||
|
logMsg(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void interfaceRemoved(String iface) {
|
public void interfaceRemoved(String iface) {
|
||||||
super.interfaceRemoved(iface);
|
super.interfaceRemoved(iface);
|
||||||
|
// TODO: Also observe mInterfaceName going down and take some
|
||||||
|
// kind of appropriate action.
|
||||||
if (mClatInterfaceName.equals(iface)) {
|
if (mClatInterfaceName.equals(iface)) {
|
||||||
// TODO: consider sending a message to the IpManager main
|
// TODO: consider sending a message to the IpManager main
|
||||||
// StateMachine thread, in case "NDO enabled" state becomes
|
// StateMachine thread, in case "NDO enabled" state becomes
|
||||||
// tied to more things that 464xlat operation.
|
// tied to more things that 464xlat operation.
|
||||||
mCallback.setNeighborDiscoveryOffload(true);
|
mCallback.setNeighborDiscoveryOffload(true);
|
||||||
|
} else if (!mInterfaceName.equals(iface)) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final String msg = "interfaceRemoved(" + iface +")";
|
||||||
|
logMsg(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void logMsg(String msg) {
|
||||||
|
Log.d(mTag, msg);
|
||||||
|
getHandler().post(() -> { mLocalLog.log("OBSERVED " + msg); });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
try {
|
mLinkProperties = new LinkProperties();
|
||||||
mNwService.registerObserver(mNetlinkTracker);
|
mLinkProperties.setInterfaceName(mInterfaceName);
|
||||||
} catch (RemoteException e) {
|
|
||||||
Log.e(mTag, "Couldn't register NetlinkTracker: " + e.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
mAvoidBadWifiTracker = new AvoidBadWifiTracker(mContext, getHandler());
|
mAvoidBadWifiTracker = new AvoidBadWifiTracker(mContext, getHandler(),
|
||||||
|
() -> { mLocalLog.log("OBSERVED AvoidBadWifi changed"); });
|
||||||
resetLinkProperties();
|
|
||||||
|
|
||||||
mProvisioningTimeoutAlarm = new WakeupMessage(mContext, getHandler(),
|
mProvisioningTimeoutAlarm = new WakeupMessage(mContext, getHandler(),
|
||||||
mTag + ".EVENT_PROVISIONING_TIMEOUT", EVENT_PROVISIONING_TIMEOUT);
|
mTag + ".EVENT_PROVISIONING_TIMEOUT", EVENT_PROVISIONING_TIMEOUT);
|
||||||
mDhcpActionTimeoutAlarm = new WakeupMessage(mContext, getHandler(),
|
mDhcpActionTimeoutAlarm = new WakeupMessage(mContext, getHandler(),
|
||||||
mTag + ".EVENT_DHCPACTION_TIMEOUT", EVENT_DHCPACTION_TIMEOUT);
|
mTag + ".EVENT_DHCPACTION_TIMEOUT", EVENT_DHCPACTION_TIMEOUT);
|
||||||
|
|
||||||
// Super simple StateMachine.
|
// Anything the StateMachine may access must have been instantiated
|
||||||
|
// before this point.
|
||||||
|
configureAndStartStateMachine();
|
||||||
|
|
||||||
|
// Anything that may send messages to the StateMachine must only be
|
||||||
|
// configured to do so after the StateMachine has started (above).
|
||||||
|
startStateMachineUpdaters();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void configureAndStartStateMachine() {
|
||||||
addState(mStoppedState);
|
addState(mStoppedState);
|
||||||
addState(mStartedState);
|
addState(mStartedState);
|
||||||
addState(mRunningState, mStartedState);
|
addState(mRunningState, mStartedState);
|
||||||
addState(mStoppingState);
|
addState(mStoppingState);
|
||||||
|
|
||||||
setInitialState(mStoppedState);
|
setInitialState(mStoppedState);
|
||||||
mLocalLog = new LocalLog(MAX_LOG_RECORDS);
|
|
||||||
mMsgStateLogger = new MessageHandlingLogger();
|
|
||||||
super.start();
|
super.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void startStateMachineUpdaters() {
|
||||||
|
try {
|
||||||
|
mNwService.registerObserver(mNetlinkTracker);
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
Log.e(mTag, "Couldn't register NetlinkTracker: " + e.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
mAvoidBadWifiTracker.start();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onQuitting() {
|
protected void onQuitting() {
|
||||||
mCallback.onQuit();
|
mCallback.onQuit();
|
||||||
@ -501,6 +535,7 @@ public class IpManager extends StateMachine {
|
|||||||
// Shut down this IpManager instance altogether.
|
// Shut down this IpManager instance altogether.
|
||||||
public void shutdown() {
|
public void shutdown() {
|
||||||
stop();
|
stop();
|
||||||
|
mAvoidBadWifiTracker.shutdown();
|
||||||
quit();
|
quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,7 +57,11 @@ public class AvoidBadWifiTracker {
|
|||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final Handler mHandler;
|
private final Handler mHandler;
|
||||||
private final Runnable mReevaluateRunnable;
|
private final Runnable mReevaluateRunnable;
|
||||||
|
private final Uri mUri;
|
||||||
|
private final ContentResolver mResolver;
|
||||||
private final SettingObserver mSettingObserver;
|
private final SettingObserver mSettingObserver;
|
||||||
|
private final BroadcastReceiver mBroadcastReceiver;
|
||||||
|
|
||||||
private volatile boolean mAvoidBadWifi = true;
|
private volatile boolean mAvoidBadWifi = true;
|
||||||
|
|
||||||
public AvoidBadWifiTracker(Context ctx, Handler handler) {
|
public AvoidBadWifiTracker(Context ctx, Handler handler) {
|
||||||
@ -68,19 +72,36 @@ public class AvoidBadWifiTracker {
|
|||||||
mContext = ctx;
|
mContext = ctx;
|
||||||
mHandler = handler;
|
mHandler = handler;
|
||||||
mReevaluateRunnable = () -> { if (update() && cb != null) cb.run(); };
|
mReevaluateRunnable = () -> { if (update() && cb != null) cb.run(); };
|
||||||
|
mUri = Settings.Global.getUriFor(NETWORK_AVOID_BAD_WIFI);
|
||||||
|
mResolver = mContext.getContentResolver();
|
||||||
mSettingObserver = new SettingObserver();
|
mSettingObserver = new SettingObserver();
|
||||||
|
mBroadcastReceiver = new BroadcastReceiver() {
|
||||||
final IntentFilter intentFilter = new IntentFilter();
|
@Override
|
||||||
intentFilter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
|
|
||||||
mContext.registerReceiverAsUser(new BroadcastReceiver() {
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
reevaluate();
|
reevaluate();
|
||||||
}
|
}
|
||||||
}, UserHandle.ALL, intentFilter, null, null);
|
};
|
||||||
|
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void start() {
|
||||||
|
mResolver.registerContentObserver(mUri, false, mSettingObserver);
|
||||||
|
|
||||||
|
final IntentFilter intentFilter = new IntentFilter();
|
||||||
|
intentFilter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
|
||||||
|
mContext.registerReceiverAsUser(
|
||||||
|
mBroadcastReceiver, UserHandle.ALL, intentFilter, null, null);
|
||||||
|
|
||||||
|
reevaluate();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void shutdown() {
|
||||||
|
mResolver.unregisterContentObserver(mSettingObserver);
|
||||||
|
|
||||||
|
mContext.unregisterReceiver(mBroadcastReceiver);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean currentValue() {
|
public boolean currentValue() {
|
||||||
return mAvoidBadWifi;
|
return mAvoidBadWifi;
|
||||||
}
|
}
|
||||||
@ -100,8 +121,7 @@ public class AvoidBadWifiTracker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getSettingsValue() {
|
public String getSettingsValue() {
|
||||||
final ContentResolver resolver = mContext.getContentResolver();
|
return Settings.Global.getString(mResolver, NETWORK_AVOID_BAD_WIFI);
|
||||||
return Settings.Global.getString(resolver, NETWORK_AVOID_BAD_WIFI);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@ -117,12 +137,8 @@ public class AvoidBadWifiTracker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private class SettingObserver extends ContentObserver {
|
private class SettingObserver extends ContentObserver {
|
||||||
private final Uri mUri = Settings.Global.getUriFor(NETWORK_AVOID_BAD_WIFI);
|
|
||||||
|
|
||||||
public SettingObserver() {
|
public SettingObserver() {
|
||||||
super(null);
|
super(null);
|
||||||
final ContentResolver resolver = mContext.getContentResolver();
|
|
||||||
resolver.registerContentObserver(mUri, false, this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Reference in New Issue
Block a user