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

Commit 4b66c40f authored by Grant Menke's avatar Grant Menke Committed by Android (Google) Code Review
Browse files

Merge "Refactor use of EmergencyNumberTracker."

parents 5f71620a 6cab4ec8
Loading
Loading
Loading
Loading
+59 −3
Original line number Diff line number Diff line
@@ -327,6 +327,41 @@ public abstract class Connection {

    /* Instance Methods */

    /**
     * PhoneFactory Dependencies for testing.
     */
    @VisibleForTesting
    public interface PhoneFactoryProxy {
        Phone getPhone(int index);
        Phone getDefaultPhone();
        Phone[] getPhones();
    }

    private PhoneFactoryProxy mPhoneFactoryProxy = new PhoneFactoryProxy() {
        @Override
        public Phone getPhone(int index) {
            return PhoneFactory.getPhone(index);
        }

        @Override
        public Phone getDefaultPhone() {
            return PhoneFactory.getDefaultPhone();
        }

        @Override
        public Phone[] getPhones() {
            return PhoneFactory.getPhones();
        }
    };

    /**
     * Overrides PhoneFactory dependencies for testing.
     */
    @VisibleForTesting
    public void setPhoneFactoryProxy(PhoneFactoryProxy proxy) {
        mPhoneFactoryProxy = proxy;
    }

    /**
     * @return The telecom internal call ID associated with this connection.  Only to be used for
     * debugging purposes.
@@ -590,14 +625,35 @@ public abstract class Connection {
     */
    public void setEmergencyCallInfo(CallTracker ct) {
        if (ct != null) {
            Phone phone = ct.getPhone();
            if (phone != null) {
                EmergencyNumberTracker tracker = phone.getEmergencyNumberTracker();
            Phone currentPhone = ct.getPhone();
            if (currentPhone != null) {
                EmergencyNumberTracker tracker = currentPhone.getEmergencyNumberTracker();
                if (tracker != null) {
                    EmergencyNumber num = tracker.getEmergencyNumber(mAddress);
                    Phone[] allPhones = mPhoneFactoryProxy.getPhones();
                    if (num != null) {
                        mIsEmergencyCall = true;
                        mEmergencyNumberInfo = num;
                    } else if (allPhones.length > 1) {
                        // If there are multiple active SIMs, check all instances:
                        boolean found = false;
                        for (Phone phone : allPhones) {
                            // If the current iteration was already checked, skip:
                            if (phone.getPhoneId() == currentPhone.getPhoneId()){
                                continue;
                            }
                            num = phone.getEmergencyNumberTracker()
                                    .getEmergencyNumber(mAddress);
                            if (num != null){
                                found = true;
                                mIsEmergencyCall = true;
                                mEmergencyNumberInfo = num;
                                break;
                            }
                        }
                        if (!found){
                            Rlog.e(TAG, "setEmergencyCallInfo: emergency number is null");
                        }
                    } else {
                        Rlog.e(TAG, "setEmergencyCallInfo: emergency number is null");
                    }
+35 −0
Original line number Diff line number Diff line
@@ -20,11 +20,14 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import android.os.Handler;
import android.os.Looper;
import com.android.internal.telephony.emergency.EmergencyNumberTracker;

import org.junit.After;
import org.junit.Before;
@@ -39,6 +42,10 @@ public class ConnectionTest extends TelephonyTest {

    // Mocked classes
    protected Call mCall;
    protected GsmCdmaPhone mPhone2;  // mPhone as phone 1 is already defined in TelephonyTest.
    protected EmergencyNumberTracker mEmergencyNumberTracker2;
    protected Connection.PhoneFactoryProxy mPhoneFactoryProxy;
    protected Connection mTestConnection;

    private class TestConnection extends Connection {

@@ -117,7 +124,16 @@ public class ConnectionTest extends TelephonyTest {
        super.setUp(getClass().getSimpleName());
        mCall = mock(Call.class);
        doReturn(mPhone).when(mCall).getPhone();
        doReturn(mPhone).when(mCT).getPhone();
        replaceInstance(Handler.class, "mLooper", mCT, Looper.getMainLooper());

        mPhone2 = mock(GsmCdmaPhone.class);
        mEmergencyNumberTracker2 = mock(EmergencyNumberTracker.class);
        doReturn(mEmergencyNumberTracker2).when(mPhone2).getEmergencyNumberTracker();

        mTestConnection = new TestConnection(TEST_PHONE_TYPE);
        mPhoneFactoryProxy = mock(Connection.PhoneFactoryProxy.class);
        mTestConnection.setPhoneFactoryProxy(mPhoneFactoryProxy);
    }

    @After
@@ -156,5 +172,24 @@ public class ConnectionTest extends TelephonyTest {
        assertTrue(connection.hasKnownUserIntentEmergency());
    }

    @Test
    public void testSetEmergencyCallInfo() {
        //Replicate Dual-SIM:
        Phone [] phones = {mPhone, mPhone2};
        when(mPhoneFactoryProxy.getPhones()).thenReturn(phones);
        doReturn(1).when(mPhone).getPhoneId();
        doReturn(2).when(mPhone2).getPhoneId();

        //Replicate behavior when a number is an emergency number
        // on the secondary SIM but not on the default SIM:
        when(mPhone.getEmergencyNumberTracker().getEmergencyNumber(any())).thenReturn(null);
        when(mEmergencyNumberTracker2.getEmergencyNumber(any()))
                .thenReturn(getTestEmergencyNumber());

        //Ensure the connection is considered as an emergency call:
        mTestConnection.setEmergencyCallInfo(mCT);
        assertTrue(mTestConnection.isEmergencyCall());
    }

    // TODO Verify more methods in Connection
}