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 Pirozzo 17b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzopackage com.android.bluetooth.pbapclient; 18b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 19b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport android.accounts.Account; 20b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 21b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport com.android.vcard.VCardConfig; 22b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport com.android.vcard.VCardEntry; 23b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport com.android.vcard.VCardEntryConstructor; 24b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport com.android.vcard.VCardEntryCounter; 25b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport com.android.vcard.VCardEntryHandler; 26b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport com.android.vcard.VCardParser; 27b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport com.android.vcard.VCardParser_V21; 28b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport com.android.vcard.VCardParser_V30; 29b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport com.android.vcard.exception.VCardException; 30b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 31b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport java.io.IOException; 32b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport java.io.InputStream; 33b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport java.util.ArrayList; 34b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 35b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoclass BluetoothPbapVcardList { 36b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 37b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo private final ArrayList<VCardEntry> mCards = new ArrayList<VCardEntry>(); 38b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo private final Account mAccount; 39b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 40b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo class CardEntryHandler implements VCardEntryHandler { 41b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo @Override 42b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public void onStart() { 43b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 44b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 45b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo @Override 46b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public void onEntryCreated(VCardEntry entry) { 47b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo mCards.add(entry); 48b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 49b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 50b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo @Override 51b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public void onEnd() { 52b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 53b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 54b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 55b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public BluetoothPbapVcardList(Account account, InputStream in, byte format) throws IOException { 56b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo mAccount = account; 57b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo parse(in, format); 58b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 59b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 60b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo private void parse(InputStream in, byte format) throws IOException { 61b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo VCardParser parser; 62b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 63b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo if (format == BluetoothPbapClient.VCARD_TYPE_30) { 64b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo parser = new VCardParser_V30(); 65b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } else { 66b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo parser = new VCardParser_V21(); 67b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 68b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 69b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo VCardEntryConstructor constructor = 70b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo new VCardEntryConstructor(VCardConfig.VCARD_TYPE_V21_GENERIC, mAccount); 71b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo VCardEntryCounter counter = new VCardEntryCounter(); 72b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo CardEntryHandler handler = new CardEntryHandler(); 73b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 74b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo constructor.addEntryHandler(handler); 75b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 76b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo parser.addInterpreter(constructor); 77b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo parser.addInterpreter(counter); 78b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 79b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo try { 80b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo parser.parse(in); 81b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } catch (VCardException e) { 82b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo e.printStackTrace(); 83b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 84b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 85b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 86b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public int getCount() { 87b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo return mCards.size(); 88b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 89b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 90b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public ArrayList<VCardEntry> getList() { 91b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo return mCards; 92b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 93b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 94b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public VCardEntry getFirst() { 95b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo return mCards.get(0); 96b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 97b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo} 98