1192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta/*
2192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Copyright (C) 2014 The Android Open Source Project
3192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta *
4192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Licensed under the Apache License, Version 2.0 (the "License");
5192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * you may not use this file except in compliance with the License.
6192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * You may obtain a copy of the License at
7192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta *
8192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta *      http://www.apache.org/licenses/LICENSE-2.0
9192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta *
10192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Unless required by applicable law or agreed to in writing, software
11192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * distributed under the License is distributed on an "AS IS" BASIS,
12192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * See the License for the specific language governing permissions and
14192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * limitations under the License.
15192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */
16192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
17192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptapackage android.bluetooth.client.pbap;
18192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
19192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport android.util.Log;
20192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
21192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport android.bluetooth.client.pbap.utils.ObexAppParameters;
22192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport android.bluetooth.client.pbap.BluetoothPbapVcardListing;
23192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
24192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport java.io.IOException;
25192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport java.io.InputStream;
26192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport java.util.ArrayList;
27192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
28192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport javax.obex.HeaderSet;
29192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
30192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptafinal class BluetoothPbapRequestPullVcardListing extends BluetoothPbapRequest {
31192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
32192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    private static final String TAG = "BluetoothPbapRequestPullVcardListing";
33192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
34192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    private static final String TYPE = "x-bt/vcard-listing";
35192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
36192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    private BluetoothPbapVcardListing mResponse = null;
37192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
38192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    private int mNewMissedCalls = -1;
39192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
40192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    public BluetoothPbapRequestPullVcardListing(String folder, byte order, byte searchAttr,
41192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            String searchVal, int maxListCount, int listStartOffset) {
42192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
43192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        if (maxListCount < 0 || maxListCount > 65535) {
44192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            throw new IllegalArgumentException("maxListCount should be [0..65535]");
45192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        }
46192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
47192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        if (listStartOffset < 0 || listStartOffset > 65535) {
48192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            throw new IllegalArgumentException("listStartOffset should be [0..65535]");
49192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        }
50192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
51192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        if (folder == null) {
52192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            folder = "";
53192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        }
54192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
55192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        mHeaderSet.setHeader(HeaderSet.NAME, folder);
56192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
57192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        mHeaderSet.setHeader(HeaderSet.TYPE, TYPE);
58192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
59192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        ObexAppParameters oap = new ObexAppParameters();
60192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
61192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        if (order >= 0) {
62192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            oap.add(OAP_TAGID_ORDER, order);
63192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        }
64192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
65192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        if (searchVal != null) {
66192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            oap.add(OAP_TAGID_SEARCH_ATTRIBUTE, searchAttr);
67192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            oap.add(OAP_TAGID_SEARCH_VALUE, searchVal);
68192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        }
69192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
70192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        /*
71192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta         * maxListCount is a special case which is handled in
72192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta         * BluetoothPbapRequestPullVcardListingSize
73192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta         */
74192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        if (maxListCount > 0) {
75192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            oap.add(OAP_TAGID_MAX_LIST_COUNT, (short) maxListCount);
76192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        }
77192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
78192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        if (listStartOffset > 0) {
79192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            oap.add(OAP_TAGID_LIST_START_OFFSET, (short) listStartOffset);
80192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        }
81192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
82192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        oap.addToHeaderSet(mHeaderSet);
83192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    }
84192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
85192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    @Override
86192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    protected void readResponse(InputStream stream) throws IOException {
87192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        Log.v(TAG, "readResponse");
88192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
89192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        mResponse = new BluetoothPbapVcardListing(stream);
90192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    }
91192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
92192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    @Override
93192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    protected void readResponseHeaders(HeaderSet headerset) {
94192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        Log.v(TAG, "readResponseHeaders");
95192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
96192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        ObexAppParameters oap = ObexAppParameters.fromHeaderSet(headerset);
97192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
98192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        if (oap.exists(OAP_TAGID_NEW_MISSED_CALLS)) {
99192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta            mNewMissedCalls = oap.getByte(OAP_TAGID_NEW_MISSED_CALLS);
100192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        }
101192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    }
102192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
103192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    public ArrayList<BluetoothPbapCard> getList() {
104192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        return mResponse.getList();
105192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    }
106192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta
107192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    public int getNewMissedCalls() {
108192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta        return mNewMissedCalls;
109192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta    }
110192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta}
111