LCE service implementation - connectivity side
Change-Id: If11bd99c44c7dc8d2aa2bc05a10e04421739baa6
This commit is contained in:
@@ -2451,6 +2451,23 @@ public class ConnectivityManager {
|
||||
sendRequestForNetwork(request.networkCapabilities, networkCallback, 0, LISTEN, TYPE_NONE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Request connectivityservice to refresh network capabilities for the given
|
||||
* {@link network}. This method returns true if the network is still active, false
|
||||
* otherwise. Notice the method call assumes the caller has registered for
|
||||
* listening NetworkCapabilities updates.
|
||||
*
|
||||
* @param network{@link Network} specifying which network you're interested.
|
||||
* @hide
|
||||
*/
|
||||
public boolean requestBwUpdate(Network network) {
|
||||
try {
|
||||
return mService.requestBwUpdate(network);
|
||||
} catch (RemoteException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Unregisters callbacks about and possibly releases networks originating from
|
||||
* {@link #requestNetwork} and {@link #registerNetworkCallback} calls. If the
|
||||
|
||||
@@ -134,6 +134,8 @@ interface IConnectivityManager
|
||||
|
||||
void registerNetworkFactory(in Messenger messenger, in String name);
|
||||
|
||||
boolean requestBwUpdate(in Network network);
|
||||
|
||||
void unregisterNetworkFactory(in Messenger messenger);
|
||||
|
||||
int registerNetworkAgent(in Messenger messenger, in NetworkInfo ni, in LinkProperties lp,
|
||||
|
||||
@@ -49,6 +49,8 @@ public abstract class NetworkAgent extends Handler {
|
||||
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;
|
||||
|
||||
private static final int BASE = Protocol.BASE_NETWORK_AGENT;
|
||||
|
||||
@@ -138,6 +140,11 @@ public abstract class NetworkAgent extends Handler {
|
||||
*/
|
||||
public static final int CMD_SAVE_ACCEPT_UNVALIDATED = BASE + 9;
|
||||
|
||||
/** Sent by ConnectivityService to the NetworkAgent to inform the agent to pull
|
||||
* the underlying network connection for updated bandwidth information.
|
||||
*/
|
||||
public static final int CMD_REQUEST_BANDWIDTH_UPDATE = BASE + 10;
|
||||
|
||||
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);
|
||||
@@ -199,6 +206,15 @@ public abstract class NetworkAgent extends Handler {
|
||||
log("Unhandled Message " + msg);
|
||||
break;
|
||||
}
|
||||
case CMD_REQUEST_BANDWIDTH_UPDATE: {
|
||||
if (VDBG) {
|
||||
log("CMD_REQUEST_BANDWIDTH_UPDATE request received.");
|
||||
}
|
||||
if (System.currentTimeMillis() > (mLastBwRefreshTime + BW_REFRESH_MIN_WIN_MS)) {
|
||||
pollLceData();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CMD_REPORT_NETWORK_STATUS: {
|
||||
if (VDBG) {
|
||||
log("CMD_REPORT_NETWORK_STATUS(" +
|
||||
@@ -244,6 +260,7 @@ public abstract class NetworkAgent extends Handler {
|
||||
* Called by the bearer code when it has new NetworkCapabilities data.
|
||||
*/
|
||||
public void sendNetworkCapabilities(NetworkCapabilities networkCapabilities) {
|
||||
mLastBwRefreshTime = System.currentTimeMillis();
|
||||
queueOrSendMessage(EVENT_NETWORK_CAPABILITIES_CHANGED,
|
||||
new NetworkCapabilities(networkCapabilities));
|
||||
}
|
||||
@@ -297,6 +314,13 @@ public abstract class NetworkAgent extends Handler {
|
||||
*/
|
||||
abstract protected void unwanted();
|
||||
|
||||
/**
|
||||
* Called when ConnectivityService request a bandwidth update. The parent factory
|
||||
* shall try to overwrite this method and produce a bandwidth update if capable.
|
||||
*/
|
||||
protected void pollLceData() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the system determines the usefulness of this network.
|
||||
*
|
||||
|
||||
@@ -3455,6 +3455,24 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean requestBwUpdate(Network network) {
|
||||
enforceAccessPermission();
|
||||
NetworkAgentInfo nai = null;
|
||||
if (network == null) {
|
||||
return false;
|
||||
}
|
||||
synchronized (mNetworkForNetId) {
|
||||
nai = mNetworkForNetId.get(network.netId);
|
||||
}
|
||||
if (nai != null) {
|
||||
nai.asyncChannel.sendMessage(android.net.NetworkAgent.CMD_REQUEST_BANDWIDTH_UPDATE);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private void enforceMeteredApnPolicy(NetworkCapabilities networkCapabilities) {
|
||||
// if UID is restricted, don't allow them to bring up metered APNs
|
||||
if (networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)
|
||||
|
||||
Reference in New Issue
Block a user