From 653e2a2f64bba81342a11f766f907375c3a83d90 Mon Sep 17 00:00:00 2001 From: Irfan Sheriff Date: Mon, 7 Jun 2010 09:03:04 -0700 Subject: [PATCH] Refactor WifiStateTracker Implement WifiStateTracker as a HSM. Change-Id: Ic12fd78f1f183b5c4dea8ad2301002267ceff0cb --- core/java/android/net/NetworkInfo.java | 126 ++++++++++++------ .../android/server/ConnectivityService.java | 5 + 2 files changed, 88 insertions(+), 43 deletions(-) diff --git a/core/java/android/net/NetworkInfo.java b/core/java/android/net/NetworkInfo.java index 21f711cfca..5f5e11c96a 100644 --- a/core/java/android/net/NetworkInfo.java +++ b/core/java/android/net/NetworkInfo.java @@ -97,7 +97,7 @@ public class NetworkInfo implements Parcelable { stateMap.put(DetailedState.DISCONNECTED, State.DISCONNECTED); stateMap.put(DetailedState.FAILED, State.DISCONNECTED); } - + private int mNetworkType; private int mSubtype; private String mTypeName; @@ -144,7 +144,9 @@ public class NetworkInfo implements Parcelable { * @return the network type */ public int getType() { - return mNetworkType; + synchronized (this) { + return mNetworkType; + } } /** @@ -153,12 +155,16 @@ public class NetworkInfo implements Parcelable { * @return the network subtype */ public int getSubtype() { - return mSubtype; + synchronized (this) { + return mSubtype; + } } void setSubtype(int subtype, String subtypeName) { - mSubtype = subtype; - mSubtypeName = subtypeName; + synchronized (this) { + mSubtype = subtype; + mSubtypeName = subtypeName; + } } /** @@ -167,7 +173,9 @@ public class NetworkInfo implements Parcelable { * @return the name of the network type */ public String getTypeName() { - return mTypeName; + synchronized (this) { + return mTypeName; + } } /** @@ -175,7 +183,9 @@ public class NetworkInfo implements Parcelable { * @return the name of the network subtype */ public String getSubtypeName() { - return mSubtypeName; + synchronized (this) { + return mSubtypeName; + } } /** @@ -188,7 +198,9 @@ public class NetworkInfo implements Parcelable { * of being established, {@code false} otherwise. */ public boolean isConnectedOrConnecting() { - return mState == State.CONNECTED || mState == State.CONNECTING; + synchronized (this) { + return mState == State.CONNECTED || mState == State.CONNECTING; + } } /** @@ -197,7 +209,9 @@ public class NetworkInfo implements Parcelable { * @return {@code true} if network connectivity exists, {@code false} otherwise. */ public boolean isConnected() { - return mState == State.CONNECTED; + synchronized (this) { + return mState == State.CONNECTED; + } } /** @@ -213,7 +227,9 @@ public class NetworkInfo implements Parcelable { * @return {@code true} if the network is available, {@code false} otherwise */ public boolean isAvailable() { - return mIsAvailable; + synchronized (this) { + return mIsAvailable; + } } /** @@ -223,7 +239,9 @@ public class NetworkInfo implements Parcelable { * @hide */ public void setIsAvailable(boolean isAvailable) { - mIsAvailable = isAvailable; + synchronized (this) { + mIsAvailable = isAvailable; + } } /** @@ -234,7 +252,9 @@ public class NetworkInfo implements Parcelable { * otherwise. */ public boolean isFailover() { - return mIsFailover; + synchronized (this) { + return mIsFailover; + } } /** @@ -244,7 +264,9 @@ public class NetworkInfo implements Parcelable { * @hide */ public void setFailover(boolean isFailover) { - mIsFailover = isFailover; + synchronized (this) { + mIsFailover = isFailover; + } } /** @@ -254,11 +276,15 @@ public class NetworkInfo implements Parcelable { * @return {@code true} if roaming is in effect, {@code false} otherwise. */ public boolean isRoaming() { - return mIsRoaming; + synchronized (this) { + return mIsRoaming; + } } void setRoaming(boolean isRoaming) { - mIsRoaming = isRoaming; + synchronized (this) { + mIsRoaming = isRoaming; + } } /** @@ -266,7 +292,9 @@ public class NetworkInfo implements Parcelable { * @return the coarse-grained state */ public State getState() { - return mState; + synchronized (this) { + return mState; + } } /** @@ -274,7 +302,9 @@ public class NetworkInfo implements Parcelable { * @return the fine-grained state */ public DetailedState getDetailedState() { - return mDetailedState; + synchronized (this) { + return mDetailedState; + } } /** @@ -287,10 +317,12 @@ public class NetworkInfo implements Parcelable { * @hide */ public void setDetailedState(DetailedState detailedState, String reason, String extraInfo) { - this.mDetailedState = detailedState; - this.mState = stateMap.get(detailedState); - this.mReason = reason; - this.mExtraInfo = extraInfo; + synchronized (this) { + this.mDetailedState = detailedState; + this.mState = stateMap.get(detailedState); + this.mReason = reason; + this.mExtraInfo = extraInfo; + } } /** @@ -299,7 +331,9 @@ public class NetworkInfo implements Parcelable { * @return the reason for failure, or null if not available */ public String getReason() { - return mReason; + synchronized (this) { + return mReason; + } } /** @@ -309,20 +343,24 @@ public class NetworkInfo implements Parcelable { * @return the extra information, or null if not available */ public String getExtraInfo() { - return mExtraInfo; + synchronized (this) { + return mExtraInfo; + } } @Override public String toString() { - StringBuilder builder = new StringBuilder("NetworkInfo: "); - builder.append("type: ").append(getTypeName()).append("[").append(getSubtypeName()). - append("], state: ").append(mState).append("/").append(mDetailedState). - append(", reason: ").append(mReason == null ? "(unspecified)" : mReason). - append(", extra: ").append(mExtraInfo == null ? "(none)" : mExtraInfo). - append(", roaming: ").append(mIsRoaming). - append(", failover: ").append(mIsFailover). - append(", isAvailable: ").append(mIsAvailable); - return builder.toString(); + synchronized (this) { + StringBuilder builder = new StringBuilder("NetworkInfo: "); + builder.append("type: ").append(getTypeName()).append("[").append(getSubtypeName()). + append("], state: ").append(mState).append("/").append(mDetailedState). + append(", reason: ").append(mReason == null ? "(unspecified)" : mReason). + append(", extra: ").append(mExtraInfo == null ? "(none)" : mExtraInfo). + append(", roaming: ").append(mIsRoaming). + append(", failover: ").append(mIsFailover). + append(", isAvailable: ").append(mIsAvailable); + return builder.toString(); + } } /** @@ -338,17 +376,19 @@ public class NetworkInfo implements Parcelable { * @hide */ public void writeToParcel(Parcel dest, int flags) { - dest.writeInt(mNetworkType); - dest.writeInt(mSubtype); - dest.writeString(mTypeName); - dest.writeString(mSubtypeName); - dest.writeString(mState.name()); - dest.writeString(mDetailedState.name()); - dest.writeInt(mIsFailover ? 1 : 0); - dest.writeInt(mIsAvailable ? 1 : 0); - dest.writeInt(mIsRoaming ? 1 : 0); - dest.writeString(mReason); - dest.writeString(mExtraInfo); + synchronized (this) { + dest.writeInt(mNetworkType); + dest.writeInt(mSubtype); + dest.writeString(mTypeName); + dest.writeString(mSubtypeName); + dest.writeString(mState.name()); + dest.writeString(mDetailedState.name()); + dest.writeInt(mIsFailover ? 1 : 0); + dest.writeInt(mIsAvailable ? 1 : 0); + dest.writeInt(mIsRoaming ? 1 : 0); + dest.writeString(mReason); + dest.writeString(mExtraInfo); + } } /** diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index 9c504feac9..311efc8286 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -88,6 +88,8 @@ public class ConnectivityService extends IConnectivityManager.Stub { */ private List mNetRequestersPids[]; + private WifiWatchdogService mWifiWatchdogService; + // priority order of the nettrackers // (excluding dynamically set mNetworkPreference) // TODO - move mNetworkTypePreference into this @@ -318,6 +320,9 @@ public class ConnectivityService extends IConnectivityManager.Stub { mNetTrackers[ConnectivityManager.TYPE_WIFI] = wst; wst.startMonitoring(); + //TODO: as part of WWS refactor, create only when needed + mWifiWatchdogService = new WifiWatchdogService(context, wst); + break; case ConnectivityManager.TYPE_MOBILE: mNetTrackers[netType] = new MobileDataStateTracker(context, mHandler,