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