192551d057965689f1952faeb06763f0762bc717fMindy Pereira/**
292551d057965689f1952faeb06763f0762bc717fMindy Pereira * Copyright (c) 2012, Google Inc.
392551d057965689f1952faeb06763f0762bc717fMindy Pereira *
492551d057965689f1952faeb06763f0762bc717fMindy Pereira * Licensed under the Apache License, Version 2.0 (the "License");
592551d057965689f1952faeb06763f0762bc717fMindy Pereira * you may not use this file except in compliance with the License.
692551d057965689f1952faeb06763f0762bc717fMindy Pereira * You may obtain a copy of the License at
792551d057965689f1952faeb06763f0762bc717fMindy Pereira *
892551d057965689f1952faeb06763f0762bc717fMindy Pereira *     http://www.apache.org/licenses/LICENSE-2.0
992551d057965689f1952faeb06763f0762bc717fMindy Pereira *
1092551d057965689f1952faeb06763f0762bc717fMindy Pereira * Unless required by applicable law or agreed to in writing, software
1192551d057965689f1952faeb06763f0762bc717fMindy Pereira * distributed under the License is distributed on an "AS IS" BASIS,
1292551d057965689f1952faeb06763f0762bc717fMindy Pereira * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1392551d057965689f1952faeb06763f0762bc717fMindy Pereira * See the License for the specific language governing permissions and
1492551d057965689f1952faeb06763f0762bc717fMindy Pereira * limitations under the License.
1592551d057965689f1952faeb06763f0762bc717fMindy Pereira */
1692551d057965689f1952faeb06763f0762bc717fMindy Pereira
1792551d057965689f1952faeb06763f0762bc717fMindy Pereirapackage com.android.mail.providers;
1892551d057965689f1952faeb06763f0762bc717fMindy Pereira
1992551d057965689f1952faeb06763f0762bc717fMindy Pereiraimport android.net.Uri;
201883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereiraimport android.text.TextUtils;
2115f9e3a766da8433ea0de74c5b52a77a80fc198dmindypimport android.text.util.Rfc822Token;
22fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindypimport android.text.util.Rfc822Tokenizer;
2392551d057965689f1952faeb06763f0762bc717fMindy Pereira
24b334c9035e9b7a38766bb66c29da2208525d1e11Paul Westbrookimport com.android.mail.utils.LogTag;
2592551d057965689f1952faeb06763f0762bc717fMindy Pereiraimport com.android.mail.utils.LogUtils;
2692551d057965689f1952faeb06763f0762bc717fMindy Pereiraimport com.android.mail.utils.Utils;
2792551d057965689f1952faeb06763f0762bc717fMindy Pereira
2892551d057965689f1952faeb06763f0762bc717fMindy Pereiraimport org.json.JSONException;
2992551d057965689f1952faeb06763f0762bc717fMindy Pereiraimport org.json.JSONObject;
3092551d057965689f1952faeb06763f0762bc717fMindy Pereira
3192551d057965689f1952faeb06763f0762bc717fMindy Pereiraimport java.io.Serializable;
321883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereiraimport java.util.List;
3392551d057965689f1952faeb06763f0762bc717fMindy Pereira
3492551d057965689f1952faeb06763f0762bc717fMindy Pereirapublic class ReplyFromAccount implements Serializable {
3592551d057965689f1952faeb06763f0762bc717fMindy Pereira    private static final long serialVersionUID = 1L;
3692551d057965689f1952faeb06763f0762bc717fMindy Pereira
37b334c9035e9b7a38766bb66c29da2208525d1e11Paul Westbrook    private static final String LOG_TAG = LogTag.getLogTag();
3892551d057965689f1952faeb06763f0762bc717fMindy Pereira    private static final String BASE_ACCOUNT_URI = "baseAccountUri";
3992551d057965689f1952faeb06763f0762bc717fMindy Pereira    private static final String ADDRESS_STRING = "address";
40cd970ddaba4e212b668588db2104dc46ad3ad793Mindy Pereira    private static final String REPLY_TO = "replyTo";
4192551d057965689f1952faeb06763f0762bc717fMindy Pereira    private static final String NAME_STRING = "name";
4292551d057965689f1952faeb06763f0762bc717fMindy Pereira    private static final String IS_DEFAULT = "isDefault";
4392551d057965689f1952faeb06763f0762bc717fMindy Pereira    private static final String IS_CUSTOM_FROM = "isCustom";
4492551d057965689f1952faeb06763f0762bc717fMindy Pereira
4592551d057965689f1952faeb06763f0762bc717fMindy Pereira    public Account account;
4692551d057965689f1952faeb06763f0762bc717fMindy Pereira    Uri baseAccountUri;
4792551d057965689f1952faeb06763f0762bc717fMindy Pereira    public String address;
48cd970ddaba4e212b668588db2104dc46ad3ad793Mindy Pereira    public String replyTo;
4992551d057965689f1952faeb06763f0762bc717fMindy Pereira    public String name;
5092551d057965689f1952faeb06763f0762bc717fMindy Pereira    public boolean isDefault;
5192551d057965689f1952faeb06763f0762bc717fMindy Pereira    public boolean isCustomFrom;
5292551d057965689f1952faeb06763f0762bc717fMindy Pereira
5392551d057965689f1952faeb06763f0762bc717fMindy Pereira    public ReplyFromAccount(Account account, Uri baseAccountUri, String address, String name,
54cd970ddaba4e212b668588db2104dc46ad3ad793Mindy Pereira            String replyTo, boolean isDefault, boolean isCustom) {
5592551d057965689f1952faeb06763f0762bc717fMindy Pereira        this.account = account;
5692551d057965689f1952faeb06763f0762bc717fMindy Pereira        this.baseAccountUri = baseAccountUri;
5792551d057965689f1952faeb06763f0762bc717fMindy Pereira        this.address = address;
5892551d057965689f1952faeb06763f0762bc717fMindy Pereira        this.name = name;
59cd970ddaba4e212b668588db2104dc46ad3ad793Mindy Pereira        this.replyTo = replyTo;
6092551d057965689f1952faeb06763f0762bc717fMindy Pereira        this.isDefault = isDefault;
6192551d057965689f1952faeb06763f0762bc717fMindy Pereira        this.isCustomFrom = isCustom;
6292551d057965689f1952faeb06763f0762bc717fMindy Pereira    }
6392551d057965689f1952faeb06763f0762bc717fMindy Pereira
6492551d057965689f1952faeb06763f0762bc717fMindy Pereira    public JSONObject serialize() {
6592551d057965689f1952faeb06763f0762bc717fMindy Pereira        JSONObject json = new JSONObject();
6692551d057965689f1952faeb06763f0762bc717fMindy Pereira        try {
6792551d057965689f1952faeb06763f0762bc717fMindy Pereira            json.put(BASE_ACCOUNT_URI, baseAccountUri);
6892551d057965689f1952faeb06763f0762bc717fMindy Pereira            json.put(ADDRESS_STRING, address);
6992551d057965689f1952faeb06763f0762bc717fMindy Pereira            json.put(NAME_STRING, name);
70cd970ddaba4e212b668588db2104dc46ad3ad793Mindy Pereira            json.put(REPLY_TO, replyTo);
7192551d057965689f1952faeb06763f0762bc717fMindy Pereira            json.put(IS_DEFAULT, isDefault);
7292551d057965689f1952faeb06763f0762bc717fMindy Pereira            json.put(IS_CUSTOM_FROM, isCustomFrom);
7392551d057965689f1952faeb06763f0762bc717fMindy Pereira        } catch (JSONException e) {
74bb036ff794f022bba2f501e155ef9c412e0e452eTony Mantler            LogUtils.wtf(LOG_TAG, e, "Could not serialize account with address " + address);
7592551d057965689f1952faeb06763f0762bc717fMindy Pereira        }
7692551d057965689f1952faeb06763f0762bc717fMindy Pereira        return json;
7792551d057965689f1952faeb06763f0762bc717fMindy Pereira    }
7892551d057965689f1952faeb06763f0762bc717fMindy Pereira
7992551d057965689f1952faeb06763f0762bc717fMindy Pereira    public static ReplyFromAccount deserialize(Account account, JSONObject json) {
8092551d057965689f1952faeb06763f0762bc717fMindy Pereira        ReplyFromAccount replyFromAccount = null;
8192551d057965689f1952faeb06763f0762bc717fMindy Pereira        try {
8292551d057965689f1952faeb06763f0762bc717fMindy Pereira            Uri uri = Utils.getValidUri(json.getString(BASE_ACCOUNT_URI));
8392551d057965689f1952faeb06763f0762bc717fMindy Pereira            String addressString = json.getString(ADDRESS_STRING);
8457559cd46a7f4f22c06e95e5e8d0ad507c02ecfbTony Mantler            String nameString = json.optString(NAME_STRING, null);
85cd970ddaba4e212b668588db2104dc46ad3ad793Mindy Pereira            String replyTo = json.getString(REPLY_TO);
8692551d057965689f1952faeb06763f0762bc717fMindy Pereira            boolean isDefault = json.getBoolean(IS_DEFAULT);
8792551d057965689f1952faeb06763f0762bc717fMindy Pereira            boolean isCustomFrom = json.getBoolean(IS_CUSTOM_FROM);
8892551d057965689f1952faeb06763f0762bc717fMindy Pereira            replyFromAccount = new ReplyFromAccount(account, uri, addressString, nameString,
89cd970ddaba4e212b668588db2104dc46ad3ad793Mindy Pereira                    replyTo, isDefault, isCustomFrom);
9092551d057965689f1952faeb06763f0762bc717fMindy Pereira        } catch (JSONException e) {
9192551d057965689f1952faeb06763f0762bc717fMindy Pereira            LogUtils.wtf(LOG_TAG, e, "Could not deserialize replyfromaccount");
9292551d057965689f1952faeb06763f0762bc717fMindy Pereira        }
9392551d057965689f1952faeb06763f0762bc717fMindy Pereira        return replyFromAccount;
9492551d057965689f1952faeb06763f0762bc717fMindy Pereira    }
95e8f94dc92567d8efa691860c38720d3ae753f429Mindy Pereira
96e8f94dc92567d8efa691860c38720d3ae753f429Mindy Pereira    public static ReplyFromAccount deserialize(Account account, String stringExtra) {
97e8f94dc92567d8efa691860c38720d3ae753f429Mindy Pereira        ReplyFromAccount replyFromAccount = null;
98e8f94dc92567d8efa691860c38720d3ae753f429Mindy Pereira        try {
99e8f94dc92567d8efa691860c38720d3ae753f429Mindy Pereira            replyFromAccount =  deserialize(account, new JSONObject(stringExtra));
100e8f94dc92567d8efa691860c38720d3ae753f429Mindy Pereira        } catch (JSONException e) {
101e8f94dc92567d8efa691860c38720d3ae753f429Mindy Pereira            LogUtils.wtf(LOG_TAG, e, "Could not deserialize replyfromaccount");
102e8f94dc92567d8efa691860c38720d3ae753f429Mindy Pereira        }
103e8f94dc92567d8efa691860c38720d3ae753f429Mindy Pereira        return replyFromAccount;
104e8f94dc92567d8efa691860c38720d3ae753f429Mindy Pereira    }
1051883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira
1061883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira    /**
10715f9e3a766da8433ea0de74c5b52a77a80fc198dmindyp     * Determine if this address is the account itself or a custom from for the
10815f9e3a766da8433ea0de74c5b52a77a80fc198dmindyp     * account.
1091883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira     */
1105ee5d69dc7ddbef52c6c62947757b3d86ac89f23mindyp    public static boolean matchesAccountOrCustomFrom(Account account, String possibleCustomFrom,
1111883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira            List<ReplyFromAccount> replyFromAccounts) {
1126efcfe8aa574426471584555c14058351bf4466cTony Mantler        if (TextUtils.isEmpty(possibleCustomFrom)) {
1136efcfe8aa574426471584555c14058351bf4466cTony Mantler            return false;
1146efcfe8aa574426471584555c14058351bf4466cTony Mantler        }
11515f9e3a766da8433ea0de74c5b52a77a80fc198dmindyp        Rfc822Token[] tokens = Rfc822Tokenizer.tokenize(possibleCustomFrom);
11615f9e3a766da8433ea0de74c5b52a77a80fc198dmindyp        if (tokens != null && tokens.length > 0) {
1174a78f7a89adf1d0bac6049d5c892e72a8b7250c4Tony Mantler            String parsedFromAddress = Utils.normalizeEmailAddress(tokens[0].getAddress());
1184a78f7a89adf1d0bac6049d5c892e72a8b7250c4Tony Mantler            if (TextUtils.equals(Utils.normalizeEmailAddress(account.getEmailAddress()),
1194a78f7a89adf1d0bac6049d5c892e72a8b7250c4Tony Mantler                    parsedFromAddress)) {
1201883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira                return true;
1211883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira            }
12215f9e3a766da8433ea0de74c5b52a77a80fc198dmindyp            for (ReplyFromAccount replyFromAccount : replyFromAccounts) {
1234a78f7a89adf1d0bac6049d5c892e72a8b7250c4Tony Mantler                if (TextUtils.equals(Utils.normalizeEmailAddress(replyFromAccount.address),
1244a78f7a89adf1d0bac6049d5c892e72a8b7250c4Tony Mantler                        parsedFromAddress) && replyFromAccount.isCustomFrom) {
12515f9e3a766da8433ea0de74c5b52a77a80fc198dmindyp                    return true;
12615f9e3a766da8433ea0de74c5b52a77a80fc198dmindyp                }
12715f9e3a766da8433ea0de74c5b52a77a80fc198dmindyp            }
1281883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira        }
1291883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira        return false;
1301883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira    }
13192551d057965689f1952faeb06763f0762bc717fMindy Pereira}
132