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.bluetooth.BluetoothDevice; 20192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport android.os.Handler; 21192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport android.os.Message; 22192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport android.util.Log; 23192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 24192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport java.lang.ref.WeakReference; 25192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 26192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta/** 27192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Public API to control Phone Book Profile (PCE role only). 28192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <p> 29192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * This class defines methods that shall be used by application for the 30192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * retrieval of phone book objects from remote device. 31192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <p> 32192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * How to connect to remote device which is acting in PSE role: 33192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <ul> 34192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <li>Create a <code>BluetoothDevice</code> object which corresponds to remote 35192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * device in PSE role; 36192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <li>Create an instance of <code>BluetoothPbapClient</code> class, passing 37192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>BluetothDevice</code> object along with a <code>Handler</code> to it; 38192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <li>Use {@link #setPhoneBookFolderRoot}, {@link #setPhoneBookFolderUp} and 39192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #setPhoneBookFolderDown} to navigate in virtual phone book folder 40192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * structure 41192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <li>Use {@link #pullPhoneBookSize} or {@link #pullVcardListingSize} to 42192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * retrieve the size of selected phone book 43192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <li>Use {@link #pullPhoneBook} to retrieve phone book entries 44192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <li>Use {@link #pullVcardListing} to retrieve list of entries in the phone 45192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * book 46192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <li>Use {@link #pullVcardEntry} to pull single entry from the phone book 47192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * </ul> 48192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Upon completion of each call above PCE will notify application if operation 49192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * completed successfully (along with results) or failed. 50192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <p> 51192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Therefore, application should handle following events in its message queue 52192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * handler: 53192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <ul> 54192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <li><code>EVENT_PULL_PHONE_BOOK_SIZE_DONE</code> 55192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <li><code>EVENT_PULL_VCARD_LISTING_SIZE_DONE</code> 56192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <li><code>EVENT_PULL_PHONE_BOOK_DONE</code> 57192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <li><code>EVENT_PULL_VCARD_LISTING_DONE</code> 58192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <li><code>EVENT_PULL_VCARD_ENTRY_DONE</code> 59192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <li><code>EVENT_SET_PHONE_BOOK_DONE</code> 60192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * </ul> 61192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * and 62192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <ul> 63192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <li><code>EVENT_PULL_PHONE_BOOK_SIZE_ERROR</code> 64192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <li><code>EVENT_PULL_VCARD_LISTING_SIZE_ERROR</code> 65192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <li><code>EVENT_PULL_PHONE_BOOK_ERROR</code> 66192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <li><code>EVENT_PULL_VCARD_LISTING_ERROR</code> 67192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <li><code>EVENT_PULL_VCARD_ENTRY_ERROR</code> 68192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <li><code>EVENT_SET_PHONE_BOOK_ERROR</code> 69192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * </ul> 70192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>connect</code> and <code>disconnect</code> methods are introduced for 71192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * testing purposes. An application does not need to use them as the session 72192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * connection and disconnection happens automatically internally. 73192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 74192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptapublic class BluetoothPbapClient { 75192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private static final String TAG = "BluetoothPbapClient"; 76192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 77192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 78192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Path to local incoming calls history object 79192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 80192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final String ICH_PATH = "telecom/ich.vcf"; 81192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 82192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 83192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Path to local outgoing calls history object 84192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 85192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final String OCH_PATH = "telecom/och.vcf"; 86192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 87192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 88192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Path to local missed calls history object 89192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 90192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final String MCH_PATH = "telecom/mch.vcf"; 91192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 92192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 93192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Path to local combined calls history object 94192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 95192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final String CCH_PATH = "telecom/cch.vcf"; 96192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 97192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 98192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Path to local main phone book object 99192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 100192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final String PB_PATH = "telecom/pb.vcf"; 101192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 102192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 103192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Path to incoming calls history object stored on the phone's SIM card 104192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 105192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final String SIM_ICH_PATH = "SIM1/telecom/ich.vcf"; 106192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 107192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 108192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Path to outgoing calls history object stored on the phone's SIM card 109192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 110192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final String SIM_OCH_PATH = "SIM1/telecom/och.vcf"; 111192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 112192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 113192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Path to missed calls history object stored on the phone's SIM card 114192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 115192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final String SIM_MCH_PATH = "SIM1/telecom/mch.vcf"; 116192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 117192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 118192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Path to combined calls history object stored on the phone's SIM card 119192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 120192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final String SIM_CCH_PATH = "SIM1/telecom/cch.vcf"; 121192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 122192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 123192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Path to main phone book object stored on the phone's SIM card 124192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 125192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final String SIM_PB_PATH = "SIM1/telecom/pb.vcf"; 126192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 127192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 128192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Indicates to server that default sorting order shall be used for vCard 129192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * listing. 130192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 131192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final byte ORDER_BY_DEFAULT = -1; 132192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 133192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 134192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Indicates to server that indexed sorting order shall be used for vCard 135192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * listing. 136192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 137192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final byte ORDER_BY_INDEXED = 0; 138192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 139192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 140192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Indicates to server that alphabetical sorting order shall be used for the 141192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * vCard listing. 142192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 143192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final byte ORDER_BY_ALPHABETICAL = 1; 144192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 145192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 146192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Indicates to server that phonetical (based on sound attribute) sorting 147192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * order shall be used for the vCard listing. 148192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 149192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final byte ORDER_BY_PHONETIC = 2; 150192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 151192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 152192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Indicates to server that Name attribute of vCard shall be used to carry 153192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * out the search operation on 154192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 155192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final byte SEARCH_ATTR_NAME = 0; 156192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 157192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 158192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Indicates to server that Number attribute of vCard shall be used to carry 159192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * out the search operation on 160192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 161192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final byte SEARCH_ATTR_NUMBER = 1; 162192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 163192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 164192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Indicates to server that Sound attribute of vCard shall be used to carry 165192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * out the search operation 166192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 167192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final byte SEARCH_ATTR_SOUND = 2; 168192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 169192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 170192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * VCard format version 2.1 171192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 172192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final byte VCARD_TYPE_21 = 0; 173192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 174192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 175192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * VCard format version 3.0 176192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 177192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final byte VCARD_TYPE_30 = 1; 178192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 179192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /* 64-bit mask used to filter out VCard fields */ 180192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta // TODO: Think of extracting to separate class 181192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_VERSION = 0x000000000000000001; 182192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_FN = 0x000000000000000002; 183192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_N = 0x000000000000000004; 184192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_PHOTO = 0x000000000000000008; 185192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_BDAY = 0x000000000000000010; 186192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_ADDR = 0x000000000000000020; 187192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_LABEL = 0x000000000000000040; 188192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_TEL = 0x000000000000000080; 189192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_EMAIL = 0x000000000000000100; 190192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_MAILER = 0x000000000000000200; 191192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_TZ = 0x000000000000000400; 192192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_GEO = 0x000000000000000800; 193192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_TITLE = 0x000000000000001000; 194192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_ROLE = 0x000000000000002000; 195192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_LOGO = 0x000000000000004000; 196192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_AGENT = 0x000000000000008000; 197192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_ORG = 0x000000000000010000; 198192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_NOTE = 0x000000000000020000; 199192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_REV = 0x000000000000040000; 200192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_SOUND = 0x000000000000080000; 201192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_URL = 0x000000000000100000; 202192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_UID = 0x000000000000200000; 203192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_KEY = 0x000000000000400000; 204192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_NICKNAME = 0x000000000000800000; 205192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_CATEGORIES = 0x000000000001000000; 206192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_PROID = 0x000000000002000000; 207192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_CLASS = 0x000000000004000000; 208192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_SORT_STRING = 0x000000000008000000; 209192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final long VCARD_ATTR_X_IRMC_CALL_DATETIME = 210192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 0x000000000010000000; 211192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 212192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 213192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Maximal number of entries of the phone book that PCE can handle 214192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 215192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final short MAX_LIST_COUNT = (short) 0xFFFF; 216192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 217192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 218192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Event propagated upon completion of <code>setPhoneBookFolderRoot</code>, 219192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>setPhoneBookFolderUp</code> or <code>setPhoneBookFolderDown</code> 220192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * request. 221192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <p> 222192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * This event indicates that request completed successfully. 223192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @see #setPhoneBookFolderRoot 224192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @see #setPhoneBookFolderUp 225192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @see #setPhoneBookFolderDown 226192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 227192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final int EVENT_SET_PHONE_BOOK_DONE = 1; 228192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 229192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 230192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Event propagated upon completion of <code>pullPhoneBook</code> request. 231192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <p> 232192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * This event carry on results of the request. 233192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <p> 234192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * The resulting message contains: 235192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <table> 236192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <tr> 237192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <td><code>msg.arg1</code></td> 238192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <td>newMissedCalls parameter (only in case of missed calls history object 239192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * request)</td> 240192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * </tr> 241192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <tr> 242192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <td><code>msg.obj</code></td> 243192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <td>which is a list of <code>VCardEntry</code> objects</td> 244192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * </tr> 245192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * </table> 246192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @see #pullPhoneBook 247192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 248192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final int EVENT_PULL_PHONE_BOOK_DONE = 2; 249192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 250192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 251192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Event propagated upon completion of <code>pullVcardListing</code> 252192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * request. 253192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <p> 254192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * This event carry on results of the request. 255192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <p> 256192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * The resulting message contains: 257192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <table> 258192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <tr> 259192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <td><code>msg.arg1</code></td> 260192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <td>newMissedCalls parameter (only in case of missed calls history object 261192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * request)</td> 262192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * </tr> 263192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <tr> 264192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <td><code>msg.obj</code></td> 265192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <td>which is a list of <code>BluetoothPbapCard</code> objects</td> 266192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * </tr> 267192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * </table> 268192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @see #pullVcardListing 269192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 270192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final int EVENT_PULL_VCARD_LISTING_DONE = 3; 271192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 272192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 273192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Event propagated upon completion of <code>pullVcardEntry</code> request. 274192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <p> 275192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * This event carry on results of the request. 276192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <p> 277192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * The resulting message contains: 278192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <table> 279192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <tr> 280192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <td><code>msg.obj</code></td> 281192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <td>vCard as and object of type <code>VCardEntry</code></td> 282192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * </tr> 283192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * </table> 284192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @see #pullVcardEntry 285192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 286192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final int EVENT_PULL_VCARD_ENTRY_DONE = 4; 287192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 288192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 289192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Event propagated upon completion of <code>pullPhoneBookSize</code> 290192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * request. 291192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <p> 292192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * This event carry on results of the request. 293192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <p> 294192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * The resulting message contains: 295192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <table> 296192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <tr> 297192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <td><code>msg.arg1</code></td> 298192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <td>size of the phone book</td> 299192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * </tr> 300192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * </table> 301192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @see #pullPhoneBookSize 302192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 303192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final int EVENT_PULL_PHONE_BOOK_SIZE_DONE = 5; 304192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 305192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 306192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Event propagated upon completion of <code>pullVcardListingSize</code> 307192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * request. 308192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <p> 309192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * This event carry on results of the request. 310192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <p> 311192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * The resulting message contains: 312192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <table> 313192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <tr> 314192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <td><code>msg.arg1</code></td> 315192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <td>size of the phone book listing</td> 316192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * </tr> 317192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * </table> 318192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @see #pullVcardListingSize 319192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 320192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final int EVENT_PULL_VCARD_LISTING_SIZE_DONE = 6; 321192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 322192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 323192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Event propagated upon completion of <code>setPhoneBookFolderRoot</code>, 324192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>setPhoneBookFolderUp</code> or <code>setPhoneBookFolderDown</code> 325192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * request. This event indicates an error during operation. 326192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 327192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final int EVENT_SET_PHONE_BOOK_ERROR = 101; 328192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 329192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 330192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Event propagated upon completion of <code>pullPhoneBook</code> request. 331192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * This event indicates an error during operation. 332192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 333192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final int EVENT_PULL_PHONE_BOOK_ERROR = 102; 334192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 335192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 336192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Event propagated upon completion of <code>pullVcardListing</code> 337192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * request. This event indicates an error during operation. 338192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 339192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final int EVENT_PULL_VCARD_LISTING_ERROR = 103; 340192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 341192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 342192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Event propagated upon completion of <code>pullVcardEntry</code> request. 343192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * This event indicates an error during operation. 344192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 345192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final int EVENT_PULL_VCARD_ENTRY_ERROR = 104; 346192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 347192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 348192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Event propagated upon completion of <code>pullPhoneBookSize</code> 349192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * request. This event indicates an error during operation. 350192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 351192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final int EVENT_PULL_PHONE_BOOK_SIZE_ERROR = 105; 352192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 353192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 354192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Event propagated upon completion of <code>pullVcardListingSize</code> 355192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * request. This event indicates an error during operation. 356192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 357192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final int EVENT_PULL_VCARD_LISTING_SIZE_ERROR = 106; 358192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 359192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 360192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Event propagated when PCE has been connected to PSE 361192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 362192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final int EVENT_SESSION_CONNECTED = 201; 363192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 364192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 365192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Event propagated when PCE has been disconnected from PSE 366192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 367192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final int EVENT_SESSION_DISCONNECTED = 202; 368192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final int EVENT_SESSION_AUTH_REQUESTED = 203; 369192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public static final int EVENT_SESSION_AUTH_TIMEOUT = 204; 370192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 371192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public enum ConnectionState { 372192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta DISCONNECTED, CONNECTING, CONNECTED, DISCONNECTING; 373192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 374192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 375192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private final Handler mClientHandler; 376192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private final BluetoothPbapSession mSession; 377192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private ConnectionState mConnectionState = ConnectionState.DISCONNECTED; 378192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 379192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private SessionHandler mSessionHandler; 380192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 381192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private static class SessionHandler extends Handler { 382192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 383192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private final WeakReference<BluetoothPbapClient> mClient; 384192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 385192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta SessionHandler(BluetoothPbapClient client) { 386192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mClient = new WeakReference<BluetoothPbapClient>(client); 387192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 388192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 389192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta @Override 390192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public void handleMessage(Message msg) { 391192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta Log.d(TAG, "handleMessage: what=" + msg.what); 392192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 393192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta BluetoothPbapClient client = mClient.get(); 394192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (client == null) { 395192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return; 396192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 397192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 398192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta switch (msg.what) { 399192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta case BluetoothPbapSession.REQUEST_FAILED: 400192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta { 401192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta BluetoothPbapRequest req = (BluetoothPbapRequest) msg.obj; 402192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 403192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (req instanceof BluetoothPbapRequestPullPhoneBookSize) { 404192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta client.sendToClient(EVENT_PULL_PHONE_BOOK_SIZE_ERROR); 405192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } else if (req instanceof BluetoothPbapRequestPullVcardListingSize) { 406192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta client.sendToClient(EVENT_PULL_VCARD_LISTING_SIZE_ERROR); 407192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } else if (req instanceof BluetoothPbapRequestPullPhoneBook) { 408192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta client.sendToClient(EVENT_PULL_PHONE_BOOK_ERROR); 409192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } else if (req instanceof BluetoothPbapRequestPullVcardListing) { 410192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta client.sendToClient(EVENT_PULL_VCARD_LISTING_ERROR); 411192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } else if (req instanceof BluetoothPbapRequestPullVcardEntry) { 412192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta client.sendToClient(EVENT_PULL_VCARD_ENTRY_ERROR); 413192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } else if (req instanceof BluetoothPbapRequestSetPath) { 414192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta client.sendToClient(EVENT_SET_PHONE_BOOK_ERROR); 415192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 416192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 417192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta break; 418192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 419192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 420192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta case BluetoothPbapSession.REQUEST_COMPLETED: 421192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta { 422192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta BluetoothPbapRequest req = (BluetoothPbapRequest) msg.obj; 423192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 424192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (req instanceof BluetoothPbapRequestPullPhoneBookSize) { 425192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta int size = ((BluetoothPbapRequestPullPhoneBookSize) req).getSize(); 426192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta client.sendToClient(EVENT_PULL_PHONE_BOOK_SIZE_DONE, size); 427192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 428192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } else if (req instanceof BluetoothPbapRequestPullVcardListingSize) { 429192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta int size = ((BluetoothPbapRequestPullVcardListingSize) req).getSize(); 430192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta client.sendToClient(EVENT_PULL_VCARD_LISTING_SIZE_DONE, size); 431192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 432192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } else if (req instanceof BluetoothPbapRequestPullPhoneBook) { 433192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta BluetoothPbapRequestPullPhoneBook r = (BluetoothPbapRequestPullPhoneBook) req; 434192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta client.sendToClient(EVENT_PULL_PHONE_BOOK_DONE, r.getNewMissedCalls(), 435192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta r.getList()); 436192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 437192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } else if (req instanceof BluetoothPbapRequestPullVcardListing) { 438192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta BluetoothPbapRequestPullVcardListing r = (BluetoothPbapRequestPullVcardListing) req; 439192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta client.sendToClient(EVENT_PULL_VCARD_LISTING_DONE, r.getNewMissedCalls(), 440192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta r.getList()); 441192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 442192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } else if (req instanceof BluetoothPbapRequestPullVcardEntry) { 443192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta BluetoothPbapRequestPullVcardEntry r = (BluetoothPbapRequestPullVcardEntry) req; 444192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta client.sendToClient(EVENT_PULL_VCARD_ENTRY_DONE, r.getVcard()); 445192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 446192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } else if (req instanceof BluetoothPbapRequestSetPath) { 447192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta client.sendToClient(EVENT_SET_PHONE_BOOK_DONE); 448192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 449192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 450192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta break; 451192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 452192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 453192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta case BluetoothPbapSession.AUTH_REQUESTED: 454192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta client.sendToClient(EVENT_SESSION_AUTH_REQUESTED); 455192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta break; 456192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 457192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta case BluetoothPbapSession.AUTH_TIMEOUT: 458192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta client.sendToClient(EVENT_SESSION_AUTH_TIMEOUT); 459192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta break; 460192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 461192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /* 462192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * app does not need to know when session is connected since 463192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * OBEX session is managed inside BluetoothPbapSession 464192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * automatically - we add this only so app can visualize PBAP 465192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * connection status in case it wants to 466192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 467192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 468192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta case BluetoothPbapSession.SESSION_CONNECTING: 469192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta client.mConnectionState = ConnectionState.CONNECTING; 470192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta break; 471192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 472192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta case BluetoothPbapSession.SESSION_CONNECTED: 473192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta client.mConnectionState = ConnectionState.CONNECTED; 474192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta client.sendToClient(EVENT_SESSION_CONNECTED); 475192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta break; 476192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 477192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta case BluetoothPbapSession.SESSION_DISCONNECTED: 478192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta client.mConnectionState = ConnectionState.DISCONNECTED; 479192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta client.sendToClient(EVENT_SESSION_DISCONNECTED); 480192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta break; 481192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 482192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 483192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta }; 484192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 485192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private void sendToClient(int eventId) { 486192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta sendToClient(eventId, 0, null); 487192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 488192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 489192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private void sendToClient(int eventId, int param) { 490192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta sendToClient(eventId, param, null); 491192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 492192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 493192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private void sendToClient(int eventId, Object param) { 494192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta sendToClient(eventId, 0, param); 495192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 496192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 497192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private void sendToClient(int eventId, int param1, Object param2) { 498192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mClientHandler.obtainMessage(eventId, param1, 0, param2).sendToTarget(); 499192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 500192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 501192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 502192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Constructs PCE object 503192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * 504192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param device BluetoothDevice that corresponds to remote acting in PSE 505192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * role 506192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param handler the handle that will be used by PCE to notify events and 507192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * results to application 508192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @throws NullPointerException 509192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 510192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public BluetoothPbapClient(BluetoothDevice device, Handler handler) { 511192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (device == null) { 512192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta throw new NullPointerException("BluetothDevice is null"); 513192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 514192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 515192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mClientHandler = handler; 516192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 517192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mSessionHandler = new SessionHandler(this); 518192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 519192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mSession = new BluetoothPbapSession(device, mSessionHandler); 520192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 521192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 522192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 523192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Starts a pbap session. <pb> This method set up rfcomm session, obex 524192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * session and waits for requests to be transfered to PSE. 525192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 526192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public void connect() { 527192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mSession.start(); 528192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 529192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 530192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta @Override 531192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public void finalize() { 532192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (mSession != null) { 533192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mSession.stop(); 534192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 535192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 536192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 537192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 538192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Stops all the active transactions and disconnects from the server. 539192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 540192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public void disconnect() { 541192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mSession.stop(); 542192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 543192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 544192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 545192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Aborts current request, if any 546192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 547192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public void abort() { 548192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mSession.abort(); 549192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 550192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 551192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public ConnectionState getState() { 552192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return mConnectionState; 553192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 554192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 555192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 556192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Sets current folder to root 557192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * 558192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @return <code>true</code> if request has been sent successfully; 559192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>false</code> otherwise; upon completion PCE sends 560192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_SET_PHONE_BOOK_DONE} or 561192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_SET_PHONE_BOOK_ERROR} in case of failure 562192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 563192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public boolean setPhoneBookFolderRoot() { 564192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta BluetoothPbapRequest req = new BluetoothPbapRequestSetPath(false); 565192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return mSession.makeRequest(req); 566192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 567192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 568192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 569192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Sets current folder to parent 570192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * 571192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @return <code>true</code> if request has been sent successfully; 572192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>false</code> otherwise; upon completion PCE sends 573192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_SET_PHONE_BOOK_DONE} or 574192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_SET_PHONE_BOOK_ERROR} in case of failure 575192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 576192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public boolean setPhoneBookFolderUp() { 577192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta BluetoothPbapRequest req = new BluetoothPbapRequestSetPath(true); 578192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return mSession.makeRequest(req); 579192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 580192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 581192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 582192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Sets current folder to selected sub-folder 583192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * 584192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param folder the name of the sub-folder 585192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @return @return <code>true</code> if request has been sent successfully; 586192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>false</code> otherwise; upon completion PCE sends 587192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_SET_PHONE_BOOK_DONE} or 588192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_SET_PHONE_BOOK_ERROR} in case of failure 589192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 590192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public boolean setPhoneBookFolderDown(String folder) { 591192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta BluetoothPbapRequest req = new BluetoothPbapRequestSetPath(folder); 592192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return mSession.makeRequest(req); 593192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 594192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 595192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 596192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Requests for the number of entries in the phone book. 597192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * 598192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param pbName absolute path to the phone book 599192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @return <code>true</code> if request has been sent successfully; 600192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>false</code> otherwise; upon completion PCE sends 601192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_PHONE_BOOK_SIZE_DONE} or 602192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_PHONE_BOOK_SIZE_ERROR} in case of failure 603192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 604192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public boolean pullPhoneBookSize(String pbName) { 605192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta BluetoothPbapRequestPullPhoneBookSize req = new BluetoothPbapRequestPullPhoneBookSize( 606192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta pbName); 607192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 608192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return mSession.makeRequest(req); 609192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 610192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 611192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 612192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Requests for the number of entries in the phone book listing. 613192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * 614192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param folder the name of the folder to be retrieved 615192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @return <code>true</code> if request has been sent successfully; 616192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>false</code> otherwise; upon completion PCE sends 617192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_VCARD_LISTING_SIZE_DONE} or 618192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_VCARD_LISTING_SIZE_ERROR} in case of failure 619192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 620192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public boolean pullVcardListingSize(String folder) { 621192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta BluetoothPbapRequestPullVcardListingSize req = new BluetoothPbapRequestPullVcardListingSize( 622192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta folder); 623192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 624192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return mSession.makeRequest(req); 625192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 626192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 627192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 628192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Pulls complete phone book. This method pulls phone book which entries are 629192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * of <code>VCARD_TYPE_21</code> type and each single vCard contains minimal 630192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * required set of fields and the number of entries in response is not 631192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * limited. 632192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * 633192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param pbName absolute path to the phone book 634192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @return <code>true</code> if request has been sent successfully; 635192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>false</code> otherwise; upon completion PCE sends 636192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_PHONE_BOOK_DONE} or 637192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_PHONE_BOOK_ERROR} in case of failure 638192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 639192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public boolean pullPhoneBook(String pbName) { 640192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return pullPhoneBook(pbName, 0, VCARD_TYPE_21, 0, 0); 641192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 642192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 643192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 644192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Pulls complete phone book. This method pulls all entries from the phone 645192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * book. 646192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * 647192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param pbName absolute path to the phone book 648192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param filter bit mask which indicates which fields of the vCard shall be 649192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * included in each entry of the resulting list 650192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param format vCard format of entries in the resulting list 651192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @return <code>true</code> if request has been sent successfully; 652192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>false</code> otherwise; upon completion PCE sends 653192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_PHONE_BOOK_DONE} or 654192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_PHONE_BOOK_ERROR} in case of failure 655192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 656192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public boolean pullPhoneBook(String pbName, long filter, byte format) { 657192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return pullPhoneBook(pbName, filter, format, 0, 0); 658192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 659192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 660192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 661192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Pulls complete phone book. This method pulls entries from the phone book 662192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * limited to the number of <code>maxListCount</code> starting from the 663192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * position of <code>listStartOffset</code>. 664192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <p> 665192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * The resulting list contains vCard objects in version 666192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>VCARD_TYPE_21</code> which in turns contain minimal required set of 667192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * vCard fields. 668192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * 669192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param pbName absolute path to the phone book 670192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param maxListCount limits number of entries in the response 671192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param listStartOffset offset to the first entry of the list that would 672192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * be returned 673192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @return <code>true</code> if request has been sent successfully; 674192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>false</code> otherwise; upon completion PCE sends 675192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_PHONE_BOOK_DONE} or 676192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_PHONE_BOOK_ERROR} in case of failure 677192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 678192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public boolean pullPhoneBook(String pbName, int maxListCount, int listStartOffset) { 679192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return pullPhoneBook(pbName, 0, VCARD_TYPE_21, maxListCount, listStartOffset); 680192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 681192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 682192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 683192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Pulls complete phone book. 684192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * 685192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param pbName absolute path to the phone book 686192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param filter bit mask which indicates which fields of the vCard hall be 687192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * included in each entry of the resulting list 688192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param format vCard format of entries in the resulting list 689192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param maxListCount limits number of entries in the response 690192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param listStartOffset offset to the first entry of the list that would 691192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * be returned 692192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @return <code>true</code> if request has been sent successfully; 693192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>false</code> otherwise; upon completion PCE sends 694192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_PHONE_BOOK_DONE} or 695192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_PHONE_BOOK_ERROR} in case of failure 696192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 697192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public boolean pullPhoneBook(String pbName, long filter, byte format, int maxListCount, 698192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta int listStartOffset) { 699192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta BluetoothPbapRequest req = new BluetoothPbapRequestPullPhoneBook(pbName, filter, format, 700192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta maxListCount, listStartOffset); 701192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return mSession.makeRequest(req); 702192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 703192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 704192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 705192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Pulls list of entries in the phone book. 706192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <p> 707192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * This method pulls the list of entries in the <code>folder</code>. 708192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * 709192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param folder the name of the folder to be retrieved 710192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @return <code>true</code> if request has been sent successfully; 711192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>false</code> otherwise; upon completion PCE sends 712192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_VCARD_LISTING_DONE} or 713192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_VCARD_LISTING_ERROR} in case of failure 714192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 715192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public boolean pullVcardListing(String folder) { 716192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return pullVcardListing(folder, ORDER_BY_DEFAULT, SEARCH_ATTR_NAME, null, 0, 0); 717192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 718192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 719192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 720192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Pulls list of entries in the <code>folder</code>. 721192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * 722192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param folder the name of the folder to be retrieved 723192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param order the sorting order of the resulting list of entries 724192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @return <code>true</code> if request has been sent successfully; 725192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>false</code> otherwise; upon completion PCE sends 726192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_VCARD_LISTING_DONE} or 727192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_VCARD_LISTING_ERROR} in case of failure 728192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 729192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public boolean pullVcardListing(String folder, byte order) { 730192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return pullVcardListing(folder, order, SEARCH_ATTR_NAME, null, 0, 0); 731192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 732192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 733192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 734192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Pulls list of entries in the <code>folder</code>. Only entries where 735192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>searchAttr</code> attribute of vCard matches <code>searchVal</code> 736192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * will be listed. 737192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * 738192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param folder the name of the folder to be retrieved 739192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param searchAttr vCard attribute which shall be used to carry out search 740192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * operation on 741192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param searchVal text string used by matching routine to match the value 742192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * of the attribute indicated by SearchAttr 743192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @return <code>true</code> if request has been sent successfully; 744192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>false</code> otherwise; upon completion PCE sends 745192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_VCARD_LISTING_DONE} or 746192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_VCARD_LISTING_ERROR} in case of failure 747192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 748192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public boolean pullVcardListing(String folder, byte searchAttr, String searchVal) { 749192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return pullVcardListing(folder, ORDER_BY_DEFAULT, searchAttr, searchVal, 0, 0); 750192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 751192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 752192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 753192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Pulls list of entries in the <code>folder</code>. 754192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * 755192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param folder the name of the folder to be retrieved 756192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param order the sorting order of the resulting list of entries 757192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param maxListCount limits number of entries in the response 758192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param listStartOffset offset to the first entry of the list that would 759192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * be returned 760192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @return <code>true</code> if request has been sent successfully; 761192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>false</code> otherwise; upon completion PCE sends 762192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_VCARD_LISTING_DONE} or 763192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_VCARD_LISTING_ERROR} in case of failure 764192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 765192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public boolean pullVcardListing(String folder, byte order, int maxListCount, 766192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta int listStartOffset) { 767192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return pullVcardListing(folder, order, SEARCH_ATTR_NAME, null, maxListCount, 768192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta listStartOffset); 769192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 770192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 771192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 772192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Pulls list of entries in the <code>folder</code>. 773192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * 774192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param folder the name of the folder to be retrieved 775192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param maxListCount limits number of entries in the response 776192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param listStartOffset offset to the first entry of the list that would 777192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * be returned 778192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @return <code>true</code> if request has been sent successfully; 779192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>false</code> otherwise; upon completion PCE sends 780192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_VCARD_LISTING_DONE} or 781192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_VCARD_LISTING_ERROR} in case of failure 782192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 783192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public boolean pullVcardListing(String folder, int maxListCount, int listStartOffset) { 784192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return pullVcardListing(folder, ORDER_BY_DEFAULT, SEARCH_ATTR_NAME, null, maxListCount, 785192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta listStartOffset); 786192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 787192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 788192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 789192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Pulls list of entries in the <code>folder</code>. 790192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * 791192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param folder the name of the folder to be retrieved 792192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param order the sorting order of the resulting list of entries 793192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param searchAttr vCard attribute which shall be used to carry out search 794192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * operation on 795192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param searchVal text string used by matching routine to match the value 796192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * of the attribute indicated by SearchAttr 797192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param maxListCount limits number of entries in the response 798192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param listStartOffset offset to the first entry of the list that would 799192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * be returned 800192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @return <code>true</code> if request has been sent successfully; 801192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>false</code> otherwise; upon completion PCE sends 802192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_VCARD_LISTING_DONE} or 803192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_VCARD_LISTING_ERROR} in case of failure 804192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 805192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public boolean pullVcardListing(String folder, byte order, byte searchAttr, 806192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta String searchVal, int maxListCount, int listStartOffset) { 807192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta BluetoothPbapRequest req = new BluetoothPbapRequestPullVcardListing(folder, order, 808192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta searchAttr, searchVal, maxListCount, listStartOffset); 809192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return mSession.makeRequest(req); 810192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 811192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 812192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 813192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Pulls single vCard object 814192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * 815192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param handle handle to the vCard which shall be pulled 816192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @return <code>true</code> if request has been sent successfully; 817192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>false</code> otherwise; upon completion PCE sends 818192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_VCARD_DONE} or 819192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @link #EVENT_PULL_VCARD_ERROR} in case of failure 820192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 821192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public boolean pullVcardEntry(String handle) { 822192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return pullVcardEntry(handle, (byte) 0, VCARD_TYPE_21); 823192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 824192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 825192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta /** 826192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Pulls single vCard object 827192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * 828192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param handle handle to the vCard which shall be pulled 829192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param filter bit mask of the vCard fields that shall be included in the 830192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * resulting vCard 831192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @param format resulting vCard version 832192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @return <code>true</code> if request has been sent successfully; 833192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * <code>false</code> otherwise; upon completion PCE sends 834192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * {@link #EVENT_PULL_VCARD_DONE} 835192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * @link #EVENT_PULL_VCARD_ERROR} in case of failure 836192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 837192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public boolean pullVcardEntry(String handle, long filter, byte format) { 838192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta BluetoothPbapRequest req = new BluetoothPbapRequestPullVcardEntry(handle, filter, format); 839192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return mSession.makeRequest(req); 840192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 841192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 842192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public boolean setAuthResponse(String key) { 843192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta Log.d(TAG, " setAuthResponse key=" + key); 844192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return mSession.setAuthResponse(key); 845192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 846192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta} 847