1/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.bluetooth.pbapclient;
18
19import com.android.vcard.VCardEntry;
20import com.android.vcard.VCardEntry.EmailData;
21import com.android.vcard.VCardEntry.NameData;
22import com.android.vcard.VCardEntry.PhoneData;
23
24import org.json.JSONArray;
25import org.json.JSONException;
26import org.json.JSONObject;
27
28import java.util.List;
29
30/**
31 * Entry representation of folder listing
32 */
33public class BluetoothPbapCard {
34
35    public final String handle;
36
37    //Name to be parsed (N)
38    public final String N;
39    public final String lastName;
40    public final String firstName;
41    public final String middleName;
42    public final String prefix;
43    public final String suffix;
44
45    public BluetoothPbapCard(String handle, String name) {
46        this.handle = handle;
47
48        N = name;
49
50        /*
51         * format is as for vCard N field, so we have up to 5 tokens: LastName;
52         * FirstName; MiddleName; Prefix; Suffix
53         */
54        String[] parsedName = name.split(";", 5);
55
56        lastName = parsedName.length < 1 ? null : parsedName[0];
57        firstName = parsedName.length < 2 ? null : parsedName[1];
58        middleName = parsedName.length < 3 ? null : parsedName[2];
59        prefix = parsedName.length < 4 ? null : parsedName[3];
60        suffix = parsedName.length < 5 ? null : parsedName[4];
61    }
62
63    @Override
64    public String toString() {
65        JSONObject json = new JSONObject();
66
67        try {
68            json.put("handle", handle);
69            json.put("N", N);
70            json.put("lastName", lastName);
71            json.put("firstName", firstName);
72            json.put("middleName", middleName);
73            json.put("prefix", prefix);
74            json.put("suffix", suffix);
75        } catch (JSONException e) {
76            // do nothing
77        }
78
79        return json.toString();
80    }
81
82    static public String jsonifyVcardEntry(VCardEntry vcard) {
83        JSONObject json = new JSONObject();
84
85        try {
86            NameData name = vcard.getNameData();
87            json.put("formatted", name.getFormatted());
88            json.put("family", name.getFamily());
89            json.put("given", name.getGiven());
90            json.put("middle", name.getMiddle());
91            json.put("prefix", name.getPrefix());
92            json.put("suffix", name.getSuffix());
93        } catch (JSONException e) {
94            // do nothing
95        }
96
97        try {
98            JSONArray jsonPhones = new JSONArray();
99
100            List<PhoneData> phones = vcard.getPhoneList();
101
102            if (phones != null) {
103                for (PhoneData phone : phones) {
104                    JSONObject jsonPhone = new JSONObject();
105                    jsonPhone.put("type", phone.getType());
106                    jsonPhone.put("number", phone.getNumber());
107                    jsonPhone.put("label", phone.getLabel());
108                    jsonPhone.put("is_primary", phone.isPrimary());
109
110                    jsonPhones.put(jsonPhone);
111                }
112
113                json.put("phones", jsonPhones);
114            }
115        } catch (JSONException e) {
116            // do nothing
117        }
118
119        try {
120            JSONArray jsonEmails = new JSONArray();
121
122            List<EmailData> emails = vcard.getEmailList();
123
124            if (emails != null) {
125                for (EmailData email : emails) {
126                    JSONObject jsonEmail = new JSONObject();
127                    jsonEmail.put("type", email.getType());
128                    jsonEmail.put("address", email.getAddress());
129                    jsonEmail.put("label", email.getLabel());
130                    jsonEmail.put("is_primary", email.isPrimary());
131
132                    jsonEmails.put(jsonEmail);
133                }
134
135                json.put("emails", jsonEmails);
136            }
137        } catch (JSONException e) {
138            // do nothing
139        }
140
141        return json.toString();
142    }
143}
144