联系人去重

来源:互联网 发布:黑魂3白狼捏脸数据 编辑:程序博客网 时间:2024/06/04 20:13

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(

0 0