10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2009 The Android Open Source Project
30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License");
50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License.
60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at
70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *      http://www.apache.org/licenses/LICENSE-2.0
90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software
110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS,
120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and
140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License.
150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
170825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepackage com.android.internal.telephony;
180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
190825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.test.AndroidTestCase;
200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.test.suitebuilder.annotation.SmallTest;
210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
220825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.ContentResolver;
230825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.Context;
240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.res.Resources;
250825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.CallerInfo;
260825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.CallerInfoAsyncQuery;
270825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.util.Log;
280825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Looper;
290825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.test.ActivityInstrumentationTestCase;
300825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.util.StringBuilderPrinter;
310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Check the CallerInfo utility class works as expected.
340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
370825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic class CallerInfoTest extends AndroidTestCase {
380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private CallerInfo mInfo;
390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Context mContext;
400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static final String kEmergencyNumber = "Emergency Number";
420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static final int kToken = 0xdeadbeef;
430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static final String TAG = "CallerInfoUnitTest";
440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected void setUp() throws Exception {
470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        super.setUp();
480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mContext = new MockContext();
490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mInfo = new CallerInfo();
500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected void tearDown() throws Exception {
540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        super.tearDown();
550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Checks the caller info instance is flagged as an emergency if
590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * the number is an emergency one. There is no test for the
600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * contact based constructors because emergency number are not in
610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * the contact DB.
620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testEmergencyIsProperlySet() throws Exception {
650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertFalse(mInfo.isEmergencyNumber());
660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mInfo = CallerInfo.getCallerInfo(mContext, "911");
680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertIsValidEmergencyCallerInfo();
690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mInfo = CallerInfo.getCallerInfo(mContext, "tel:911");
710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertIsValidEmergencyCallerInfo();
720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // This one hits the content resolver.
750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mInfo = CallerInfo.getCallerInfo(mContext, "18001234567");
760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertFalse(mInfo.isEmergencyNumber());
770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Same as testEmergencyIsProperlySet but uses the async query api.
810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testEmergencyIsProperlySetUsingAsyncQuery() throws Exception {
840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        QueryRunner query;
850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        query = new QueryRunner("911");
870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        query.runAndCheckCompletion();
880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertIsValidEmergencyCallerInfo();
890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        query = new QueryRunner("tel:911");
910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        query.runAndCheckCompletion();
920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertIsValidEmergencyCallerInfo();
930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        query = new QueryRunner("18001234567");
950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        query.runAndCheckCompletion();
960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertFalse(mInfo.isEmergencyNumber());
970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * For emergency caller info, phoneNumber should be set to the
1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * string emergency_call_dialog_number_for_display and the
1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * photoResource should be set to the picture_emergency drawable.
1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testEmergencyNumberAndPhotoAreSet() throws Exception {
1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mInfo = CallerInfo.getCallerInfo(mContext, "911");
1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertIsValidEmergencyCallerInfo();
1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // TODO: Add more tests:
1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Check if the voice mail number cannot be retrieved that the
1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * original phone number is preserved.
1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Check the markAs* methods work.
1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //
1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Helpers
1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //
1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Partial implementation of MockResources.
1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public class MockResources extends android.test.mock.MockResources
1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    {
1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        @Override
1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public String getString(int resId) throws Resources.NotFoundException {
1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            switch (resId) {
1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                case com.android.internal.R.string.emergency_call_dialog_number_for_display:
1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    return kEmergencyNumber;
1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                default:
1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    throw new UnsupportedOperationException("Missing handling for resid " + resId);
1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Partial implementation of MockContext.
1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public class MockContext extends android.test.mock.MockContext {
1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        private ContentResolver mResolver;
1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        private Resources mResources;
1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public MockContext() {
1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mResolver = new android.test.mock.MockContentResolver();
1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mResources = new MockResources();
1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        @Override
1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public ContentResolver getContentResolver() {
1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return mResolver;
1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        @Override
1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public Resources getResources() {
1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return mResources;
1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Class to run a CallerInfoAsyncQuery in a separate thread, with
1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * its own Looper. We cannot use the main Looper because on the
1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * 1st quit the thread is maked dead, ie no further test can use
1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * it. Also there is not way to inject a Looper instance in the
1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * query, so we have to use a thread with its own looper.
1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private class QueryRunner extends Thread
1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            implements CallerInfoAsyncQuery.OnQueryCompleteListener {
1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        private Looper mLooper;
1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        private String mNumber;
1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        private boolean mAsyncCompleted;
1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public QueryRunner(String number) {
1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            super();
1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mNumber = number;
1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Run the query in the thread, wait for completion.
1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public void runAndCheckCompletion() throws InterruptedException {
1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            start();
1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            join();
1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            assertTrue(mAsyncCompleted);
1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        @Override
1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public void run() {
1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            Looper.prepare();
1880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mLooper = Looper.myLooper();
1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mAsyncCompleted = false;
1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // The query will pick the thread local looper we've just prepared.
1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            CallerInfoAsyncQuery.startQuery(kToken, mContext, mNumber, this, null);
1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mLooper.loop();
1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Quit the Looper on the 1st callback
1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // (EVENT_EMERGENCY_NUMBER). There is another message
1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // (EVENT_END_OF_QUEUE) that will never be delivered because
1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // the test has exited. The corresponding stack trace
1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // "Handler{xxxxx} sending message to a Handler on a dead
2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // thread" can be ignored.
2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public void onQueryComplete(int token, Object cookie, CallerInfo info) {
2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mAsyncCompleted = true;
2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mInfo = info;
2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mLooper.quit();
2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Fail if mInfo does not contain a valid emergency CallerInfo instance.
2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void assertIsValidEmergencyCallerInfo() throws Exception {
2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(mInfo.isEmergencyNumber());
2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // For emergency caller info, phoneNumber should be set to the
2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // string emergency_call_dialog_number_for_display and the
2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // photoResource should be set to the picture_emergency drawable.
2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(kEmergencyNumber, mInfo.phoneNumber);
2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(com.android.internal.R.drawable.picture_emergency, mInfo.photoResource);
2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // The name should be null
2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertNull(mInfo.name);
2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(0, mInfo.namePresentation);
2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertNull(mInfo.cnapName);
2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(0, mInfo.numberPresentation);
2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertFalse(mInfo.contactExists);
2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(0, mInfo.person_id);
2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertFalse(mInfo.needUpdate);
2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertNull(mInfo.contactRefUri);
2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertNull(mInfo.phoneLabel);
2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(0, mInfo.numberType);
2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertNull(mInfo.numberLabel);
2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertNull(mInfo.contactRingtoneUri);
2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertFalse(mInfo.shouldSendToVoicemail);
2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertNull(mInfo.cachedPhoto);
2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertFalse(mInfo.isCachedPhotoCurrent);
2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
242