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

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

Merge "Guard against null cursor when querying SIM" into ub-contactsdialer-i-dev

parents 17fd790e aa16ca21
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -274,6 +274,10 @@ public class SimContactDaoImpl extends SimContactDao {
    private ArrayList<SimContact> loadFrom(Uri uri) {
    private ArrayList<SimContact> loadFrom(Uri uri) {
        synchronized (SIM_READ_LOCK) {
        synchronized (SIM_READ_LOCK) {
            final Cursor cursor = mResolver.query(uri, null, null, null, null);
            final Cursor cursor = mResolver.query(uri, null, null, null, null);
            if (cursor == null) {
                // Assume null means there are no SIM contacts.
                return new ArrayList<>(0);
            }


            try {
            try {
                return loadFromCursor(cursor);
                return loadFromCursor(cursor);
+26 −0
Original line number Original line Diff line number Diff line
@@ -26,14 +26,19 @@ import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.when;


import android.content.ContentProvider;
import android.content.ContentProviderOperation;
import android.content.ContentProviderOperation;
import android.content.ContentResolver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Context;
import android.content.OperationApplicationException;
import android.content.OperationApplicationException;
import android.database.Cursor;
import android.database.Cursor;
import android.net.Uri;
import android.os.CancellationSignal;
import android.os.RemoteException;
import android.os.RemoteException;
import android.provider.ContactsContract;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Email;
@@ -701,6 +706,27 @@ public class SimContactDaoTests {
                    .loadContactsForSim(new SimCard("123", "carrier", "sim", null, "us"));
                    .loadContactsForSim(new SimCard("123", "carrier", "sim", null, "us"));
            assertTrue(result.isEmpty());
            assertTrue(result.isEmpty());
        }
        }

        @Test
        public void returnsEmptyListForNullCursor() {
            mContext = mock(MockContext.class);
            final MockContentResolver mockResolver = new MockContentResolver();
            final ContentProvider mockProvider = mock(android.test.mock.MockContentProvider.class);
            when(mockProvider.query(any(Uri.class), any(String[].class), anyString(),
                    any(String[].class), anyString()))
                    .thenReturn(null);
            when(mockProvider.query(any(Uri.class), any(String[].class), anyString(),
                    any(String[].class), anyString(), any(CancellationSignal.class)))
                    .thenReturn(null);

            mockResolver.addProvider("icc", mockProvider);
            when(mContext.getContentResolver()).thenReturn(mockResolver);

            final SimContactDao sut = SimContactDao.create(mContext);
            final List<SimContact> result = sut
                    .loadContactsForSim(new SimCard("123", "carrier", "sim", null, "us"));
            assertTrue(result.isEmpty());
        }
    }
    }


    @LargeTest
    @LargeTest