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