1192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta/*
2192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Copyright (C) 2014 The Android Open Source Project
3192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta *
4192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Licensed under the Apache License, Version 2.0 (the "License");
5192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * you may not use this file except in compliance with the License.
6192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * You may obtain a copy of the License at
7192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta *
8192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta *      http://www.apache.org/licenses/LICENSE-2.0
9192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta *
10192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Unless required by applicable law or agreed to in writing, software
11192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * distributed under the License is distributed on an "AS IS" BASIS,
12192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * See the License for the specific language governing permissions and
14192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * limitations under the License.
15192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */
16192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
17192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptapackage android.bluetooth.client.pbap;
18192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
19192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport com.android.vcard.VCardEntry;
20192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport com.android.vcard.VCardEntry.EmailData;
21192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport com.android.vcard.VCardEntry.NameData;
22192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport com.android.vcard.VCardEntry.PhoneData;
23192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
24192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport org.json.JSONArray;
25192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport org.json.JSONException;
26192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport org.json.JSONObject;
27192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
28192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport java.util.List;
29192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
30192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta/**
31192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Entry representation of folder listing
32192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */
33192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptapublic class BluetoothPbapCard {
34192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
35192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    public final String handle;
36192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
37192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    public final String N;
38192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    public final String lastName;
39192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    public final String firstName;
40192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    public final String middleName;
41192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    public final String prefix;
42192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    public final String suffix;
43192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
44192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    public BluetoothPbapCard(String handle, String name) {
45192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        this.handle = handle;
46192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
47192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        N = name;
48192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
49192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        /*
50192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta         * format is as for vCard N field, so we have up to 5 tokens: LastName;
51192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta         * FirstName; MiddleName; Prefix; Suffix
52192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta         */
53192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        String[] parsedName = name.split(";", 5);
54192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
55192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        lastName = parsedName.length < 1 ? null : parsedName[0];
56192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        firstName = parsedName.length < 2 ? null : parsedName[1];
57192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        middleName = parsedName.length < 3 ? null : parsedName[2];
58192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        prefix = parsedName.length < 4 ? null : parsedName[3];
59192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        suffix = parsedName.length < 5 ? null : parsedName[4];
60192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    }
61192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
62192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    @Override
63192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    public String toString() {
64192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        JSONObject json = new JSONObject();
65192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
66192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        try {
67192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            json.put("handle", handle);
68192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            json.put("N", N);
69192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            json.put("lastName", lastName);
70192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            json.put("firstName", firstName);
71192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            json.put("middleName", middleName);
72192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            json.put("prefix", prefix);
73192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            json.put("suffix", suffix);
74192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        } catch (JSONException e) {
75192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            // do nothing
76192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        }
77192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
78192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        return json.toString();
79192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    }
80192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
81192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    static public String jsonifyVcardEntry(VCardEntry vcard) {
82192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        JSONObject json = new JSONObject();
83192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
84192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        try {
85192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            NameData name = vcard.getNameData();
86192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            json.put("formatted", name.getFormatted());
87192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            json.put("family", name.getFamily());
88192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            json.put("given", name.getGiven());
89192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            json.put("middle", name.getMiddle());
90192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            json.put("prefix", name.getPrefix());
91192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            json.put("suffix", name.getSuffix());
92192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        } catch (JSONException e) {
93192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            // do nothing
94192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        }
95192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
96192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        try {
97192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            JSONArray jsonPhones = new JSONArray();
98192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
99192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            List<PhoneData> phones = vcard.getPhoneList();
100192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
101192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            if (phones != null) {
102192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta                for (PhoneData phone : phones) {
103192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta                    JSONObject jsonPhone = new JSONObject();
104192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta                    jsonPhone.put("type", phone.getType());
105192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta                    jsonPhone.put("number", phone.getNumber());
106192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta                    jsonPhone.put("label", phone.getLabel());
107192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta                    jsonPhone.put("is_primary", phone.isPrimary());
108192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
109192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta                    jsonPhones.put(jsonPhone);
110192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta                }
111192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
112192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta                json.put("phones", jsonPhones);
113192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            }
114192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        } catch (JSONException e) {
115192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            // do nothing
116192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        }
117192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
118192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        try {
119192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            JSONArray jsonEmails = new JSONArray();
120192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
121192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            List<EmailData> emails = vcard.getEmailList();
122192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
123192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            if (emails != null) {
124192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta                for (EmailData email : emails) {
125192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta                    JSONObject jsonEmail = new JSONObject();
126192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta                    jsonEmail.put("type", email.getType());
127192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta                    jsonEmail.put("address", email.getAddress());
128192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta                    jsonEmail.put("label", email.getLabel());
129192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta                    jsonEmail.put("is_primary", email.isPrimary());
130192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
131192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta                    jsonEmails.put(jsonEmail);
132192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta                }
133192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
134192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta                json.put("emails", jsonEmails);
135192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            }
136192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        } catch (JSONException e) {
137192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            // do nothing
138192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        }
139192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
140192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        return json.toString();
141192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    }
142192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta}
143