1 /* 2 * Copyright (C) 2013 Samsung System LSI 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 package com.android.bluetooth.map; 16 17 import java.io.IOException; 18 import java.io.StringWriter; 19 import java.io.UnsupportedEncodingException; 20 import java.util.ArrayList; 21 import java.util.Collections; 22 import java.util.List; 23 24 import org.xmlpull.v1.XmlSerializer; 25 26 import android.util.Log; 27 import android.util.Xml; 28 29 public class BluetoothMapMessageListing { 30 private boolean hasUnread = false; 31 private static final String TAG = "BluetoothMapMessageListing"; 32 private List<BluetoothMapMessageListingElement> list; 33 34 public BluetoothMapMessageListing(){ 35 list = new ArrayList<BluetoothMapMessageListingElement>(); 36 } 37 public void add(BluetoothMapMessageListingElement element) { 38 list.add(element); 39 /* update info regarding whether the list contains unread messages */ 40 if (element.getRead().equalsIgnoreCase("no")) 41 { 42 hasUnread = true; 43 } 44 } 45 46 /** 47 * Used to fetch the number of BluetoothMapMessageListingElement elements in the list. 48 * @return the number of elements in the list. 49 */ 50 public int getCount() { 51 if(list != null) 52 { 53 return list.size(); 54 } 55 return 0; 56 } 57 58 /** 59 * does the list contain any unread messages 60 * @return true if unread messages have been added to the list, else false 61 */ 62 public boolean hasUnread() 63 { 64 return hasUnread; 65 } 66 67 /** 68 * Encode the list of BluetoothMapMessageListingElement(s) into a UTF-8 69 * formatted XML-string in a trimmed byte array 70 * 71 * @return a reference to the encoded byte array. 72 * @throws UnsupportedEncodingException 73 * if UTF-8 encoding is unsupported on the platform. 74 */ 75 public byte[] encode() throws UnsupportedEncodingException { 76 StringWriter sw = new StringWriter(); 77 XmlSerializer xmlMsgElement = Xml.newSerializer(); 78 try { 79 xmlMsgElement.setOutput(sw); 80 xmlMsgElement.startDocument(null, null); 81 xmlMsgElement.startTag("", "MAP-msg-listing"); 82 xmlMsgElement.attribute("", "version", "1.0"); 83 // Do the XML encoding of list 84 for (BluetoothMapMessageListingElement element : list) { 85 element.encode(xmlMsgElement); // Append the list element 86 } 87 xmlMsgElement.endTag("", "MAP-msg-listing"); 88 xmlMsgElement.endDocument(); 89 } catch (IllegalArgumentException e) { 90 Log.w(TAG, e.toString()); 91 } catch (IllegalStateException e) { 92 Log.w(TAG, e.toString()); 93 } catch (IOException e) { 94 Log.w(TAG, e.toString()); 95 } 96 return sw.toString().getBytes("UTF-8"); 97 } 98 99 public void sort() { 100 Collections.sort(list); 101 } 102 103 public void segment(int count, int offset) { 104 count = Math.min(count, list.size()); 105 if (offset + count <= list.size()) { 106 list = list.subList(offset, offset + count); 107 } else { 108 list = null; 109 } 110 } 111 } 112