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.util.Log; 20b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 21b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport com.android.bluetooth.pbapclient.utils.ObexAppParameters; 22b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport com.android.bluetooth.pbapclient.BluetoothPbapVcardListing; 23b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 24b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport java.io.IOException; 25b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport java.io.InputStream; 26b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport java.util.ArrayList; 27b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 28b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzoimport javax.obex.HeaderSet; 29b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 30b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzofinal class BluetoothPbapRequestPullVcardListing extends BluetoothPbapRequest { 31b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 32b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo private static final String TAG = "BluetoothPbapRequestPullVcardListing"; 33b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 34b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo private static final String TYPE = "x-bt/vcard-listing"; 35b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 36b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo private BluetoothPbapVcardListing mResponse = null; 37b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 38b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo private int mNewMissedCalls = -1; 39b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 40b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public BluetoothPbapRequestPullVcardListing(String folder, byte order, byte searchAttr, 41b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo String searchVal, int maxListCount, int listStartOffset) { 42b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 43b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo if (maxListCount < 0 || maxListCount > 65535) { 44b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo throw new IllegalArgumentException("maxListCount should be [0..65535]"); 45b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 46b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 47b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo if (listStartOffset < 0 || listStartOffset > 65535) { 48b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo throw new IllegalArgumentException("listStartOffset should be [0..65535]"); 49b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 50b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 51b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo if (folder == null) { 52b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo folder = ""; 53b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 54b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 55b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo mHeaderSet.setHeader(HeaderSet.NAME, folder); 56b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 57b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo mHeaderSet.setHeader(HeaderSet.TYPE, TYPE); 58b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 59b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo ObexAppParameters oap = new ObexAppParameters(); 60b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 61b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo if (order >= 0) { 62b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo oap.add(OAP_TAGID_ORDER, order); 63b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 64b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 65b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo if (searchVal != null) { 66b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo oap.add(OAP_TAGID_SEARCH_ATTRIBUTE, searchAttr); 67b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo oap.add(OAP_TAGID_SEARCH_VALUE, searchVal); 68b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 69b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 70b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo /* 71b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo * maxListCount is a special case which is handled in 72b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo * BluetoothPbapRequestPullVcardListingSize 73b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo */ 74b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo if (maxListCount > 0) { 75b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo oap.add(OAP_TAGID_MAX_LIST_COUNT, (short) maxListCount); 76b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 77b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 78b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo if (listStartOffset > 0) { 79b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo oap.add(OAP_TAGID_LIST_START_OFFSET, (short) listStartOffset); 80b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 81b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 82b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo oap.addToHeaderSet(mHeaderSet); 83b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 84b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 85b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo @Override 86b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo protected void readResponse(InputStream stream) throws IOException { 87b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo Log.v(TAG, "readResponse"); 88b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 89b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo mResponse = new BluetoothPbapVcardListing(stream); 90b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 91b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 92b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo @Override 93b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo protected void readResponseHeaders(HeaderSet headerset) { 94b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo Log.v(TAG, "readResponseHeaders"); 95b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 96b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo ObexAppParameters oap = ObexAppParameters.fromHeaderSet(headerset); 97b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 98b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo if (oap.exists(OAP_TAGID_NEW_MISSED_CALLS)) { 99b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo mNewMissedCalls = oap.getByte(OAP_TAGID_NEW_MISSED_CALLS); 100b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 101b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 102b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 103b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public ArrayList<BluetoothPbapCard> getList() { 104b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo return mResponse.getList(); 105b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 106b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo 107b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo public int getNewMissedCalls() { 108b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo return mNewMissedCalls; 109b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo } 110b874a1d1cf25f90947ba87f791d42a404cad7d85Joseph Pirozzo} 111