summaryrefslogtreecommitdiff
path: root/InCallUI/src
diff options
context:
space:
mode:
authorVictor Chang <vichang@google.com>2016-02-11 21:04:28 +0000
committerVictor Chang <vichang@google.com>2016-02-11 21:04:28 +0000
commit79ca8cccf1af9c803e77378992bc011676c185d5 (patch)
tree658adefc4c4cc343e2b603e088e387f0e3f18cf7 /InCallUI/src
parent93970f6af80c517508cc078fbd3fbabbe5692d59 (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.java42
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);
}