1.查询重复联系人时,progress的显示
1.1查询Rowcontacts表(RawContacts.DELETED+”= 0”),获得联系人总数。
1.2SearchDuplicatedThread,开线程去查询重复联系人。
1)查询account表,获得account list,遍历account 去查询RawContacts,
计算可以merge的联系人组。
获得map, name为key, value 为list,存放rawid。
2)根据map,筛选出list size >=2的(可根据list的size进行进度跟新),根据list中的id 查询raw_contact_entities 表,
获得EntityIterator(每个entity封装同名联系人的raw信息)。
3)根据EntityIterator获得 ArrayList mSubValues,
遍历该list,获得其元素的MIMETYPE,通过MIMETYPE形成phoneList and emailList 等信息。
进行封装形成一个ContactsInfo对象。
形成一个ContactsInfo 的List,封装为一个MergeContacts。
4)对于sim account的联系人需要考虑mergePhoneList/mergeEmailList
oneSimAnrCount/oneSimEmailCount
e.g.对于number:
通过遍历mergePhoneList 使用PhoneNumberUtils.compare()和data1进行比较。
最终比较mergePhoneList的size和oneSimAnrCount+1的大小。
若mergePhoneList.size()>oneSimAnrCount+1, 则认为不可merge, 不new MergeContacts.
ContactsInfo(1..1)
MergeContacts(1..n)
2.查重 ok,show MergeContactActivity
根据MergeContacts 的list去show UI。
MergeContacts 的mChecked属性对应checkbox是否被选中。
点击merge menu进行merge 操作.
3.dup 联系人merge 的过程
3.1 progress的显示, 根据list 的size的完成度去进行显示
3.2 开线程MergeDuplicatedThread执行merge
区分account进行操作:
if simcontacts,获取首个(i = 0)联系人信息作为sourceContact.
后续加入delRawIdsMap(