diff options
4 files changed, 46 insertions, 7 deletions
diff --git a/InCallUI/src/com/android/incallui/CallCardFragment.java b/InCallUI/src/com/android/incallui/CallCardFragment.java index 60090365f..bf3c42c73 100644 --- a/InCallUI/src/com/android/incallui/CallCardFragment.java +++ b/InCallUI/src/com/android/incallui/CallCardFragment.java @@ -215,6 +215,13 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr } @Override + public void setSecondaryImage(Bitmap bitmap) { + if (bitmap != null) { + setDrawableToImageView(mSecondaryPhoto, new BitmapDrawable(getResources(), bitmap)); + } + } + + @Override public void setCallState(int state, Call.DisconnectCause cause, boolean bluetoothOn) { String callStateLabel = null; diff --git a/InCallUI/src/com/android/incallui/CallCardPresenter.java b/InCallUI/src/com/android/incallui/CallCardPresenter.java index a0ad3ce88..5b6520d7c 100644 --- a/InCallUI/src/com/android/incallui/CallCardPresenter.java +++ b/InCallUI/src/com/android/incallui/CallCardPresenter.java @@ -259,6 +259,16 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> updateContactEntry(entry, isPrimary, isConference); } } + + @Override + public void onImageLoadComplete(int callId, Bitmap photo) { + if (callId == mPrimary.getCallId()) { + getUi().setPrimaryImage(photo); + } else if (callId == mSecondary.getCallId()) { + getUi().setSecondaryImage(photo); + } + + } }); } else { Log.d(TAG, "Contact lookup. Found in memory cache: " + entry); @@ -481,6 +491,7 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> void setPrimary(String number, String name, boolean nameIsNumber, String label, Drawable photo, boolean isConference, String gatewayLabel, String gatewayNumber); void setSecondary(boolean show, String name, String label, Drawable photo); + void setSecondaryImage(Bitmap bitmap); void setCallState(int state, Call.DisconnectCause cause, boolean bluetoothOn); void setPrimaryCallElapsedTime(boolean show, String duration); diff --git a/InCallUI/src/com/android/incallui/ContactInfoCache.java b/InCallUI/src/com/android/incallui/ContactInfoCache.java index 079679478..aa96a9096 100644 --- a/InCallUI/src/com/android/incallui/ContactInfoCache.java +++ b/InCallUI/src/com/android/incallui/ContactInfoCache.java @@ -174,7 +174,22 @@ public class ContactInfoCache implements ContactsAsyncHelper.OnImageLoadComplete entry.photo = null; } - sendNotification(callId, entry); + final List<ContactInfoCacheCallback> callBacks; + synchronized (mCallBackLock) { + callBacks = mCallBacksGuarded.get(callId); + // Do not clear mInfoMap here because we still need the data. + mCallBacksGuarded.clear(); + } + if (callBacks != null) { + for (ContactInfoCacheCallback callBack : callBacks) { + if (entry.photo == null) { + callBack.onImageLoadComplete(callId, null); + } else { + callBack.onImageLoadComplete(callId, ((BitmapDrawable) entry.photo) + .getBitmap()); + } + } + } } /** @@ -342,12 +357,7 @@ public class ContactInfoCache implements ContactsAsyncHelper.OnImageLoadComplete * Sends the updated information to call the callbacks for the entry. */ private void sendNotification(int callId, ContactCacheEntry entry) { - final List<ContactInfoCacheCallback> callBacks; - synchronized (mCallBackLock) { - callBacks = mCallBacksGuarded.get(callId); - // Do not clear mInfoMap here because we still need the data. - mCallBacksGuarded.clear(); - } + final List<ContactInfoCacheCallback> callBacks = mCallBacksGuarded.get(callId);; if (callBacks != null) { for (ContactInfoCacheCallback callBack : callBacks) { callBack.onContactInfoComplete(callId, entry); @@ -373,6 +383,7 @@ public class ContactInfoCache implements ContactsAsyncHelper.OnImageLoadComplete */ public interface ContactInfoCacheCallback { public void onContactInfoComplete(int callId, ContactCacheEntry entry); + public void onImageLoadComplete(int callId, Bitmap photo); } public static class ContactCacheEntry { diff --git a/InCallUI/src/com/android/incallui/StatusBarNotifier.java b/InCallUI/src/com/android/incallui/StatusBarNotifier.java index 658eac950..ecdf53238 100644 --- a/InCallUI/src/com/android/incallui/StatusBarNotifier.java +++ b/InCallUI/src/com/android/incallui/StatusBarNotifier.java @@ -26,6 +26,7 @@ import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; import android.text.TextUtils; import com.android.incallui.ContactInfoCache.ContactCacheEntry; @@ -93,10 +94,19 @@ public class StatusBarNotifier implements InCallPresenter.InCallStateListener, // it has available, and may make a subsequent call later (same thread) if it had to // call into the contacts provider for more data. mContactInfoCache.findInfo(call.getIdentification(), true, new ContactInfoCacheCallback() { + private ContactCacheEntry mEntry; + @Override public void onContactInfoComplete(int callId, ContactCacheEntry entry) { + mEntry = entry; buildAndSendNotification(InCallState.INCOMING, call, entry, false); } + + @Override + public void onImageLoadComplete(int callId, Bitmap photo) { + mEntry.photo = new BitmapDrawable(mContext.getResources(), photo); + buildAndSendNotification(InCallState.INCOMING, call, mEntry, false); + } }); } |