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

Commit f0ffd807 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Refactor use of ENT in IccSmsInterfaceManager."

parents 73e65855 f88aad54
Loading
Loading
Loading
Loading
+52 −1
Original line number Diff line number Diff line
@@ -176,6 +176,41 @@ public class IccSmsInterfaceManager {
        mSmsPermissions = smsPermissions;
    }

    /**
     * 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;
    }

    private void enforceNotOnHandlerThread(String methodName) {
        if (Looper.myLooper() == mHandler.getLooper()) {
            throw new RuntimeException("This method " + methodName + " will deadlock if called from"
@@ -1463,11 +1498,27 @@ public class IccSmsInterfaceManager {
        return null;
    }

    private void notifyIfOutgoingEmergencySms(String destAddr) {
    @VisibleForTesting
    public void notifyIfOutgoingEmergencySms(String destAddr) {
        Phone[] allPhones = mPhoneFactoryProxy.getPhones();
        EmergencyNumber emergencyNumber = mPhone.getEmergencyNumberTracker().getEmergencyNumber(
                destAddr);
        if (emergencyNumber != null) {
            mPhone.notifyOutgoingEmergencySms(emergencyNumber);
        } else if (allPhones.length > 1) {
            // If there are multiple active SIMs, check all instances:
            for (Phone phone : allPhones) {
                // If the current iteration was already checked, skip:
                if (phone.getPhoneId() == mPhone.getPhoneId()) {
                    continue;
                }
                emergencyNumber = phone.getEmergencyNumberTracker()
                        .getEmergencyNumber(destAddr);
                if (emergencyNumber != null) {
                    mPhone.notifyOutgoingEmergencySms(emergencyNumber);
                    break;
                }
            }
        }
    }

+31 −0
Original line number Diff line number Diff line
@@ -29,10 +29,13 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import com.android.internal.telephony.emergency.EmergencyNumberTracker;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -50,6 +53,9 @@ public class IccSmsInterfaceManagerTest extends TelephonyTest {

    // Mocked classes
    private SmsPermissions mMockSmsPermissions;
    protected GsmCdmaPhone mPhone2;  // mPhone as phone 1 is already defined in TelephonyTest.
    protected EmergencyNumberTracker mEmergencyNumberTracker2;
    protected IccSmsInterfaceManager.PhoneFactoryProxy mPhoneFactoryProxy;

    @Before
    public void setUp() throws Exception {
@@ -57,6 +63,13 @@ public class IccSmsInterfaceManagerTest extends TelephonyTest {
        mMockSmsPermissions = mock(SmsPermissions.class);
        mIccSmsInterfaceManager = new IccSmsInterfaceManager(mPhone, mContext, mAppOpsManager,
                mSmsDispatchersController, mMockSmsPermissions);

        mPhoneFactoryProxy = mock(IccSmsInterfaceManager.PhoneFactoryProxy.class);
        mIccSmsInterfaceManager.setPhoneFactoryProxy(mPhoneFactoryProxy);

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

    @After
@@ -144,4 +157,22 @@ public class IccSmsInterfaceManagerTest extends TelephonyTest {
            fail("getSmscLatch.await interrupted");
        }
    }

    @Test
    public void testNotifyIfOutgoingEmergencySmsWithDualSim() {
        //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());

        mIccSmsInterfaceManager.notifyIfOutgoingEmergencySms("1234");
        verify(mEmergencyNumberTracker2).getEmergencyNumber("1234");
    }
}