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 android.util.Log; 20192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 21192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport com.android.vcard.VCardEntry; 22192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport android.bluetooth.client.pbap.utils.ObexAppParameters; 23192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 24192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport java.io.IOException; 25192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport java.io.InputStream; 26192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport java.util.ArrayList; 27192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 28192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport javax.obex.HeaderSet; 29192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 30192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptafinal class BluetoothPbapRequestPullPhoneBook extends BluetoothPbapRequest { 31192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 32192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private static final String TAG = "BluetoothPbapRequestPullPhoneBook"; 33192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 34192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private static final String TYPE = "x-bt/phonebook"; 35192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 36192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private BluetoothPbapVcardList mResponse; 37192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 38192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private int mNewMissedCalls = -1; 39192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 40192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private final byte mFormat; 41192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 42192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public BluetoothPbapRequestPullPhoneBook(String pbName, long filter, byte format, 43192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta int maxListCount, int listStartOffset) { 44192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 45192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (maxListCount < 0 || maxListCount > 65535) { 46192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta throw new IllegalArgumentException("maxListCount should be [0..65535]"); 47192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 48192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 49192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (listStartOffset < 0 || listStartOffset > 65535) { 50192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta throw new IllegalArgumentException("listStartOffset should be [0..65535]"); 51192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 52192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 53192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mHeaderSet.setHeader(HeaderSet.NAME, pbName); 54192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 55192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mHeaderSet.setHeader(HeaderSet.TYPE, TYPE); 56192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 57192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta ObexAppParameters oap = new ObexAppParameters(); 58192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 59192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /* make sure format is one of allowed values */ 60192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (format != BluetoothPbapClient.VCARD_TYPE_21 61192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta && format != BluetoothPbapClient.VCARD_TYPE_30) { 62192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta format = BluetoothPbapClient.VCARD_TYPE_21; 63192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 64192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 65192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (filter != 0) { 66192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta oap.add(OAP_TAGID_FILTER, filter); 67192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 68192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 69192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta oap.add(OAP_TAGID_FORMAT, format); 70192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 71192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /* 72192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * maxListCount is a special case which is handled in 73192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * BluetoothPbapRequestPullPhoneBookSize 74192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 75192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (maxListCount > 0) { 76192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta oap.add(OAP_TAGID_MAX_LIST_COUNT, (short) maxListCount); 77192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } else { 78192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta oap.add(OAP_TAGID_MAX_LIST_COUNT, (short) 65535); 79192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 80192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 81192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (listStartOffset > 0) { 82192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta oap.add(OAP_TAGID_LIST_START_OFFSET, (short) listStartOffset); 83192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 84192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 85192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta oap.addToHeaderSet(mHeaderSet); 86192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 87192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mFormat = format; 88192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 89192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 90192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta @Override 91192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta protected void readResponse(InputStream stream) throws IOException { 92192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta Log.v(TAG, "readResponse"); 93192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 94192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mResponse = new BluetoothPbapVcardList(stream, mFormat); 95192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 96192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 97192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta @Override 98192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta protected void readResponseHeaders(HeaderSet headerset) { 99192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta Log.v(TAG, "readResponse"); 100192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 101192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta ObexAppParameters oap = ObexAppParameters.fromHeaderSet(headerset); 102192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 103192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (oap.exists(OAP_TAGID_NEW_MISSED_CALLS)) { 104192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mNewMissedCalls = oap.getByte(OAP_TAGID_NEW_MISSED_CALLS); 105192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 106192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 107192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 108192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public ArrayList<VCardEntry> getList() { 109192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return mResponse.getList(); 110192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 111192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 112192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public int getNewMissedCalls() { 113192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return mNewMissedCalls; 114192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 115192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta} 116