diff options
author | Victor Chang <vichang@google.com> | 2016-02-11 21:04:28 +0000 |
---|---|---|
committer | Victor Chang <vichang@google.com> | 2016-02-11 21:04:28 +0000 |
commit | 79ca8cccf1af9c803e77378992bc011676c185d5 (patch) | |
tree | 658adefc4c4cc343e2b603e088e387f0e3f18cf7 /InCallUI/src | |
parent | 93970f6af80c517508cc078fbd3fbabbe5692d59 (diff) |
Make work badge in call log consistent with InCall
[cherry-pick from ag/862143]
Update cache only when the result is returned to InCall UI.
Now both call log and InCallUI take the callerinfo
which are first returned from provider.
When both personal and work profile directory lookup returns
a caller info, InCallUI takes the personal one, while cache
takes the work one. So it might result in the name being inconsistent
between 2 UIs. However, it's extremely rare as it's unlikely
to happen unless 2 corporate accounts under the same domain
are registered in personal and work respectively.
BUG=26819634
Change-Id: I87c4533635c0e2f88a639ca1c23611b2a22f6b07
Diffstat (limited to 'InCallUI/src')
-rw-r--r-- | InCallUI/src/com/android/incallui/CallerInfoAsyncQuery.java | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/InCallUI/src/com/android/incallui/CallerInfoAsyncQuery.java b/InCallUI/src/com/android/incallui/CallerInfoAsyncQuery.java index 8d45efb97..4714af492 100644 --- a/InCallUI/src/com/android/incallui/CallerInfoAsyncQuery.java +++ b/InCallUI/src/com/android/incallui/CallerInfoAsyncQuery.java @@ -471,15 +471,15 @@ public class CallerInfoAsyncQuery { private static final class DirectoryQueryCompleteListenerFactory { // Make sure listener to be called once and only once - int mCount; - boolean mIsListenerCalled; - OnQueryCompleteListener mListener; - Context mContext; - CachedNumberLookupService mCachedNumberLookupService = + private int mCount; + private boolean mIsListenerCalled; + private final OnQueryCompleteListener mListener; + private final Context mContext; + private final CachedNumberLookupService mCachedNumberLookupService = ObjectFactory.newCachedNumberLookupService(); private class DirectoryQueryCompleteListener implements OnQueryCompleteListener { - long mDirectoryId; + private final long mDirectoryId; DirectoryQueryCompleteListener(long directoryId) { mDirectoryId = directoryId; @@ -487,26 +487,20 @@ public class CallerInfoAsyncQuery { @Override public void onQueryComplete(int token, Object cookie, CallerInfo ci) { - if (ci.contactExists && mCachedNumberLookupService != null) { - CachedContactInfo cachedContactInfo = - CallerInfoUtils.buildCachedContactInfo(mCachedNumberLookupService, ci); - String directoryLabel = mContext.getString(R.string.directory_search_label); - cachedContactInfo.setDirectorySource(directoryLabel, mDirectoryId); - mCachedNumberLookupService.addContact(mContext, cachedContactInfo); - } - - callListenerIfNecessary(token, cookie, ci); + onDirectoryQueryComplete(token, cookie, ci, mDirectoryId); } } - DirectoryQueryCompleteListenerFactory(Context context, int size, OnQueryCompleteListener listener) { + DirectoryQueryCompleteListenerFactory(Context context, int size, + OnQueryCompleteListener listener) { mCount = size; mListener = listener; mIsListenerCalled = false; mContext = context; } - private void callListenerIfNecessary(int token, Object cookie, CallerInfo ci) { + private void onDirectoryQueryComplete(int token, Object cookie, CallerInfo ci, + long directoryId) { boolean shouldCallListener = false; synchronized (this) { mCount = mCount - 1; @@ -515,11 +509,25 @@ public class CallerInfoAsyncQuery { shouldCallListener = true; } } + + // Don't call callback in synchronized block because mListener.onQueryComplete may + // take long time to complete if (shouldCallListener && mListener != null) { + addCallerInfoIntoCache(ci, directoryId); mListener.onQueryComplete(token, cookie, ci); } } + private void addCallerInfoIntoCache(CallerInfo ci, long directoryId) { + if (ci.contactExists && mCachedNumberLookupService != null) { + CachedContactInfo cachedContactInfo = CallerInfoUtils + .buildCachedContactInfo(mCachedNumberLookupService, ci); + String directoryLabel = mContext.getString(R.string.directory_search_label); + cachedContactInfo.setDirectorySource(directoryLabel, directoryId); + mCachedNumberLookupService.addContact(mContext, cachedContactInfo); + } + } + public OnQueryCompleteListener newListener(long directoryId) { return new DirectoryQueryCompleteListener(directoryId); } |