diff options
Diffstat (limited to 'core/java/android/net')
-rw-r--r-- | core/java/android/net/ConnectivityManager.java | 17 | ||||
-rw-r--r-- | core/java/android/net/IConnectivityManager.aidl | 2 | ||||
-rw-r--r-- | core/java/android/net/NetworkAgent.java | 26 |
3 files changed, 45 insertions, 0 deletions
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index 1125e6d..cab893b 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -2456,6 +2456,23 @@ public class ConnectivityManager { } /** + * 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 * given {@code NetworkCallback} had previously been used with {@code #requestNetwork}, diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl index 05ef2e6..e94ee06 100644 --- a/core/java/android/net/IConnectivityManager.aidl +++ b/core/java/android/net/IConnectivityManager.aidl @@ -131,6 +131,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, diff --git a/core/java/android/net/NetworkAgent.java b/core/java/android/net/NetworkAgent.java index ddaa808..c33aa2f 100644 --- a/core/java/android/net/NetworkAgent.java +++ b/core/java/android/net/NetworkAgent.java @@ -52,6 +52,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; @@ -129,6 +131,13 @@ public abstract class NetworkAgent extends Handler { */ public static final int EVENT_SET_EXPLICITLY_SELECTED = BASE + 8; + /** + * 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 + 9; + + 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); @@ -190,6 +199,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(" + @@ -232,6 +250,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)); } @@ -280,6 +299,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. * * Networks claiming internet connectivity will have their internet |