Do not change NetworkInfo.DetailedState.
I'd changed DetailedState to force ConnectivityService to treat provisioning apn's specially. In particular so that they wouldn't be identified they were fully connected until the provisioning actually started. The problem is that DetailedState is a public enum that has a CTS test and just changing the CTS to allow for the new state (CONNECTED_TO_PROVISIONING_NETWORK) was inappropriate. Instead I've added a new mIsConnectedToProvisioningNetwork variable and used the DetailedState.SUSPENDED as the intermediate state. Bug: 10620248 Change-Id: Id4a842398cad67455541ce629959351c27d83639
This commit is contained in:
@@ -83,13 +83,7 @@ public class NetworkInfo implements Parcelable {
|
|||||||
/** Link has poor connectivity. */
|
/** Link has poor connectivity. */
|
||||||
VERIFYING_POOR_LINK,
|
VERIFYING_POOR_LINK,
|
||||||
/** Checking if network is a captive portal */
|
/** Checking if network is a captive portal */
|
||||||
CAPTIVE_PORTAL_CHECK,
|
CAPTIVE_PORTAL_CHECK
|
||||||
/**
|
|
||||||
* Network is connected to provisioning network
|
|
||||||
* TODO: Probably not needed when we add TYPE_PROVISIONING_NETWORK
|
|
||||||
* @hide
|
|
||||||
*/
|
|
||||||
CONNECTED_TO_PROVISIONING_NETWORK
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -114,7 +108,6 @@ public class NetworkInfo implements Parcelable {
|
|||||||
stateMap.put(DetailedState.DISCONNECTED, State.DISCONNECTED);
|
stateMap.put(DetailedState.DISCONNECTED, State.DISCONNECTED);
|
||||||
stateMap.put(DetailedState.FAILED, State.DISCONNECTED);
|
stateMap.put(DetailedState.FAILED, State.DISCONNECTED);
|
||||||
stateMap.put(DetailedState.BLOCKED, State.DISCONNECTED);
|
stateMap.put(DetailedState.BLOCKED, State.DISCONNECTED);
|
||||||
stateMap.put(DetailedState.CONNECTED_TO_PROVISIONING_NETWORK, State.CONNECTED);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private int mNetworkType;
|
private int mNetworkType;
|
||||||
@@ -127,6 +120,8 @@ public class NetworkInfo implements Parcelable {
|
|||||||
private String mExtraInfo;
|
private String mExtraInfo;
|
||||||
private boolean mIsFailover;
|
private boolean mIsFailover;
|
||||||
private boolean mIsRoaming;
|
private boolean mIsRoaming;
|
||||||
|
private boolean mIsConnectedToProvisioningNetwork;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates whether network connectivity is possible:
|
* Indicates whether network connectivity is possible:
|
||||||
*/
|
*/
|
||||||
@@ -155,6 +150,7 @@ public class NetworkInfo implements Parcelable {
|
|||||||
mState = State.UNKNOWN;
|
mState = State.UNKNOWN;
|
||||||
mIsAvailable = false; // until we're told otherwise, assume unavailable
|
mIsAvailable = false; // until we're told otherwise, assume unavailable
|
||||||
mIsRoaming = false;
|
mIsRoaming = false;
|
||||||
|
mIsConnectedToProvisioningNetwork = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** {@hide} */
|
/** {@hide} */
|
||||||
@@ -171,6 +167,7 @@ public class NetworkInfo implements Parcelable {
|
|||||||
mIsFailover = source.mIsFailover;
|
mIsFailover = source.mIsFailover;
|
||||||
mIsRoaming = source.mIsRoaming;
|
mIsRoaming = source.mIsRoaming;
|
||||||
mIsAvailable = source.mIsAvailable;
|
mIsAvailable = source.mIsAvailable;
|
||||||
|
mIsConnectedToProvisioningNetwork = source.mIsConnectedToProvisioningNetwork;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -329,6 +326,22 @@ public class NetworkInfo implements Parcelable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** {@hide} */
|
||||||
|
@VisibleForTesting
|
||||||
|
public boolean isConnectedToProvisioningNetwork() {
|
||||||
|
synchronized (this) {
|
||||||
|
return mIsConnectedToProvisioningNetwork;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** {@hide} */
|
||||||
|
@VisibleForTesting
|
||||||
|
public void setIsConnectedToProvisioningNetwork(boolean val) {
|
||||||
|
synchronized (this) {
|
||||||
|
mIsConnectedToProvisioningNetwork = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reports the current coarse-grained state of the network.
|
* Reports the current coarse-grained state of the network.
|
||||||
* @return the coarse-grained state
|
* @return the coarse-grained state
|
||||||
@@ -412,7 +425,9 @@ public class NetworkInfo implements Parcelable {
|
|||||||
append(", extra: ").append(mExtraInfo == null ? "(none)" : mExtraInfo).
|
append(", extra: ").append(mExtraInfo == null ? "(none)" : mExtraInfo).
|
||||||
append(", roaming: ").append(mIsRoaming).
|
append(", roaming: ").append(mIsRoaming).
|
||||||
append(", failover: ").append(mIsFailover).
|
append(", failover: ").append(mIsFailover).
|
||||||
append(", isAvailable: ").append(mIsAvailable);
|
append(", isAvailable: ").append(mIsAvailable).
|
||||||
|
append(", isConnectedToProvisioningNetwork: ").
|
||||||
|
append(mIsConnectedToProvisioningNetwork);
|
||||||
return builder.toString();
|
return builder.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -440,6 +455,7 @@ public class NetworkInfo implements Parcelable {
|
|||||||
dest.writeInt(mIsFailover ? 1 : 0);
|
dest.writeInt(mIsFailover ? 1 : 0);
|
||||||
dest.writeInt(mIsAvailable ? 1 : 0);
|
dest.writeInt(mIsAvailable ? 1 : 0);
|
||||||
dest.writeInt(mIsRoaming ? 1 : 0);
|
dest.writeInt(mIsRoaming ? 1 : 0);
|
||||||
|
dest.writeInt(mIsConnectedToProvisioningNetwork ? 1 : 0);
|
||||||
dest.writeString(mReason);
|
dest.writeString(mReason);
|
||||||
dest.writeString(mExtraInfo);
|
dest.writeString(mExtraInfo);
|
||||||
}
|
}
|
||||||
@@ -462,6 +478,7 @@ public class NetworkInfo implements Parcelable {
|
|||||||
netInfo.mIsFailover = in.readInt() != 0;
|
netInfo.mIsFailover = in.readInt() != 0;
|
||||||
netInfo.mIsAvailable = in.readInt() != 0;
|
netInfo.mIsAvailable = in.readInt() != 0;
|
||||||
netInfo.mIsRoaming = in.readInt() != 0;
|
netInfo.mIsRoaming = in.readInt() != 0;
|
||||||
|
netInfo.mIsConnectedToProvisioningNetwork = in.readInt() != 0;
|
||||||
netInfo.mReason = in.readString();
|
netInfo.mReason = in.readString();
|
||||||
netInfo.mExtraInfo = in.readString();
|
netInfo.mExtraInfo = in.readString();
|
||||||
return netInfo;
|
return netInfo;
|
||||||
|
|||||||
@@ -890,8 +890,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||||||
// Find the first Provisioning Network
|
// Find the first Provisioning Network
|
||||||
NetworkInfo provNi = null;
|
NetworkInfo provNi = null;
|
||||||
for (NetworkInfo ni : getAllNetworkInfo()) {
|
for (NetworkInfo ni : getAllNetworkInfo()) {
|
||||||
if (ni.getDetailedState()
|
if (ni.isConnectedToProvisioningNetwork()) {
|
||||||
== NetworkInfo.DetailedState.CONNECTED_TO_PROVISIONING_NETWORK) {
|
|
||||||
provNi = ni;
|
provNi = ni;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -2805,7 +2804,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||||||
NetworkInfo.State state = info.getState();
|
NetworkInfo.State state = info.getState();
|
||||||
|
|
||||||
if (VDBG || (state == NetworkInfo.State.CONNECTED) ||
|
if (VDBG || (state == NetworkInfo.State.CONNECTED) ||
|
||||||
(state == NetworkInfo.State.DISCONNECTED)) {
|
(state == NetworkInfo.State.DISCONNECTED) ||
|
||||||
|
(state == NetworkInfo.State.SUSPENDED)) {
|
||||||
log("ConnectivityChange for " +
|
log("ConnectivityChange for " +
|
||||||
info.getTypeName() + ": " +
|
info.getTypeName() + ": " +
|
||||||
state + "/" + info.getDetailedState());
|
state + "/" + info.getDetailedState());
|
||||||
@@ -2820,7 +2820,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||||||
if (ConnectivityManager.isNetworkTypeMobile(info.getType())
|
if (ConnectivityManager.isNetworkTypeMobile(info.getType())
|
||||||
&& (0 != Settings.Global.getInt(mContext.getContentResolver(),
|
&& (0 != Settings.Global.getInt(mContext.getContentResolver(),
|
||||||
Settings.Global.DEVICE_PROVISIONED, 0))
|
Settings.Global.DEVICE_PROVISIONED, 0))
|
||||||
&& (state == NetworkInfo.State.CONNECTED)) {
|
&& ((state == NetworkInfo.State.CONNECTED)
|
||||||
|
|| info.isConnectedToProvisioningNetwork())) {
|
||||||
checkMobileProvisioning(CheckMp.MAX_TIMEOUT_MS);
|
checkMobileProvisioning(CheckMp.MAX_TIMEOUT_MS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2833,8 +2834,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||||||
} else if (info.getDetailedState() ==
|
} else if (info.getDetailedState() ==
|
||||||
DetailedState.CAPTIVE_PORTAL_CHECK) {
|
DetailedState.CAPTIVE_PORTAL_CHECK) {
|
||||||
handleCaptivePortalTrackerCheck(info);
|
handleCaptivePortalTrackerCheck(info);
|
||||||
} else if (info.getDetailedState() ==
|
} else if (info.isConnectedToProvisioningNetwork()) {
|
||||||
DetailedState.CONNECTED_TO_PROVISIONING_NETWORK) {
|
|
||||||
/**
|
/**
|
||||||
* TODO: Create ConnectivityManager.TYPE_MOBILE_PROVISIONING
|
* TODO: Create ConnectivityManager.TYPE_MOBILE_PROVISIONING
|
||||||
* for now its an in between network, its a network that
|
* for now its an in between network, its a network that
|
||||||
@@ -4197,8 +4197,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||||||
// If provisioning network handle as a special case,
|
// If provisioning network handle as a special case,
|
||||||
// otherwise launch browser with the intent directly.
|
// otherwise launch browser with the intent directly.
|
||||||
NetworkInfo ni = getProvisioningNetworkInfo();
|
NetworkInfo ni = getProvisioningNetworkInfo();
|
||||||
if ((ni != null) && ni.getDetailedState() ==
|
if ((ni != null) && ni.isConnectedToProvisioningNetwork()) {
|
||||||
NetworkInfo.DetailedState.CONNECTED_TO_PROVISIONING_NETWORK) {
|
|
||||||
if (DBG) log("handleMobileProvisioningAction: on provisioning network");
|
if (DBG) log("handleMobileProvisioningAction: on provisioning network");
|
||||||
MobileDataStateTracker mdst = (MobileDataStateTracker)
|
MobileDataStateTracker mdst = (MobileDataStateTracker)
|
||||||
mNetTrackers[ConnectivityManager.TYPE_MOBILE];
|
mNetTrackers[ConnectivityManager.TYPE_MOBILE];
|
||||||
|
|||||||
Reference in New Issue
Block a user