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