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.List; 21d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fuimport java.util.Map; 22d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fuimport java.util.Set; 23d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 24d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fuimport static com.android.internal.util.Preconditions.checkNotNull; 25d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 26517d590dc73e5efcf7c94e2431faec2473924ca2Makoto Onukiimport android.util.ArrayMap; 27517d590dc73e5efcf7c94e2431faec2473924ca2Makoto Onukiimport android.util.ArraySet; 28517d590dc73e5efcf7c94e2431faec2473924ca2Makoto Onuki 29d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu/** 30d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu * Matching candidates for a raw contact, used in the contact aggregator. 31d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu */ 32d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fupublic class RawContactMatchingCandidates { 33aa18c233fdec3359c5231d4a5f61188446bf5d6fZheng Fu private List<MatchScore> mBestMatches; 34d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu private Set<Long> mRawContactIds = null; 35d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu private Map<Long, Long> mRawContactToContact = null; 36d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu private Map<Long, Long> mRawContactToAccount = null; 37d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 38aa18c233fdec3359c5231d4a5f61188446bf5d6fZheng Fu public RawContactMatchingCandidates(List<MatchScore> mBestMatches) { 39d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu checkNotNull(mBestMatches); 40d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu this.mBestMatches = mBestMatches; 41d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 42d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 43d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu public RawContactMatchingCandidates() { 44aa18c233fdec3359c5231d4a5f61188446bf5d6fZheng Fu mBestMatches = new ArrayList<MatchScore>(); 45d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 46d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 47d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu public int getCount() { 48d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu return mBestMatches.size(); 49d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 50d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 51aa18c233fdec3359c5231d4a5f61188446bf5d6fZheng Fu public void add(MatchScore score) { 52d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu mBestMatches.add(score); 53d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu if (mRawContactIds != null) { 54d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu mRawContactIds.add(score.getRawContactId()); 55d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 56d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu if (mRawContactToAccount != null) { 57d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu mRawContactToAccount.put(score.getRawContactId(), score.getAccountId()); 58d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 59d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu if (mRawContactToContact != null) { 60d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu mRawContactToContact.put(score.getRawContactId(), score.getContactId()); 61d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 62d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 63d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 64d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu public Set<Long> getRawContactIdSet() { 65d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu if (mRawContactIds == null) { 66d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu createRawContactIdSet(); 67d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 68d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu return mRawContactIds; 69d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 70d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 71d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu public Map<Long, Long> getRawContactToAccount() { 72d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu if (mRawContactToAccount == null) { 73d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu createRawContactToAccountMap(); 74d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 75d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu return mRawContactToAccount; 76d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 77d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 78d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu public Long getContactId(Long rawContactId) { 79d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu if (mRawContactToContact == null) { 80d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu createRawContactToContactMap(); 81d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 82d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu return mRawContactToContact.get(rawContactId); 83d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 84d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 85d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu public Long getAccountId(Long rawContactId) { 86d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu if (mRawContactToAccount == null) { 87d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu createRawContactToAccountMap(); 88d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 89d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu return mRawContactToAccount.get(rawContactId); 90d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 91d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 92d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu private void createRawContactToContactMap() { 93517d590dc73e5efcf7c94e2431faec2473924ca2Makoto Onuki mRawContactToContact = new ArrayMap<>(); 94d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu for (int i = 0; i < mBestMatches.size(); i++) { 95d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu mRawContactToContact.put(mBestMatches.get(i).getRawContactId(), 96d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu mBestMatches.get(i).getContactId()); 97d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 98d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 99d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 100d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu private void createRawContactToAccountMap() { 101517d590dc73e5efcf7c94e2431faec2473924ca2Makoto Onuki mRawContactToAccount = new ArrayMap<>(); 102d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu for (int i = 0; i < mBestMatches.size(); i++) { 103d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu mRawContactToAccount.put(mBestMatches.get(i).getRawContactId(), 104d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu mBestMatches.get(i).getAccountId()); 105d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 106d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 107d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu 108d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu private void createRawContactIdSet() { 109517d590dc73e5efcf7c94e2431faec2473924ca2Makoto Onuki mRawContactIds = new ArraySet<>(); 110d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu for (int i = 0; i < mBestMatches.size(); i++) { 111d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu mRawContactIds.add(mBestMatches.get(i).getRawContactId()); 112d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 113d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu } 114d6c0a1330d3e51706d70351a34631f1f4e8fb02fZheng Fu} 115