Home | History | Annotate | Download | only in map
      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