Loading src/java/com/android/internal/telephony/IccSmsInterfaceManager.java +52 −1 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -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; } } } } Loading tests/telephonytests/src/com/android/internal/telephony/IccSmsInterfaceManagerTest.java +31 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { Loading @@ -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 Loading Loading @@ -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"); } } Loading
src/java/com/android/internal/telephony/IccSmsInterfaceManager.java +52 −1 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -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; } } } } Loading
tests/telephonytests/src/com/android/internal/telephony/IccSmsInterfaceManagerTest.java +31 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { Loading @@ -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 Loading Loading @@ -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"); } }