[NS06] Implement the don't-reap mechanism
This exposes a mechanism for network providers to tell the network stack that a given network must be kept up for some specific reason. This is meant to be easier for them than to have to file a request, in particular because there is no guaranteed way to make sure the request will be best matched by any given network. Test: new test for this Bug: 167544279 Change-Id: I238a3ee5ee9262477a23b897e4141769dd1505d1
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
|
||||
package android.net;
|
||||
|
||||
import android.annotation.IntDef;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.SystemApi;
|
||||
import android.os.Parcel;
|
||||
@@ -23,6 +24,9 @@ import android.os.Parcelable;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
/**
|
||||
* Object representing the quality of a network as perceived by the user.
|
||||
*
|
||||
@@ -36,6 +40,17 @@ public final class NetworkScore implements Parcelable {
|
||||
// a migration.
|
||||
private final int mLegacyInt;
|
||||
|
||||
/** @hide */
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@IntDef(value = {
|
||||
KEEP_CONNECTED_NONE,
|
||||
KEEP_CONNECTED_FOR_HANDOVER
|
||||
})
|
||||
public @interface KeepConnectedReason { }
|
||||
|
||||
public static final int KEEP_CONNECTED_NONE = 0;
|
||||
public static final int KEEP_CONNECTED_FOR_HANDOVER = 1;
|
||||
|
||||
// Agent-managed policies
|
||||
// TODO : add them here, starting from 1
|
||||
/** @hide */
|
||||
@@ -46,21 +61,33 @@ public final class NetworkScore implements Parcelable {
|
||||
// Bitmask of all the policies applied to this score.
|
||||
private final long mPolicies;
|
||||
|
||||
private final int mKeepConnectedReason;
|
||||
|
||||
/** @hide */
|
||||
NetworkScore(final int legacyInt, final long policies) {
|
||||
NetworkScore(final int legacyInt, final long policies,
|
||||
@KeepConnectedReason final int keepConnectedReason) {
|
||||
mLegacyInt = legacyInt;
|
||||
mPolicies = policies;
|
||||
mKeepConnectedReason = keepConnectedReason;
|
||||
}
|
||||
|
||||
private NetworkScore(@NonNull final Parcel in) {
|
||||
mLegacyInt = in.readInt();
|
||||
mPolicies = in.readLong();
|
||||
mKeepConnectedReason = in.readInt();
|
||||
}
|
||||
|
||||
public int getLegacyInt() {
|
||||
return mLegacyInt;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the keep-connected reason, or KEEP_CONNECTED_NONE.
|
||||
*/
|
||||
public int getKeepConnectedReason() {
|
||||
return mKeepConnectedReason;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return whether this score has a particular policy.
|
||||
*
|
||||
@@ -80,6 +107,7 @@ public final class NetworkScore implements Parcelable {
|
||||
public void writeToParcel(@NonNull final Parcel dest, final int flags) {
|
||||
dest.writeInt(mLegacyInt);
|
||||
dest.writeLong(mPolicies);
|
||||
dest.writeInt(mKeepConnectedReason);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -108,6 +136,7 @@ public final class NetworkScore implements Parcelable {
|
||||
private static final long POLICY_NONE = 0L;
|
||||
private static final int INVALID_LEGACY_INT = Integer.MIN_VALUE;
|
||||
private int mLegacyInt = INVALID_LEGACY_INT;
|
||||
private int mKeepConnectedReason = KEEP_CONNECTED_NONE;
|
||||
|
||||
/**
|
||||
* Sets the legacy int for this score.
|
||||
@@ -123,13 +152,24 @@ public final class NetworkScore implements Parcelable {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the keep-connected reason.
|
||||
*
|
||||
* This can be reset by calling it again with {@link KEEP_CONNECTED_NONE}.
|
||||
*/
|
||||
@NonNull
|
||||
public Builder setKeepConnectedReason(@KeepConnectedReason final int reason) {
|
||||
mKeepConnectedReason = reason;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds this NetworkScore.
|
||||
* @return The built NetworkScore object.
|
||||
*/
|
||||
@NonNull
|
||||
public NetworkScore build() {
|
||||
return new NetworkScore(mLegacyInt, POLICY_NONE);
|
||||
return new NetworkScore(mLegacyInt, POLICY_NONE, mKeepConnectedReason);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user