From e3b74d22b4e92009433e07f29973f53fb90613e1 Mon Sep 17 00:00:00 2001 From: zachh Date: Fri, 15 Dec 2017 23:50:27 -0800 Subject: Implemented Cp2PhoneLookup#lookup. Bug: 34672501 Test: unit PiperOrigin-RevId: 179278530 Change-Id: If629aa2c31efad790c8c70e8066dc9a5612d1fc3 --- .../dialer/phonelookup/cp2/Cp2PhoneLookup.java | 42 +++++++++++++++++----- 1 file changed, 33 insertions(+), 9 deletions(-) (limited to 'java/com/android/dialer/phonelookup') diff --git a/java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java b/java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java index fce6bbaf6..b31d0e72e 100644 --- a/java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java +++ b/java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java @@ -22,7 +22,6 @@ import android.database.Cursor; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.Contacts; import android.provider.ContactsContract.DeletedContacts; -import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.util.ArrayMap; import android.support.v4.util.ArraySet; @@ -39,6 +38,7 @@ import com.android.dialer.phonelookup.PhoneLookupInfo.Cp2Info; import com.android.dialer.phonelookup.PhoneLookupInfo.Cp2Info.Cp2ContactInfo; import com.android.dialer.phonenumberproto.DialerPhoneNumberUtil; import com.android.dialer.storage.Unencrypted; +import com.android.dialer.telecom.TelecomCallUtil; import com.google.common.base.Optional; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -96,9 +96,32 @@ public final class Cp2PhoneLookup implements PhoneLookup { } @Override - public ListenableFuture lookup(@NonNull Call call) { - // TODO(zachh): Implementation. - return backgroundExecutorService.submit(PhoneLookupInfo::getDefaultInstance); + public ListenableFuture lookup(Call call) { + return backgroundExecutorService.submit(() -> lookupInternal(call)); + } + + private PhoneLookupInfo lookupInternal(Call call) { + String rawNumber = TelecomCallUtil.getNumber(call); + if (TextUtils.isEmpty(rawNumber)) { + return PhoneLookupInfo.getDefaultInstance(); + } + Optional e164 = TelecomCallUtil.getE164Number(appContext, call); + Set cp2ContactInfos = new ArraySet<>(); + try (Cursor cursor = + e164.isPresent() + ? queryPhoneTableBasedOnE164(CP2_INFO_PROJECTION, ImmutableSet.of(e164.get())) + : queryPhoneTableBasedOnRawNumber(CP2_INFO_PROJECTION, ImmutableSet.of(rawNumber))) { + if (cursor == null) { + LogUtil.w("Cp2PhoneLookup.lookupInternal", "null cursor"); + return PhoneLookupInfo.getDefaultInstance(); + } + while (cursor.moveToNext()) { + cp2ContactInfos.add(buildCp2ContactInfoFromPhoneCursor(appContext, cursor)); + } + } + return PhoneLookupInfo.newBuilder() + .setCp2Info(Cp2Info.newBuilder().addAllCp2ContactInfo(cp2ContactInfos)) + .build(); } @Override @@ -226,10 +249,11 @@ public final class Cp2PhoneLookup implements PhoneLookup { public ListenableFuture> getMostRecentPhoneLookupInfo( ImmutableMap existingInfoMap) { - return backgroundExecutorService.submit(() -> bulkUpdateInternal(existingInfoMap)); + return backgroundExecutorService.submit( + () -> getMostRecentPhoneLookupInfoInternal(existingInfoMap)); } - private ImmutableMap bulkUpdateInternal( + private ImmutableMap getMostRecentPhoneLookupInfoInternal( ImmutableMap existingInfoMap) { currentLastTimestampProcessed = null; long lastModified = sharedPreferences.getLong(PREF_LAST_TIMESTAMP_PROCESSED, 0L); @@ -381,7 +405,7 @@ public final class Cp2PhoneLookup implements PhoneLookup { String e164Number = cursor.getString(CP2_INFO_NORMALIZED_NUMBER_INDEX); Set dialerPhoneNumbers = partitionedNumbers.dialerPhoneNumbersForE164(e164Number); - Cp2ContactInfo info = buildCp2ContactInfoFromUpdatedContactsCursor(appContext, cursor); + Cp2ContactInfo info = buildCp2ContactInfoFromPhoneCursor(appContext, cursor); addInfo(map, dialerPhoneNumbers, info); } } @@ -398,7 +422,7 @@ public final class Cp2PhoneLookup implements PhoneLookup { String unformattableNumber = cursor.getString(CP2_INFO_NUMBER_INDEX); Set dialerPhoneNumbers = partitionedNumbers.dialerPhoneNumbersForUnformattable(unformattableNumber); - Cp2ContactInfo info = buildCp2ContactInfoFromUpdatedContactsCursor(appContext, cursor); + Cp2ContactInfo info = buildCp2ContactInfoFromPhoneCursor(appContext, cursor); addInfo(map, dialerPhoneNumbers, info); } } @@ -453,7 +477,7 @@ public final class Cp2PhoneLookup implements PhoneLookup { * @param cursor with projection {@link #CP2_INFO_PROJECTION}. * @return new {@link Cp2ContactInfo} based on current row of {@code cursor}. */ - private static Cp2ContactInfo buildCp2ContactInfoFromUpdatedContactsCursor( + private static Cp2ContactInfo buildCp2ContactInfoFromPhoneCursor( Context appContext, Cursor cursor) { String displayName = cursor.getString(CP2_INFO_NAME_INDEX); String photoUri = cursor.getString(CP2_INFO_PHOTO_URI_INDEX); -- cgit v1.2.3