Refactor NetworkFactoryInfo to hide implementation details.

This is in preparation for introducing NetworkProvider, which
will initially share ConnectivityService code with NetworkFactory.

Bug: 138306002
Test: atest FrameworksNetTests
Change-Id: Ic6f888621f473342ee3fe8fedf9411552111342b
This commit is contained in:
Lorenzo Colitti
2020-01-07 19:36:24 +09:00
parent 6c3b3a494f
commit 78185eae90

View File

@@ -3022,25 +3022,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
if (msg.arg1 == AsyncChannel.STATUS_SUCCESSFUL) {
if (VDBG) log("NetworkFactory connected");
// Finish setting up the full connection
mNetworkFactoryInfos.get(msg.replyTo).asyncChannel.sendMessage(
AsyncChannel.CMD_CHANNEL_FULL_CONNECTION);
// A network factory has connected. Send it all current NetworkRequests.
for (NetworkRequestInfo nri : mNetworkRequests.values()) {
if (nri.request.isListen()) continue;
ensureRunningOnConnectivityServiceThread();
NetworkAgentInfo nai = nri.mSatisfier;
final int score;
final int serial;
if (nai != null) {
score = nai.getCurrentScore();
serial = nai.factorySerialNumber;
} else {
score = 0;
serial = NetworkFactory.SerialNumber.NONE;
}
ac.sendMessage(android.net.NetworkFactory.CMD_REQUEST_NETWORK, score, serial,
nri.request);
}
NetworkFactoryInfo nfi = mNetworkFactoryInfos.get(msg.replyTo);
nfi.completeConnection();
sendAllRequestsToFactory(nfi);
} else {
loge("Error connecting NetworkFactory");
mNetworkFactoryInfos.remove(msg.obj);
@@ -3423,8 +3407,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
}
for (NetworkFactoryInfo nfi : mNetworkFactoryInfos.values()) {
nfi.asyncChannel.sendMessage(android.net.NetworkFactory.CMD_CANCEL_REQUEST,
nri.request);
nfi.cancelRequest(nri.request);
}
} else {
// listens don't have a singular affectedNetwork. Check all networks to see
@@ -4920,16 +4903,33 @@ public class ConnectivityService extends IConnectivityManager.Stub
private static class NetworkFactoryInfo {
public final String name;
public final Messenger messenger;
public final AsyncChannel asyncChannel;
private final AsyncChannel mAsyncChannel;
public final int factorySerialNumber;
NetworkFactoryInfo(String name, Messenger messenger, AsyncChannel asyncChannel,
int factorySerialNumber) {
this.name = name;
this.messenger = messenger;
this.asyncChannel = asyncChannel;
this.mAsyncChannel = asyncChannel;
this.factorySerialNumber = factorySerialNumber;
}
void requestNetwork(NetworkRequest request, int score, int servingSerialNumber) {
mAsyncChannel.sendMessage(android.net.NetworkFactory.CMD_REQUEST_NETWORK, score,
servingSerialNumber, request);
}
void cancelRequest(NetworkRequest request) {
mAsyncChannel.sendMessage(android.net.NetworkFactory.CMD_CANCEL_REQUEST, request);
}
void connect(Context context, Handler handler) {
mAsyncChannel.connect(context, handler, messenger);
}
void completeConnection() {
mAsyncChannel.sendMessage(AsyncChannel.CMD_CHANNEL_FULL_CONNECTION);
}
}
private void ensureNetworkRequestHasType(NetworkRequest request) {
@@ -5318,7 +5318,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
private void handleRegisterNetworkFactory(NetworkFactoryInfo nfi) {
if (DBG) log("Got NetworkFactory Messenger for " + nfi.name);
mNetworkFactoryInfos.put(nfi.messenger, nfi);
nfi.asyncChannel.connect(mContext, mTrackerHandler, nfi.messenger);
nfi.connect(mContext, mTrackerHandler);
}
@Override
@@ -5954,8 +5954,26 @@ public class ConnectivityService extends IConnectivityManager.Stub
log("sending new Min Network Score(" + score + "): " + networkRequest.toString());
}
for (NetworkFactoryInfo nfi : mNetworkFactoryInfos.values()) {
nfi.asyncChannel.sendMessage(android.net.NetworkFactory.CMD_REQUEST_NETWORK, score,
serial, networkRequest);
nfi.requestNetwork(networkRequest, score, serial);
}
}
/** Sends all current NetworkRequests to the specified factory. */
private void sendAllRequestsToFactory(NetworkFactoryInfo nfi) {
ensureRunningOnConnectivityServiceThread();
for (NetworkRequestInfo nri : mNetworkRequests.values()) {
if (nri.request.isListen()) continue;
NetworkAgentInfo nai = nri.mSatisfier;
final int score;
final int serial;
if (nai != null) {
score = nai.getCurrentScore();
serial = nai.factorySerialNumber;
} else {
score = 0;
serial = NetworkFactory.SerialNumber.NONE;
}
nfi.requestNetwork(nri.request, score, serial);
}
}