diff options
| -rw-r--r-- | core/java/android/net/MobileDataStateTracker.java | 13 | ||||
| -rw-r--r-- | core/java/android/net/NetworkStateTracker.java | 6 | ||||
| -rw-r--r-- | services/java/com/android/server/ConnectivityService.java | 5 |
3 files changed, 22 insertions, 2 deletions
diff --git a/core/java/android/net/MobileDataStateTracker.java b/core/java/android/net/MobileDataStateTracker.java index 00438a10b206..d59fa6a91712 100644 --- a/core/java/android/net/MobileDataStateTracker.java +++ b/core/java/android/net/MobileDataStateTracker.java @@ -184,8 +184,17 @@ public class MobileDataStateTracker implements NetworkStateTracker { if (!TextUtils.equals(apnType, mApnType)) { return; } - mNetworkInfo.setSubtype(TelephonyManager.getDefault().getNetworkType(), - TelephonyManager.getDefault().getNetworkTypeName()); + + int oldSubtype = mNetworkInfo.getSubtype(); + int newSubType = TelephonyManager.getDefault().getNetworkType(); + String subTypeName = TelephonyManager.getDefault().getNetworkTypeName(); + mNetworkInfo.setSubtype(newSubType, subTypeName); + if (newSubType != oldSubtype && mNetworkInfo.isConnected()) { + Message msg = mTarget.obtainMessage(EVENT_NETWORK_SUBTYPE_CHANGED, + oldSubtype, 0, mNetworkInfo); + msg.sendToTarget(); + } + PhoneConstants.DataState state = Enum.valueOf(PhoneConstants.DataState.class, intent.getStringExtra(PhoneConstants.STATE_KEY)); String reason = intent.getStringExtra(PhoneConstants.STATE_CHANGE_REASON_KEY); diff --git a/core/java/android/net/NetworkStateTracker.java b/core/java/android/net/NetworkStateTracker.java index 7df0193c8b1e..0d6dcd6f3427 100644 --- a/core/java/android/net/NetworkStateTracker.java +++ b/core/java/android/net/NetworkStateTracker.java @@ -69,6 +69,12 @@ public interface NetworkStateTracker { public static final int EVENT_RESTORE_DEFAULT_NETWORK = 6; /** + * msg.what = EVENT_NETWORK_SUBTYPE_CHANGED + * msg.obj = NetworkInfo object + */ + public static final int EVENT_NETWORK_SUBTYPE_CHANGED = 7; + + /** * ------------------------------------------------------------- * Control Interface * ------------------------------------------------------------- diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index 230f07bb5baf..86ada4049a0c 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -2490,6 +2490,11 @@ private NetworkStateTracker makeWimaxStateTracker() { // @see bug/4455071 handleConnectivityChange(info.getType(), false); break; + case NetworkStateTracker.EVENT_NETWORK_SUBTYPE_CHANGED: + info = (NetworkInfo) msg.obj; + type = info.getType(); + updateNetworkSettings(mNetTrackers[type]); + break; case EVENT_CLEAR_NET_TRANSITION_WAKELOCK: String causedBy = null; synchronized (ConnectivityService.this) { |