Make copies of NetworkInfo to give out.

Otherwise we'll change it out from under those we've given it too.
bug:5233462

Change-Id: Iffc886849edfa6ced3da1133f9d363e11b2733f8
This commit is contained in:
Robert Greenwalt
2011-09-09 12:38:12 -07:00
parent 090df1dc41
commit 6aecb98a62
3 changed files with 21 additions and 3 deletions

View File

@@ -386,7 +386,7 @@ public class MobileDataStateTracker implements NetworkStateTracker {
&& lastReason != null)
reason = lastReason;
mNetworkInfo.setDetailedState(state, reason, extraInfo);
Message msg = mTarget.obtainMessage(EVENT_STATE_CHANGED, mNetworkInfo);
Message msg = mTarget.obtainMessage(EVENT_STATE_CHANGED, new NetworkInfo(mNetworkInfo));
msg.sendToTarget();
}
}

View File

@@ -138,6 +138,23 @@ public class NetworkInfo implements Parcelable {
mIsRoaming = false;
}
/** {@hide} */
public NetworkInfo(NetworkInfo source) {
if (source != null) {
mNetworkType = source.mNetworkType;
mSubtype = source.mSubtype;
mTypeName = source.mTypeName;
mSubtypeName = source.mSubtypeName;
mState = source.mState;
mDetailedState = source.mDetailedState;
mReason = source.mReason;
mExtraInfo = source.mExtraInfo;
mIsFailover = source.mIsFailover;
mIsRoaming = source.mIsRoaming;
mIsAvailable = source.mIsAvailable;
}
}
/**
* Reports the type of network (currently mobile or Wi-Fi) to which the
* info in this object pertains.

View File

@@ -160,7 +160,7 @@ public class WifiStateTracker implements NetworkStateTracker {
* Fetch NetworkInfo for the network
*/
public NetworkInfo getNetworkInfo() {
return mNetworkInfo;
return new NetworkInfo(mNetworkInfo);
}
/**
@@ -226,7 +226,8 @@ public class WifiStateTracker implements NetworkStateTracker {
} else {
mLastState = state;
}
Message msg = mCsHandler.obtainMessage(EVENT_STATE_CHANGED, mNetworkInfo);
Message msg = mCsHandler.obtainMessage(EVENT_STATE_CHANGED,
new NetworkInfo(mNetworkInfo));
msg.sendToTarget();
} else if (intent.getAction().equals(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION)) {
mLinkProperties = (LinkProperties) intent.getParcelableExtra(