summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWink Saville <wink@google.com>2013-09-05 12:02:25 -0700
committerThe Android Automerger <android-build@android.com>2013-09-09 19:44:29 -0700
commitd3b20563684da1dfbdb51bbeb484f3de2a4b2f19 (patch)
treeb85ec647a9bf5e3002ed975b91d0576c3f28f727
parentc6070de1172a6b346100ff2a987b7372d4bf90b3 (diff)
downloadbase-d3b20563684da1dfbdb51bbeb484f3de2a4b2f19.tar.gz
Do not change NetworkInfo.DetailedState.android-4.3_r3.1
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
-rw-r--r--core/java/android/net/MobileDataStateTracker.java8
-rw-r--r--core/java/android/net/NetworkInfo.java35
-rw-r--r--services/java/com/android/server/ConnectivityService.java15
3 files changed, 40 insertions, 18 deletions
diff --git a/core/java/android/net/MobileDataStateTracker.java b/core/java/android/net/MobileDataStateTracker.java
index 77b7314718c0..e09254b18419 100644
--- a/core/java/android/net/MobileDataStateTracker.java
+++ b/core/java/android/net/MobileDataStateTracker.java
@@ -190,6 +190,8 @@ public class MobileDataStateTracker implements NetworkStateTracker {
private class MobileDataStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
+ // Assume this isn't a provisioning network.
+ mNetworkInfo.setIsConnectedToProvisioningNetwork(false);
if (intent.getAction().equals(TelephonyIntents.
ACTION_DATA_CONNECTION_CONNECTED_TO_PROVISIONING_APN)) {
String apnName = intent.getStringExtra(PhoneConstants.DATA_APN_KEY);
@@ -205,7 +207,11 @@ public class MobileDataStateTracker implements NetworkStateTracker {
// Make us in the connecting state until we make a new TYPE_MOBILE_PROVISIONING
mMobileDataState = PhoneConstants.DataState.CONNECTING;
updateLinkProperitesAndCapatilities(intent);
- setDetailedState(DetailedState.CONNECTED_TO_PROVISIONING_NETWORK, "", apnName);
+ mNetworkInfo.setIsConnectedToProvisioningNetwork(true);
+
+ // Change state to SUSPENDED so setDetailedState
+ // sends EVENT_STATE_CHANGED to connectivityService
+ setDetailedState(DetailedState.SUSPENDED, "", apnName);
} else if (intent.getAction().equals(TelephonyIntents.
ACTION_ANY_DATA_CONNECTION_STATE_CHANGED)) {
String apnType = intent.getStringExtra(PhoneConstants.DATA_APN_TYPE_KEY);
diff --git a/core/java/android/net/NetworkInfo.java b/core/java/android/net/NetworkInfo.java
index dabc73a716aa..4d2a70ddf12b 100644
--- a/core/java/android/net/NetworkInfo.java
+++ b/core/java/android/net/NetworkInfo.java
@@ -83,13 +83,7 @@ public class NetworkInfo implements Parcelable {
/** Link has poor connectivity. */
VERIFYING_POOR_LINK,
/** Checking if network is a captive portal */
- CAPTIVE_PORTAL_CHECK,
- /**
- * Network is connected to provisioning network
- * TODO: Probably not needed when we add TYPE_PROVISIONING_NETWORK
- * @hide
- */
- CONNECTED_TO_PROVISIONING_NETWORK
+ CAPTIVE_PORTAL_CHECK
}
/**
@@ -114,7 +108,6 @@ public class NetworkInfo implements Parcelable {
stateMap.put(DetailedState.DISCONNECTED, State.DISCONNECTED);
stateMap.put(DetailedState.FAILED, State.DISCONNECTED);
stateMap.put(DetailedState.BLOCKED, State.DISCONNECTED);
- stateMap.put(DetailedState.CONNECTED_TO_PROVISIONING_NETWORK, State.CONNECTED);
}
private int mNetworkType;
@@ -127,6 +120,8 @@ public class NetworkInfo implements Parcelable {
private String mExtraInfo;
private boolean mIsFailover;
private boolean mIsRoaming;
+ private boolean mIsConnectedToProvisioningNetwork;
+
/**
* Indicates whether network connectivity is possible:
*/
@@ -155,6 +150,7 @@ public class NetworkInfo implements Parcelable {
mState = State.UNKNOWN;
mIsAvailable = false; // until we're told otherwise, assume unavailable
mIsRoaming = false;
+ mIsConnectedToProvisioningNetwork = false;
}
/** {@hide} */
@@ -171,6 +167,7 @@ public class NetworkInfo implements Parcelable {
mIsFailover = source.mIsFailover;
mIsRoaming = source.mIsRoaming;
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.
* @return the coarse-grained state
@@ -412,7 +425,9 @@ public class NetworkInfo implements Parcelable {
append(", extra: ").append(mExtraInfo == null ? "(none)" : mExtraInfo).
append(", roaming: ").append(mIsRoaming).
append(", failover: ").append(mIsFailover).
- append(", isAvailable: ").append(mIsAvailable);
+ append(", isAvailable: ").append(mIsAvailable).
+ append(", isConnectedToProvisioningNetwork: ").
+ append(mIsConnectedToProvisioningNetwork);
return builder.toString();
}
}
@@ -440,6 +455,7 @@ public class NetworkInfo implements Parcelable {
dest.writeInt(mIsFailover ? 1 : 0);
dest.writeInt(mIsAvailable ? 1 : 0);
dest.writeInt(mIsRoaming ? 1 : 0);
+ dest.writeInt(mIsConnectedToProvisioningNetwork ? 1 : 0);
dest.writeString(mReason);
dest.writeString(mExtraInfo);
}
@@ -462,6 +478,7 @@ public class NetworkInfo implements Parcelable {
netInfo.mIsFailover = in.readInt() != 0;
netInfo.mIsAvailable = in.readInt() != 0;
netInfo.mIsRoaming = in.readInt() != 0;
+ netInfo.mIsConnectedToProvisioningNetwork = in.readInt() != 0;
netInfo.mReason = in.readString();
netInfo.mExtraInfo = in.readString();
return netInfo;
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index ee23b13d3f19..a022fb1d8769 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -890,8 +890,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
// Find the first Provisioning Network
NetworkInfo provNi = null;
for (NetworkInfo ni : getAllNetworkInfo()) {
- if (ni.getDetailedState()
- == NetworkInfo.DetailedState.CONNECTED_TO_PROVISIONING_NETWORK) {
+ if (ni.isConnectedToProvisioningNetwork()) {
provNi = ni;
break;
}
@@ -2805,7 +2804,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {
NetworkInfo.State state = info.getState();
if (VDBG || (state == NetworkInfo.State.CONNECTED) ||
- (state == NetworkInfo.State.DISCONNECTED)) {
+ (state == NetworkInfo.State.DISCONNECTED) ||
+ (state == NetworkInfo.State.SUSPENDED)) {
log("ConnectivityChange for " +
info.getTypeName() + ": " +
state + "/" + info.getDetailedState());
@@ -2820,7 +2820,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {
if (ConnectivityManager.isNetworkTypeMobile(info.getType())
&& (0 != Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.DEVICE_PROVISIONED, 0))
- && (state == NetworkInfo.State.CONNECTED)) {
+ && ((state == NetworkInfo.State.CONNECTED)
+ || info.isConnectedToProvisioningNetwork())) {
checkMobileProvisioning(CheckMp.MAX_TIMEOUT_MS);
}
@@ -2833,8 +2834,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
} else if (info.getDetailedState() ==
DetailedState.CAPTIVE_PORTAL_CHECK) {
handleCaptivePortalTrackerCheck(info);
- } else if (info.getDetailedState() ==
- DetailedState.CONNECTED_TO_PROVISIONING_NETWORK) {
+ } else if (info.isConnectedToProvisioningNetwork()) {
/**
* TODO: Create ConnectivityManager.TYPE_MOBILE_PROVISIONING
* 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,
// otherwise launch browser with the intent directly.
NetworkInfo ni = getProvisioningNetworkInfo();
- if ((ni != null) && ni.getDetailedState() ==
- NetworkInfo.DetailedState.CONNECTED_TO_PROVISIONING_NETWORK) {
+ if ((ni != null) && ni.isConnectedToProvisioningNetwork()) {
if (DBG) log("handleMobileProvisioningAction: on provisioning network");
MobileDataStateTracker mdst = (MobileDataStateTracker)
mNetTrackers[ConnectivityManager.TYPE_MOBILE];