diff options
author | Victor Chang <vichang@google.com> | 2016-02-10 10:59:12 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2016-02-10 10:59:12 +0000 |
commit | 1b46f30dc26771bf5be59afb26aaf51ae0dc9f04 (patch) | |
tree | bb7d2aec1ed7391611242adf446ea47330a7c10c /InCallUI | |
parent | b26dae0f4e7e51d5cfa37a510e863ab534cb229b (diff) | |
parent | 67d3e7007e05ba68816b165c81eb9b16962db46b (diff) |
Merge "Make work badge in call log consistent with InCall"
Diffstat (limited to 'InCallUI')
-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); } |