172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/*
2bd09a4b8c2d1f922f1459c4d7b61e7e87ed4ddf3The Android Open Source Project * Copyright (C) 2009 The Android Open Source Project
372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *
472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * you may not use this file except in compliance with the License.
672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * You may obtain a copy of the License at
772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *
872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *
1072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * See the License for the specific language governing permissions and
1472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * limitations under the License.
1572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */
1672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
1772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpackage com.android.mms;
1872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
1986a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylorimport java.io.IOException;
2086a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor
2186a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylorimport org.xmlpull.v1.XmlPullParser;
2286a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylorimport org.xmlpull.v1.XmlPullParserException;
2386a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor
2410ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylorimport com.android.internal.telephony.TelephonyProperties;
2510ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor
2686a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylorimport android.content.Context;
2786a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylorimport android.content.res.XmlResourceParser;
2886a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylorimport android.util.Log;
2986a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor
3072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpublic class MmsConfig {
3186a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor    private static final String TAG = "MmsConfig";
324dbb2b9b7786d168b36f6af101456315dcb75039Tom Taylor    private static final boolean DEBUG = true;
33150c4179995cc0a75f934ef194372f9295957ca2Joe Onorato    private static final boolean LOCAL_LOGV = false;
343b3d9ba082ee58fe2d408890ec3cbeee846e57ffWei Huang
353b3d9ba082ee58fe2d408890ec3cbeee846e57ffWei Huang    private static final String DEFAULT_HTTP_KEY_X_WAP_PROFILE = "x-wap-profile";
361b37c93a3b67483ee9b0ad604a2e1e9d8aaa84d9Wei Huang    private static final String DEFAULT_USER_AGENT = "Android-Mms/2.0";
373b3d9ba082ee58fe2d408890ec3cbeee846e57ffWei Huang
386e78b272d691669e12519d32c77d9b85abf0b05fWei Huang    private static final int MAX_IMAGE_HEIGHT = 480;
396e78b272d691669e12519d32c77d9b85abf0b05fWei Huang    private static final int MAX_IMAGE_WIDTH = 640;
405751c241c4a9cb19668788e2ae83ca6e8287375cSoojung Shin    private static final int MAX_TEXT_LENGTH = 2000;
416e78b272d691669e12519d32c77d9b85abf0b05fWei Huang
4272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    /**
43bd09a4b8c2d1f922f1459c4d7b61e7e87ed4ddf3The Android Open Source Project     * Whether to hide MMS functionality from the user (i.e. SMS only).
4472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     */
45604b2555f16c8f90dd083b326590ab4bd8526244Satish Roddom    private static boolean mTransIdEnabled = false;
466e78b272d691669e12519d32c77d9b85abf0b05fWei Huang    private static int mMmsEnabled = 1;                         // default to true
476e78b272d691669e12519d32c77d9b85abf0b05fWei Huang    private static int mMaxMessageSize = 300 * 1024;            // default to 300k max size
486e78b272d691669e12519d32c77d9b85abf0b05fWei Huang    private static String mUserAgent = DEFAULT_USER_AGENT;
496e78b272d691669e12519d32c77d9b85abf0b05fWei Huang    private static String mUaProfTagName = DEFAULT_HTTP_KEY_X_WAP_PROFILE;
5086a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor    private static String mUaProfUrl = null;
5189e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson    private static String mHttpParams = null;
5289e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson    private static String mHttpParamsLine1Key = null;
53cea16acf02be8943133bc5048b1d64286bfef1d8Satish Roddom    private static String mEmailGateway = null;
546e78b272d691669e12519d32c77d9b85abf0b05fWei Huang    private static int mMaxImageHeight = MAX_IMAGE_HEIGHT;      // default value
556e78b272d691669e12519d32c77d9b85abf0b05fWei Huang    private static int mMaxImageWidth = MAX_IMAGE_WIDTH;        // default value
5653a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    private static int mRecipientLimit = Integer.MAX_VALUE;     // default value
578718d3d672175f47b24cf82107943fa80232d80dTom Taylor    private static int mDefaultSMSMessagesPerThread = 500;      // default value
588718d3d672175f47b24cf82107943fa80232d80dTom Taylor    private static int mDefaultMMSMessagesPerThread = 50;       // default value
592f3a42025f51d410162b9b4b3583528077117374Tom Taylor    private static int mMinMessageCountPerThread = 2;           // default value
6053a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    private static int mMaxMessageCountPerThread = 5000;        // default value
61293000e15498b71a4986d7247e60fe8bdaa05a4bWei Huang    private static int mHttpSocketTimeout = 60*1000;            // default to 1 min
62e6367524d22c6bfedfb81c7e068e475b0f807053Tom Taylor    private static int mMinimumSlideElementDuration = 7;        // default to 7 sec
63161c9154aa7aafa397332caee40b2776db988bf7Christian Gustafsson    private static boolean mNotifyWapMMSC = false;
644d620299628c41f9149024f0cf9f42d008aedcf5Tom Taylor    private static boolean mAllowAttachAudio = true;
653356a1506f63daf7b7388d9f541045587036177aTom Taylor
663356a1506f63daf7b7388d9f541045587036177aTom Taylor    // See the comment below for mEnableMultipartSMS.
679aed641d68fafdec88f83d9c4f949ca9ab6fdb0eSoojung Shin    private static int mSmsToMmsTextThreshold = 4;
683356a1506f63daf7b7388d9f541045587036177aTom Taylor
693356a1506f63daf7b7388d9f541045587036177aTom Taylor    // This flag is somewhat confusing. If mEnableMultipartSMS is true, long sms messages are
703356a1506f63daf7b7388d9f541045587036177aTom Taylor    // always sent as multi-part sms messages, with no checked limit on the number of segments.
713356a1506f63daf7b7388d9f541045587036177aTom Taylor    // If mEnableMultipartSMS is false, then mSmsToMmsTextThreshold is used to determine the
723356a1506f63daf7b7388d9f541045587036177aTom Taylor    // limit of the number of sms segments before turning the long sms message into an mms
733356a1506f63daf7b7388d9f541045587036177aTom Taylor    // message. For example, if mSmsToMmsTextThreshold is 4, then a long sms message with three
743356a1506f63daf7b7388d9f541045587036177aTom Taylor    // or fewer segments will be sent as a multi-part sms. When the user types more characters
753356a1506f63daf7b7388d9f541045587036177aTom Taylor    // to cause the message to be 4 segments or more, the send button will show the MMS tag to
763356a1506f63daf7b7388d9f541045587036177aTom Taylor    // indicate the message will be sent as an mms.
779aed641d68fafdec88f83d9c4f949ca9ab6fdb0eSoojung Shin    private static boolean mEnableMultipartSMS = true;
783356a1506f63daf7b7388d9f541045587036177aTom Taylor
799aed641d68fafdec88f83d9c4f949ca9ab6fdb0eSoojung Shin    private static boolean mEnableSlideDuration = true;
80602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor    private static boolean mEnableMMSReadReports = true;        // key: "enableMMSReadReports"
81602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor    private static boolean mEnableSMSDeliveryReports = true;    // key: "enableSMSDeliveryReports"
82602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor    private static boolean mEnableMMSDeliveryReports = true;    // key: "enableMMSDeliveryReports"
835751c241c4a9cb19668788e2ae83ca6e8287375cSoojung Shin    private static int mMaxTextLength = -1;
84692636241c9858b6b535c876a79be2f04d8201b5Tom Taylor
85692636241c9858b6b535c876a79be2f04d8201b5Tom Taylor    // This is the max amount of storage multiplied by mMaxMessageSize that we
86692636241c9858b6b535c876a79be2f04d8201b5Tom Taylor    // allow of unsent messages before blocking the user from sending any more
87225e57fc21ad8c625dd0d5af19211b8d8ec2d157Tom Taylor    // MMS's.
88692636241c9858b6b535c876a79be2f04d8201b5Tom Taylor    private static int mMaxSizeScaleForPendingMmsAllowed = 4;       // default value
8907fd438290f18696092b00813ff1c57ac16fa81cTom Taylor
90f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang    // Email gateway alias support, including the master switch and different rules
91f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang    private static boolean mAliasEnabled = false;
92f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang    private static int mAliasRuleMinChars = 2;
93f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang    private static int mAliasRuleMaxChars = 48;
94f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang
9534396f17239fc1893e8e3c8e157e10c362df9e53Tom Taylor    private static int mMaxSubjectLength = 40;  // maximum number of characters allowed for mms
9634396f17239fc1893e8e3c8e157e10c362df9e53Tom Taylor                                                // subject
9734396f17239fc1893e8e3c8e157e10c362df9e53Tom Taylor
9886a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor    public static void init(Context context) {
9986a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor        if (LOCAL_LOGV) {
10086a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor            Log.v(TAG, "MmsConfig.init()");
10186a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor        }
10210ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor        // Always put the mnc/mcc in the log so we can tell which mms_config.xml was loaded.
10310ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor        Log.v(TAG, "mnc/mcc: " +
10410ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor                android.os.SystemProperties.get(TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC));
10586a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor
10686a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor        loadMmsSettings(context);
10786a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor    }
10807fd438290f18696092b00813ff1c57ac16fa81cTom Taylor
1099aed641d68fafdec88f83d9c4f949ca9ab6fdb0eSoojung Shin    public static int getSmsToMmsTextThreshold() {
1109aed641d68fafdec88f83d9c4f949ca9ab6fdb0eSoojung Shin        return mSmsToMmsTextThreshold;
1119aed641d68fafdec88f83d9c4f949ca9ab6fdb0eSoojung Shin    }
1129aed641d68fafdec88f83d9c4f949ca9ab6fdb0eSoojung Shin
11386a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor    public static boolean getMmsEnabled() {
11486a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor        return mMmsEnabled == 1 ? true : false;
11586a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor    }
11607fd438290f18696092b00813ff1c57ac16fa81cTom Taylor
11786a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor    public static int getMaxMessageSize() {
1184dbb2b9b7786d168b36f6af101456315dcb75039Tom Taylor        if (LOCAL_LOGV) {
1194dbb2b9b7786d168b36f6af101456315dcb75039Tom Taylor            Log.v(TAG, "MmsConfig.getMaxMessageSize(): " + mMaxMessageSize);
1204dbb2b9b7786d168b36f6af101456315dcb75039Tom Taylor        }
1214dbb2b9b7786d168b36f6af101456315dcb75039Tom Taylor       return mMaxMessageSize;
12286a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor    }
12307fd438290f18696092b00813ff1c57ac16fa81cTom Taylor
124604b2555f16c8f90dd083b326590ab4bd8526244Satish Roddom    /**
125604b2555f16c8f90dd083b326590ab4bd8526244Satish Roddom     * This function returns the value of "enabledTransID" present in mms_config file.
126604b2555f16c8f90dd083b326590ab4bd8526244Satish Roddom     * In case of single segment wap push message, this "enabledTransID" indicates whether
127604b2555f16c8f90dd083b326590ab4bd8526244Satish Roddom     * TransactionID should be appended to URI or not.
128604b2555f16c8f90dd083b326590ab4bd8526244Satish Roddom     */
129604b2555f16c8f90dd083b326590ab4bd8526244Satish Roddom    public static boolean getTransIdEnabled() {
130604b2555f16c8f90dd083b326590ab4bd8526244Satish Roddom        return mTransIdEnabled;
131604b2555f16c8f90dd083b326590ab4bd8526244Satish Roddom    }
132604b2555f16c8f90dd083b326590ab4bd8526244Satish Roddom
13389e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson    public static String getUserAgent() {
13489e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson        return mUserAgent;
13589e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson    }
13689e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson
13789e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson    public static String getUaProfTagName() {
13889e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson        return mUaProfTagName;
13989e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson    }
14089e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson
14186a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor    public static String getUaProfUrl() {
14286a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor        return mUaProfUrl;
14386a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor    }
14486a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor
14589e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson    public static String getHttpParams() {
14689e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson        return mHttpParams;
14789e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson    }
14889e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson
14989e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson    public static String getHttpParamsLine1Key() {
15089e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson        return mHttpParamsLine1Key;
15189e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson    }
15289e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson
153cea16acf02be8943133bc5048b1d64286bfef1d8Satish Roddom    public static String getEmailGateway() {
154cea16acf02be8943133bc5048b1d64286bfef1d8Satish Roddom        return mEmailGateway;
155cea16acf02be8943133bc5048b1d64286bfef1d8Satish Roddom    }
156cea16acf02be8943133bc5048b1d64286bfef1d8Satish Roddom
15786a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor    public static int getMaxImageHeight() {
15886a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor        return mMaxImageHeight;
15986a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor    }
16007fd438290f18696092b00813ff1c57ac16fa81cTom Taylor
16186a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor    public static int getMaxImageWidth() {
16286a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor        return mMaxImageWidth;
16386a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor    }
16486a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor
16507fd438290f18696092b00813ff1c57ac16fa81cTom Taylor    public static int getRecipientLimit() {
16607fd438290f18696092b00813ff1c57ac16fa81cTom Taylor        return mRecipientLimit;
16707fd438290f18696092b00813ff1c57ac16fa81cTom Taylor    }
16807fd438290f18696092b00813ff1c57ac16fa81cTom Taylor
1695751c241c4a9cb19668788e2ae83ca6e8287375cSoojung Shin    public static int getMaxTextLimit() {
1705751c241c4a9cb19668788e2ae83ca6e8287375cSoojung Shin        return mMaxTextLength > -1 ? mMaxTextLength : MAX_TEXT_LENGTH;
1715751c241c4a9cb19668788e2ae83ca6e8287375cSoojung Shin    }
1725751c241c4a9cb19668788e2ae83ca6e8287375cSoojung Shin
17353a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    public static int getDefaultSMSMessagesPerThread() {
17453a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor        return mDefaultSMSMessagesPerThread;
17553a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    }
17653a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor
17753a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    public static int getDefaultMMSMessagesPerThread() {
17853a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor        return mDefaultMMSMessagesPerThread;
17953a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    }
18053a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor
18153a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    public static int getMinMessageCountPerThread() {
18253a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor        return mMinMessageCountPerThread;
18353a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    }
18453a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor
18553a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    public static int getMaxMessageCountPerThread() {
18653a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor        return mMaxMessageCountPerThread;
18753a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    }
18853a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor
189293000e15498b71a4986d7247e60fe8bdaa05a4bWei Huang    public static int getHttpSocketTimeout() {
190293000e15498b71a4986d7247e60fe8bdaa05a4bWei Huang        return mHttpSocketTimeout;
191293000e15498b71a4986d7247e60fe8bdaa05a4bWei Huang    }
192293000e15498b71a4986d7247e60fe8bdaa05a4bWei Huang
193e6367524d22c6bfedfb81c7e068e475b0f807053Tom Taylor    public static int getMinimumSlideElementDuration() {
194e6367524d22c6bfedfb81c7e068e475b0f807053Tom Taylor        return mMinimumSlideElementDuration;
195e6367524d22c6bfedfb81c7e068e475b0f807053Tom Taylor    }
196e6367524d22c6bfedfb81c7e068e475b0f807053Tom Taylor
1979aed641d68fafdec88f83d9c4f949ca9ab6fdb0eSoojung Shin    public static boolean getMultipartSmsEnabled() {
1989aed641d68fafdec88f83d9c4f949ca9ab6fdb0eSoojung Shin        return mEnableMultipartSMS;
1999aed641d68fafdec88f83d9c4f949ca9ab6fdb0eSoojung Shin    }
2009aed641d68fafdec88f83d9c4f949ca9ab6fdb0eSoojung Shin
2019aed641d68fafdec88f83d9c4f949ca9ab6fdb0eSoojung Shin    public static boolean getSlideDurationEnabled() {
2029aed641d68fafdec88f83d9c4f949ca9ab6fdb0eSoojung Shin        return mEnableSlideDuration;
2039aed641d68fafdec88f83d9c4f949ca9ab6fdb0eSoojung Shin    }
2049aed641d68fafdec88f83d9c4f949ca9ab6fdb0eSoojung Shin
205602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor    public static boolean getMMSReadReportsEnabled() {
206602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor        return mEnableMMSReadReports;
207602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor    }
208602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor
209602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor    public static boolean getSMSDeliveryReportsEnabled() {
210602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor        return mEnableSMSDeliveryReports;
211602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor    }
212602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor
213602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor    public static boolean getMMSDeliveryReportsEnabled() {
214602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor        return mEnableMMSDeliveryReports;
215602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor    }
216602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor
217161c9154aa7aafa397332caee40b2776db988bf7Christian Gustafsson    public static boolean getNotifyWapMMSC() {
218161c9154aa7aafa397332caee40b2776db988bf7Christian Gustafsson        return mNotifyWapMMSC;
219161c9154aa7aafa397332caee40b2776db988bf7Christian Gustafsson    }
220161c9154aa7aafa397332caee40b2776db988bf7Christian Gustafsson
221692636241c9858b6b535c876a79be2f04d8201b5Tom Taylor    public static int getMaxSizeScaleForPendingMmsAllowed() {
222692636241c9858b6b535c876a79be2f04d8201b5Tom Taylor        return mMaxSizeScaleForPendingMmsAllowed;
223c44a89a040956a7b9635de4a9bcf1d7230692750Tom Taylor    }
224c44a89a040956a7b9635de4a9bcf1d7230692750Tom Taylor
225f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang    public static boolean isAliasEnabled() {
226f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang        return mAliasEnabled;
227f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang    }
228f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang
229f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang    public static int getAliasMinChars() {
230f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang        return mAliasRuleMinChars;
231f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang    }
232f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang
233f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang    public static int getAliasMaxChars() {
234f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang        return mAliasRuleMaxChars;
235f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang    }
236f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang
2374d620299628c41f9149024f0cf9f42d008aedcf5Tom Taylor    public static boolean getAllowAttachAudio() {
2384d620299628c41f9149024f0cf9f42d008aedcf5Tom Taylor        return mAllowAttachAudio;
2394d620299628c41f9149024f0cf9f42d008aedcf5Tom Taylor    }
2404d620299628c41f9149024f0cf9f42d008aedcf5Tom Taylor
24134396f17239fc1893e8e3c8e157e10c362df9e53Tom Taylor    public static int getMaxSubjectLength() {
24234396f17239fc1893e8e3c8e157e10c362df9e53Tom Taylor        return mMaxSubjectLength;
24334396f17239fc1893e8e3c8e157e10c362df9e53Tom Taylor    }
24434396f17239fc1893e8e3c8e157e10c362df9e53Tom Taylor
2454d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn    public static final void beginDocument(XmlPullParser parser, String firstElementName) throws XmlPullParserException, IOException
2464d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn    {
2474d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn        int type;
2484d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn        while ((type=parser.next()) != parser.START_TAG
2494d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn                   && type != parser.END_DOCUMENT) {
2504d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn            ;
2514d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn        }
2524d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn
2534d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn        if (type != parser.START_TAG) {
2544d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn            throw new XmlPullParserException("No start tag found");
2554d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn        }
2564d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn
2574d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn        if (!parser.getName().equals(firstElementName)) {
2584d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn            throw new XmlPullParserException("Unexpected start tag: found " + parser.getName() +
2594d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn                    ", expected " + firstElementName);
2604d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn        }
2614d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn    }
2624d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn
2634d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn    public static final void nextElement(XmlPullParser parser) throws XmlPullParserException, IOException
2644d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn    {
2654d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn        int type;
2664d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn        while ((type=parser.next()) != parser.START_TAG
2674d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn                   && type != parser.END_DOCUMENT) {
2684d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn            ;
2694d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn        }
2704d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn    }
2714dbb2b9b7786d168b36f6af101456315dcb75039Tom Taylor
27286a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor    private static void loadMmsSettings(Context context) {
2736e78b272d691669e12519d32c77d9b85abf0b05fWei Huang        XmlResourceParser parser = context.getResources().getXml(R.xml.mms_config);
27486a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor
27586a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor        try {
2764d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn            beginDocument(parser, "mms_config");
27707fd438290f18696092b00813ff1c57ac16fa81cTom Taylor
27886a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor            while (true) {
2794d33cdcbb402a87ffeeaddb58237c70c4608c6f5Dianne Hackborn                nextElement(parser);
28086a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                String tag = parser.getName();
28186a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                if (tag == null) {
28286a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                    break;
28386a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                }
28486a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                String name = parser.getAttributeName(0);
28586a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                String value = parser.getAttributeValue(0);
28686a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                String text = null;
28786a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                if (parser.next() == XmlPullParser.TEXT) {
28886a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                    text = parser.getText();
28986a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                }
29086a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor
29107fd438290f18696092b00813ff1c57ac16fa81cTom Taylor                if (DEBUG) {
29269a363ed65b1d8b9948f20f499d124bd31e0c941Tom Taylor                    Log.v(TAG, "tag: " + tag + " value: " + value + " - " +
29369a363ed65b1d8b9948f20f499d124bd31e0c941Tom Taylor                            text);
29407fd438290f18696092b00813ff1c57ac16fa81cTom Taylor                }
29586a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                if ("name".equalsIgnoreCase(name)) {
29686a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                    if ("bool".equals(tag)) {
29786a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                        // bool config tags go here
29886a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                        if ("enabledMMS".equalsIgnoreCase(value)) {
29986a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                            mMmsEnabled = "true".equalsIgnoreCase(text) ? 1 : 0;
300604b2555f16c8f90dd083b326590ab4bd8526244Satish Roddom                        } else if ("enabledTransID".equalsIgnoreCase(value)) {
301604b2555f16c8f90dd083b326590ab4bd8526244Satish Roddom                            mTransIdEnabled = "true".equalsIgnoreCase(text);
302161c9154aa7aafa397332caee40b2776db988bf7Christian Gustafsson                        } else if ("enabledNotifyWapMMSC".equalsIgnoreCase(value)) {
303161c9154aa7aafa397332caee40b2776db988bf7Christian Gustafsson                            mNotifyWapMMSC = "true".equalsIgnoreCase(text);
304f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang                        } else if ("aliasEnabled".equalsIgnoreCase(value)) {
305f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang                            mAliasEnabled = "true".equalsIgnoreCase(text);
3064d620299628c41f9149024f0cf9f42d008aedcf5Tom Taylor                        } else if ("allowAttachAudio".equalsIgnoreCase(value)) {
3074d620299628c41f9149024f0cf9f42d008aedcf5Tom Taylor                            mAllowAttachAudio = "true".equalsIgnoreCase(text);
3089aed641d68fafdec88f83d9c4f949ca9ab6fdb0eSoojung Shin                        } else if ("enableMultipartSMS".equalsIgnoreCase(value)) {
3099aed641d68fafdec88f83d9c4f949ca9ab6fdb0eSoojung Shin                            mEnableMultipartSMS = "true".equalsIgnoreCase(text);
3109aed641d68fafdec88f83d9c4f949ca9ab6fdb0eSoojung Shin                        } else if ("enableSlideDuration".equalsIgnoreCase(value)) {
3119aed641d68fafdec88f83d9c4f949ca9ab6fdb0eSoojung Shin                            mEnableSlideDuration = "true".equalsIgnoreCase(text);
312602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor                        } else if ("enableMMSReadReports".equalsIgnoreCase(value)) {
313602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor                            mEnableMMSReadReports = "true".equalsIgnoreCase(text);
314602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor                        } else if ("enableSMSDeliveryReports".equalsIgnoreCase(value)) {
315602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor                            mEnableSMSDeliveryReports = "true".equalsIgnoreCase(text);
316602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor                        } else if ("enableMMSDeliveryReports".equalsIgnoreCase(value)) {
317602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor                            mEnableMMSDeliveryReports = "true".equalsIgnoreCase(text);
31886a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                        }
31986a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                    } else if ("int".equals(tag)) {
32086a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                        // int config tags go here
32186a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                        if ("maxMessageSize".equalsIgnoreCase(value)) {
32286a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                            mMaxMessageSize = Integer.parseInt(text);
32386a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                        } else if ("maxImageHeight".equalsIgnoreCase(value)) {
32486a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                            mMaxImageHeight = Integer.parseInt(text);
32586a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                        } else if ("maxImageWidth".equalsIgnoreCase(value)) {
32686a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                            mMaxImageWidth = Integer.parseInt(text);
32753a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                        } else if ("defaultSMSMessagesPerThread".equalsIgnoreCase(value)) {
32853a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                            mDefaultSMSMessagesPerThread = Integer.parseInt(text);
32953a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                        } else if ("defaultMMSMessagesPerThread".equalsIgnoreCase(value)) {
33053a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                            mDefaultMMSMessagesPerThread = Integer.parseInt(text);
33153a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                        } else if ("minMessageCountPerThread".equalsIgnoreCase(value)) {
33253a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                            mMinMessageCountPerThread = Integer.parseInt(text);
33353a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                        } else if ("maxMessageCountPerThread".equalsIgnoreCase(value)) {
33453a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                            mMaxMessageCountPerThread = Integer.parseInt(text);
33507fd438290f18696092b00813ff1c57ac16fa81cTom Taylor                        } else if ("recipientLimit".equalsIgnoreCase(value)) {
33607fd438290f18696092b00813ff1c57ac16fa81cTom Taylor                            mRecipientLimit = Integer.parseInt(text);
33707fd438290f18696092b00813ff1c57ac16fa81cTom Taylor                            if (mRecipientLimit < 0) {
33807fd438290f18696092b00813ff1c57ac16fa81cTom Taylor                                mRecipientLimit = Integer.MAX_VALUE;
33907fd438290f18696092b00813ff1c57ac16fa81cTom Taylor                            }
340293000e15498b71a4986d7247e60fe8bdaa05a4bWei Huang                        } else if ("httpSocketTimeout".equalsIgnoreCase(value)) {
341293000e15498b71a4986d7247e60fe8bdaa05a4bWei Huang                            mHttpSocketTimeout = Integer.parseInt(text);
342e6367524d22c6bfedfb81c7e068e475b0f807053Tom Taylor                        } else if ("minimumSlideElementDuration".equalsIgnoreCase(value)) {
343e6367524d22c6bfedfb81c7e068e475b0f807053Tom Taylor                            mMinimumSlideElementDuration = Integer.parseInt(text);
344692636241c9858b6b535c876a79be2f04d8201b5Tom Taylor                        } else if ("maxSizeScaleForPendingMmsAllowed".equalsIgnoreCase(value)) {
345692636241c9858b6b535c876a79be2f04d8201b5Tom Taylor                            mMaxSizeScaleForPendingMmsAllowed = Integer.parseInt(text);
346f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang                        } else if ("aliasMinChars".equalsIgnoreCase(value)) {
347f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang                            mAliasRuleMinChars = Integer.parseInt(text);
348f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang                        } else if ("aliasMaxChars".equalsIgnoreCase(value)) {
349f6ddd0bb7fff9f479f6c306d3d3e154c6c533061Wei Huang                            mAliasRuleMaxChars = Integer.parseInt(text);
3509aed641d68fafdec88f83d9c4f949ca9ab6fdb0eSoojung Shin                        } else if ("smsToMmsTextThreshold".equalsIgnoreCase(value)) {
3519aed641d68fafdec88f83d9c4f949ca9ab6fdb0eSoojung Shin                            mSmsToMmsTextThreshold = Integer.parseInt(text);
3525751c241c4a9cb19668788e2ae83ca6e8287375cSoojung Shin                        } else if ("maxMessageTextSize".equalsIgnoreCase(value)) {
3535751c241c4a9cb19668788e2ae83ca6e8287375cSoojung Shin                            mMaxTextLength = Integer.parseInt(text);
35434396f17239fc1893e8e3c8e157e10c362df9e53Tom Taylor                        } else if ("maxSubjectLength".equalsIgnoreCase(value)) {
35534396f17239fc1893e8e3c8e157e10c362df9e53Tom Taylor                            mMaxSubjectLength = Integer.parseInt(text);
35686a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                        }
35786a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                    } else if ("string".equals(tag)) {
35886a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                        // string config tags go here
35989e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson                        if ("userAgent".equalsIgnoreCase(value)) {
36089e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson                            mUserAgent = text;
36189e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson                        } else if ("uaProfTagName".equalsIgnoreCase(value)) {
36289e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson                            mUaProfTagName = text;
36389e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson                        } else if ("uaProfUrl".equalsIgnoreCase(value)) {
36486a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                            mUaProfUrl = text;
36589e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson                        } else if ("httpParams".equalsIgnoreCase(value)) {
36689e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson                            mHttpParams = text;
36789e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson                        } else if ("httpParamsLine1Key".equalsIgnoreCase(value)) {
36889e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson                            mHttpParamsLine1Key = text;
369cea16acf02be8943133bc5048b1d64286bfef1d8Satish Roddom                        } else if ("emailGatewayNumber".equalsIgnoreCase(value)) {
370cea16acf02be8943133bc5048b1d64286bfef1d8Satish Roddom                            mEmailGateway = text;
37186a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                        }
37286a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                    }
37386a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                }
37486a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor            }
37586a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor        } catch (XmlPullParserException e) {
376293000e15498b71a4986d7247e60fe8bdaa05a4bWei Huang            Log.e(TAG, "loadMmsSettings caught ", e);
37786a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor        } catch (NumberFormatException e) {
378293000e15498b71a4986d7247e60fe8bdaa05a4bWei Huang            Log.e(TAG, "loadMmsSettings caught ", e);
37986a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor        } catch (IOException e) {
380293000e15498b71a4986d7247e60fe8bdaa05a4bWei Huang            Log.e(TAG, "loadMmsSettings caught ", e);
38186a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor        } finally {
38286a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor            parser.close();
38386a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor        }
3843b3d9ba082ee58fe2d408890ec3cbeee846e57ffWei Huang
38586a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor        String errorStr = null;
3863b3d9ba082ee58fe2d408890ec3cbeee846e57ffWei Huang
387437cfcb32630fb28ca6aa8f90b673d8068627bd1Tom Taylor        if (getMmsEnabled() && mUaProfUrl == null) {
3883b3d9ba082ee58fe2d408890ec3cbeee846e57ffWei Huang            errorStr = "uaProfUrl";
38989e7af1acc0b62f2822ace8df6d56f4c6d37a40fChristian Gustafsson        }
3903b3d9ba082ee58fe2d408890ec3cbeee846e57ffWei Huang
39186a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor        if (errorStr != null) {
39286a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor            String err =
39307fd438290f18696092b00813ff1c57ac16fa81cTom Taylor                String.format("MmsConfig.loadMmsSettings mms_config.xml missing %s setting",
39486a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor                        errorStr);
39586a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor            Log.e(TAG, err);
39686a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor        }
39786a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor    }
39886a1cf79bf92dbb2b9d09431379bff6de83c2581Tom Taylor
39972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project}
400