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