Fix Legacy NetworkInfo API
Make the connectivity changed broadcasts send correct NetworkInfos. Also update the results of getNetwork. bug:15290306 bug:15191336 bug:14993207 Change-Id: Ie99ad25f3ebb90d18348e7013761b139e7481866 (cherry picked from commit 16fe1c18289de200d2249e51db8c0986619f487b)
This commit is contained in:
@@ -905,7 +905,7 @@ public class ConnectivityManager {
|
||||
return null;
|
||||
}
|
||||
|
||||
private int networkTypeForNetworkCapabilities(NetworkCapabilities netCap) {
|
||||
private int legacyTypeForNetworkCapabilities(NetworkCapabilities netCap) {
|
||||
if (netCap == null) return TYPE_NONE;
|
||||
if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_CBS)) {
|
||||
return TYPE_MOBILE_CBS;
|
||||
@@ -928,6 +928,9 @@ public class ConnectivityManager {
|
||||
if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)) {
|
||||
return TYPE_MOBILE_HIPRI;
|
||||
}
|
||||
if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_WIFI_P2P)) {
|
||||
return TYPE_WIFI_P2P;
|
||||
}
|
||||
return TYPE_NONE;
|
||||
}
|
||||
|
||||
@@ -988,7 +991,7 @@ public class ConnectivityManager {
|
||||
|
||||
private NetworkRequest requestNetworkForFeatureLocked(NetworkCapabilities netCap) {
|
||||
int delay = -1;
|
||||
int type = networkTypeForNetworkCapabilities(netCap);
|
||||
int type = legacyTypeForNetworkCapabilities(netCap);
|
||||
try {
|
||||
delay = mService.getRestoreDefaultNetworkDelay(type);
|
||||
} catch (RemoteException e) {}
|
||||
@@ -997,7 +1000,7 @@ public class ConnectivityManager {
|
||||
l.delay = delay;
|
||||
l.expireSequenceNumber = 0;
|
||||
l.networkRequest = sendRequestForNetwork(netCap, l.networkCallbackListener, 0,
|
||||
REQUEST, true);
|
||||
REQUEST, type);
|
||||
if (l.networkRequest == null) return null;
|
||||
sLegacyRequests.put(netCap, l);
|
||||
sendExpireMsgForFeature(netCap, l.expireSequenceNumber, delay);
|
||||
@@ -2144,7 +2147,7 @@ public class ConnectivityManager {
|
||||
|
||||
private NetworkRequest sendRequestForNetwork(NetworkCapabilities need,
|
||||
NetworkCallbackListener networkCallbackListener, int timeoutSec, int action,
|
||||
boolean legacy) {
|
||||
int legacyType) {
|
||||
NetworkRequest networkRequest = null;
|
||||
if (networkCallbackListener == null) {
|
||||
throw new IllegalArgumentException("null NetworkCallbackListener");
|
||||
@@ -2157,7 +2160,7 @@ public class ConnectivityManager {
|
||||
new Binder());
|
||||
} else {
|
||||
networkRequest = mService.requestNetwork(need, new Messenger(sCallbackHandler),
|
||||
timeoutSec, new Binder(), legacy);
|
||||
timeoutSec, new Binder(), legacyType);
|
||||
}
|
||||
if (networkRequest != null) {
|
||||
synchronized(sNetworkCallbackListener) {
|
||||
@@ -2187,7 +2190,7 @@ public class ConnectivityManager {
|
||||
*/
|
||||
public NetworkRequest requestNetwork(NetworkCapabilities need,
|
||||
NetworkCallbackListener networkCallbackListener) {
|
||||
return sendRequestForNetwork(need, networkCallbackListener, 0, REQUEST, false);
|
||||
return sendRequestForNetwork(need, networkCallbackListener, 0, REQUEST, TYPE_NONE);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2210,7 +2213,8 @@ public class ConnectivityManager {
|
||||
*/
|
||||
public NetworkRequest requestNetwork(NetworkCapabilities need,
|
||||
NetworkCallbackListener networkCallbackListener, int timeoutSec) {
|
||||
return sendRequestForNetwork(need, networkCallbackListener, timeoutSec, REQUEST, false);
|
||||
return sendRequestForNetwork(need, networkCallbackListener, timeoutSec, REQUEST,
|
||||
TYPE_NONE);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2288,7 +2292,7 @@ public class ConnectivityManager {
|
||||
*/
|
||||
public NetworkRequest listenForNetwork(NetworkCapabilities need,
|
||||
NetworkCallbackListener networkCallbackListener) {
|
||||
return sendRequestForNetwork(need, networkCallbackListener, 0, LISTEN, false);
|
||||
return sendRequestForNetwork(need, networkCallbackListener, 0, LISTEN, TYPE_NONE);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -158,7 +158,7 @@ interface IConnectivityManager
|
||||
in NetworkCapabilities nc, int score);
|
||||
|
||||
NetworkRequest requestNetwork(in NetworkCapabilities networkCapabilities,
|
||||
in Messenger messenger, int timeoutSec, in IBinder binder, boolean legacy);
|
||||
in Messenger messenger, int timeoutSec, in IBinder binder, int legacy);
|
||||
|
||||
NetworkRequest pendingRequestForNetwork(in NetworkCapabilities networkCapabilities,
|
||||
in PendingIntent operation);
|
||||
|
||||
@@ -187,6 +187,15 @@ public class NetworkInfo implements Parcelable {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
public void setType(int type) {
|
||||
synchronized (this) {
|
||||
mNetworkType = type;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a network-type-specific integer describing the subtype
|
||||
* of the network.
|
||||
|
||||
@@ -47,19 +47,19 @@ public class NetworkRequest implements Parcelable {
|
||||
public final int requestId;
|
||||
|
||||
/**
|
||||
* Set for legacy requests and the default.
|
||||
* Set for legacy requests and the default. Set to TYPE_NONE for none.
|
||||
* Causes CONNECTIVITY_ACTION broadcasts to be sent.
|
||||
* @hide
|
||||
*/
|
||||
public final boolean needsBroadcasts;
|
||||
public final int legacyType;
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
public NetworkRequest(NetworkCapabilities nc, boolean needsBroadcasts, int rId) {
|
||||
public NetworkRequest(NetworkCapabilities nc, int legacyType, int rId) {
|
||||
requestId = rId;
|
||||
networkCapabilities = nc;
|
||||
this.needsBroadcasts = needsBroadcasts;
|
||||
this.legacyType = legacyType;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -68,7 +68,7 @@ public class NetworkRequest implements Parcelable {
|
||||
public NetworkRequest(NetworkRequest that) {
|
||||
networkCapabilities = new NetworkCapabilities(that.networkCapabilities);
|
||||
requestId = that.requestId;
|
||||
needsBroadcasts = that.needsBroadcasts;
|
||||
this.legacyType = that.legacyType;
|
||||
}
|
||||
|
||||
// implement the Parcelable interface
|
||||
@@ -77,16 +77,16 @@ public class NetworkRequest implements Parcelable {
|
||||
}
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeParcelable(networkCapabilities, flags);
|
||||
dest.writeInt(needsBroadcasts ? 1 : 0);
|
||||
dest.writeInt(legacyType);
|
||||
dest.writeInt(requestId);
|
||||
}
|
||||
public static final Creator<NetworkRequest> CREATOR =
|
||||
new Creator<NetworkRequest>() {
|
||||
public NetworkRequest createFromParcel(Parcel in) {
|
||||
NetworkCapabilities nc = (NetworkCapabilities)in.readParcelable(null);
|
||||
boolean needsBroadcasts = (in.readInt() == 1);
|
||||
int legacyType = in.readInt();
|
||||
int requestId = in.readInt();
|
||||
NetworkRequest result = new NetworkRequest(nc, needsBroadcasts, requestId);
|
||||
NetworkRequest result = new NetworkRequest(nc, legacyType, requestId);
|
||||
return result;
|
||||
}
|
||||
public NetworkRequest[] newArray(int size) {
|
||||
@@ -95,14 +95,14 @@ public class NetworkRequest implements Parcelable {
|
||||
};
|
||||
|
||||
public String toString() {
|
||||
return "NetworkRequest [ id=" + requestId + ", needsBroadcasts=" + needsBroadcasts +
|
||||
return "NetworkRequest [ id=" + requestId + ", legacyType=" + legacyType +
|
||||
", " + networkCapabilities.toString() + " ]";
|
||||
}
|
||||
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof NetworkRequest == false) return false;
|
||||
NetworkRequest that = (NetworkRequest)obj;
|
||||
return (that.needsBroadcasts == this.needsBroadcasts &&
|
||||
return (that.legacyType == this.legacyType &&
|
||||
that.requestId == this.requestId &&
|
||||
((that.networkCapabilities == null && this.networkCapabilities == null) ||
|
||||
(that.networkCapabilities != null &&
|
||||
@@ -110,7 +110,7 @@ public class NetworkRequest implements Parcelable {
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
return requestId + (needsBroadcasts ? 1013 : 2026) +
|
||||
return requestId + (legacyType * 1013) +
|
||||
(networkCapabilities.hashCode() * 1051);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user