am 187e6ffe: Dont overwrite cnap name with a failed local lookup.

* commit '187e6ffef5fe2fdbc6954159a0e9fc79b55fbbda':
  Dont overwrite cnap name with a failed local lookup.
diff --git a/InCallUI/src/com/android/incallui/ContactInfoCache.java b/InCallUI/src/com/android/incallui/ContactInfoCache.java
index 4623c3b..bf67a67 100644
--- a/InCallUI/src/com/android/incallui/ContactInfoCache.java
+++ b/InCallUI/src/com/android/incallui/ContactInfoCache.java
@@ -156,16 +156,24 @@
             presentationMode = TelecomManager.PRESENTATION_ALLOWED;
         }
 
-        final ContactCacheEntry cacheEntry = buildEntry(mContext, callId,
-                callerInfo, presentationMode, isIncoming);
+        ContactCacheEntry cacheEntry = mInfoMap.get(callId);
+        // Rebuild the entry from the new data if:
+        // 1) This is NOT the asynchronous local lookup (IOW, this is the first pass)
+        // 2) The local lookup was done and the contact exists
+        // 3) The existing cached entry is empty (no name).
+        if (!didLocalLookup || callerInfo.contactExists ||
+                (cacheEntry != null && TextUtils.isEmpty(cacheEntry.name))) {
+            cacheEntry = buildEntry(mContext, callId, callerInfo, presentationMode, isIncoming);
+            mInfoMap.put(callId, cacheEntry);
+        }
 
-        // Add the contact info to the cache.
-        mInfoMap.put(callId, cacheEntry);
         sendInfoNotifications(callId, cacheEntry);
 
         if (didLocalLookup) {
-            if (!callerInfo.contactExists && cacheEntry.name == null &&
-                    mPhoneNumberService != null) {
+            // Before issuing a request for more data from other services, We only check that the
+            // contact wasn't found in the local DB.  We don't check the if the cache entry already
+            // has a name because we allow overriding cnap data with data from other services.
+            if (!callerInfo.contactExists && mPhoneNumberService != null) {
                 Log.d(TAG, "Contact lookup. Local contacts miss, checking remote");
                 final PhoneNumberServiceListener listener = new PhoneNumberServiceListener(callId);
                 mPhoneNumberService.getPhoneNumberInfo(cacheEntry.number, listener, listener,
@@ -179,8 +187,6 @@
             } else {
                 if (callerInfo.contactExists) {
                     Log.d(TAG, "Contact lookup done. Local contact found, no image.");
-                } else if (cacheEntry.name != null) {
-                    Log.d(TAG, "Contact lookup done. Special contact type.");
                 } else {
                     Log.d(TAG, "Contact lookup done. Local contact not found and"
                             + " no remote lookup service available.");