Merge "Fixed concurrent access network registration info"

This commit is contained in:
Jack Yu
2019-05-18 01:18:28 +00:00
committed by Gerrit Code Review

View File

@@ -337,7 +337,7 @@ public class ServiceState implements Parcelable {
* Reference: 3GPP TS 36.104 5.4.3 */ * Reference: 3GPP TS 36.104 5.4.3 */
private int mLteEarfcnRsrpBoost = 0; private int mLteEarfcnRsrpBoost = 0;
private List<NetworkRegistrationInfo> mNetworkRegistrationInfos = new ArrayList<>(); private final List<NetworkRegistrationInfo> mNetworkRegistrationInfos = new ArrayList<>();
private String mOperatorAlphaLongRaw; private String mOperatorAlphaLongRaw;
private String mOperatorAlphaShortRaw; private String mOperatorAlphaShortRaw;
@@ -420,8 +420,10 @@ public class ServiceState implements Parcelable {
mCellBandwidths = s.mCellBandwidths == null ? null : mCellBandwidths = s.mCellBandwidths == null ? null :
Arrays.copyOf(s.mCellBandwidths, s.mCellBandwidths.length); Arrays.copyOf(s.mCellBandwidths, s.mCellBandwidths.length);
mLteEarfcnRsrpBoost = s.mLteEarfcnRsrpBoost; mLteEarfcnRsrpBoost = s.mLteEarfcnRsrpBoost;
mNetworkRegistrationInfos = s.mNetworkRegistrationInfos == null ? null : synchronized (mNetworkRegistrationInfos) {
s.getNetworkRegistrationInfoList(); mNetworkRegistrationInfos.clear();
mNetworkRegistrationInfos.addAll(s.getNetworkRegistrationInfoList());
}
mNrFrequencyRange = s.mNrFrequencyRange; mNrFrequencyRange = s.mNrFrequencyRange;
mOperatorAlphaLongRaw = s.mOperatorAlphaLongRaw; mOperatorAlphaLongRaw = s.mOperatorAlphaLongRaw;
mOperatorAlphaShortRaw = s.mOperatorAlphaShortRaw; mOperatorAlphaShortRaw = s.mOperatorAlphaShortRaw;
@@ -453,8 +455,9 @@ public class ServiceState implements Parcelable {
mCdmaEriIconMode = in.readInt(); mCdmaEriIconMode = in.readInt();
mIsEmergencyOnly = in.readInt() != 0; mIsEmergencyOnly = in.readInt() != 0;
mLteEarfcnRsrpBoost = in.readInt(); mLteEarfcnRsrpBoost = in.readInt();
mNetworkRegistrationInfos = new ArrayList<>(); synchronized (mNetworkRegistrationInfos) {
in.readList(mNetworkRegistrationInfos, NetworkRegistrationInfo.class.getClassLoader()); in.readList(mNetworkRegistrationInfos, NetworkRegistrationInfo.class.getClassLoader());
}
mChannelNumber = in.readInt(); mChannelNumber = in.readInt();
mCellBandwidths = in.createIntArray(); mCellBandwidths = in.createIntArray();
mNrFrequencyRange = in.readInt(); mNrFrequencyRange = in.readInt();
@@ -481,7 +484,9 @@ public class ServiceState implements Parcelable {
out.writeInt(mCdmaEriIconMode); out.writeInt(mCdmaEriIconMode);
out.writeInt(mIsEmergencyOnly ? 1 : 0); out.writeInt(mIsEmergencyOnly ? 1 : 0);
out.writeInt(mLteEarfcnRsrpBoost); out.writeInt(mLteEarfcnRsrpBoost);
out.writeList(mNetworkRegistrationInfos); synchronized (mNetworkRegistrationInfos) {
out.writeList(mNetworkRegistrationInfos);
}
out.writeInt(mChannelNumber); out.writeInt(mChannelNumber);
out.writeIntArray(mCellBandwidths); out.writeIntArray(mCellBandwidths);
out.writeInt(mNrFrequencyRange); out.writeInt(mNrFrequencyRange);
@@ -823,31 +828,33 @@ public class ServiceState implements Parcelable {
@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hash( synchronized (mNetworkRegistrationInfos) {
mVoiceRegState, return Objects.hash(
mDataRegState, mVoiceRegState,
mChannelNumber, mDataRegState,
Arrays.hashCode(mCellBandwidths), mChannelNumber,
mVoiceOperatorAlphaLong, Arrays.hashCode(mCellBandwidths),
mVoiceOperatorAlphaShort, mVoiceOperatorAlphaLong,
mVoiceOperatorNumeric, mVoiceOperatorAlphaShort,
mDataOperatorAlphaLong, mVoiceOperatorNumeric,
mDataOperatorAlphaShort, mDataOperatorAlphaLong,
mDataOperatorNumeric, mDataOperatorAlphaShort,
mIsManualNetworkSelection, mDataOperatorNumeric,
mCssIndicator, mIsManualNetworkSelection,
mNetworkId, mCssIndicator,
mSystemId, mNetworkId,
mCdmaRoamingIndicator, mSystemId,
mCdmaDefaultRoamingIndicator, mCdmaRoamingIndicator,
mCdmaEriIconIndex, mCdmaDefaultRoamingIndicator,
mCdmaEriIconMode, mCdmaEriIconIndex,
mIsEmergencyOnly, mCdmaEriIconMode,
mLteEarfcnRsrpBoost, mIsEmergencyOnly,
mNetworkRegistrationInfos, mLteEarfcnRsrpBoost,
mNrFrequencyRange, mNetworkRegistrationInfos,
mOperatorAlphaLongRaw, mNrFrequencyRange,
mOperatorAlphaShortRaw); mOperatorAlphaLongRaw,
mOperatorAlphaShortRaw);
}
} }
@Override @Override
@@ -855,30 +862,31 @@ public class ServiceState implements Parcelable {
if (!(o instanceof ServiceState)) return false; if (!(o instanceof ServiceState)) return false;
ServiceState s = (ServiceState) o; ServiceState s = (ServiceState) o;
return mVoiceRegState == s.mVoiceRegState synchronized (mNetworkRegistrationInfos) {
&& mDataRegState == s.mDataRegState return mVoiceRegState == s.mVoiceRegState
&& mIsManualNetworkSelection == s.mIsManualNetworkSelection && mDataRegState == s.mDataRegState
&& mChannelNumber == s.mChannelNumber && mIsManualNetworkSelection == s.mIsManualNetworkSelection
&& Arrays.equals(mCellBandwidths, s.mCellBandwidths) && mChannelNumber == s.mChannelNumber
&& equalsHandlesNulls(mVoiceOperatorAlphaLong, s.mVoiceOperatorAlphaLong) && Arrays.equals(mCellBandwidths, s.mCellBandwidths)
&& equalsHandlesNulls(mVoiceOperatorAlphaShort, s.mVoiceOperatorAlphaShort) && equalsHandlesNulls(mVoiceOperatorAlphaLong, s.mVoiceOperatorAlphaLong)
&& equalsHandlesNulls(mVoiceOperatorNumeric, s.mVoiceOperatorNumeric) && equalsHandlesNulls(mVoiceOperatorAlphaShort, s.mVoiceOperatorAlphaShort)
&& equalsHandlesNulls(mDataOperatorAlphaLong, s.mDataOperatorAlphaLong) && equalsHandlesNulls(mVoiceOperatorNumeric, s.mVoiceOperatorNumeric)
&& equalsHandlesNulls(mDataOperatorAlphaShort, s.mDataOperatorAlphaShort) && equalsHandlesNulls(mDataOperatorAlphaLong, s.mDataOperatorAlphaLong)
&& equalsHandlesNulls(mDataOperatorNumeric, s.mDataOperatorNumeric) && equalsHandlesNulls(mDataOperatorAlphaShort, s.mDataOperatorAlphaShort)
&& equalsHandlesNulls(mCssIndicator, s.mCssIndicator) && equalsHandlesNulls(mDataOperatorNumeric, s.mDataOperatorNumeric)
&& equalsHandlesNulls(mNetworkId, s.mNetworkId) && equalsHandlesNulls(mCssIndicator, s.mCssIndicator)
&& equalsHandlesNulls(mSystemId, s.mSystemId) && equalsHandlesNulls(mNetworkId, s.mNetworkId)
&& equalsHandlesNulls(mCdmaRoamingIndicator, s.mCdmaRoamingIndicator) && equalsHandlesNulls(mSystemId, s.mSystemId)
&& equalsHandlesNulls(mCdmaDefaultRoamingIndicator, && equalsHandlesNulls(mCdmaRoamingIndicator, s.mCdmaRoamingIndicator)
s.mCdmaDefaultRoamingIndicator) && equalsHandlesNulls(mCdmaDefaultRoamingIndicator,
&& mIsEmergencyOnly == s.mIsEmergencyOnly s.mCdmaDefaultRoamingIndicator)
&& equalsHandlesNulls(mOperatorAlphaLongRaw, s.mOperatorAlphaLongRaw) && mIsEmergencyOnly == s.mIsEmergencyOnly
&& equalsHandlesNulls(mOperatorAlphaShortRaw, s.mOperatorAlphaShortRaw) && equalsHandlesNulls(mOperatorAlphaLongRaw, s.mOperatorAlphaLongRaw)
&& (mNetworkRegistrationInfos == null && equalsHandlesNulls(mOperatorAlphaShortRaw, s.mOperatorAlphaShortRaw)
? s.mNetworkRegistrationInfos == null : s.mNetworkRegistrationInfos != null && mNetworkRegistrationInfos.size() == s.mNetworkRegistrationInfos.size()
&& mNetworkRegistrationInfos.containsAll(s.mNetworkRegistrationInfos)) && mNetworkRegistrationInfos.containsAll(s.mNetworkRegistrationInfos)
&& mNrFrequencyRange == s.mNrFrequencyRange; && mNrFrequencyRange == s.mNrFrequencyRange;
}
} }
/** /**
@@ -1005,36 +1013,38 @@ public class ServiceState implements Parcelable {
@Override @Override
public String toString() { public String toString() {
return new StringBuilder().append("{mVoiceRegState=").append(mVoiceRegState) synchronized (mNetworkRegistrationInfos) {
.append("(" + rilServiceStateToString(mVoiceRegState) + ")") return new StringBuilder().append("{mVoiceRegState=").append(mVoiceRegState)
.append(", mDataRegState=").append(mDataRegState) .append("(" + rilServiceStateToString(mVoiceRegState) + ")")
.append("(" + rilServiceStateToString(mDataRegState) + ")") .append(", mDataRegState=").append(mDataRegState)
.append(", mChannelNumber=").append(mChannelNumber) .append("(" + rilServiceStateToString(mDataRegState) + ")")
.append(", duplexMode()=").append(getDuplexMode()) .append(", mChannelNumber=").append(mChannelNumber)
.append(", mCellBandwidths=").append(Arrays.toString(mCellBandwidths)) .append(", duplexMode()=").append(getDuplexMode())
.append(", mVoiceOperatorAlphaLong=").append(mVoiceOperatorAlphaLong) .append(", mCellBandwidths=").append(Arrays.toString(mCellBandwidths))
.append(", mVoiceOperatorAlphaShort=").append(mVoiceOperatorAlphaShort) .append(", mVoiceOperatorAlphaLong=").append(mVoiceOperatorAlphaLong)
.append(", mDataOperatorAlphaLong=").append(mDataOperatorAlphaLong) .append(", mVoiceOperatorAlphaShort=").append(mVoiceOperatorAlphaShort)
.append(", mDataOperatorAlphaShort=").append(mDataOperatorAlphaShort) .append(", mDataOperatorAlphaLong=").append(mDataOperatorAlphaLong)
.append(", isManualNetworkSelection=").append(mIsManualNetworkSelection) .append(", mDataOperatorAlphaShort=").append(mDataOperatorAlphaShort)
.append(mIsManualNetworkSelection ? "(manual)" : "(automatic)") .append(", isManualNetworkSelection=").append(mIsManualNetworkSelection)
.append(", getRilVoiceRadioTechnology=").append(getRilVoiceRadioTechnology()) .append(mIsManualNetworkSelection ? "(manual)" : "(automatic)")
.append("(" + rilRadioTechnologyToString(getRilVoiceRadioTechnology()) + ")") .append(", getRilVoiceRadioTechnology=").append(getRilVoiceRadioTechnology())
.append(", getRilDataRadioTechnology=").append(getRilDataRadioTechnology()) .append("(" + rilRadioTechnologyToString(getRilVoiceRadioTechnology()) + ")")
.append("(" + rilRadioTechnologyToString(getRilDataRadioTechnology()) + ")") .append(", getRilDataRadioTechnology=").append(getRilDataRadioTechnology())
.append(", mCssIndicator=").append(mCssIndicator ? "supported" : "unsupported") .append("(" + rilRadioTechnologyToString(getRilDataRadioTechnology()) + ")")
.append(", mNetworkId=").append(mNetworkId) .append(", mCssIndicator=").append(mCssIndicator ? "supported" : "unsupported")
.append(", mSystemId=").append(mSystemId) .append(", mNetworkId=").append(mNetworkId)
.append(", mCdmaRoamingIndicator=").append(mCdmaRoamingIndicator) .append(", mSystemId=").append(mSystemId)
.append(", mCdmaDefaultRoamingIndicator=").append(mCdmaDefaultRoamingIndicator) .append(", mCdmaRoamingIndicator=").append(mCdmaRoamingIndicator)
.append(", mIsEmergencyOnly=").append(mIsEmergencyOnly) .append(", mCdmaDefaultRoamingIndicator=").append(mCdmaDefaultRoamingIndicator)
.append(", isUsingCarrierAggregation=").append(isUsingCarrierAggregation()) .append(", mIsEmergencyOnly=").append(mIsEmergencyOnly)
.append(", mLteEarfcnRsrpBoost=").append(mLteEarfcnRsrpBoost) .append(", isUsingCarrierAggregation=").append(isUsingCarrierAggregation())
.append(", mNetworkRegistrationInfos=").append(mNetworkRegistrationInfos) .append(", mLteEarfcnRsrpBoost=").append(mLteEarfcnRsrpBoost)
.append(", mNrFrequencyRange=").append(mNrFrequencyRange) .append(", mNetworkRegistrationInfos=").append(mNetworkRegistrationInfos)
.append(", mOperatorAlphaLongRaw=").append(mOperatorAlphaLongRaw) .append(", mNrFrequencyRange=").append(mNrFrequencyRange)
.append(", mOperatorAlphaShortRaw=").append(mOperatorAlphaShortRaw) .append(", mOperatorAlphaLongRaw=").append(mOperatorAlphaLongRaw)
.append("}").toString(); .append(", mOperatorAlphaShortRaw=").append(mOperatorAlphaShortRaw)
.append("}").toString();
}
} }
private void init() { private void init() {
@@ -1060,17 +1070,19 @@ public class ServiceState implements Parcelable {
mIsEmergencyOnly = false; mIsEmergencyOnly = false;
mLteEarfcnRsrpBoost = 0; mLteEarfcnRsrpBoost = 0;
mNrFrequencyRange = FREQUENCY_RANGE_UNKNOWN; mNrFrequencyRange = FREQUENCY_RANGE_UNKNOWN;
mNetworkRegistrationInfos.clear(); synchronized (mNetworkRegistrationInfos) {
addNetworkRegistrationInfo(new NetworkRegistrationInfo.Builder() mNetworkRegistrationInfos.clear();
.setDomain(NetworkRegistrationInfo.DOMAIN_CS) addNetworkRegistrationInfo(new NetworkRegistrationInfo.Builder()
.setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) .setDomain(NetworkRegistrationInfo.DOMAIN_CS)
.setRegistrationState(NetworkRegistrationInfo.REGISTRATION_STATE_UNKNOWN) .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)
.build()); .setRegistrationState(NetworkRegistrationInfo.REGISTRATION_STATE_UNKNOWN)
addNetworkRegistrationInfo(new NetworkRegistrationInfo.Builder() .build());
.setDomain(NetworkRegistrationInfo.DOMAIN_PS) addNetworkRegistrationInfo(new NetworkRegistrationInfo.Builder()
.setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) .setDomain(NetworkRegistrationInfo.DOMAIN_PS)
.setRegistrationState(NetworkRegistrationInfo.REGISTRATION_STATE_UNKNOWN) .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)
.build()); .setRegistrationState(NetworkRegistrationInfo.REGISTRATION_STATE_UNKNOWN)
.build());
}
mOperatorAlphaLongRaw = null; mOperatorAlphaLongRaw = null;
mOperatorAlphaShortRaw = null; mOperatorAlphaShortRaw = null;
} }
@@ -1913,10 +1925,13 @@ public class ServiceState implements Parcelable {
*/ */
public ServiceState sanitizeLocationInfo(boolean removeCoarseLocation) { public ServiceState sanitizeLocationInfo(boolean removeCoarseLocation) {
ServiceState state = new ServiceState(this); ServiceState state = new ServiceState(this);
if (state.mNetworkRegistrationInfos != null) { synchronized (state.mNetworkRegistrationInfos) {
state.mNetworkRegistrationInfos = state.mNetworkRegistrationInfos.stream() List<NetworkRegistrationInfo> networkRegistrationInfos =
.map(NetworkRegistrationInfo::sanitizeLocationInfo) state.mNetworkRegistrationInfos.stream()
.collect(Collectors.toList()); .map(NetworkRegistrationInfo::sanitizeLocationInfo)
.collect(Collectors.toList());
state.mNetworkRegistrationInfos.clear();
state.mNetworkRegistrationInfos.addAll(networkRegistrationInfos);
} }
if (!removeCoarseLocation) return state; if (!removeCoarseLocation) return state;