191680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan/* 29c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu * Copyright (C) 2016 The Android Open Source Project 391680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan * 491680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan * Licensed under the Apache License, Version 2.0 (the "License"); 591680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan * you may not use this file except in compliance with the License. 691680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan * You may obtain a copy of the License at 791680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan * 891680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan * http://www.apache.org/licenses/LICENSE-2.0 991680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan * 1091680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan * Unless required by applicable law or agreed to in writing, software 1191680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan * distributed under the License is distributed on an "AS IS" BASIS, 1291680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1391680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan * See the License for the specific language governing permissions and 1491680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan * limitations under the License. 1591680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan */ 1691680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan 1791680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajanpackage com.android.internal.telephony.gsm; 1891680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan 19c84908f6414c0f70448e36f8869f5cdf2c877c3csqianimport static android.telephony.SmsManager.RESULT_ERROR_SHORT_CODE_NEVER_ALLOWED; 20c84908f6414c0f70448e36f8869f5cdf2c877c3csqian 21c84908f6414c0f70448e36f8869f5cdf2c877c3csqianimport static com.android.internal.telephony.SmsUsageMonitor.CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE; 22c84908f6414c0f70448e36f8869f5cdf2c877c3csqianimport static com.android.internal.telephony.SmsUsageMonitor.PREMIUM_SMS_PERMISSION_NEVER_ALLOW; 234e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxuimport static com.android.internal.telephony.TelephonyTestUtils.waitForMs; 24cc940f429180765b6072a071becae8117e665954Amit Mahajan 255eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastryimport static org.junit.Assert.assertEquals; 265eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastryimport static org.mockito.Matchers.any; 27c84908f6414c0f70448e36f8869f5cdf2c877c3csqianimport static org.mockito.Matchers.anyInt; 285eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastryimport static org.mockito.Matchers.anyString; 292b533ed532c9308ef851fc1d2a0a12d91573c068Mohamed Abdalkaderimport static org.mockito.Mockito.doReturn; 304e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxuimport static org.mockito.Mockito.times; 315eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastryimport static org.mockito.Mockito.verify; 325eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastryimport static org.mockito.Mockito.when; 335eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry 344e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxuimport android.app.ActivityManager; 354e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxuimport android.app.PendingIntent; 364e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxuimport android.content.BroadcastReceiver; 375eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastryimport android.content.Context; 384e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxuimport android.content.Intent; 394e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxuimport android.content.IntentFilter; 405eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastryimport android.location.Country; 415eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastryimport android.location.CountryDetector; 4291680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajanimport android.os.HandlerThread; 435eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastryimport android.os.Message; 445eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastryimport android.os.SystemProperties; 45c84908f6414c0f70448e36f8869f5cdf2c877c3csqianimport android.provider.Settings; 4691680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajanimport android.provider.Telephony; 47c88975306f9a43de52acde751f3eb8d13d640b00Jordan Liuimport android.support.test.filters.FlakyTest; 484e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxuimport android.telephony.SmsManager; 495eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastryimport android.test.suitebuilder.annotation.MediumTest; 5091680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajanimport android.test.suitebuilder.annotation.SmallTest; 514e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxuimport android.util.Singleton; 5291680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan 53c84908f6414c0f70448e36f8869f5cdf2c877c3csqianimport com.android.internal.telephony.ContextFixture; 545eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastryimport com.android.internal.telephony.ISub; 55c84908f6414c0f70448e36f8869f5cdf2c877c3csqianimport com.android.internal.telephony.SMSDispatcher; 562b533ed532c9308ef851fc1d2a0a12d91573c068Mohamed Abdalkaderimport com.android.internal.telephony.SmsDispatchersController; 579c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yuimport com.android.internal.telephony.TelephonyTest; 5891680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajanimport com.android.internal.telephony.TelephonyTestUtils; 594e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxuimport com.android.internal.telephony.TestApplication; 6091680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan 6191680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajanimport org.junit.After; 6291680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajanimport org.junit.Before; 63cc940f429180765b6072a071becae8117e665954Amit Mahajanimport org.junit.Ignore; 6491680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajanimport org.junit.Test; 65c84908f6414c0f70448e36f8869f5cdf2c877c3csqianimport org.mockito.ArgumentCaptor; 6691680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajanimport org.mockito.Mock; 6791680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan 68c84908f6414c0f70448e36f8869f5cdf2c877c3csqianimport java.util.HashMap; 69c84908f6414c0f70448e36f8869f5cdf2c877c3csqian 709c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yupublic class GsmSmsDispatcherTest extends TelephonyTest { 71d02e3c64b1d9959991594e4d4000f00126766642sqian 72d02e3c64b1d9959991594e4d4000f00126766642sqian private static final long TIMEOUT_MS = 500; 73d02e3c64b1d9959991594e4d4000f00126766642sqian 7491680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan @Mock 7591680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan private android.telephony.SmsMessage mSmsMessage; 7691680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan @Mock 7791680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan private SmsMessage mGsmSmsMessage; 7891680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan @Mock 792b533ed532c9308ef851fc1d2a0a12d91573c068Mohamed Abdalkader private SmsDispatchersController mSmsDispatchersController; 8091680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan @Mock 8191680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan private GsmInboundSmsHandler mGsmInboundSmsHandler; 825eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry @Mock 835eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry private CountryDetector mCountryDetector; 845eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry @Mock 85c84908f6414c0f70448e36f8869f5cdf2c877c3csqian private SMSDispatcher.SmsTracker mSmsTracker; 86c84908f6414c0f70448e36f8869f5cdf2c877c3csqian @Mock 875eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry private ISub.Stub mISubStub; 884e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu private Object mLock = new Object(); 894e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu private boolean mReceivedTestIntent = false; 904e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu private static final String TEST_INTENT = "com.android.internal.telephony.TEST_INTENT"; 914e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu private BroadcastReceiver mTestReceiver = new BroadcastReceiver() { 924e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu @Override 934e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu public void onReceive(Context context, Intent intent) { 944e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu logd("onReceive"); 954e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu synchronized (mLock) { 964e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu mReceivedTestIntent = true; 974e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu } 984e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu } 994e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu }; 10091680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan 1015eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry private GsmSMSDispatcher mGsmSmsDispatcher; 1027e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan private GsmSmsDispatcherTestHandler mGsmSmsDispatcherTestHandler; 1035eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry 10491680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan private class GsmSmsDispatcherTestHandler extends HandlerThread { 10591680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan 10691680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan private GsmSmsDispatcherTestHandler(String name) { 10791680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan super(name); 10891680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan } 10991680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan 11091680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan @Override 11191680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan public void onLooperPrepared() { 1122b533ed532c9308ef851fc1d2a0a12d91573c068Mohamed Abdalkader mGsmSmsDispatcher = new GsmSMSDispatcher(mPhone, mSmsDispatchersController, 1132b533ed532c9308ef851fc1d2a0a12d91573c068Mohamed Abdalkader mGsmInboundSmsHandler); 1149c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu setReady(true); 11591680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan } 11691680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan } 11791680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan 11891680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan @Before 11991680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan public void setUp() throws Exception { 12091680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan 1219c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu super.setUp(getClass().getSimpleName()); 12291680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan 1235eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry // Note that this replaces only cached services in ServiceManager. If a service is not found 1245eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry // in the cache, a real instance is used. 1255eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry mServiceManagerMockedServices.put("isub", mISubStub); 1265eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry 1272b533ed532c9308ef851fc1d2a0a12d91573c068Mohamed Abdalkader doReturn(mSmsUsageMonitor).when(mSmsDispatchersController).getUsageMonitor(); 1287e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mGsmSmsDispatcherTestHandler = new GsmSmsDispatcherTestHandler(getClass().getSimpleName()); 1297e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mGsmSmsDispatcherTestHandler.start(); 1305d5ca33a24e6b73a48b575a0e1a5e790784d0bb7Amit Mahajan waitUntilReady(); 13191680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan } 13291680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan 13391680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan @After 13491680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan public void tearDown() throws Exception { 13591680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan mGsmSmsDispatcher = null; 13616fb750132532b5d3012576fa52805e3546551f7Jack Yu mGsmSmsDispatcherTestHandler.quit(); 1379c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu super.tearDown(); 13891680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan } 13991680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan 14091680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan @Test @SmallTest 1413c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan public void testSmsStatus() { 14237800d3cdb300fca83462d95221a05bbef21a951Amit Mahajan mSimulatedCommands.notifySmsStatus(new byte[]{(byte)0xFF, (byte)0xFF, (byte)0xFF}); 14391680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan TelephonyTestUtils.waitForMs(50); 14491680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan verify(mSimulatedCommandsVerifier).acknowledgeLastIncomingGsmSms(true, 14591680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan Telephony.Sms.Intents.RESULT_SMS_HANDLED, null); 14691680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan } 1475eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry 1485eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry @Test @MediumTest 1495eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry public void testSendSmsToRegularNumber_doesNotNotifyblockedNumberProvider() throws Exception { 1506ba18ef5f3733709f16ef03b3d2b2de076b63c3efionaxu setupMockPackagePermissionChecks(); 1515eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry 1525eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry mContextFixture.setSystemService(Context.COUNTRY_DETECTOR, mCountryDetector); 1535eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry when(mCountryDetector.detectCountry()) 1545eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry .thenReturn(new Country("US", Country.COUNTRY_SOURCE_SIM)); 1555eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry 156d5222086533bd645fddc5ca4bf2a2bcc84f1a2afMengjun Leng mGsmSmsDispatcher.sendText("6501002000", "121" /*scAddr*/, "test sms", 157d5222086533bd645fddc5ca4bf2a2bcc84f1a2afMengjun Leng null, null, null, null, false, -1, false, -1); 1585eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry 1595eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry verify(mSimulatedCommandsVerifier).sendSMS(anyString(), anyString(), any(Message.class)); 1605eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry // Blocked number provider is notified about the emergency contact asynchronously. 1615eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry TelephonyTestUtils.waitForMs(50); 1625eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry assertEquals(0, mFakeBlockedNumberContentProvider.mNumEmergencyContactNotifications); 1635eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry } 1645eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry 165c88975306f9a43de52acde751f3eb8d13d640b00Jordan Liu @FlakyTest 166cc940f429180765b6072a071becae8117e665954Amit Mahajan @Ignore 1675eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry @Test @MediumTest 1685eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry public void testSendSmsToEmergencyNumber_notifiesBlockedNumberProvider() throws Exception { 1696ba18ef5f3733709f16ef03b3d2b2de076b63c3efionaxu setupMockPackagePermissionChecks(); 1705eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry 1715eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry mContextFixture.setSystemService(Context.COUNTRY_DETECTOR, mCountryDetector); 1725eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry when(mCountryDetector.detectCountry()) 1735eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry .thenReturn(new Country("US", Country.COUNTRY_SOURCE_SIM)); 1745eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry 1755eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry mGsmSmsDispatcher.sendText( 1765eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry getEmergencyNumberFromSystemPropertiesOrDefault(), "121" /*scAddr*/, "test sms", 177d5222086533bd645fddc5ca4bf2a2bcc84f1a2afMengjun Leng null, null, null, null, false, -1, false, -1); 1785eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry 1795eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry verify(mSimulatedCommandsVerifier).sendSMS(anyString(), anyString(), any(Message.class)); 1805eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry // Blocked number provider is notified about the emergency contact asynchronously. 1815eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry TelephonyTestUtils.waitForMs(50); 1825eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry assertEquals(1, mFakeBlockedNumberContentProvider.mNumEmergencyContactNotifications); 1835eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry } 1845eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry 185d5222086533bd645fddc5ca4bf2a2bcc84f1a2afMengjun Leng @Test @SmallTest 186d5222086533bd645fddc5ca4bf2a2bcc84f1a2afMengjun Leng public void testSmsMessageValidityPeriod() throws Exception { 187d5222086533bd645fddc5ca4bf2a2bcc84f1a2afMengjun Leng int vp; 188d5222086533bd645fddc5ca4bf2a2bcc84f1a2afMengjun Leng vp = SmsMessage.getRelativeValidityPeriod(-5); 189d5222086533bd645fddc5ca4bf2a2bcc84f1a2afMengjun Leng assertEquals(-1, vp); 190d5222086533bd645fddc5ca4bf2a2bcc84f1a2afMengjun Leng 191d5222086533bd645fddc5ca4bf2a2bcc84f1a2afMengjun Leng vp = SmsMessage.getRelativeValidityPeriod(100); 192d5222086533bd645fddc5ca4bf2a2bcc84f1a2afMengjun Leng assertEquals(100 / 5 - 1, vp); 193d5222086533bd645fddc5ca4bf2a2bcc84f1a2afMengjun Leng } 194d5222086533bd645fddc5ca4bf2a2bcc84f1a2afMengjun Leng 1955eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry private String getEmergencyNumberFromSystemPropertiesOrDefault() { 1965eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry String systemEmergencyNumbers = SystemProperties.get("ril.ecclist"); 1975eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry if (systemEmergencyNumbers == null) { 1985eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry return "911"; 1995eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry } else { 2005eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry return systemEmergencyNumbers.split(",")[0]; 2015eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry } 2025eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry } 2034e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu 204cc940f429180765b6072a071becae8117e665954Amit Mahajan @Test 205cc940f429180765b6072a071becae8117e665954Amit Mahajan @SmallTest 206cc940f429180765b6072a071becae8117e665954Amit Mahajan @FlakyTest 207cc940f429180765b6072a071becae8117e665954Amit Mahajan @Ignore 2084e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu public void testSendTextWithInvalidDestAddr() throws Exception { 2094e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu // unmock ActivityManager to be able to register receiver, create real PendingIntent and 2104e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu // receive TEST_INTENT 2114e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu restoreInstance(Singleton.class, "mInstance", mIActivityManagerSingleton); 2124e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu restoreInstance(ActivityManager.class, "IActivityManagerSingleton", null); 2134e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu Context realContext = TestApplication.getAppContext(); 2144e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu realContext.registerReceiver(mTestReceiver, new IntentFilter(TEST_INTENT)); 2154e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu PendingIntent pendingIntent = PendingIntent.getBroadcast(realContext, 0, 2164e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu new Intent(TEST_INTENT), 0); 2174e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu // send invalid dest address: + 2184e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu mGsmSmsDispatcher.sendText("+", "222" /*scAddr*/, TAG, 219d5222086533bd645fddc5ca4bf2a2bcc84f1a2afMengjun Leng pendingIntent, null, null, null, false, -1, false, -1); 2204e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu waitForMs(500); 2214e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu verify(mSimulatedCommandsVerifier, times(0)).sendSMS(anyString(), anyString(), 2224e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu any(Message.class)); 2234e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu synchronized (mLock) { 2244e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu assertEquals(true, mReceivedTestIntent); 2254e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu assertEquals(SmsManager.RESULT_ERROR_NULL_PDU, mTestReceiver.getResultCode()); 2264e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu } 2274e9b4db21f640e7aae8d6095a926a5ce6cea52a8fionaxu } 228c84908f6414c0f70448e36f8869f5cdf2c877c3csqian 229c84908f6414c0f70448e36f8869f5cdf2c877c3csqian @Test 230c84908f6414c0f70448e36f8869f5cdf2c877c3csqian public void testSendRawPduWithEventStopSending() throws Exception { 231c84908f6414c0f70448e36f8869f5cdf2c877c3csqian setupMockPackagePermissionChecks(); 232c84908f6414c0f70448e36f8869f5cdf2c877c3csqian mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL); 233c84908f6414c0f70448e36f8869f5cdf2c877c3csqian 234c84908f6414c0f70448e36f8869f5cdf2c877c3csqian // return a fake value to pass getData() 235c84908f6414c0f70448e36f8869f5cdf2c877c3csqian HashMap data = new HashMap<String, String>(); 236c84908f6414c0f70448e36f8869f5cdf2c877c3csqian data.put("pdu", new byte[1]); 237c84908f6414c0f70448e36f8869f5cdf2c877c3csqian when(mSmsTracker.getData()).thenReturn(data); 238c84908f6414c0f70448e36f8869f5cdf2c877c3csqian 239c84908f6414c0f70448e36f8869f5cdf2c877c3csqian // Set values to return to simulate EVENT_STOP_SENDING 240c84908f6414c0f70448e36f8869f5cdf2c877c3csqian when(mSmsUsageMonitor.checkDestination(any(), any())) 241c84908f6414c0f70448e36f8869f5cdf2c877c3csqian .thenReturn(CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE); 242c84908f6414c0f70448e36f8869f5cdf2c877c3csqian when(mSmsUsageMonitor.getPremiumSmsPermission(any())) 243c84908f6414c0f70448e36f8869f5cdf2c877c3csqian .thenReturn(PREMIUM_SMS_PERMISSION_NEVER_ALLOW); 244c84908f6414c0f70448e36f8869f5cdf2c877c3csqian when(mSmsTracker.getAppPackageName()).thenReturn(""); 245c84908f6414c0f70448e36f8869f5cdf2c877c3csqian 246c84908f6414c0f70448e36f8869f5cdf2c877c3csqian // Settings.Global.DEVICE_PROVISIONED to 1 247c84908f6414c0f70448e36f8869f5cdf2c877c3csqian Settings.Global.putInt(mContext.getContentResolver(), 248c84908f6414c0f70448e36f8869f5cdf2c877c3csqian Settings.Global.DEVICE_PROVISIONED, 1); 249c84908f6414c0f70448e36f8869f5cdf2c877c3csqian 250c84908f6414c0f70448e36f8869f5cdf2c877c3csqian mGsmSmsDispatcher.sendRawPdu(mSmsTracker); 251d02e3c64b1d9959991594e4d4000f00126766642sqian waitForHandlerAction(mGsmSmsDispatcher, TIMEOUT_MS); 252c84908f6414c0f70448e36f8869f5cdf2c877c3csqian 253c84908f6414c0f70448e36f8869f5cdf2c877c3csqian verify(mSmsUsageMonitor, times(1)).checkDestination(any(), any()); 254c84908f6414c0f70448e36f8869f5cdf2c877c3csqian verify(mSmsUsageMonitor, times(1)).getPremiumSmsPermission(any()); 255c84908f6414c0f70448e36f8869f5cdf2c877c3csqian ArgumentCaptor<Integer> argumentCaptor = ArgumentCaptor 256c84908f6414c0f70448e36f8869f5cdf2c877c3csqian .forClass(Integer.class); 257c84908f6414c0f70448e36f8869f5cdf2c877c3csqian verify(mSmsTracker, times(1)).onFailed(any(), argumentCaptor.capture(), anyInt()); 258c84908f6414c0f70448e36f8869f5cdf2c877c3csqian assertEquals(RESULT_ERROR_SHORT_CODE_NEVER_ALLOWED, (int) argumentCaptor.getValue()); 259c84908f6414c0f70448e36f8869f5cdf2c877c3csqian } 26091680ad599f9e15a32c3a9798021778e8d4eab6eAmit Mahajan} 261