1326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde/* 2326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde* Copyright (C) 2013 Samsung System LSI 3326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde* Licensed under the Apache License, Version 2.0 (the "License"); 4326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde* you may not use this file except in compliance with the License. 5326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde* You may obtain a copy of the License at 6326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde* 7326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde* http://www.apache.org/licenses/LICENSE-2.0 8326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde* 9326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde* Unless required by applicable law or agreed to in writing, software 10326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde* distributed under the License is distributed on an "AS IS" BASIS, 11326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde* See the License for the specific language governing permissions and 13326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde* limitations under the License. 14326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde*/ 15326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bondepackage com.android.bluetooth.map; 16326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde 17326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bondeimport java.io.UnsupportedEncodingException; 18326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bondeimport java.nio.charset.Charset; 19326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bondeimport java.text.SimpleDateFormat; 20326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bondeimport java.util.ArrayList; 21326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bondeimport java.util.Arrays; 22326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bondeimport java.util.Date; 23326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bondeimport java.util.Locale; 24326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bondeimport java.util.UUID; 25326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde 26326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bondeimport com.android.bluetooth.map.BluetoothMapSmsPdu.SmsPdu; 27326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde 28326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bondeimport android.text.util.Rfc822Token; 29326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bondeimport android.text.util.Rfc822Tokenizer; 30326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bondeimport android.util.Base64; 31326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bondeimport android.util.Log; 32326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde 33326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde 34326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bondepublic class BluetoothMapbMessageEmail extends BluetoothMapbMessage { 35326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde 36326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde private String mEmailBody = null; 37326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde 38326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde public void setEmailBody(String emailBody) { 39326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde this.mEmailBody = emailBody; 40326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde this.mCharset = "UTF-8"; 41326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde this.mEncoding = "8bit"; 42326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde } 43326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde 44326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde public String getEmailBody() { 45326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde return mEmailBody; 46326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde } 47326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde 48326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde public void parseMsgPart(String msgPart) { 49326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde if (mEmailBody == null) 50326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde mEmailBody = msgPart; 51326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde else 52326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde mEmailBody += msgPart; 53326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde } 54326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde 55326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde /** 56326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde * Set initial values before parsing - will be called is a message body is found 57326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde * during parsing. 58326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde */ 59326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde public void parseMsgInit() { 60326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde // Not used for e-mail 61326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde } 62326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde 63326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde public byte[] encode() throws UnsupportedEncodingException 64326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde { 65326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde ArrayList<byte[]> bodyFragments = new ArrayList<byte[]>(); 66326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde 67326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde /* Store the messages in an ArrayList to be able to handle the different message types in a generic way. 68326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde * We use byte[] since we need to extract the length in bytes. */ 69326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde if(mEmailBody != null) { 70326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde String tmpBody = mEmailBody.replaceAll("END:MSG", "/END\\:MSG"); // Replace any occurrences of END:MSG with \END:MSG 71326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde bodyFragments.add(tmpBody.getBytes("UTF-8")); 72326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde } else { 73326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde Log.e(TAG, "Email has no body - this should not be possible"); 74326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde bodyFragments.add(new byte[0]); // An empty message - this should not be possible 75326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde } 76326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde return encodeGeneric(bodyFragments); 77326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde } 78326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde 79326b5e610063ac24c0ba467ac585bd4c7f618a67Casper Bonde} 80