Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bc97964a authored by yoonjeong Jang's avatar yoonjeong Jang
Browse files

Addition of 'XorEqualsString' method for comparing String

Previously, ApnSetting compared two APNs using String with 'XorEqual' method
and the result of it used for 'dedupeApnSettings' for DcTracker.
For instance, a MMS APN for the specific operator shall be merged with
the default(Internet) APN of the same operator's(mccmnc) APN once the result of 'similar' is true.
But recently, it didn't merge two similar APNs properly due to 'UNSPECIFIED_STRING' case.
So we've added XorEquals for String(XorEqualsString) case.

The Issue will happen in the circumstance below.
 1.A network operator's similar APNs are saved separately at the APN database(apns-conf.xml)
    For instance, Add two APNs like below and check the result of merging APNs at DcTracker.
        <apn carrier="SKT LTE INTERNET"
          mcc="450"
          mnc="05"
          apn="lte.sktelecom.com"
          type="default,supl,fota,cbs"
          protocol="IPV4V6"
         />
        <apn carrier="SKT LTE INTERNET"
          mcc="450"
          mnc="05"
          apn="lte.sktelecom.com"
          type="mms"
          mmsc="http://omms.nate.com:9082/oma_mms

"
          mmsproxy="smart.nate.com"
          mmsport="9093"
          protocol="IPV4V6"
         />:q
 2. Two similar APNs shall be merged on the result of ApnSetting's 'similar' method.
         P  => merged
         Q  => not merged

Test: Manual

Change-Id: I0584310765e246ef16163201282d7db48c44e451
Signed-off-by: default avataryoonjeong Jang <yjeong.jang@samsung.com>
parent fde6b837
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -1206,7 +1206,7 @@ public class ApnSetting implements Parcelable {
            && !other.canHandleType(TYPE_DUN)
            && Objects.equals(this.mApnName, other.mApnName)
            && !typeSameAny(this, other)
            && xorEquals(this.mProxyAddress, other.mProxyAddress)
            && xorEqualsString(this.mProxyAddress, other.mProxyAddress)
            && xorEqualsInt(this.mProxyPort, other.mProxyPort)
            && xorEquals(this.mProtocol, other.mProtocol)
            && xorEquals(this.mRoamingProtocol, other.mRoamingProtocol)
@@ -1215,7 +1215,7 @@ public class ApnSetting implements Parcelable {
            && Objects.equals(this.mMvnoType, other.mMvnoType)
            && Objects.equals(this.mMvnoMatchData, other.mMvnoMatchData)
            && xorEquals(this.mMmsc, other.mMmsc)
            && xorEquals(this.mMmsProxyAddress, other.mMmsProxyAddress)
            && xorEqualsString(this.mMmsProxyAddress, other.mMmsProxyAddress)
            && xorEqualsInt(this.mMmsProxyPort, other.mMmsProxyPort))
            && Objects.equals(this.mNetworkTypeBitmask, other.mNetworkTypeBitmask)
            && Objects.equals(mApnSetId, other.mApnSetId)
@@ -1228,6 +1228,11 @@ public class ApnSetting implements Parcelable {
        return first == null || second == null || first.equals(second);
    }

    // Equal or one is null.
    private boolean xorEqualsString(String first, String second) {
        return TextUtils.isEmpty(first) || TextUtils.isEmpty(second) || first.equals(second);
    }

    // Equal or one is not specified.
    private boolean xorEqualsInt(int first, int second) {
        return first == UNSPECIFIED_INT || second == UNSPECIFIED_INT