Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 79ca8ccc authored by Victor Chang's avatar Victor Chang
Browse files

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
parent 93970f6a
Loading
Loading
Loading
Loading
+25 −17
Original line number Diff line number Diff line
@@ -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);
        }