1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.providers.contacts; 18 19 import android.database.Cursor; 20 import android.database.MatrixCursor; 21 import android.provider.ContactsContract.PhoneLookup; 22 23 import androidx.test.filters.SmallTest; 24 25 import com.android.providers.contacts.enterprise.EnterpriseContactsCursorWrapper; 26 27 @SmallTest 28 public class EnterpriseContactsCursorWrapperTest extends FixedAndroidTestCase { 29 testWrappedResults()30 public void testWrappedResults() { 31 final String[] projection = new String[] { 32 /* column 0 */ PhoneLookup._ID, 33 /* column 1 */ PhoneLookup.CONTACT_ID, 34 /* column 2 */ PhoneLookup.LOOKUP_KEY, 35 /* column 3 */ PhoneLookup.DISPLAY_NAME, 36 /* column 4 */ PhoneLookup.LAST_TIME_CONTACTED, 37 /* column 5 */ PhoneLookup.TIMES_CONTACTED, 38 /* column 6 */ PhoneLookup.STARRED, 39 /* column 7 */ PhoneLookup.IN_DEFAULT_DIRECTORY, 40 /* column 8 */ PhoneLookup.IN_VISIBLE_GROUP, 41 /* column 9 */ PhoneLookup.PHOTO_FILE_ID, 42 /* column 10 */ PhoneLookup.PHOTO_ID, 43 /* column 11 */ PhoneLookup.PHOTO_URI, 44 /* column 12 */ PhoneLookup.PHOTO_THUMBNAIL_URI, 45 /* column 13 */ PhoneLookup.CUSTOM_RINGTONE, 46 /* column 14 */ PhoneLookup.HAS_PHONE_NUMBER, 47 /* column 15 */ PhoneLookup.SEND_TO_VOICEMAIL, 48 /* column 16 */ PhoneLookup.NUMBER, 49 /* column 17 */ PhoneLookup.TYPE, 50 /* column 18 */ PhoneLookup.LABEL, 51 /* column 19 */ PhoneLookup.NORMALIZED_NUMBER 52 }; 53 final MatrixCursor c = new MatrixCursor(projection); 54 55 // First, convert and make sure it returns an empty cursor. 56 Cursor rewritten = new EnterpriseContactsCursorWrapper(c, projection, 57 new int[] {0, 1}, null); 58 59 assertEquals(0, rewritten.getCount()); 60 assertEquals(projection.length, rewritten.getColumnCount()); 61 62 c.addRow(new Object[] { 63 1L, // PhoneLookup._ID, 64 1L, // PhoneLookup.CONTACT_ID, 65 null, // PhoneLookup.LOOKUP_KEY, 66 null, // PhoneLookup.DISPLAY_NAME, 67 null, // PhoneLookup.LAST_TIME_CONTACTED, 68 null, // PhoneLookup.TIMES_CONTACTED, 69 null, // PhoneLookup.STARRED, 70 null, // PhoneLookup.IN_DEFAULT_DIRECTORY, 71 null, // PhoneLookup.IN_VISIBLE_GROUP, 72 null, // PhoneLookup.PHOTO_FILE_ID, 73 null, // PhoneLookup.PHOTO_ID, 74 null, // PhoneLookup.PHOTO_URI, 75 null, // PhoneLookup.PHOTO_THUMBNAIL_URI, 76 null, // PhoneLookup.CUSTOM_RINGTONE, 77 null, // PhoneLookup.HAS_PHONE_NUMBER, 78 null, // PhoneLookup.SEND_TO_VOICEMAIL, 79 null, // PhoneLookup.NUMBER, 80 null, // PhoneLookup.TYPE, 81 null, // PhoneLookup.LABEL, 82 null, // PhoneLookup.NORMALIZED_NUMBER 83 }); 84 85 c.addRow(new Object[] { 86 10L, // PhoneLookup._ID, 87 10L, // PhoneLookup.CONTACT_ID, 88 "key", // PhoneLookup.LOOKUP_KEY, 89 "name", // PhoneLookup.DISPLAY_NAME, 90 123, // PhoneLookup.LAST_TIME_CONTACTED, 91 456, // PhoneLookup.TIMES_CONTACTED, 92 1, // PhoneLookup.STARRED, 93 1, // PhoneLookup.IN_DEFAULT_DIRECTORY, 94 1, // PhoneLookup.IN_VISIBLE_GROUP, 95 1001, // PhoneLookup.PHOTO_FILE_ID, 96 1002, // PhoneLookup.PHOTO_ID, 97 "content://a/a", // PhoneLookup.PHOTO_URI, 98 "content://a/b", // PhoneLookup.PHOTO_THUMBNAIL_URI, 99 "content://a/c", // PhoneLookup.CUSTOM_RINGTONE, 100 1, // PhoneLookup.HAS_PHONE_NUMBER, 101 1, // PhoneLookup.SEND_TO_VOICEMAIL, 102 "1234", // PhoneLookup.NUMBER, 103 1, // PhoneLookup.TYPE, 104 "label", // PhoneLookup.LABEL, 105 "+1234", // PhoneLookup.NORMALIZED_NUMBER 106 }); 107 108 c.addRow(new Object[] { 109 11L, // PhoneLookup._ID, 110 11L, // PhoneLookup.CONTACT_ID, 111 null, // PhoneLookup.LOOKUP_KEY, 112 null, // PhoneLookup.DISPLAY_NAME, 113 null, // PhoneLookup.LAST_TIME_CONTACTED, 114 null, // PhoneLookup.TIMES_CONTACTED, 115 null, // PhoneLookup.STARRED, 116 null, // PhoneLookup.IN_DEFAULT_DIRECTORY, 117 null, // PhoneLookup.IN_VISIBLE_GROUP, 118 null, // PhoneLookup.PHOTO_FILE_ID, 119 null, // PhoneLookup.PHOTO_ID, 120 "content://com.android.contacts/contacts/11/display_photo", // PhoneLookup.PHOTO_URI, 121 "content://com.android.contacts/contacts/11/photo", // PhoneLookup.PHOTO_THUMBNAIL_URI, 122 null, // PhoneLookup.CUSTOM_RINGTONE, 123 null, // PhoneLookup.HAS_PHONE_NUMBER, 124 null, // PhoneLookup.SEND_TO_VOICEMAIL, 125 null, // PhoneLookup.NUMBER, 126 null, // PhoneLookup.TYPE, 127 null, // PhoneLookup.LABEL, 128 null, // PhoneLookup.NORMALIZED_NUMBER 129 }); 130 131 c.addRow(new Object[] { 132 12L, // PhoneLookup._ID, 133 12L, // PhoneLookup.CONTACT_ID, 134 null, // PhoneLookup.LOOKUP_KEY, 135 null, // PhoneLookup.DISPLAY_NAME, 136 null, // PhoneLookup.LAST_TIME_CONTACTED, 137 null, // PhoneLookup.TIMES_CONTACTED, 138 null, // PhoneLookup.STARRED, 139 null, // PhoneLookup.IN_DEFAULT_DIRECTORY, 140 null, // PhoneLookup.IN_VISIBLE_GROUP, 141 null, // PhoneLookup.PHOTO_FILE_ID, 142 null, // PhoneLookup.PHOTO_ID, 143 "content://com.android.contacts/contacts/12/photo", // PhoneLookup.PHOTO_URI, 144 "content://com.android.contacts/contacts/12/photo", // PhoneLookup.PHOTO_THUMBNAIL_URI, 145 null, // PhoneLookup.CUSTOM_RINGTONE, 146 null, // PhoneLookup.HAS_PHONE_NUMBER, 147 null, // PhoneLookup.SEND_TO_VOICEMAIL, 148 null, // PhoneLookup.NUMBER, 149 null, // PhoneLookup.TYPE, 150 null, // PhoneLookup.LABEL, 151 null, // PhoneLookup.NORMALIZED_NUMBER 152 }); 153 154 c.addRow(new Object[] { 155 13L, // PhoneLookup._ID, 156 13L, // PhoneLookup.CONTACT_ID, 157 null, // PhoneLookup.LOOKUP_KEY, 158 null, // PhoneLookup.DISPLAY_NAME, 159 null, // PhoneLookup.LAST_TIME_CONTACTED, 160 null, // PhoneLookup.TIMES_CONTACTED, 161 null, // PhoneLookup.STARRED, 162 null, // PhoneLookup.IN_DEFAULT_DIRECTORY, 163 null, // PhoneLookup.IN_VISIBLE_GROUP, 164 123L, // PhoneLookup.PHOTO_FILE_ID, 165 null, // PhoneLookup.PHOTO_ID, 166 "content://com.android.contacts/display_photo/123", // PhoneLookup.PHOTO_URI, 167 "content://com.android.contacts/contacts/13/photo", // PhoneLookup.PHOTO_THUMBNAIL_URI, 168 null, // PhoneLookup.CUSTOM_RINGTONE, 169 null, // PhoneLookup.HAS_PHONE_NUMBER, 170 null, // PhoneLookup.SEND_TO_VOICEMAIL, 171 null, // PhoneLookup.NUMBER, 172 null, // PhoneLookup.TYPE, 173 null, // PhoneLookup.LABEL, 174 null, // PhoneLookup.NORMALIZED_NUMBER 175 }); 176 177 rewritten = new EnterpriseContactsCursorWrapper(c, projection, new int[] {0, 1}, null); 178 assertEquals(5, rewritten.getCount()); 179 assertEquals(projection.length, rewritten.getColumnCount()); 180 181 rewritten.moveToFirst(); 182 183 // Verify the first row. 184 int column = 0; 185 assertEquals(1000000001L, rewritten.getLong(column++)); // We offset ID for corp contacts. 186 assertEquals(1000000001L, rewritten.getLong(column++)); // We offset ID for corp contacts. 187 assertEquals(null, rewritten.getString(column++)); 188 assertEquals(null, rewritten.getString(column++)); 189 assertEquals(null, rewritten.getString(column++)); 190 assertEquals(null, rewritten.getString(column++)); 191 assertEquals(null, rewritten.getString(column++)); 192 assertEquals(null, rewritten.getString(column++)); 193 assertEquals(null, rewritten.getString(column++)); 194 assertEquals(null, rewritten.getString(column++)); 195 assertEquals(null, rewritten.getString(column++)); 196 assertEquals(null, rewritten.getString(column++)); 197 assertEquals(null, rewritten.getString(column++)); 198 assertEquals(null, rewritten.getString(column++)); 199 assertEquals(null, rewritten.getString(column++)); 200 assertEquals(null, rewritten.getString(column++)); 201 assertEquals(null, rewritten.getString(column++)); 202 assertEquals(null, rewritten.getString(column++)); 203 assertEquals(null, rewritten.getString(column++)); 204 assertEquals(null, rewritten.getString(column++)); 205 206 207 // Verify the second row. 208 rewritten.moveToNext(); 209 column = 0; 210 assertEquals(1000000010L, rewritten.getLong(column++)); // With offset. 211 assertEquals(1000000010L, rewritten.getLong(column++)); // With offset. 212 assertEquals("c-key", rewritten.getString(column++)); 213 assertEquals("name", rewritten.getString(column++)); 214 assertEquals(123, rewritten.getInt(column++)); 215 assertEquals(456, rewritten.getInt(column++)); 216 assertEquals(1, rewritten.getInt(column++)); 217 assertEquals(1, rewritten.getInt(column++)); 218 assertEquals(1, rewritten.getInt(column++)); 219 assertEquals(null, rewritten.getString(column++)); // photo file id 220 assertEquals(null, rewritten.getString(column++)); // photo id 221 assertEquals(null, 222 rewritten.getString(column++)); 223 assertEquals(null, 224 rewritten.getString(column++)); 225 assertEquals(null, rewritten.getString(column++)); // ringtone 226 assertEquals(1, rewritten.getInt(column++)); 227 assertEquals(1, rewritten.getInt(column++)); 228 assertEquals("1234", rewritten.getString(column++)); 229 assertEquals(1, rewritten.getInt(column++)); 230 assertEquals("label", rewritten.getString(column++)); 231 assertEquals("+1234", rewritten.getString(column++)); 232 233 // Verify the 3rd row. 234 rewritten.moveToNext(); 235 assertEquals("content://com.android.contacts/contacts_corp/11/display_photo", 236 rewritten.getString(11)); 237 assertEquals("content://com.android.contacts/contacts_corp/11/photo", 238 rewritten.getString(12)); 239 240 // Verify the 4th row. 241 rewritten.moveToNext(); 242 assertEquals("content://com.android.contacts/contacts_corp/12/photo", 243 rewritten.getString(11)); 244 assertEquals("content://com.android.contacts/contacts_corp/12/photo", 245 rewritten.getString(12)); 246 247 248 // Verify the 5th row. 249 rewritten.moveToNext(); 250 assertEquals("content://com.android.contacts/contacts_corp/13/display_photo", 251 rewritten.getString(11)); 252 assertEquals("content://com.android.contacts/contacts_corp/13/photo", 253 rewritten.getString(12)); 254 } 255 } 256