联系人信息显示在CallCard中,提示当前正在通话的联系人号码、姓名、头像、号码类型等信息;
- 代码中在两个地方发起对当前联系人的查询,
Init():startContactInfoSearch(call, true, call.getState() == Call.State.INCOMING); // 界面第一次启动
onStateChange():maybeStartSearch(mPrimary, true); // call状态改变,primary call has changed
图表 callerinfo查询流程
- 查询结束后对UI的刷新过程,
ContactInfoCache中申明了这个接口:
public interface ContactInfoCacheCallback {
public void onContactInfoComplete(String callId, ContactCacheEntry entry);
public void onImageLoadComplete(String callId, ContactCacheEntry entry);
}
分别用于联系人信息,头像查询结束后的回调操作,在CallCardPresenter中实现。
CallCardPresenter中查询联系人信息时传入参数new ContactLookupCallback(this, isPrimary)到ContactInfoCache中保存下来mCallBacks,用作回调;
CallerInfoAsyncQuery中申明了这个接口:
public
interface OnQueryCompleteListener {
public void
onQueryComplete(int token, Object cookie, CallerInfo ci);
}
ContactInfoCache中对其进行实现,并将实现类传递到CallerInfoAsyncQuery中,用作查询完成之后的回调方法。完成查询后,onQueryComplete()方法中取得mCallBacks,并将结果应用到CallCard中对应的view上显示出来。
- 头像的查询与加载,
联系人信息查询完成之后,如果phoneUri不为空,需要通过ContactsAsyncHelper.startObtainPhotoAsync(TOKEN_UPDATE_PHOTO_FOR_CALL_STATE,
mContext, cacheEntry.displayPhotoUri, ContactInfoCache.this,
callId);来加载联系人头像。
类ContactsAsyncHelper也是通过start一个新线程执行加载操作,加载完成用回调方式显示在CallCard界面。