1b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo/* 2b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo * Copyright (C) 2014 The Android Open Source Project 3b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo * 4b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo * Licensed under the Apache License, Version 2.0 (the "License"); 5b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo * you may not use this file except in compliance with the License. 6b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo * You may obtain a copy of the License at 7b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo * 8b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo * http://www.apache.org/licenses/LICENSE-2.0 9b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo * 10b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo * Unless required by applicable law or agreed to in writing, software 11b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo * distributed under the License is distributed on an "AS IS" BASIS, 12b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo * See the License for the specific language governing permissions and 14b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo * limitations under the License. 15b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo */ 16b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 17b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzopackage com.android.bluetooth.mapclient; 18b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 19b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzoimport java.io.IOException; 20b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzoimport java.io.InputStream; 21b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzoimport java.util.ArrayList; 22b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzoimport java.util.Date; 23b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 24b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzoimport javax.obex.ClientSession; 25b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzoimport javax.obex.HeaderSet; 26b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 27b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo/* Get a listing of messages in directory. */ 28b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzofinal class RequestGetMessagesListing extends Request { 29b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 30b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo private static final String TYPE = "x-bt/MAP-msg-listing"; 31b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 32b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo private MessagesListing mResponse = null; 33b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 34b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo private boolean mNewMessage = false; 35b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 36b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo private Date mServerTime = null; 37b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 38b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo public RequestGetMessagesListing(String folderName, int parameters, 39b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo MessagesFilter filter, int subjectLength, int maxListCount, 40b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo int listStartOffset) { 41b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo if (subjectLength < 0 || subjectLength > 255) { 42b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo throw new IllegalArgumentException("subjectLength should be [0..255]"); 43b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 44b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 45b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo if (maxListCount < 0 || maxListCount > 65535) { 46b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo throw new IllegalArgumentException("maxListCount should be [0..65535]"); 47b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 48b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 49b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo if (listStartOffset < 0 || listStartOffset > 65535) { 50b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo throw new IllegalArgumentException("listStartOffset should be [0..65535]"); 51b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 52b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 53b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo mHeaderSet.setHeader(HeaderSet.TYPE, TYPE); 54b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 55b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo if (folderName == null) { 56b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo mHeaderSet.setHeader(HeaderSet.NAME, ""); 57b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } else { 58b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo mHeaderSet.setHeader(HeaderSet.NAME, folderName); 59b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 60b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 61b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo ObexAppParameters oap = new ObexAppParameters(); 62b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 63b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo if (filter != null) { 64b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo if (filter.messageType != MessagesFilter.MESSAGE_TYPE_ALL) { 65b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo oap.add(OAP_TAGID_FILTER_MESSAGE_TYPE, filter.messageType); 66b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 67b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 68b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo if (filter.periodBegin != null) { 69b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo oap.add(OAP_TAGID_FILTER_PERIOD_BEGIN, filter.periodBegin); 70b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 71b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 72b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo if (filter.periodEnd != null) { 73b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo oap.add(OAP_TAGID_FILTER_PERIOD_END, filter.periodEnd); 74b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 75b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 76b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo if (filter.readStatus != MessagesFilter.READ_STATUS_ANY) { 77b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo oap.add(OAP_TAGID_FILTER_READ_STATUS, filter.readStatus); 78b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 79b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 80b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo if (filter.recipient != null) { 81b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo oap.add(OAP_TAGID_FILTER_RECIPIENT, filter.recipient); 82b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 83b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 84b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo if (filter.originator != null) { 85b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo oap.add(OAP_TAGID_FILTER_ORIGINATOR, filter.originator); 86b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 87b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 88b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo if (filter.priority != MessagesFilter.PRIORITY_ANY) { 89b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo oap.add(OAP_TAGID_FILTER_PRIORITY, filter.priority); 90b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 91b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 92b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 93b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo if (subjectLength != 0) { 94b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo oap.add(OAP_TAGID_SUBJECT_LENGTH, (byte) subjectLength); 95b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 96b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo /* Include parameterMask only when specific values are selected, 97b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo * to avoid IOT specific issue with no paramterMask header support. 98b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo */ 99b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo if (parameters > 0) { 100b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo oap.add(OAP_TAGID_PARAMETER_MASK, parameters); 101b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 102b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo // Allow GetMessageListing for maxlistcount value 0 also. 103b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo if (maxListCount >= 0) { 104b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo oap.add(OAP_TAGID_MAX_LIST_COUNT, (short) maxListCount); 105b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 106b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 107b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo if (listStartOffset != 0) { 108b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo oap.add(OAP_TAGID_START_OFFSET, (short) listStartOffset); 109b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 110b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 111b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo oap.addToHeaderSet(mHeaderSet); 112b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 113b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 114b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo @Override 115b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo protected void readResponse(InputStream stream) { 116b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo mResponse = new MessagesListing(stream); 117b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 118b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 119b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo @Override 120b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo protected void readResponseHeaders(HeaderSet headerset) { 121b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo ObexAppParameters oap = ObexAppParameters.fromHeaderSet(headerset); 122b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 123b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo mNewMessage = ((oap.getByte(OAP_TAGID_NEW_MESSAGE) & 0x01) == 1); 124b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 125b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo if (oap.exists(OAP_TAGID_MSE_TIME)) { 126b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo String mseTime = oap.getString(OAP_TAGID_MSE_TIME); 127b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo if (mseTime != null) { 128b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo mServerTime = (new ObexTime(mseTime)).getTime(); 129b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 130b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 131b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 132b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 133b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo public ArrayList<Message> getList() { 134b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo if (mResponse == null) { 135b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo return null; 136b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 137b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 138b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo return mResponse.getList(); 139b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 140b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 141b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo public boolean getNewMessageStatus() { 142b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo return mNewMessage; 143b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 144b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 145b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo public Date getMseTime() { 146b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo return mServerTime; 147b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 148b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo 149b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo @Override 150b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo public void execute(ClientSession session) throws IOException { 151b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo executeGet(session); 152b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo } 153b68b83c0463161ce65922ec606f12244446efab1Joseph Pirozzo} 154