| /* |
| * Copyright (C) 2014 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package android.bluetooth.client.map; |
| |
| import android.bluetooth.client.map.BluetoothMasClient.MessagesFilter; |
| import android.bluetooth.client.map.utils.ObexAppParameters; |
| import android.bluetooth.client.map.utils.ObexTime; |
| |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.util.ArrayList; |
| import java.util.Date; |
| |
| import javax.obex.ClientSession; |
| import javax.obex.HeaderSet; |
| |
| final class BluetoothMasRequestGetMessagesListing extends BluetoothMasRequest { |
| |
| private static final String TYPE = "x-bt/MAP-msg-listing"; |
| |
| private BluetoothMapMessagesListing mResponse = null; |
| |
| private boolean mNewMessage = false; |
| |
| private Date mServerTime = null; |
| |
| public BluetoothMasRequestGetMessagesListing(String folderName, int parameters, |
| BluetoothMasClient.MessagesFilter filter, int subjectLength, int maxListCount, |
| int listStartOffset) { |
| if (subjectLength < 0 || subjectLength > 255) { |
| throw new IllegalArgumentException("subjectLength should be [0..255]"); |
| } |
| |
| if (maxListCount < 0 || maxListCount > 65535) { |
| throw new IllegalArgumentException("maxListCount should be [0..65535]"); |
| } |
| |
| if (listStartOffset < 0 || listStartOffset > 65535) { |
| throw new IllegalArgumentException("listStartOffset should be [0..65535]"); |
| } |
| |
| mHeaderSet.setHeader(HeaderSet.TYPE, TYPE); |
| |
| if (folderName == null) { |
| mHeaderSet.setHeader(HeaderSet.NAME, ""); |
| } else { |
| mHeaderSet.setHeader(HeaderSet.NAME, folderName); |
| } |
| |
| ObexAppParameters oap = new ObexAppParameters(); |
| |
| if (filter != null) { |
| if (filter.messageType != MessagesFilter.MESSAGE_TYPE_ALL) { |
| oap.add(OAP_TAGID_FILTER_MESSAGE_TYPE, filter.messageType); |
| } |
| |
| if (filter.periodBegin != null) { |
| oap.add(OAP_TAGID_FILTER_PERIOD_BEGIN, filter.periodBegin); |
| } |
| |
| if (filter.periodEnd != null) { |
| oap.add(OAP_TAGID_FILTER_PERIOD_END, filter.periodEnd); |
| } |
| |
| if (filter.readStatus != MessagesFilter.READ_STATUS_ANY) { |
| oap.add(OAP_TAGID_FILTER_READ_STATUS, filter.readStatus); |
| } |
| |
| if (filter.recipient != null) { |
| oap.add(OAP_TAGID_FILTER_RECIPIENT, filter.recipient); |
| } |
| |
| if (filter.originator != null) { |
| oap.add(OAP_TAGID_FILTER_ORIGINATOR, filter.originator); |
| } |
| |
| if (filter.priority != MessagesFilter.PRIORITY_ANY) { |
| oap.add(OAP_TAGID_FILTER_PRIORITY, filter.priority); |
| } |
| } |
| |
| if (subjectLength != 0) { |
| oap.add(OAP_TAGID_SUBJECT_LENGTH, (byte) subjectLength); |
| } |
| /* Include parameterMask only when specific values are selected, |
| * to avoid IOT specific issue with no paramterMask header support. |
| */ |
| if (parameters > 0 ) { |
| oap.add(OAP_TAGID_PARAMETER_MASK, parameters); |
| } |
| // Allow GetMessageListing for maxlistcount value 0 also. |
| if (maxListCount >= 0) { |
| oap.add(OAP_TAGID_MAX_LIST_COUNT, (short) maxListCount); |
| } |
| |
| if (listStartOffset != 0) { |
| oap.add(OAP_TAGID_START_OFFSET, (short) listStartOffset); |
| } |
| |
| oap.addToHeaderSet(mHeaderSet); |
| } |
| |
| @Override |
| protected void readResponse(InputStream stream) { |
| mResponse = new BluetoothMapMessagesListing(stream); |
| } |
| |
| @Override |
| protected void readResponseHeaders(HeaderSet headerset) { |
| ObexAppParameters oap = ObexAppParameters.fromHeaderSet(headerset); |
| |
| mNewMessage = ((oap.getByte(OAP_TAGID_NEW_MESSAGE) & 0x01) == 1); |
| |
| if (oap.exists(OAP_TAGID_MSE_TIME)) { |
| String mseTime = oap.getString(OAP_TAGID_MSE_TIME); |
| if(mseTime != null ) |
| mServerTime = (new ObexTime(mseTime)).getTime(); |
| } |
| } |
| |
| public ArrayList<BluetoothMapMessage> getList() { |
| if (mResponse == null) { |
| return null; |
| } |
| |
| return mResponse.getList(); |
| } |
| |
| public boolean getNewMessageStatus() { |
| return mNewMessage; |
| } |
| |
| public Date getMseTime() { |
| return mServerTime; |
| } |
| |
| @Override |
| public void execute(ClientSession session) throws IOException { |
| executeGet(session); |
| } |
| } |