1d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/* 2d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Copyright (C) 2015 The Android Open Source Project 3d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 4d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Licensed under the Apache License, Version 2.0 (the "License"); 5d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * you may not use this file except in compliance with the License. 6d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * You may obtain a copy of the License at 7d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 8d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * http://www.apache.org/licenses/LICENSE-2.0 9d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 10d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Unless required by applicable law or agreed to in writing, software 11d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * distributed under the License is distributed on an "AS IS" BASIS, 12d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * See the License for the specific language governing permissions and 14d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * limitations under the License. 15d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 16d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 17d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpackage com.android.messaging.sms; 18d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 19d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.os.Bundle; 20d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.support.v7.mms.CarrierConfigValuesLoader; 21d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.telephony.SubscriptionInfo; 22d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 23d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.Factory; 24d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.ParticipantData; 25d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.Assert; 26d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.LogUtil; 27d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.OsUtil; 28d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.PhoneUtils; 29d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.SafeAsyncTask; 30d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.google.common.collect.Maps; 31d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 32d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.util.List; 33d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.util.Map; 34d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.util.Set; 35d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 36d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/** 37d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * MMS configuration. 38d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 39d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * This is now a wrapper around the BugleCarrierConfigValuesLoader, which does 40d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * the actual loading and stores the values in a Bundle. This class provides getter 41d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * methods for values used in the app, which is easier to use than the raw loader 42d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * class. 43d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 44d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpublic class MmsConfig { 45d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final String TAG = LogUtil.BUGLE_TAG; 46d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 47d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int DEFAULT_MAX_TEXT_LENGTH = 2000; 48d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 49d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /* 50d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Key types 51d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 52d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final String KEY_TYPE_INT = "int"; 53d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final String KEY_TYPE_BOOL = "bool"; 54d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final String KEY_TYPE_STRING = "string"; 55d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 56d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final Map<String, String> sKeyTypeMap = Maps.newHashMap(); 57d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static { 58d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ENABLED_MMS, KEY_TYPE_BOOL); 59d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ENABLED_TRANS_ID, KEY_TYPE_BOOL); 60d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ENABLED_NOTIFY_WAP_MMSC, KEY_TYPE_BOOL); 61d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ALIAS_ENABLED, KEY_TYPE_BOOL); 62d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ALLOW_ATTACH_AUDIO, KEY_TYPE_BOOL); 63d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ENABLE_MULTIPART_SMS, KEY_TYPE_BOOL); 64d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ENABLE_SMS_DELIVERY_REPORTS, 65d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd KEY_TYPE_BOOL); 66d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ENABLE_GROUP_MMS, KEY_TYPE_BOOL); 67d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION, 68d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd KEY_TYPE_BOOL); 69d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_CELL_BROADCAST_APP_LINKS, KEY_TYPE_BOOL); 70d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES, 71d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd KEY_TYPE_BOOL); 72d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ENABLE_MMS_READ_REPORTS, KEY_TYPE_BOOL); 73d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ENABLE_MMS_DELIVERY_REPORTS, 74d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd KEY_TYPE_BOOL); 75d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_SUPPORT_HTTP_CHARSET_HEADER, 76d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd KEY_TYPE_BOOL); 77d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_MAX_MESSAGE_SIZE, KEY_TYPE_INT); 78d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_MAX_IMAGE_HEIGHT, KEY_TYPE_INT); 79d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_MAX_IMAGE_WIDTH, KEY_TYPE_INT); 80d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_RECIPIENT_LIMIT, KEY_TYPE_INT); 81d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_HTTP_SOCKET_TIMEOUT, KEY_TYPE_INT); 82d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ALIAS_MIN_CHARS, KEY_TYPE_INT); 83d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ALIAS_MAX_CHARS, KEY_TYPE_INT); 84d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_SMS_TO_MMS_TEXT_THRESHOLD, KEY_TYPE_INT); 85d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD, 86d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd KEY_TYPE_INT); 87d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_MAX_MESSAGE_TEXT_SIZE, KEY_TYPE_INT); 88d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_MAX_SUBJECT_LENGTH, KEY_TYPE_INT); 89d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_UA_PROF_TAG_NAME, KEY_TYPE_STRING); 90d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_HTTP_PARAMS, KEY_TYPE_STRING); 91d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_EMAIL_GATEWAY_NUMBER, KEY_TYPE_STRING); 92d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_NAI_SUFFIX, KEY_TYPE_STRING); 93d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 94d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 95d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // A map that stores all MmsConfigs, one per active subscription. For pre-LMSim, this will 96d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // contain just one entry with the default self sub id; for LMSim and above, this will contain 97d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // all active sub ids but the default subscription id - the default subscription id will be 98d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // resolved to an active sub id during runtime. 99d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final Map<Integer, MmsConfig> sSubIdToMmsConfigMap = Maps.newHashMap(); 100d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // The fallback values 101d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final MmsConfig sFallback = 102d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new MmsConfig(ParticipantData.DEFAULT_SELF_SUB_ID, new Bundle()); 103d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 104d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Per-subscription configuration values. 105d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final Bundle mValues; 106d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final int mSubId; 107d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 108d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 109d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Retrieves the MmsConfig instance associated with the given {@code subId} 110d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 111d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static MmsConfig get(final int subId) { 112d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final int realSubId = PhoneUtils.getDefault().getEffectiveSubId(subId); 113d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd synchronized (sSubIdToMmsConfigMap) { 114d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final MmsConfig mmsConfig = sSubIdToMmsConfigMap.get(realSubId); 115d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (mmsConfig == null) { 116d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // The subId is no longer valid. Fall back to the default config. 117d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd LogUtil.e(LogUtil.BUGLE_TAG, "Get mms config failed: invalid subId. subId=" + subId 118d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + ", real subId=" + realSubId 119d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + ", map=" + sSubIdToMmsConfigMap.keySet()); 120d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return sFallback; 121d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 122d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mmsConfig; 123d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 124d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 125d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 126d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private MmsConfig(final int subId, final Bundle values) { 127d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mSubId = subId; 128d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mValues = values; 129d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 130d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 131d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 132d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Same as load() but doing it using an async thread from SafeAsyncTask thread pool. 133d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 134d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static void loadAsync() { 135d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd SafeAsyncTask.executeOnThreadPool(new Runnable() { 136d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 137d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void run() { 138d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd load(); 139d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 140d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }); 141d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 142d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 143d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 144d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Reload the device and per-subscription settings. 145d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 146d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static synchronized void load() { 147d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final BugleCarrierConfigValuesLoader loader = Factory.get().getCarrierConfigValuesLoader(); 148d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Rebuild the entire MmsConfig map. 149d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sSubIdToMmsConfigMap.clear(); 150d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd loader.reset(); 151d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (OsUtil.isAtLeastL_MR1()) { 152d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final List<SubscriptionInfo> subInfoRecords = 153d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd PhoneUtils.getDefault().toLMr1().getActiveSubscriptionInfoList(); 154d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (subInfoRecords == null) { 155d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd LogUtil.w(TAG, "Loading mms config failed: no active SIM"); 156d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return; 157d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 158d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd for (SubscriptionInfo subInfoRecord : subInfoRecords) { 159d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final int subId = subInfoRecord.getSubscriptionId(); 160d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Bundle values = loader.get(subId); 161d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd addMmsConfig(new MmsConfig(subId, values)); 162d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 163d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } else { 164d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Bundle values = loader.get(ParticipantData.DEFAULT_SELF_SUB_ID); 165d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd addMmsConfig(new MmsConfig(ParticipantData.DEFAULT_SELF_SUB_ID, values)); 166d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 167d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 168d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 169d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static void addMmsConfig(MmsConfig mmsConfig) { 170d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Assert.isTrue(OsUtil.isAtLeastL_MR1() != 171d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd (mmsConfig.mSubId == ParticipantData.DEFAULT_SELF_SUB_ID)); 172d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sSubIdToMmsConfigMap.put(mmsConfig.mSubId, mmsConfig); 173d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 174d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 175d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public int getSmsToMmsTextThreshold() { 176d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mValues.getInt(CarrierConfigValuesLoader.CONFIG_SMS_TO_MMS_TEXT_THRESHOLD, 177d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CarrierConfigValuesLoader.CONFIG_SMS_TO_MMS_TEXT_THRESHOLD_DEFAULT); 178d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 179d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 180d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public int getSmsToMmsTextLengthThreshold() { 181d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mValues.getInt(CarrierConfigValuesLoader.CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD, 182d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CarrierConfigValuesLoader.CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD_DEFAULT); 183d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 184d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 185d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public int getMaxMessageSize() { 186d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mValues.getInt(CarrierConfigValuesLoader.CONFIG_MAX_MESSAGE_SIZE, 187d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CarrierConfigValuesLoader.CONFIG_MAX_MESSAGE_SIZE_DEFAULT); 188d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 189d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 190d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 191d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Return the largest MaxMessageSize for any subid 192d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 193d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static int getMaxMaxMessageSize() { 194d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd int maxMax = 0; 195d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd for (MmsConfig config : sSubIdToMmsConfigMap.values()) { 196d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd maxMax = Math.max(maxMax, config.getMaxMessageSize()); 197d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 198d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return maxMax > 0 ? maxMax : sFallback.getMaxMessageSize(); 199d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 200d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 201d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean getTransIdEnabled() { 202d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mValues.getBoolean(CarrierConfigValuesLoader.CONFIG_ENABLED_TRANS_ID, 203d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CarrierConfigValuesLoader.CONFIG_ENABLED_TRANS_ID_DEFAULT); 204d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 205d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 206d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getEmailGateway() { 207d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mValues.getString(CarrierConfigValuesLoader.CONFIG_EMAIL_GATEWAY_NUMBER, 208d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CarrierConfigValuesLoader.CONFIG_EMAIL_GATEWAY_NUMBER_DEFAULT); 209d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 210d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 211d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public int getMaxImageHeight() { 212d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mValues.getInt(CarrierConfigValuesLoader.CONFIG_MAX_IMAGE_HEIGHT, 213d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CarrierConfigValuesLoader.CONFIG_MAX_IMAGE_HEIGHT_DEFAULT); 214d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 215d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 216d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public int getMaxImageWidth() { 217d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mValues.getInt(CarrierConfigValuesLoader.CONFIG_MAX_IMAGE_WIDTH, 218d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CarrierConfigValuesLoader.CONFIG_MAX_IMAGE_WIDTH_DEFAULT); 219d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 220d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 221d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public int getRecipientLimit() { 222d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final int limit = mValues.getInt(CarrierConfigValuesLoader.CONFIG_RECIPIENT_LIMIT, 223d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CarrierConfigValuesLoader.CONFIG_RECIPIENT_LIMIT_DEFAULT); 224d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return limit < 0 ? Integer.MAX_VALUE : limit; 225d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 226d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 227d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public int getMaxTextLimit() { 228d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final int max = mValues.getInt(CarrierConfigValuesLoader.CONFIG_MAX_MESSAGE_TEXT_SIZE, 229d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CarrierConfigValuesLoader.CONFIG_MAX_MESSAGE_TEXT_SIZE_DEFAULT); 230d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return max > -1 ? max : DEFAULT_MAX_TEXT_LENGTH; 231d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 232d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 233d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean getMultipartSmsEnabled() { 234d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mValues.getBoolean(CarrierConfigValuesLoader.CONFIG_ENABLE_MULTIPART_SMS, 235d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CarrierConfigValuesLoader.CONFIG_ENABLE_MULTIPART_SMS_DEFAULT); 236d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 237d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 238d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean getSendMultipartSmsAsSeparateMessages() { 239d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mValues.getBoolean( 240d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CarrierConfigValuesLoader.CONFIG_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES, 241d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CarrierConfigValuesLoader.CONFIG_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES_DEFAULT); 242d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 243d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 244d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean getSMSDeliveryReportsEnabled() { 245d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mValues.getBoolean(CarrierConfigValuesLoader.CONFIG_ENABLE_SMS_DELIVERY_REPORTS, 246d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CarrierConfigValuesLoader.CONFIG_ENABLE_SMS_DELIVERY_REPORTS_DEFAULT); 247d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 248d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 249d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean getNotifyWapMMSC() { 250d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mValues.getBoolean(CarrierConfigValuesLoader.CONFIG_ENABLED_NOTIFY_WAP_MMSC, 251d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CarrierConfigValuesLoader.CONFIG_ENABLED_NOTIFY_WAP_MMSC_DEFAULT); 252d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 253d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 254d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean isAliasEnabled() { 255d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mValues.getBoolean(CarrierConfigValuesLoader.CONFIG_ALIAS_ENABLED, 256d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CarrierConfigValuesLoader.CONFIG_ALIAS_ENABLED_DEFAULT); 257d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 258d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 259d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public int getAliasMinChars() { 260d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mValues.getInt(CarrierConfigValuesLoader.CONFIG_ALIAS_MIN_CHARS, 261d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CarrierConfigValuesLoader.CONFIG_ALIAS_MIN_CHARS_DEFAULT); 262d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 263d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 264d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public int getAliasMaxChars() { 265d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mValues.getInt(CarrierConfigValuesLoader.CONFIG_ALIAS_MAX_CHARS, 266d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CarrierConfigValuesLoader.CONFIG_ALIAS_MAX_CHARS_DEFAULT); 267d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 268d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 269d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean getAllowAttachAudio() { 270d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mValues.getBoolean(CarrierConfigValuesLoader.CONFIG_ALLOW_ATTACH_AUDIO, 271d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CarrierConfigValuesLoader.CONFIG_ALLOW_ATTACH_AUDIO_DEFAULT); 272d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 273d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 274d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public int getMaxSubjectLength() { 275d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mValues.getInt(CarrierConfigValuesLoader.CONFIG_MAX_SUBJECT_LENGTH, 276d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CarrierConfigValuesLoader.CONFIG_MAX_SUBJECT_LENGTH_DEFAULT); 277d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 278d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 279d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean getGroupMmsEnabled() { 280d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mValues.getBoolean(CarrierConfigValuesLoader.CONFIG_ENABLE_GROUP_MMS, 281d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CarrierConfigValuesLoader.CONFIG_ENABLE_GROUP_MMS_DEFAULT); 282d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 283d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 284d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean getSupportMmsContentDisposition() { 285d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mValues.getBoolean(CarrierConfigValuesLoader.CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION, 286d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CarrierConfigValuesLoader.CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION_DEFAULT); 287d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 288d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 289d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean getShowCellBroadcast() { 290d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mValues.getBoolean(CarrierConfigValuesLoader.CONFIG_CELL_BROADCAST_APP_LINKS, 291d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CarrierConfigValuesLoader.CONFIG_CELL_BROADCAST_APP_LINKS_DEFAULT); 292d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 293d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 294d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public Object getValue(final String key) { 295d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mValues.get(key); 296d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 297d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 298d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public Set<String> keySet() { 299d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mValues.keySet(); 300d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 301d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 302d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static String getKeyType(final String key) { 303d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return sKeyTypeMap.get(key); 304d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 305d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 306d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void update(final String type, final String key, final String value) { 307d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd BugleCarrierConfigValuesLoader.update(mValues, type, key, value); 308d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 309d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd} 310