Merge changes from topics "api-fix-networkagent", "networkprovider_api", "satisfiedby" into rvc-dev

* changes:
  Rename satisfiedBy into canBeSatisfiedBy
  Address further API council comments.
  Update the NetworkProvider API for council comments
This commit is contained in:
Chalard Jean
2020-03-27 22:50:42 +00:00
committed by Android (Google) Code Review
6 changed files with 39 additions and 24 deletions

View File

@@ -36,6 +36,7 @@ import com.android.internal.util.Protocol;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
@@ -47,7 +48,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
* An agent manages the life cycle of a network. A network starts its * An agent manages the life cycle of a network. A network starts its
* life cycle when {@link register} is called on NetworkAgent. The network * life cycle when {@link register} is called on NetworkAgent. The network
* is then connecting. When full L3 connectivity has been established, * is then connecting. When full L3 connectivity has been established,
* the agent shoud call {@link setConnected} to inform the system that * the agent shoud call {@link markConnected} to inform the system that
* this network is ready to use. When the network disconnects its life * this network is ready to use. When the network disconnects its life
* ends and the agent should call {@link unregister}, at which point the * ends and the agent should call {@link unregister}, at which point the
* system will clean up and free resources. * system will clean up and free resources.
@@ -503,7 +504,8 @@ public abstract class NetworkAgent {
break; break;
} }
case CMD_START_SOCKET_KEEPALIVE: { case CMD_START_SOCKET_KEEPALIVE: {
onStartSocketKeepalive(msg.arg1 /* slot */, msg.arg2 /* interval */, onStartSocketKeepalive(msg.arg1 /* slot */,
Duration.ofSeconds(msg.arg2) /* interval */,
(KeepalivePacketData) msg.obj /* packet */); (KeepalivePacketData) msg.obj /* packet */);
break; break;
} }
@@ -617,10 +619,10 @@ public abstract class NetworkAgent {
* Inform ConnectivityService that this agent has now connected. * Inform ConnectivityService that this agent has now connected.
* Call {@link #unregister} to disconnect. * Call {@link #unregister} to disconnect.
*/ */
public void setConnected() { public void markConnected() {
if (mIsLegacy) { if (mIsLegacy) {
throw new UnsupportedOperationException( throw new UnsupportedOperationException(
"Legacy agents can't call setConnected."); "Legacy agents can't call markConnected.");
} }
mNetworkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, null, null); mNetworkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, null, null);
queueOrSendMessage(EVENT_NETWORK_INFO_CHANGED, mNetworkInfo); queueOrSendMessage(EVENT_NETWORK_INFO_CHANGED, mNetworkInfo);
@@ -798,8 +800,8 @@ public abstract class NetworkAgent {
* {@code VALIDATION_STATUS_VALID} if Internet connectivity was validated, * {@code VALIDATION_STATUS_VALID} if Internet connectivity was validated,
* {@code VALIDATION_STATUS_NOT_VALID} if Internet connectivity was not validated. * {@code VALIDATION_STATUS_NOT_VALID} if Internet connectivity was not validated.
* *
* This may be called multiple times as network status changes, or if there are multiple * This is guaranteed to be called again when the network status changes, but the system
* subsequent attempts to validate connectivity that fail. * may also call this multiple times even if the status does not change.
* *
* @param status one of {@code VALIDATION_STATUS_VALID} or {@code VALIDATION_STATUS_NOT_VALID}. * @param status one of {@code VALIDATION_STATUS_VALID} or {@code VALIDATION_STATUS_NOT_VALID}.
* @param redirectUri If Internet connectivity is being redirected (e.g., on a captive portal), * @param redirectUri If Internet connectivity is being redirected (e.g., on a captive portal),
@@ -832,18 +834,25 @@ public abstract class NetworkAgent {
* Requests that the network hardware send the specified packet at the specified interval. * 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 slot the hardware slot on which to start the keepalive.
* @param intervalSeconds the interval between packets * @param interval the interval between packets, between 10 and 3600. Note that this API
* does not support sub-second precision and will round off the request.
* @param packet the packet to send. * @param packet the packet to send.
*/ */
// seconds is from SocketKeepalive.MIN_INTERVAL_SEC to MAX_INTERVAL_SEC, but these should // seconds is from SocketKeepalive.MIN_INTERVAL_SEC to MAX_INTERVAL_SEC, but these should
// not be exposed as constants because they may change in the future (API guideline 4.8) // not be exposed as constants because they may change in the future (API guideline 4.8)
// and should have getters if exposed at all. Getters can't be used in the annotation, // and should have getters if exposed at all. Getters can't be used in the annotation,
// so the values unfortunately need to be copied. // so the values unfortunately need to be copied.
public void onStartSocketKeepalive(int slot, public void onStartSocketKeepalive(int slot, @NonNull Duration interval,
@IntRange(from = 10, to = 3600) int intervalSeconds,
@NonNull KeepalivePacketData packet) { @NonNull KeepalivePacketData packet) {
Message msg = mHandler.obtainMessage(CMD_START_SOCKET_KEEPALIVE, slot, intervalSeconds, final long intervalSeconds = interval.getSeconds();
packet); if (intervalSeconds < SocketKeepalive.MIN_INTERVAL_SEC
|| intervalSeconds > SocketKeepalive.MAX_INTERVAL_SEC) {
throw new IllegalArgumentException("Interval needs to be comprised between "
+ SocketKeepalive.MIN_INTERVAL_SEC + " and " + SocketKeepalive.MAX_INTERVAL_SEC
+ " but was " + intervalSeconds);
}
final Message msg = mHandler.obtainMessage(CMD_START_SOCKET_KEEPALIVE, slot,
(int) intervalSeconds, packet);
startSocketKeepalive(msg); startSocketKeepalive(msg);
msg.recycle(); msg.recycle();
} }

View File

@@ -1122,7 +1122,7 @@ public final class NetworkCapabilities implements Parcelable {
} }
private boolean satisfiedBySpecifier(NetworkCapabilities nc) { private boolean satisfiedBySpecifier(NetworkCapabilities nc) {
return mNetworkSpecifier == null || mNetworkSpecifier.satisfiedBy(nc.mNetworkSpecifier) return mNetworkSpecifier == null || mNetworkSpecifier.canBeSatisfiedBy(nc.mNetworkSpecifier)
|| nc.mNetworkSpecifier instanceof MatchAllNetworkSpecifier; || nc.mNetworkSpecifier instanceof MatchAllNetworkSpecifier;
} }

View File

@@ -16,6 +16,7 @@
package android.net; package android.net;
import android.annotation.IntRange;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.annotation.RequiresPermission; import android.annotation.RequiresPermission;
@@ -33,8 +34,8 @@ import android.util.Log;
* {@link NetworkAgent}s. The networks can then provide connectivity to apps and can be interacted * {@link NetworkAgent}s. The networks can then provide connectivity to apps and can be interacted
* with via networking APIs such as {@link ConnectivityManager}. * with via networking APIs such as {@link ConnectivityManager}.
* *
* Subclasses should implement {@link #onNetworkRequested} and {@link #onRequestWithdrawn} to * Subclasses should implement {@link #onNetworkRequested} and {@link #onNetworkRequestWithdrawn}
* receive {@link NetworkRequest}s sent by the system and by apps. A network that is not the * to receive {@link NetworkRequest}s sent by the system and by apps. A network that is not the
* best (highest-scoring) network for any request is generally not used by the system, and torn * best (highest-scoring) network for any request is generally not used by the system, and torn
* down. * down.
* *
@@ -77,7 +78,7 @@ public class NetworkProvider {
* Constructs a new NetworkProvider. * Constructs a new NetworkProvider.
* *
* @param looper the Looper on which to run {@link #onNetworkRequested} and * @param looper the Looper on which to run {@link #onNetworkRequested} and
* {@link #onRequestWithdrawn}. * {@link #onNetworkRequestWithdrawn}.
* @param name the name of the listener, used only for debugging. * @param name the name of the listener, used only for debugging.
* *
* @hide * @hide
@@ -94,7 +95,7 @@ public class NetworkProvider {
onNetworkRequested((NetworkRequest) m.obj, m.arg1, m.arg2); onNetworkRequested((NetworkRequest) m.obj, m.arg1, m.arg2);
break; break;
case CMD_CANCEL_REQUEST: case CMD_CANCEL_REQUEST:
onRequestWithdrawn((NetworkRequest) m.obj); onNetworkRequestWithdrawn((NetworkRequest) m.obj);
break; break;
default: default:
Log.e(mName, "Unhandled message: " + m.what); Log.e(mName, "Unhandled message: " + m.what);
@@ -142,14 +143,15 @@ public class NetworkProvider {
* @hide * @hide
*/ */
@SystemApi @SystemApi
public void onNetworkRequested(@NonNull NetworkRequest request, int score, int providerId) {} public void onNetworkRequested(@NonNull NetworkRequest request,
@IntRange(from = 0, to = 99) int score, int providerId) {}
/** /**
* Called when a NetworkRequest is withdrawn. * Called when a NetworkRequest is withdrawn.
* @hide * @hide
*/ */
@SystemApi @SystemApi
public void onRequestWithdrawn(@NonNull NetworkRequest request) {} public void onNetworkRequestWithdrawn(@NonNull NetworkRequest request) {}
/** /**
* Asserts that no provider will ever be able to satisfy the specified request. The provider * Asserts that no provider will ever be able to satisfy the specified request. The provider
@@ -157,7 +159,7 @@ public class NetworkProvider {
* satisfying this request, and that the request cannot be satisfied. The application filing the * satisfying this request, and that the request cannot be satisfied. The application filing the
* request will receive an {@link NetworkCallback#onUnavailable()} callback. * request will receive an {@link NetworkCallback#onUnavailable()} callback.
* *
* @param request the request that cannot be fulfilled * @param request the request that permanently cannot be fulfilled
* @hide * @hide
*/ */
@SystemApi @SystemApi

View File

@@ -474,7 +474,7 @@ public class NetworkRequest implements Parcelable {
* @param nc Capabilities that should satisfy this NetworkRequest. null capabilities do not * @param nc Capabilities that should satisfy this NetworkRequest. null capabilities do not
* satisfy any request. * satisfy any request.
*/ */
public boolean satisfiedBy(@Nullable NetworkCapabilities nc) { public boolean canBeSatisfiedBy(@Nullable NetworkCapabilities nc) {
return networkCapabilities.satisfiedByNetworkCapabilities(nc); return networkCapabilities.satisfiedByNetworkCapabilities(nc);
} }

View File

@@ -115,7 +115,8 @@ public abstract class SocketKeepalive implements AutoCloseable {
SUCCESS, SUCCESS,
ERROR_INVALID_LENGTH, ERROR_INVALID_LENGTH,
ERROR_UNSUPPORTED, ERROR_UNSUPPORTED,
ERROR_INSUFFICIENT_RESOURCES ERROR_INSUFFICIENT_RESOURCES,
ERROR_HARDWARE_UNSUPPORTED
}) })
public @interface KeepaliveEvent {} public @interface KeepaliveEvent {}

View File

@@ -2911,7 +2911,7 @@ public class ConnectivityServiceTest {
class ConfidentialMatchAllNetworkSpecifier extends NetworkSpecifier implements class ConfidentialMatchAllNetworkSpecifier extends NetworkSpecifier implements
Parcelable { Parcelable {
@Override @Override
public boolean satisfiedBy(NetworkSpecifier other) { public boolean canBeSatisfiedBy(NetworkSpecifier other) {
return true; return true;
} }
@@ -2939,7 +2939,7 @@ public class ConnectivityServiceTest {
} }
@Override @Override
public boolean satisfiedBy(NetworkSpecifier other) { public boolean canBeSatisfiedBy(NetworkSpecifier other) {
if (other instanceof LocalStringNetworkSpecifier) { if (other instanceof LocalStringNetworkSpecifier) {
return TextUtils.equals(mString, return TextUtils.equals(mString,
((LocalStringNetworkSpecifier) other).mString); ((LocalStringNetworkSpecifier) other).mString);
@@ -3060,7 +3060,10 @@ public class ConnectivityServiceTest {
}); });
class NonParcelableSpecifier extends NetworkSpecifier { class NonParcelableSpecifier extends NetworkSpecifier {
public boolean satisfiedBy(NetworkSpecifier other) { return false; } @Override
public boolean canBeSatisfiedBy(NetworkSpecifier other) {
return false;
}
}; };
class ParcelableSpecifier extends NonParcelableSpecifier implements Parcelable { class ParcelableSpecifier extends NonParcelableSpecifier implements Parcelable {
@Override public int describeContents() { return 0; } @Override public int describeContents() { return 0; }