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