diff options
author | zachh <zachh@google.com> | 2018-01-09 17:44:36 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-01-09 18:30:15 -0800 |
commit | 73ec1ab52956c658654a40c42f4c59806713b15e (patch) | |
tree | ead07b921b1f204e54fba836f03f392a064d7063 /java/com/android/dialer/phonelookup | |
parent | 06fee1b28472f1019443c9b63ea9bd8aad9f5757 (diff) |
Changed behavior of failures in DialerFutures#firstMatching.
DialerFutures#firstMatching now fails if one of its provided futures fails before a match is found.
This is to accomodate the case where no source returns true for isDirty, but one or more fail; we want to be notified of the failure in that case and not silently treat that case as not dirty.
Also fixed a bug in NewCallLogFragment where the failed future wasn't causing the application to crash.
Also improved some related logging in RefreshAnnotatedCallLogWorker and Cp2PhoneLookup, and fixed a bug where empty numbers were not being handled correctly.
Bug: 71504246
Test: unit
PiperOrigin-RevId: 181401710
Change-Id: I23e207ac334ff80ac95b08a8f4f775a528a8c511
Diffstat (limited to 'java/com/android/dialer/phonelookup')
-rw-r--r-- | java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java b/java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java index 5ae0fb68a..dd440708c 100644 --- a/java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java +++ b/java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java @@ -211,6 +211,7 @@ public final class Cp2PhoneLookup implements PhoneLookup<Cp2Info> { anyContactsDeletedFuture, anyContactsDeleted -> { if (anyContactsDeleted) { + LogUtil.v("Cp2PhoneLookup.isDirty", "returning true because contacts deleted"); return Futures.immediateFuture(true); } // Hopefully the most common case is there are no contacts updated; we can detect @@ -221,6 +222,9 @@ public final class Cp2PhoneLookup implements PhoneLookup<Cp2Info> { noContactsModifiedSinceFuture, noContactsModifiedSince -> { if (noContactsModifiedSince) { + LogUtil.v( + "Cp2PhoneLookup.isDirty", + "returning false because no contacts modified since last run"); return Futures.immediateFuture(false); } // This method is more expensive but is probably the most likely scenario; we @@ -236,6 +240,9 @@ public final class Cp2PhoneLookup implements PhoneLookup<Cp2Info> { contactsUpdatedFuture, contactsUpdated -> { if (contactsUpdated) { + LogUtil.v( + "Cp2PhoneLookup.isDirty", + "returning true because a previously called contact was updated"); return Futures.immediateFuture(true); } // This is the most expensive method so do it last; the scenario is that @@ -357,13 +364,14 @@ public final class Cp2PhoneLookup implements PhoneLookup<Cp2Info> { private ListenableFuture<Set<Long>> queryPhoneLookupTableForContactIdsBasedOnRawNumber( String rawNumber) { + if (TextUtils.isEmpty(rawNumber)) { + return Futures.immediateFuture(new ArraySet<>()); + } return backgroundExecutorService.submit( () -> { Set<Long> contactIds = new ArraySet<>(); try (Cursor cursor = - queryPhoneLookup( - new String[] {android.provider.ContactsContract.PhoneLookup.CONTACT_ID}, - rawNumber)) { + queryPhoneLookup(new String[] {ContactsContract.PhoneLookup.CONTACT_ID}, rawNumber)) { if (cursor == null) { LogUtil.w( "Cp2PhoneLookup.queryPhoneLookupTableForContactIdsBasedOnRawNumber", |