1d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu/* 2d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu * Copyright (C) 2015 The Android Open Source Project 3d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu * 4d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu * Licensed under the Apache License, Version 2.0 (the "License"); 5d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu * you may not use this file except in compliance with the License. 6d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu * You may obtain a copy of the License at 7d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu * 8d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu * http://www.apache.org/licenses/LICENSE-2.0 9d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu * 10d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu * Unless required by applicable law or agreed to in writing, software 11d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu * distributed under the License is distributed on an "AS IS" BASIS, 12d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu * See the License for the specific language governing permissions and 14d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu * limitations under the License 15d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu */ 16d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 17d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fupackage com.android.providers.contacts.aggregation.util; 18d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 19d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fuimport java.util.ArrayList; 20d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fuimport java.util.HashMap; 21d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fuimport java.util.HashSet; 22d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fuimport java.util.List; 23d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fuimport java.util.Map; 24d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fuimport java.util.Set; 25d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 26d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fuimport static com.android.internal.util.Preconditions.checkNotNull; 27d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 28d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu/** 29d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu * Matching candidates for a raw contact, used in the contact aggregator. 30d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu */ 31d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fupublic class RawContactMatchingCandidates { 32aa18c233fdec3359c5231d4a5f61188446bf5d6fZheng Fu private List<MatchScore> mBestMatches; 33d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu private Set<Long> mRawContactIds = null; 34d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu private Map<Long, Long> mRawContactToContact = null; 35d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu private Map<Long, Long> mRawContactToAccount = null; 36d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 37aa18c233fdec3359c5231d4a5f61188446bf5d6fZheng Fu public RawContactMatchingCandidates(List<MatchScore> mBestMatches) { 38d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu checkNotNull(mBestMatches); 39d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu this.mBestMatches = mBestMatches; 40d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 41d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 42d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu public RawContactMatchingCandidates() { 43aa18c233fdec3359c5231d4a5f61188446bf5d6fZheng Fu mBestMatches = new ArrayList<MatchScore>(); 44d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 45d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 46d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu public int getCount() { 47d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu return mBestMatches.size(); 48d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 49d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 50aa18c233fdec3359c5231d4a5f61188446bf5d6fZheng Fu public void add(MatchScore score) { 51d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu mBestMatches.add(score); 52d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu if (mRawContactIds != null) { 53d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu mRawContactIds.add(score.getRawContactId()); 54d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 55d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu if (mRawContactToAccount != null) { 56d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu mRawContactToAccount.put(score.getRawContactId(), score.getAccountId()); 57d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 58d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu if (mRawContactToContact != null) { 59d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu mRawContactToContact.put(score.getRawContactId(), score.getContactId()); 60d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 61d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 62d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 63d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu public Set<Long> getRawContactIdSet() { 64d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu if (mRawContactIds == null) { 65d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu createRawContactIdSet(); 66d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 67d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu return mRawContactIds; 68d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 69d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 70d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu public Map<Long, Long> getRawContactToAccount() { 71d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu if (mRawContactToAccount == null) { 72d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu createRawContactToAccountMap(); 73d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 74d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu return mRawContactToAccount; 75d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 76d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 77d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu public Long getContactId(Long rawContactId) { 78d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu if (mRawContactToContact == null) { 79d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu createRawContactToContactMap(); 80d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 81d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu return mRawContactToContact.get(rawContactId); 82d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 83d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 84d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu public Long getAccountId(Long rawContactId) { 85d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu if (mRawContactToAccount == null) { 86d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu createRawContactToAccountMap(); 87d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 88d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu return mRawContactToAccount.get(rawContactId); 89d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 90d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 91d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu private void createRawContactToContactMap() { 92d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu mRawContactToContact = new HashMap<Long, Long>(); 93d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu for (int i = 0; i < mBestMatches.size(); i++) { 94d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu mRawContactToContact.put(mBestMatches.get(i).getRawContactId(), 95d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu mBestMatches.get(i).getContactId()); 96d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 97d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 98d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 99d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu private void createRawContactToAccountMap() { 100d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu mRawContactToAccount = new HashMap<Long, Long>(); 101d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu for (int i = 0; i < mBestMatches.size(); i++) { 102d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu mRawContactToAccount.put(mBestMatches.get(i).getRawContactId(), 103d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu mBestMatches.get(i).getAccountId()); 104d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 105d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 106d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 107d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu private void createRawContactIdSet() { 108d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu mRawContactIds = new HashSet<Long>(); 109d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu for (int i = 0; i < mBestMatches.size(); i++) { 110d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu mRawContactIds.add(mBestMatches.get(i).getRawContactId()); 111d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 112d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 113d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu} 114