1b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo/* 2b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo * Copyright (C) 2016 The Android Open Source Project 3b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo * 4b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo * Licensed under the Apache License, Version 2.0 (the "License"); 5b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo * you may not use this file except in compliance with the License. 6b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo * You may obtain a copy of the License at 7b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo * 8b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo * http://www.apache.org/licenses/LICENSE-2.0 9b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo * 10b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo * Unless required by applicable law or agreed to in writing, software 11b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo * distributed under the License is distributed on an "AS IS" BASIS, 12b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo * See the License for the specific language governing permissions and 14b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo * limitations under the License. 15b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo */ 16b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzopackage com.android.bluetooth.pbapclient; 17b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 18b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport com.android.vcard.VCardEntry; 19b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 20b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport java.util.ArrayList; 21b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport java.util.HashSet; 22b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport java.util.List; 23b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 24b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo/** 25b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo * A simpler more public version of VCardEntry. 26b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo */ 27b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzopublic class PhonebookEntry { 28b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public static class Name { 29b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public String family; 30b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public String given; 31b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public String middle; 32b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public String prefix; 33b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public String suffix; 34b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 35b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public Name() { } 36b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 37b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo @Override 38b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public boolean equals(Object o) { 39b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo if (!(o instanceof Name)) { 40b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo return false; 41b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 42b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 43b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo Name n = ((Name) o); 44b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo return (family == n.family || family != null && family.equals(n.family)) && 45b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo (given == n.given || given != null && given.equals(n.given)) && 46b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo (middle == n.middle || middle != null && middle.equals(n.middle)) && 47b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo (prefix == n.prefix || prefix != null && prefix.equals(n.prefix)) && 48b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo (suffix == n.suffix || suffix != null && suffix.equals(n.suffix)); 49b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 50b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 51b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo @Override 52b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public int hashCode() { 53b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo int result = 23 * (family == null ? 0 : family.hashCode()); 54b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo result = 23 * result + (given == null ? 0 : given.hashCode()); 55b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo result = 23 * result + (middle == null ? 0 : middle.hashCode()); 56b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo result = 23 * result + (prefix == null ? 0 : prefix.hashCode()); 57b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo result = 23 * result + (suffix == null ? 0 : suffix.hashCode()); 58b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo return result; 59b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 60b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 61b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo @Override 62b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public String toString() { 63b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo StringBuilder sb = new StringBuilder(); 64b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo sb.append("Name: { family: "); 65b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo sb.append(family); 66b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo sb.append(" given: "); 67b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo sb.append(given); 68b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo sb.append(" middle: "); 69b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo sb.append(middle); 70b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo sb.append(" prefix: "); 71b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo sb.append(prefix); 72b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo sb.append(" suffix: "); 73b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo sb.append(suffix); 74b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo sb.append(" }"); 75b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo return sb.toString(); 76b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 77b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 78b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 79b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public static class Phone { 80b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public int type; 81b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public String number; 82b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 83b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo @Override 84b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public boolean equals(Object o) { 85b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo if (!(o instanceof Phone)) { 86b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo return false; 87b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 88b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 89b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo Phone p = (Phone) o; 90b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo return (number == p.number || number != null && number.equals(p.number)) 91b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo && type == p.type; 92b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 93b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 94b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo @Override 95b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public int hashCode() { 96b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo return 23 * type + number.hashCode(); 97b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 98b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 99b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo @Override 100b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public String toString() { 101b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo StringBuilder sb = new StringBuilder(); 102b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo sb.append(" Phone: { number: "); 103b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo sb.append(number); 104b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo sb.append(" type: " + type); 105b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo sb.append(" }"); 106b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo return sb.toString(); 107b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 108b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 109b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 110b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo @Override 111b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public boolean equals(Object object) { 112b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo if (object instanceof PhonebookEntry) { 113b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo return equals((PhonebookEntry) object); 114b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 115b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo return false; 116b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 117b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 118b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public PhonebookEntry() { 119b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo name = new Name(); 120b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo phones = new ArrayList<Phone>(); 121b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 122b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 123b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public PhonebookEntry(VCardEntry v) { 124b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo name = new Name(); 125b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo phones = new ArrayList<Phone>(); 126b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 127b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo VCardEntry.NameData n = v.getNameData(); 128b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo name.family = n.getFamily(); 129b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo name.given = n.getGiven(); 130b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo name.middle = n.getMiddle(); 131b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo name.prefix = n.getPrefix(); 132b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo name.suffix = n.getSuffix(); 133b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 134b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo List<VCardEntry.PhoneData> vp = v.getPhoneList(); 135b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo if (vp == null || vp.isEmpty()) { 136b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo return; 137b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 138b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 139b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo for (VCardEntry.PhoneData p : vp) { 140b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo Phone phone = new Phone(); 141b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo phone.type = p.getType(); 142b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo phone.number = p.getNumber(); 143b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo phones.add(phone); 144b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 145b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 146b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 147b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo private boolean equals(PhonebookEntry p) { 148b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo return name.equals(p.name) && phones.equals(p.phones); 149b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 150b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 151b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo @Override 152b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public int hashCode() { 153b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo return name.hashCode() + 23 * phones.hashCode(); 154b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 155b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 156b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo @Override 157b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public String toString() { 158b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo StringBuilder sb = new StringBuilder(); 159b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo sb.append("PhonebookEntry { id: "); 160b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo sb.append(id); 161b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo sb.append(" "); 162b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo sb.append(name.toString()); 163b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo sb.append(phones.toString()); 164b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo sb.append(" }"); 165b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo return sb.toString(); 166b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 167b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 168b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public Name name; 169b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public List<Phone> phones; 170b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public String id; 171b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo} 172