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.map; 18192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 19192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport android.bluetooth.client.map.BluetoothMasClient.MessagesFilter; 20192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport android.bluetooth.client.map.utils.ObexAppParameters; 21192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport android.bluetooth.client.map.utils.ObexTime; 22192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 23192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport java.io.IOException; 24192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport java.io.InputStream; 25192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport java.util.ArrayList; 26192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport java.util.Date; 27192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 28192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport javax.obex.ClientSession; 29192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport javax.obex.HeaderSet; 30192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 31192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptafinal class BluetoothMasRequestGetMessagesListing extends BluetoothMasRequest { 32192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 33192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private static final String TYPE = "x-bt/MAP-msg-listing"; 34192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 35192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private BluetoothMapMessagesListing mResponse = null; 36192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 37192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private boolean mNewMessage = false; 38192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 39192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private Date mServerTime = null; 40192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 41192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public BluetoothMasRequestGetMessagesListing(String folderName, int parameters, 42192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta BluetoothMasClient.MessagesFilter filter, int subjectLength, int maxListCount, 43192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta int listStartOffset) { 44192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 45192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (subjectLength < 0 || subjectLength > 255) { 46192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta throw new IllegalArgumentException("subjectLength should be [0..255]"); 47192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 48192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 49192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (maxListCount < 0 || maxListCount > 65535) { 50192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta throw new IllegalArgumentException("maxListCount should be [0..65535]"); 51192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 52192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 53192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (listStartOffset < 0 || listStartOffset > 65535) { 54192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta throw new IllegalArgumentException("listStartOffset should be [0..65535]"); 55192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 56192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 57192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mHeaderSet.setHeader(HeaderSet.TYPE, TYPE); 58192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 59192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (folderName == null) { 60192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mHeaderSet.setHeader(HeaderSet.NAME, ""); 61192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } else { 62192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mHeaderSet.setHeader(HeaderSet.NAME, folderName); 63192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 64192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 65192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta ObexAppParameters oap = new ObexAppParameters(); 66192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 67192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (filter != null) { 68192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (filter.messageType != MessagesFilter.MESSAGE_TYPE_ALL) { 69192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta oap.add(OAP_TAGID_FILTER_MESSAGE_TYPE, filter.messageType); 70192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 71192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 72192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (filter.periodBegin != null) { 73192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta oap.add(OAP_TAGID_FILTER_PERIOD_BEGIN, filter.periodBegin); 74192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 75192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 76192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (filter.periodEnd != null) { 77192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta oap.add(OAP_TAGID_FILTER_PERIOD_END, filter.periodEnd); 78192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 79192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 80192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (filter.readStatus != MessagesFilter.READ_STATUS_ANY) { 81192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta oap.add(OAP_TAGID_FILTER_READ_STATUS, filter.readStatus); 82192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 83192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 84192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (filter.recipient != null) { 85192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta oap.add(OAP_TAGID_FILTER_RECIPIENT, filter.recipient); 86192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 87192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 88192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (filter.originator != null) { 89192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta oap.add(OAP_TAGID_FILTER_ORIGINATOR, filter.originator); 90192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 91192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 92192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (filter.priority != MessagesFilter.PRIORITY_ANY) { 93192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta oap.add(OAP_TAGID_FILTER_PRIORITY, filter.priority); 94192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 95192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 96192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 97192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (subjectLength != 0) { 98192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta oap.add(OAP_TAGID_SUBJECT_LENGTH, (byte) subjectLength); 99192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 100192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 101192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (maxListCount != 0) { 102192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta oap.add(OAP_TAGID_MAX_LIST_COUNT, (short) maxListCount); 103192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 104192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 105192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (listStartOffset != 0) { 106192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta oap.add(OAP_TAGID_START_OFFSET, (short) listStartOffset); 107192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 108192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 109192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta oap.addToHeaderSet(mHeaderSet); 110192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 111192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 112192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta @Override 113192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta protected void readResponse(InputStream stream) { 114192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mResponse = new BluetoothMapMessagesListing(stream); 115192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 116192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 117192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta @Override 118192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta protected void readResponseHeaders(HeaderSet headerset) { 119192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta ObexAppParameters oap = ObexAppParameters.fromHeaderSet(headerset); 120192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 121192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mNewMessage = ((oap.getByte(OAP_TAGID_NEW_MESSAGE) & 0x01) == 1); 122192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 123192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (oap.exists(OAP_TAGID_MSE_TIME)) { 124192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta String mseTime = oap.getString(OAP_TAGID_MSE_TIME); 125192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 126192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mServerTime = (new ObexTime(mseTime)).getTime(); 127192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 128192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 129192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 130192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public ArrayList<BluetoothMapMessage> getList() { 131192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (mResponse == null) { 132192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return null; 133192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 134192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 135192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return mResponse.getList(); 136192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 137192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 138192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public boolean getNewMessageStatus() { 139192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return mNewMessage; 140192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 141192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 142192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public Date getMseTime() { 143192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return mServerTime; 144192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 145192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 146192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta @Override 147192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public void execute(ClientSession session) throws IOException { 148192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta executeGet(session); 149192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 150192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta} 151