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