Make most of NetworkAgent @SystemApi.
Bug: 138306002
Bug: 139268426
Test: atest FrameworksNetTests FrameworksWifiTests FrameworksTelephonyTests
Test: atest android.net.cts.ConnectivityManagerTest
Change-Id: I856f01f02c35c2f6a886d8b98039e5dfbc48148b
Merged-In: I856f01f02c35c2f6a886d8b98039e5dfbc48148b
(cherry picked from commit 980ed12f7f)
This commit is contained in:
@@ -17,6 +17,8 @@
|
||||
package android.net;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.SystemApi;
|
||||
import android.compat.annotation.UnsupportedAppUsage;
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
@@ -43,7 +45,12 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public abstract class NetworkAgent {
|
||||
/**
|
||||
* The {@link Network} corresponding to this object.
|
||||
*/
|
||||
@NonNull
|
||||
public final Network network;
|
||||
|
||||
private final Handler mHandler;
|
||||
@@ -55,9 +62,14 @@ public abstract class NetworkAgent {
|
||||
private final ArrayList<Message>mPreConnectedQueue = new ArrayList<Message>();
|
||||
private volatile long mLastBwRefreshTime = 0;
|
||||
private static final long BW_REFRESH_MIN_WIN_MS = 500;
|
||||
private boolean mPollLceScheduled = false;
|
||||
private AtomicBoolean mPollLcePending = new AtomicBoolean(false);
|
||||
public final int mProviderId;
|
||||
private boolean mBandwidthUpdateScheduled = false;
|
||||
private AtomicBoolean mBandwidthUpdatePending = new AtomicBoolean(false);
|
||||
|
||||
/**
|
||||
* The ID of the {@link NetworkProvider} that created this object, or
|
||||
* {@link NetworkProvider#ID_NONE} if unknown.
|
||||
*/
|
||||
public final int providerId;
|
||||
|
||||
private static final int BASE = Protocol.BASE_NETWORK_AGENT;
|
||||
|
||||
@@ -65,6 +77,7 @@ public abstract class NetworkAgent {
|
||||
* Sent by ConnectivityService to the NetworkAgent to inform it of
|
||||
* suspected connectivity problems on its network. The NetworkAgent
|
||||
* should take steps to verify and correct connectivity.
|
||||
* @hide
|
||||
*/
|
||||
public static final int CMD_SUSPECT_BAD = BASE;
|
||||
|
||||
@@ -73,6 +86,7 @@ public abstract class NetworkAgent {
|
||||
* ConnectivityService to pass the current NetworkInfo (connection state).
|
||||
* Sent when the NetworkInfo changes, mainly due to change of state.
|
||||
* obj = NetworkInfo
|
||||
* @hide
|
||||
*/
|
||||
public static final int EVENT_NETWORK_INFO_CHANGED = BASE + 1;
|
||||
|
||||
@@ -80,6 +94,7 @@ public abstract class NetworkAgent {
|
||||
* Sent by the NetworkAgent to ConnectivityService to pass the current
|
||||
* NetworkCapabilties.
|
||||
* obj = NetworkCapabilities
|
||||
* @hide
|
||||
*/
|
||||
public static final int EVENT_NETWORK_CAPABILITIES_CHANGED = BASE + 2;
|
||||
|
||||
@@ -87,11 +102,14 @@ public abstract class NetworkAgent {
|
||||
* Sent by the NetworkAgent to ConnectivityService to pass the current
|
||||
* NetworkProperties.
|
||||
* obj = NetworkProperties
|
||||
* @hide
|
||||
*/
|
||||
public static final int EVENT_NETWORK_PROPERTIES_CHANGED = BASE + 3;
|
||||
|
||||
/* centralize place where base network score, and network score scaling, will be
|
||||
/**
|
||||
* Centralize the place where base network score, and network score scaling, will be
|
||||
* stored, so as we can consistently compare apple and oranges, or wifi, ethernet and LTE
|
||||
* @hide
|
||||
*/
|
||||
public static final int WIFI_BASE_SCORE = 60;
|
||||
|
||||
@@ -99,6 +117,7 @@ public abstract class NetworkAgent {
|
||||
* Sent by the NetworkAgent to ConnectivityService to pass the current
|
||||
* network score.
|
||||
* obj = network score Integer
|
||||
* @hide
|
||||
*/
|
||||
public static final int EVENT_NETWORK_SCORE_CHANGED = BASE + 4;
|
||||
|
||||
@@ -111,12 +130,33 @@ public abstract class NetworkAgent {
|
||||
* obj = Bundle containing map from {@code REDIRECT_URL_KEY} to {@code String}
|
||||
* representing URL that Internet probe was redirect to, if it was redirected,
|
||||
* or mapping to {@code null} otherwise.
|
||||
* @hide
|
||||
*/
|
||||
public static final int CMD_REPORT_NETWORK_STATUS = BASE + 7;
|
||||
|
||||
|
||||
/**
|
||||
* Network validation suceeded.
|
||||
* Corresponds to {@link NetworkCapabilities.NET_CAPABILITY_VALIDATED}.
|
||||
*/
|
||||
public static final int VALIDATION_STATUS_VALID = 1;
|
||||
|
||||
/**
|
||||
* Network validation was attempted and failed. This may be received more than once as
|
||||
* subsequent validation attempts are made.
|
||||
*/
|
||||
public static final int VALIDATION_STATUS_NOT_VALID = 2;
|
||||
|
||||
// TODO: remove.
|
||||
/** @hide */
|
||||
public static final int VALID_NETWORK = 1;
|
||||
/** @hide */
|
||||
public static final int INVALID_NETWORK = 2;
|
||||
|
||||
/**
|
||||
* The key for the redirect URL in the Bundle argument of {@code CMD_REPORT_NETWORK_STATUS}.
|
||||
* @hide
|
||||
*/
|
||||
public static String REDIRECT_URL_KEY = "redirect URL";
|
||||
|
||||
/**
|
||||
@@ -125,6 +165,7 @@ public abstract class NetworkAgent {
|
||||
* CONNECTED so it can be given special treatment at that time.
|
||||
*
|
||||
* obj = boolean indicating whether to use this network even if unvalidated
|
||||
* @hide
|
||||
*/
|
||||
public static final int EVENT_SET_EXPLICITLY_SELECTED = BASE + 8;
|
||||
|
||||
@@ -135,12 +176,14 @@ public abstract class NetworkAgent {
|
||||
* responsibility to remember it.
|
||||
*
|
||||
* arg1 = 1 if true, 0 if false
|
||||
* @hide
|
||||
*/
|
||||
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.
|
||||
* @hide
|
||||
*/
|
||||
public static final int CMD_REQUEST_BANDWIDTH_UPDATE = BASE + 10;
|
||||
|
||||
@@ -153,6 +196,7 @@ public abstract class NetworkAgent {
|
||||
* obj = KeepalivePacketData object describing the data to be sent
|
||||
*
|
||||
* Also used internally by ConnectivityService / KeepaliveTracker, with different semantics.
|
||||
* @hide
|
||||
*/
|
||||
public static final int CMD_START_SOCKET_KEEPALIVE = BASE + 11;
|
||||
|
||||
@@ -162,6 +206,7 @@ public abstract class NetworkAgent {
|
||||
* arg1 = slot number of the keepalive to stop.
|
||||
*
|
||||
* Also used internally by ConnectivityService / KeepaliveTracker, with different semantics.
|
||||
* @hide
|
||||
*/
|
||||
public static final int CMD_STOP_SOCKET_KEEPALIVE = BASE + 12;
|
||||
|
||||
@@ -175,6 +220,7 @@ public abstract class NetworkAgent {
|
||||
*
|
||||
* arg1 = slot number of the keepalive
|
||||
* arg2 = error code
|
||||
* @hide
|
||||
*/
|
||||
public static final int EVENT_SOCKET_KEEPALIVE = BASE + 13;
|
||||
|
||||
@@ -183,6 +229,7 @@ public abstract class NetworkAgent {
|
||||
* that when crossed should trigger a system wakeup and a NetworkCapabilities update.
|
||||
*
|
||||
* obj = int[] describing signal strength thresholds.
|
||||
* @hide
|
||||
*/
|
||||
public static final int CMD_SET_SIGNAL_STRENGTH_THRESHOLDS = BASE + 14;
|
||||
|
||||
@@ -190,6 +237,7 @@ public abstract class NetworkAgent {
|
||||
* Sent by ConnectivityService to the NeworkAgent to inform the agent to avoid
|
||||
* automatically reconnecting to this network (e.g. via autojoin). Happens
|
||||
* when user selects "No" option on the "Stay connected?" dialog box.
|
||||
* @hide
|
||||
*/
|
||||
public static final int CMD_PREVENT_AUTOMATIC_RECONNECT = BASE + 15;
|
||||
|
||||
@@ -202,6 +250,7 @@ public abstract class NetworkAgent {
|
||||
* This does not happen with UDP, so this message is TCP-specific.
|
||||
* arg1 = slot number of the keepalive to filter for.
|
||||
* obj = the keepalive packet to send repeatedly.
|
||||
* @hide
|
||||
*/
|
||||
public static final int CMD_ADD_KEEPALIVE_PACKET_FILTER = BASE + 16;
|
||||
|
||||
@@ -209,6 +258,7 @@ public abstract class NetworkAgent {
|
||||
* Sent by the KeepaliveTracker to NetworkAgent to remove a packet filter. See
|
||||
* {@link #CMD_ADD_KEEPALIVE_PACKET_FILTER}.
|
||||
* arg1 = slot number of the keepalive packet filter to remove.
|
||||
* @hide
|
||||
*/
|
||||
public static final int CMD_REMOVE_KEEPALIVE_PACKET_FILTER = BASE + 17;
|
||||
|
||||
@@ -216,27 +266,32 @@ public abstract class NetworkAgent {
|
||||
// of dependent changes that would conflict throughout the automerger graph. Having these
|
||||
// temporarily helps with the process of going through with all these dependent changes across
|
||||
// the entire tree.
|
||||
/** @hide TODO: decide which of these to expose. */
|
||||
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);
|
||||
}
|
||||
|
||||
/** @hide TODO: decide which of these to expose. */
|
||||
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);
|
||||
}
|
||||
|
||||
/** @hide TODO: decide which of these to expose. */
|
||||
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);
|
||||
}
|
||||
|
||||
/** @hide TODO: decide which of these to expose. */
|
||||
public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni,
|
||||
NetworkCapabilities nc, LinkProperties lp, int score, NetworkAgentConfig config,
|
||||
int providerId) {
|
||||
mHandler = new NetworkAgentHandler(looper);
|
||||
LOG_TAG = logTag;
|
||||
mContext = context;
|
||||
mProviderId = providerId;
|
||||
this.providerId = providerId;
|
||||
if (ni == null || nc == null || lp == null) {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
@@ -284,7 +339,7 @@ public abstract class NetworkAgent {
|
||||
case AsyncChannel.CMD_CHANNEL_DISCONNECTED: {
|
||||
if (DBG) log("NetworkAgent channel lost");
|
||||
// let the client know CS is done with us.
|
||||
unwanted();
|
||||
onNetworkUnwanted();
|
||||
synchronized (mPreConnectedQueue) {
|
||||
mAsyncChannel = null;
|
||||
}
|
||||
@@ -300,16 +355,16 @@ public abstract class NetworkAgent {
|
||||
log("CMD_REQUEST_BANDWIDTH_UPDATE request received.");
|
||||
}
|
||||
if (currentTimeMs >= (mLastBwRefreshTime + BW_REFRESH_MIN_WIN_MS)) {
|
||||
mPollLceScheduled = false;
|
||||
if (!mPollLcePending.getAndSet(true)) {
|
||||
pollLceData();
|
||||
mBandwidthUpdateScheduled = false;
|
||||
if (!mBandwidthUpdatePending.getAndSet(true)) {
|
||||
onBandwidthUpdateRequested();
|
||||
}
|
||||
} else {
|
||||
// deliver the request at a later time rather than discard it completely.
|
||||
if (!mPollLceScheduled) {
|
||||
if (!mBandwidthUpdateScheduled) {
|
||||
long waitTime = mLastBwRefreshTime + BW_REFRESH_MIN_WIN_MS
|
||||
- currentTimeMs + 1;
|
||||
mPollLceScheduled = sendEmptyMessageDelayed(
|
||||
mBandwidthUpdateScheduled = sendEmptyMessageDelayed(
|
||||
CMD_REQUEST_BANDWIDTH_UPDATE, waitTime);
|
||||
}
|
||||
}
|
||||
@@ -322,19 +377,20 @@ public abstract class NetworkAgent {
|
||||
+ (msg.arg1 == VALID_NETWORK ? "VALID, " : "INVALID, ")
|
||||
+ redirectUrl);
|
||||
}
|
||||
networkStatus(msg.arg1, redirectUrl);
|
||||
onValidationStatus(msg.arg1 /* status */, redirectUrl);
|
||||
break;
|
||||
}
|
||||
case CMD_SAVE_ACCEPT_UNVALIDATED: {
|
||||
saveAcceptUnvalidated(msg.arg1 != 0);
|
||||
onSaveAcceptUnvalidated(msg.arg1 != 0);
|
||||
break;
|
||||
}
|
||||
case CMD_START_SOCKET_KEEPALIVE: {
|
||||
startSocketKeepalive(msg);
|
||||
onStartSocketKeepalive(msg.arg1 /* slot */, msg.arg2 /* interval */,
|
||||
(KeepalivePacketData) msg.obj /* packet */);
|
||||
break;
|
||||
}
|
||||
case CMD_STOP_SOCKET_KEEPALIVE: {
|
||||
stopSocketKeepalive(msg);
|
||||
onStopSocketKeepalive(msg.arg1 /* slot */);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -347,19 +403,20 @@ public abstract class NetworkAgent {
|
||||
for (int i = 0; i < intThresholds.length; i++) {
|
||||
intThresholds[i] = thresholds.get(i);
|
||||
}
|
||||
setSignalStrengthThresholds(intThresholds);
|
||||
onSignalStrengthThresholdsUpdated(intThresholds);
|
||||
break;
|
||||
}
|
||||
case CMD_PREVENT_AUTOMATIC_RECONNECT: {
|
||||
preventAutomaticReconnect();
|
||||
onAutomaticReconnectDisabled();
|
||||
break;
|
||||
}
|
||||
case CMD_ADD_KEEPALIVE_PACKET_FILTER: {
|
||||
addKeepalivePacketFilter(msg);
|
||||
onAddKeepalivePacketFilter(msg.arg1 /* slot */,
|
||||
(KeepalivePacketData) msg.obj /* packet */);
|
||||
break;
|
||||
}
|
||||
case CMD_REMOVE_KEEPALIVE_PACKET_FILTER: {
|
||||
removeKeepalivePacketFilter(msg);
|
||||
onRemoveKeepalivePacketFilter(msg.arg1 /* slot */);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -394,14 +451,16 @@ public abstract class NetworkAgent {
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by the bearer code when it has new LinkProperties data.
|
||||
* Must be called by the agent when the network's {@link LinkProperties} change.
|
||||
* @param linkProperties the new LinkProperties.
|
||||
*/
|
||||
public void sendLinkProperties(LinkProperties linkProperties) {
|
||||
public void sendLinkProperties(@NonNull LinkProperties linkProperties) {
|
||||
queueOrSendMessage(EVENT_NETWORK_PROPERTIES_CHANGED, new LinkProperties(linkProperties));
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by the bearer code when it has new NetworkInfo data.
|
||||
* Must be called by the agent when it has a new NetworkInfo object.
|
||||
* @hide TODO: expose something better.
|
||||
*/
|
||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
|
||||
public void sendNetworkInfo(NetworkInfo networkInfo) {
|
||||
@@ -409,17 +468,19 @@ public abstract class NetworkAgent {
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by the bearer code when it has new NetworkCapabilities data.
|
||||
* Must be called by the agent when the network's {@link NetworkCapabilities} change.
|
||||
* @param networkCapabilities the new NetworkCapabilities.
|
||||
*/
|
||||
public void sendNetworkCapabilities(NetworkCapabilities networkCapabilities) {
|
||||
mPollLcePending.set(false);
|
||||
public void sendNetworkCapabilities(@NonNull NetworkCapabilities networkCapabilities) {
|
||||
mBandwidthUpdatePending.set(false);
|
||||
mLastBwRefreshTime = System.currentTimeMillis();
|
||||
queueOrSendMessage(EVENT_NETWORK_CAPABILITIES_CHANGED,
|
||||
new NetworkCapabilities(networkCapabilities));
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by the bearer code when it has a new score for this network.
|
||||
* Must be called by the agent to update the score of this network.
|
||||
* @param score the new score.
|
||||
*/
|
||||
public void sendNetworkScore(int score) {
|
||||
if (score < 0) {
|
||||
@@ -431,14 +492,16 @@ public abstract class NetworkAgent {
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by the bearer code when it has a new NetworkScore for this network.
|
||||
* Must be called by the agent when it has a new {@link NetworkScore} for this network.
|
||||
* @param ns the new score.
|
||||
* @hide TODO: unhide the NetworkScore class, and rename to sendNetworkScore.
|
||||
*/
|
||||
public void updateScore(@NonNull NetworkScore ns) {
|
||||
queueOrSendMessage(EVENT_NETWORK_SCORE_CHANGED, new NetworkScore(ns));
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by the bearer to indicate this network was manually selected by the user.
|
||||
* Must be called by the agent to indicate this network was manually selected by the user.
|
||||
* This should be called before the NetworkInfo is marked CONNECTED so that this
|
||||
* Network can be given special treatment at that time. If {@code acceptUnvalidated} is
|
||||
* {@code true}, then the system will switch to this network. If it is {@code false} and the
|
||||
@@ -447,15 +510,16 @@ public abstract class NetworkAgent {
|
||||
* {@link #saveAcceptUnvalidated} to persist the user's choice. Thus, if the transport ever
|
||||
* calls this method with {@code acceptUnvalidated} set to {@code false}, it must also implement
|
||||
* {@link #saveAcceptUnvalidated} to respect the user's choice.
|
||||
* @hide should move to NetworkAgentConfig.
|
||||
*/
|
||||
public void explicitlySelected(boolean acceptUnvalidated) {
|
||||
explicitlySelected(true /* explicitlySelected */, acceptUnvalidated);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by the bearer to indicate whether the network was manually selected by the user.
|
||||
* This should be called before the NetworkInfo is marked CONNECTED so that this
|
||||
* Network can be given special treatment at that time.
|
||||
* Must be called by the agent to indicate whether the network was manually selected by the
|
||||
* user. This should be called before the network becomes connected, so it can be given
|
||||
* special treatment when it does.
|
||||
*
|
||||
* If {@code explicitlySelected} is {@code true}, and {@code acceptUnvalidated} is {@code true},
|
||||
* then the system will switch to this network. If {@code explicitlySelected} is {@code true}
|
||||
@@ -470,6 +534,7 @@ public abstract class NetworkAgent {
|
||||
* {@code true}, the system will interpret this as the user having accepted partial connectivity
|
||||
* on this network. Thus, the system will switch to the network and consider it validated even
|
||||
* if it only provides partial connectivity, but the network is not otherwise treated specially.
|
||||
* @hide should move to NetworkAgentConfig.
|
||||
*/
|
||||
public void explicitlySelected(boolean explicitlySelected, boolean acceptUnvalidated) {
|
||||
queueOrSendMessage(EVENT_SET_EXPLICITLY_SELECTED,
|
||||
@@ -483,73 +548,126 @@ public abstract class NetworkAgent {
|
||||
* as well, either canceling NetworkRequests or altering their score such that this
|
||||
* network won't be immediately requested again.
|
||||
*/
|
||||
abstract protected void unwanted();
|
||||
public void onNetworkUnwanted() {
|
||||
unwanted();
|
||||
}
|
||||
/** @hide TODO delete once subclasses have moved to onNetworkUnwanted. */
|
||||
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.
|
||||
*/
|
||||
public void onBandwidthUpdateRequested() {
|
||||
pollLceData();
|
||||
}
|
||||
/** @hide TODO delete once subclasses have moved to onBandwidthUpdateRequested. */
|
||||
protected void pollLceData() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the system determines the usefulness of this network.
|
||||
*
|
||||
* Networks claiming internet connectivity will have their internet
|
||||
* connectivity verified.
|
||||
* The system attempts to validate Internet connectivity on networks that provide the
|
||||
* {@NetworkCapabilities#NET_CAPABILITY_INTERNET} capability.
|
||||
*
|
||||
* Currently there are two possible values:
|
||||
* {@code VALID_NETWORK} if the system is happy with the connection,
|
||||
* {@code INVALID_NETWORK} if the system is not happy.
|
||||
* TODO - add indications of captive portal-ness and related success/failure,
|
||||
* ie, CAPTIVE_SUCCESS_NETWORK, CAPTIVE_NETWORK for successful login and detection
|
||||
* {@code VALIDATION_STATUS_VALID} if Internet connectivity was validated,
|
||||
* {@code VALIDATION_STATUS_NOT_VALID} if Internet connectivity was not validated.
|
||||
*
|
||||
* This may be called multiple times as the network status changes and may
|
||||
* generate false negatives if we lose ip connectivity before the link is torn down.
|
||||
* This may be called multiple times as network status changes, or if there are multiple
|
||||
* subsequent attempts to validate connectivity that fail.
|
||||
*
|
||||
* @param status one of {@code VALID_NETWORK} or {@code INVALID_NETWORK}.
|
||||
* @param redirectUrl If the Internet probe was redirected, this is the destination it was
|
||||
* redirected to, otherwise {@code null}.
|
||||
* @param status one of {@code VALIDATION_STATUS_VALID} or {@code VALIDATION_STATUS_NOT_VALID}.
|
||||
* @param redirectUrl If Internet connectivity is being redirected (e.g., on a captive portal),
|
||||
* this is the destination the probes are being redirected to, otherwise {@code null}.
|
||||
*/
|
||||
public void onValidationStatus(int status, @Nullable String redirectUrl) {
|
||||
networkStatus(status, redirectUrl);
|
||||
}
|
||||
/** @hide TODO delete once subclasses have moved to onValidationStatus */
|
||||
protected void networkStatus(int status, String redirectUrl) {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called when the user asks to remember the choice to use this network even if unvalidated.
|
||||
* The transport is responsible for remembering the choice, and the next time the user connects
|
||||
* to the network, should explicitlySelected with {@code acceptUnvalidated} set to {@code true}.
|
||||
* This method will only be called if {@link #explicitlySelected} was called with
|
||||
* {@code acceptUnvalidated} set to {@code false}.
|
||||
* @param accept whether the user wants to use the network even if unvalidated.
|
||||
*/
|
||||
public void onSaveAcceptUnvalidated(boolean accept) {
|
||||
saveAcceptUnvalidated(accept);
|
||||
}
|
||||
/** @hide TODO delete once subclasses have moved to onSaveAcceptUnvalidated */
|
||||
protected void saveAcceptUnvalidated(boolean accept) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Requests that the network hardware send the specified packet at the specified interval.
|
||||
*
|
||||
* @param slot the hardware slot on which to start the keepalive.
|
||||
* @param intervalSeconds the interval between packets
|
||||
* @param packet the packet to send.
|
||||
*/
|
||||
public void onStartSocketKeepalive(int slot, int intervalSeconds,
|
||||
@NonNull KeepalivePacketData packet) {
|
||||
Message msg = mHandler.obtainMessage(CMD_START_SOCKET_KEEPALIVE, slot, intervalSeconds,
|
||||
packet);
|
||||
startSocketKeepalive(msg);
|
||||
msg.recycle();
|
||||
}
|
||||
/** @hide TODO delete once subclasses have moved to onStartSocketKeepalive */
|
||||
protected void startSocketKeepalive(Message msg) {
|
||||
onSocketKeepaliveEvent(msg.arg1, SocketKeepalive.ERROR_UNSUPPORTED);
|
||||
}
|
||||
|
||||
/**
|
||||
* Requests that the network hardware send the specified packet at the specified interval.
|
||||
* Requests that the network hardware stop a previously-started keepalive.
|
||||
*
|
||||
* @param slot the hardware slot on which to stop the keepalive.
|
||||
*/
|
||||
public void onStopSocketKeepalive(int slot) {
|
||||
Message msg = mHandler.obtainMessage(CMD_STOP_SOCKET_KEEPALIVE, slot, 0, null);
|
||||
stopSocketKeepalive(msg);
|
||||
msg.recycle();
|
||||
}
|
||||
/** @hide TODO delete once subclasses have moved to onStopSocketKeepalive */
|
||||
protected void stopSocketKeepalive(Message msg) {
|
||||
onSocketKeepaliveEvent(msg.arg1, SocketKeepalive.ERROR_UNSUPPORTED);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by the network when a socket keepalive event occurs.
|
||||
* Must be called by the agent when a socket keepalive event occurs.
|
||||
*
|
||||
* @param slot the hardware slot on which the event occurred.
|
||||
* @param event the event that occurred.
|
||||
*/
|
||||
public void sendSocketKeepaliveEvent(int slot, int event) {
|
||||
queueOrSendMessage(EVENT_SOCKET_KEEPALIVE, slot, event);
|
||||
}
|
||||
/** @hide TODO delete once callers have moved to sendSocketKeepaliveEvent */
|
||||
public void onSocketKeepaliveEvent(int slot, int reason) {
|
||||
queueOrSendMessage(EVENT_SOCKET_KEEPALIVE, slot, reason);
|
||||
sendSocketKeepaliveEvent(slot, reason);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by ConnectivityService to add specific packet filter to network hardware to block
|
||||
* ACKs matching the sent keepalive packets. Implementations that support this feature must
|
||||
* override this method.
|
||||
* replies (e.g., TCP ACKs) matching the sent keepalive packets. Implementations that support
|
||||
* this feature must override this method.
|
||||
*
|
||||
* @param slot the hardware slot on which the keepalive should be sent.
|
||||
* @param packet the packet that is being sent.
|
||||
*/
|
||||
public void onAddKeepalivePacketFilter(int slot, @NonNull KeepalivePacketData packet) {
|
||||
Message msg = mHandler.obtainMessage(CMD_ADD_KEEPALIVE_PACKET_FILTER, slot, 0, packet);
|
||||
addKeepalivePacketFilter(msg);
|
||||
msg.recycle();
|
||||
}
|
||||
/** @hide TODO delete once subclasses have moved to onAddKeepalivePacketFilter */
|
||||
protected void addKeepalivePacketFilter(Message msg) {
|
||||
}
|
||||
|
||||
@@ -557,14 +675,28 @@ public abstract class NetworkAgent {
|
||||
* Called by ConnectivityService to remove a packet filter installed with
|
||||
* {@link #addKeepalivePacketFilter(Message)}. Implementations that support this feature
|
||||
* must override this method.
|
||||
*
|
||||
* @param slot the hardware slot on which the keepalive is being sent.
|
||||
*/
|
||||
public void onRemoveKeepalivePacketFilter(int slot) {
|
||||
Message msg = mHandler.obtainMessage(CMD_REMOVE_KEEPALIVE_PACKET_FILTER, slot, 0, null);
|
||||
removeKeepalivePacketFilter(msg);
|
||||
msg.recycle();
|
||||
}
|
||||
/** @hide TODO delete once subclasses have moved to onRemoveKeepalivePacketFilter */
|
||||
protected void removeKeepalivePacketFilter(Message msg) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by ConnectivityService to inform this network transport of signal strength thresholds
|
||||
* that when crossed should trigger a system wakeup and a NetworkCapabilities update.
|
||||
*
|
||||
* @param thresholds the array of thresholds that should trigger wakeups.
|
||||
*/
|
||||
public void onSignalStrengthThresholdsUpdated(@NonNull int[] thresholds) {
|
||||
setSignalStrengthThresholds(thresholds);
|
||||
}
|
||||
/** @hide TODO delete once subclasses have moved to onSetSignalStrengthThresholds */
|
||||
protected void setSignalStrengthThresholds(int[] thresholds) {
|
||||
}
|
||||
|
||||
@@ -574,9 +706,14 @@ public abstract class NetworkAgent {
|
||||
* responsible for making sure the device does not automatically reconnect to the same network
|
||||
* after the {@code unwanted} call.
|
||||
*/
|
||||
public void onAutomaticReconnectDisabled() {
|
||||
preventAutomaticReconnect();
|
||||
}
|
||||
/** @hide TODO delete once subclasses have moved to onAutomaticReconnectDisabled */
|
||||
protected void preventAutomaticReconnect() {
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
protected void log(String s) {
|
||||
Log.d(LOG_TAG, "NetworkAgent: " + s);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user