Merge "Move NetworkAgent#register to a new method." am: 5d61bc285d am: 7c9677256c
Change-Id: I069ef3b6573bcb4377c730097c73e153d2ab4df1
This commit is contained in:
@@ -51,8 +51,8 @@ public abstract class NetworkAgent {
|
||||
/**
|
||||
* The {@link Network} corresponding to this object.
|
||||
*/
|
||||
@NonNull
|
||||
public final Network network;
|
||||
@Nullable
|
||||
private volatile Network mNetwork;
|
||||
|
||||
// Whether this NetworkAgent is using the legacy (never unhidden) API. The difference is
|
||||
// that the legacy API uses NetworkInfo to convey the state, while the current API is
|
||||
@@ -65,7 +65,6 @@ public abstract class NetworkAgent {
|
||||
private final String LOG_TAG;
|
||||
private static final boolean DBG = true;
|
||||
private static final boolean VDBG = false;
|
||||
private final Context mContext;
|
||||
private final ArrayList<Message>mPreConnectedQueue = new ArrayList<Message>();
|
||||
private volatile long mLastBwRefreshTime = 0;
|
||||
private static final long BW_REFRESH_MIN_WIN_MS = 500;
|
||||
@@ -277,18 +276,21 @@ public abstract class NetworkAgent {
|
||||
public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni,
|
||||
NetworkCapabilities nc, LinkProperties lp, int score) {
|
||||
this(looper, context, logTag, ni, nc, lp, score, null, NetworkProvider.ID_NONE);
|
||||
// Register done by the constructor called in the previous line
|
||||
}
|
||||
|
||||
/** @hide TODO: remove and replace usage with the public constructor. */
|
||||
public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni,
|
||||
NetworkCapabilities nc, LinkProperties lp, int score, NetworkAgentConfig config) {
|
||||
this(looper, context, logTag, ni, nc, lp, score, config, NetworkProvider.ID_NONE);
|
||||
// Register done by the constructor called in the previous line
|
||||
}
|
||||
|
||||
/** @hide TODO: remove and replace usage with the public constructor. */
|
||||
public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni,
|
||||
NetworkCapabilities nc, LinkProperties lp, int score, int providerId) {
|
||||
this(looper, context, logTag, ni, nc, lp, score, null, providerId);
|
||||
// Register done by the constructor called in the previous line
|
||||
}
|
||||
|
||||
/** @hide TODO: remove and replace usage with the public constructor. */
|
||||
@@ -296,6 +298,7 @@ public abstract class NetworkAgent {
|
||||
NetworkCapabilities nc, LinkProperties lp, int score, NetworkAgentConfig config,
|
||||
int providerId) {
|
||||
this(looper, context, logTag, nc, lp, score, config, providerId, ni, true /* legacy */);
|
||||
register();
|
||||
}
|
||||
|
||||
private static NetworkInfo getLegacyNetworkInfo(final NetworkAgentConfig config) {
|
||||
@@ -327,12 +330,32 @@ public abstract class NetworkAgent {
|
||||
getLegacyNetworkInfo(config), false /* legacy */);
|
||||
}
|
||||
|
||||
private NetworkAgent(Looper looper, Context context, String logTag, NetworkCapabilities nc,
|
||||
LinkProperties lp, int score, NetworkAgentConfig config, int providerId,
|
||||
NetworkInfo ni, boolean legacy) {
|
||||
private static class InitialConfiguration {
|
||||
public final Context context;
|
||||
public final NetworkCapabilities capabilities;
|
||||
public final LinkProperties properties;
|
||||
public final int score;
|
||||
public final NetworkAgentConfig config;
|
||||
public final NetworkInfo info;
|
||||
InitialConfiguration(@NonNull Context context, @NonNull NetworkCapabilities capabilities,
|
||||
@NonNull LinkProperties properties, int score, @NonNull NetworkAgentConfig config,
|
||||
@NonNull NetworkInfo info) {
|
||||
this.context = context;
|
||||
this.capabilities = capabilities;
|
||||
this.properties = properties;
|
||||
this.score = score;
|
||||
this.config = config;
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
private volatile InitialConfiguration mInitialConfiguration;
|
||||
|
||||
private NetworkAgent(@NonNull Looper looper, @NonNull Context context, @NonNull String logTag,
|
||||
@NonNull NetworkCapabilities nc, @NonNull LinkProperties lp, int score,
|
||||
@NonNull NetworkAgentConfig config, int providerId, @NonNull NetworkInfo ni,
|
||||
boolean legacy) {
|
||||
mHandler = new NetworkAgentHandler(looper);
|
||||
LOG_TAG = logTag;
|
||||
mContext = context;
|
||||
mIsLegacy = legacy;
|
||||
mNetworkInfo = new NetworkInfo(ni);
|
||||
this.providerId = providerId;
|
||||
@@ -340,12 +363,8 @@ public abstract class NetworkAgent {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
|
||||
if (VDBG) log("Registering NetworkAgent");
|
||||
ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService(
|
||||
Context.CONNECTIVITY_SERVICE);
|
||||
network = cm.registerNetworkAgent(new Messenger(mHandler), new NetworkInfo(ni),
|
||||
new LinkProperties(lp), new NetworkCapabilities(nc), score, config,
|
||||
providerId);
|
||||
mInitialConfiguration = new InitialConfiguration(context, new NetworkCapabilities(nc),
|
||||
new LinkProperties(lp), score, config, ni);
|
||||
}
|
||||
|
||||
private class NetworkAgentHandler extends Handler {
|
||||
@@ -467,6 +486,32 @@ public abstract class NetworkAgent {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Register this network agent with ConnectivityService.
|
||||
* @return the Network associated with this network agent (which can also be obtained later
|
||||
* by calling getNetwork() on this agent).
|
||||
*/
|
||||
@NonNull
|
||||
public Network register() {
|
||||
if (VDBG) log("Registering NetworkAgent");
|
||||
final ConnectivityManager cm = (ConnectivityManager) mInitialConfiguration.context
|
||||
.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
mNetwork = cm.registerNetworkAgent(new Messenger(mHandler),
|
||||
new NetworkInfo(mInitialConfiguration.info),
|
||||
mInitialConfiguration.properties, mInitialConfiguration.capabilities,
|
||||
mInitialConfiguration.score, mInitialConfiguration.config, providerId);
|
||||
mInitialConfiguration = null; // All this memory can now be GC'd
|
||||
return mNetwork;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The Network associated with this agent, or null if it's not registered yet.
|
||||
*/
|
||||
@Nullable
|
||||
public Network getNetwork() {
|
||||
return mNetwork;
|
||||
}
|
||||
|
||||
private void queueOrSendMessage(int what, Object obj) {
|
||||
queueOrSendMessage(what, 0, 0, obj);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user