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

Commit a68707ee authored by Brad Ebinger's avatar Brad Ebinger
Browse files

Ensure mForwardNumber is null if modem returns empty String or null

We populate EXTRA_FORWARDED_NUMBER if mForwardedNumber is non null.
This was happening on some hardware where DriverCall#forwardedNumber
was an empty String instead of null. In either case, we should
set mForwardedNumber to null.

Test: atest FrameworkTelephonyTests:GsmCdmaConnectionTest
Bug: 187826275
Change-Id: Icb225ef012046ef30eb324b666168ce42f2af174
parent 5f8529e2
Loading
Loading
Loading
Loading
+12 −7
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@ import com.android.internal.telephony.uicc.UiccCardApplication;
import com.android.telephony.Rlog;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

/**
 * {@hide}
@@ -141,7 +141,10 @@ public class GsmCdmaConnection extends Connection {
        mAddress = dc.number;
        setEmergencyCallInfo(mOwner);

        mForwardedNumber = new ArrayList<String>(Arrays.asList(dc.forwardedNumber));
        String forwardedNumber = TextUtils.isEmpty(dc.forwardedNumber) ? null : dc.forwardedNumber;
        Rlog.i(LOG_TAG, "create, forwardedNumber=" + Rlog.pii(LOG_TAG, forwardedNumber));
        mForwardedNumber =  forwardedNumber == null ? null :
                new ArrayList<>(Collections.singletonList(dc.forwardedNumber));
        mIsIncoming = dc.isMT;
        mCreateTime = System.currentTimeMillis();
        mCnapName = dc.name;
@@ -710,11 +713,13 @@ public class GsmCdmaConnection extends Connection {
            mOwner.getPhone().getVoiceCallSessionStats().onAudioCodecChanged(this, dc.audioQuality);
        }

        ArrayList<String> forwardedNumber =
                new ArrayList<String>(Arrays.asList(dc.forwardedNumber));
        if (!equalsHandlesNulls(mForwardedNumber, forwardedNumber)) {
            if (Phone.DEBUG_PHONE) log("update: mForwardedNumber, # changed!");
            mForwardedNumber = forwardedNumber;
        String forwardedNumber = TextUtils.isEmpty(dc.forwardedNumber) ? null : dc.forwardedNumber;
        Rlog.i(LOG_TAG, "update: forwardedNumber=" + Rlog.pii(LOG_TAG, forwardedNumber));
        ArrayList<String> forwardedNumbers =  forwardedNumber == null ? null :
                new ArrayList<>(Collections.singletonList(dc.forwardedNumber));
        if (!equalsHandlesNulls(mForwardedNumber, forwardedNumbers)) {
            if (Phone.DEBUG_PHONE) log("update: mForwardedNumber, # changed");
            mForwardedNumber = forwardedNumbers;
            changed = true;
        }

+18 −0
Original line number Diff line number Diff line
@@ -278,4 +278,22 @@ public class GsmCdmaConnectionTest extends TelephonyTest {
        assertEquals(new ArrayList<String>(Arrays.asList(forwardedNumber)),
                connection.getForwardedNumber());
    }

    @Test @SmallTest
    public void testForwardedNumberEmptyNull() {
        mDC.state = DriverCall.State.INCOMING;
        mDC.forwardedNumber = "";
        connection = new GsmCdmaConnection(mPhone, mDC, mCT, 0);
        assertNull(connection.getForwardedNumber());
        mDC.forwardedNumber = null;
        connection.update(mDC);
        assertNull(connection.getForwardedNumber());

        mDC.forwardedNumber = null;
        connection = new GsmCdmaConnection(mPhone, mDC, mCT, 0);
        assertNull(connection.getForwardedNumber());
        mDC.forwardedNumber = "";
        connection.update(mDC);
        assertNull(connection.getForwardedNumber());
    }
}