/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.providers.contacts; import android.database.Cursor; import android.database.MatrixCursor; import android.provider.ContactsContract.PhoneLookup; import android.test.AndroidTestCase; import android.test.MoreAsserts; import android.test.suitebuilder.annotation.SmallTest; import com.android.providers.contacts.enterprise.EnterpriseContactsCursorWrapper; @SmallTest public class EnterpriseContactsCursorWrapperTest extends AndroidTestCase { public void testWrappedResults() { final String[] projection = new String[] { /* column 0 */ PhoneLookup._ID, /* column 1 */ PhoneLookup.CONTACT_ID, /* column 2 */ PhoneLookup.LOOKUP_KEY, /* column 3 */ PhoneLookup.DISPLAY_NAME, /* column 4 */ PhoneLookup.LAST_TIME_CONTACTED, /* column 5 */ PhoneLookup.TIMES_CONTACTED, /* column 6 */ PhoneLookup.STARRED, /* column 7 */ PhoneLookup.IN_DEFAULT_DIRECTORY, /* column 8 */ PhoneLookup.IN_VISIBLE_GROUP, /* column 9 */ PhoneLookup.PHOTO_FILE_ID, /* column 10 */ PhoneLookup.PHOTO_ID, /* column 11 */ PhoneLookup.PHOTO_URI, /* column 12 */ PhoneLookup.PHOTO_THUMBNAIL_URI, /* column 13 */ PhoneLookup.CUSTOM_RINGTONE, /* column 14 */ PhoneLookup.HAS_PHONE_NUMBER, /* column 15 */ PhoneLookup.SEND_TO_VOICEMAIL, /* column 16 */ PhoneLookup.NUMBER, /* column 17 */ PhoneLookup.TYPE, /* column 18 */ PhoneLookup.LABEL, /* column 19 */ PhoneLookup.NORMALIZED_NUMBER }; final MatrixCursor c = new MatrixCursor(projection); // First, convert and make sure it returns an empty cursor. Cursor rewritten = new EnterpriseContactsCursorWrapper(c, projection, new int[] {0, 1}, null); assertEquals(0, rewritten.getCount()); assertEquals(projection.length, rewritten.getColumnCount()); c.addRow(new Object[] { 1L, // PhoneLookup._ID, 1L, // PhoneLookup.CONTACT_ID, null, // PhoneLookup.LOOKUP_KEY, null, // PhoneLookup.DISPLAY_NAME, null, // PhoneLookup.LAST_TIME_CONTACTED, null, // PhoneLookup.TIMES_CONTACTED, null, // PhoneLookup.STARRED, null, // PhoneLookup.IN_DEFAULT_DIRECTORY, null, // PhoneLookup.IN_VISIBLE_GROUP, null, // PhoneLookup.PHOTO_FILE_ID, null, // PhoneLookup.PHOTO_ID, null, // PhoneLookup.PHOTO_URI, null, // PhoneLookup.PHOTO_THUMBNAIL_URI, null, // PhoneLookup.CUSTOM_RINGTONE, null, // PhoneLookup.HAS_PHONE_NUMBER, null, // PhoneLookup.SEND_TO_VOICEMAIL, null, // PhoneLookup.NUMBER, null, // PhoneLookup.TYPE, null, // PhoneLookup.LABEL, null, // PhoneLookup.NORMALIZED_NUMBER }); c.addRow(new Object[] { 10L, // PhoneLookup._ID, 10L, // PhoneLookup.CONTACT_ID, "key", // PhoneLookup.LOOKUP_KEY, "name", // PhoneLookup.DISPLAY_NAME, 123, // PhoneLookup.LAST_TIME_CONTACTED, 456, // PhoneLookup.TIMES_CONTACTED, 1, // PhoneLookup.STARRED, 1, // PhoneLookup.IN_DEFAULT_DIRECTORY, 1, // PhoneLookup.IN_VISIBLE_GROUP, 1001, // PhoneLookup.PHOTO_FILE_ID, 1002, // PhoneLookup.PHOTO_ID, "content://a/a", // PhoneLookup.PHOTO_URI, "content://a/b", // PhoneLookup.PHOTO_THUMBNAIL_URI, "content://a/c", // PhoneLookup.CUSTOM_RINGTONE, 1, // PhoneLookup.HAS_PHONE_NUMBER, 1, // PhoneLookup.SEND_TO_VOICEMAIL, "1234", // PhoneLookup.NUMBER, 1, // PhoneLookup.TYPE, "label", // PhoneLookup.LABEL, "+1234", // PhoneLookup.NORMALIZED_NUMBER }); c.addRow(new Object[] { 11L, // PhoneLookup._ID, 11L, // PhoneLookup.CONTACT_ID, null, // PhoneLookup.LOOKUP_KEY, null, // PhoneLookup.DISPLAY_NAME, null, // PhoneLookup.LAST_TIME_CONTACTED, null, // PhoneLookup.TIMES_CONTACTED, null, // PhoneLookup.STARRED, null, // PhoneLookup.IN_DEFAULT_DIRECTORY, null, // PhoneLookup.IN_VISIBLE_GROUP, null, // PhoneLookup.PHOTO_FILE_ID, null, // PhoneLookup.PHOTO_ID, "content://com.android.contacts/contacts/11/display_photo", // PhoneLookup.PHOTO_URI, "content://com.android.contacts/contacts/11/photo", // PhoneLookup.PHOTO_THUMBNAIL_URI, null, // PhoneLookup.CUSTOM_RINGTONE, null, // PhoneLookup.HAS_PHONE_NUMBER, null, // PhoneLookup.SEND_TO_VOICEMAIL, null, // PhoneLookup.NUMBER, null, // PhoneLookup.TYPE, null, // PhoneLookup.LABEL, null, // PhoneLookup.NORMALIZED_NUMBER }); c.addRow(new Object[] { 12L, // PhoneLookup._ID, 12L, // PhoneLookup.CONTACT_ID, null, // PhoneLookup.LOOKUP_KEY, null, // PhoneLookup.DISPLAY_NAME, null, // PhoneLookup.LAST_TIME_CONTACTED, null, // PhoneLookup.TIMES_CONTACTED, null, // PhoneLookup.STARRED, null, // PhoneLookup.IN_DEFAULT_DIRECTORY, null, // PhoneLookup.IN_VISIBLE_GROUP, null, // PhoneLookup.PHOTO_FILE_ID, null, // PhoneLookup.PHOTO_ID, "content://com.android.contacts/contacts/12/photo", // PhoneLookup.PHOTO_URI, "content://com.android.contacts/contacts/12/photo", // PhoneLookup.PHOTO_THUMBNAIL_URI, null, // PhoneLookup.CUSTOM_RINGTONE, null, // PhoneLookup.HAS_PHONE_NUMBER, null, // PhoneLookup.SEND_TO_VOICEMAIL, null, // PhoneLookup.NUMBER, null, // PhoneLookup.TYPE, null, // PhoneLookup.LABEL, null, // PhoneLookup.NORMALIZED_NUMBER }); c.addRow(new Object[] { 13L, // PhoneLookup._ID, 13L, // PhoneLookup.CONTACT_ID, null, // PhoneLookup.LOOKUP_KEY, null, // PhoneLookup.DISPLAY_NAME, null, // PhoneLookup.LAST_TIME_CONTACTED, null, // PhoneLookup.TIMES_CONTACTED, null, // PhoneLookup.STARRED, null, // PhoneLookup.IN_DEFAULT_DIRECTORY, null, // PhoneLookup.IN_VISIBLE_GROUP, 123L, // PhoneLookup.PHOTO_FILE_ID, null, // PhoneLookup.PHOTO_ID, "content://com.android.contacts/display_photo/123", // PhoneLookup.PHOTO_URI, "content://com.android.contacts/contacts/13/photo", // PhoneLookup.PHOTO_THUMBNAIL_URI, null, // PhoneLookup.CUSTOM_RINGTONE, null, // PhoneLookup.HAS_PHONE_NUMBER, null, // PhoneLookup.SEND_TO_VOICEMAIL, null, // PhoneLookup.NUMBER, null, // PhoneLookup.TYPE, null, // PhoneLookup.LABEL, null, // PhoneLookup.NORMALIZED_NUMBER }); rewritten = new EnterpriseContactsCursorWrapper(c, projection, new int[] {0, 1}, null); assertEquals(5, rewritten.getCount()); assertEquals(projection.length, rewritten.getColumnCount()); rewritten.moveToFirst(); // Verify the first row. int column = 0; assertEquals(1000000001L, rewritten.getLong(column++)); // We offset ID for corp contacts. assertEquals(1000000001L, rewritten.getLong(column++)); // We offset ID for corp contacts. assertEquals(null, rewritten.getString(column++)); assertEquals(null, rewritten.getString(column++)); assertEquals(null, rewritten.getString(column++)); assertEquals(null, rewritten.getString(column++)); assertEquals(null, rewritten.getString(column++)); assertEquals(null, rewritten.getString(column++)); assertEquals(null, rewritten.getString(column++)); assertEquals(null, rewritten.getString(column++)); assertEquals(null, rewritten.getString(column++)); assertEquals(null, rewritten.getString(column++)); assertEquals(null, rewritten.getString(column++)); assertEquals(null, rewritten.getString(column++)); assertEquals(null, rewritten.getString(column++)); assertEquals(null, rewritten.getString(column++)); assertEquals(null, rewritten.getString(column++)); assertEquals(null, rewritten.getString(column++)); assertEquals(null, rewritten.getString(column++)); assertEquals(null, rewritten.getString(column++)); // Verify the second row. rewritten.moveToNext(); column = 0; assertEquals(1000000010L, rewritten.getLong(column++)); // With offset. assertEquals(1000000010L, rewritten.getLong(column++)); // With offset. assertEquals("c-key", rewritten.getString(column++)); assertEquals("name", rewritten.getString(column++)); assertEquals(123, rewritten.getInt(column++)); assertEquals(456, rewritten.getInt(column++)); assertEquals(1, rewritten.getInt(column++)); assertEquals(1, rewritten.getInt(column++)); assertEquals(1, rewritten.getInt(column++)); assertEquals(null, rewritten.getString(column++)); // photo file id assertEquals(null, rewritten.getString(column++)); // photo id assertEquals(null, rewritten.getString(column++)); assertEquals(null, rewritten.getString(column++)); assertEquals(null, rewritten.getString(column++)); // ringtone assertEquals(1, rewritten.getInt(column++)); assertEquals(1, rewritten.getInt(column++)); assertEquals("1234", rewritten.getString(column++)); assertEquals(1, rewritten.getInt(column++)); assertEquals("label", rewritten.getString(column++)); assertEquals("+1234", rewritten.getString(column++)); // Verify the 3rd row. rewritten.moveToNext(); assertEquals("content://com.android.contacts/contacts_corp/11/display_photo", rewritten.getString(11)); assertEquals("content://com.android.contacts/contacts_corp/11/photo", rewritten.getString(12)); // Verify the 4th row. rewritten.moveToNext(); assertEquals("content://com.android.contacts/contacts_corp/12/photo", rewritten.getString(11)); assertEquals("content://com.android.contacts/contacts_corp/12/photo", rewritten.getString(12)); // Verify the 5th row. rewritten.moveToNext(); assertEquals("content://com.android.contacts/contacts_corp/13/display_photo", rewritten.getString(11)); assertEquals("content://com.android.contacts/contacts_corp/13/photo", rewritten.getString(12)); } }