diff options
author | Tom Taylor <tomtaylor@google.com> | 2012-10-09 10:25:33 -0700 |
---|---|---|
committer | Tom Taylor <tomtaylor@google.com> | 2012-10-09 10:30:03 -0700 |
commit | 9889006f9d29d0509c1c036987ce028de43ac96e (patch) | |
tree | 833c9aaedfeb05cd7193ab9174e2418f602122c5 | |
parent | 259b5eabd47d87f68bc1285e1de60747bf21fa2b (diff) | |
download | Mms-9889006f9d29d0509c1c036987ce028de43ac96e.tar.gz |
Add setting to turn on/off group MMS
Bug 6970173
Add a setting/preference to turn on/off group MMS. If group mms is disabled
by mms_config.xml, the preference is hidden from the user (this is consistent
with other mms features disabled by carriers). When group mms is disabled,
receiving a group mms is also disabled. In other words, the received message
will appear to have come from a thread with only the sender and not in a thread
with the sender + the other recipients.
Change-Id: I9510ae269f7b3968c768c7b5f5cf8dcc7fe4eca6
-rw-r--r-- | res/values/strings.xml | 4 | ||||
-rw-r--r-- | res/xml/preferences.xml | 4 | ||||
-rwxr-xr-x | src/com/android/mms/MmsConfig.java | 4 | ||||
-rwxr-xr-x | src/com/android/mms/data/WorkingMessage.java | 18 | ||||
-rw-r--r-- | src/com/android/mms/transaction/MmsMessageSender.java | 4 | ||||
-rw-r--r-- | src/com/android/mms/transaction/NotificationTransaction.java | 7 | ||||
-rw-r--r-- | src/com/android/mms/transaction/PushReceiver.java | 7 | ||||
-rw-r--r-- | src/com/android/mms/transaction/RetrieveTransaction.java | 4 | ||||
-rw-r--r-- | src/com/android/mms/ui/ComposeMessageActivity.java | 4 | ||||
-rwxr-xr-x | src/com/android/mms/ui/MessagingPreferenceActivity.java | 19 |
10 files changed, 57 insertions, 18 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml index 1bccb0f2..d3e2c133 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -328,10 +328,14 @@ <string name="pref_summary_auto_delete">Delete old messages as limits are reached</string> <!-- Settings item description for integer auto-delete sms message limit --> <string name="pref_summary_delete_limit"><xliff:g id="count">%1$s</xliff:g> messages per conversation</string> + <!-- Settings item description for boolean MMS enable group MMS setting --> + <string name="pref_summary_mms_group_mms">Use MMS to send a single message when there are multiple recipients</string> <!-- Settings item for entering SIM card message screen --> <string name="pref_title_manage_sim_messages">Manage SIM card messages</string> <!-- Settings item for boolean option to enable/disable MMS delivery reports --> <string name="pref_title_mms_delivery_reports">Delivery reports</string> + <!-- Settings item for boolean option to enable/disable MMS group messages --> + <string name="pref_title_mms_group_mms">Group messaging</string> <!-- Settings item for boolean option to enable/disable MMS read reports --> <string name="pref_title_mms_read_reports">Read reports</string> <!-- Settings item for boolean option to enable/disable SMS delivery reports --> diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml index 75a5e7aa..fd80c5a1 100644 --- a/res/xml/preferences.xml +++ b/res/xml/preferences.xml @@ -52,6 +52,10 @@ </PreferenceCategory> <PreferenceCategory android:title="@string/pref_mms_settings_title" android:key="pref_key_mms_settings"> + <CheckBoxPreference android:defaultValue="true" + android:key="pref_key_mms_group_mms" + android:summary="@string/pref_summary_mms_group_mms" + android:title="@string/pref_title_mms_group_mms" /> <CheckBoxPreference android:defaultValue="false" android:key="pref_key_mms_delivery_reports" android:summary="@string/pref_summary_mms_delivery_reports" diff --git a/src/com/android/mms/MmsConfig.java b/src/com/android/mms/MmsConfig.java index 3179c624..2c34af8b 100755 --- a/src/com/android/mms/MmsConfig.java +++ b/src/com/android/mms/MmsConfig.java @@ -97,6 +97,8 @@ public class MmsConfig { // If mEnableGroupMms is true, a message with multiple recipients, regardless of contents, // will be sent as a single MMS message with multiple "TO" fields set for each recipient. + // If mEnableGroupMms is false, the group MMS setting/preference will be hidden in the settings + // activity. private static boolean mEnableGroupMms = true; public static void init(Context context) { @@ -323,7 +325,7 @@ public class MmsConfig { mEnableSMSDeliveryReports = "true".equalsIgnoreCase(text); } else if ("enableMMSDeliveryReports".equalsIgnoreCase(value)) { mEnableMMSDeliveryReports = "true".equalsIgnoreCase(text); - } else if ("enableGroupMmms".equalsIgnoreCase(value)) { + } else if ("enableGroupMms".equalsIgnoreCase(value)) { mEnableGroupMms = "true".equalsIgnoreCase(text); } } else if ("int".equals(tag)) { diff --git a/src/com/android/mms/data/WorkingMessage.java b/src/com/android/mms/data/WorkingMessage.java index 4f8d61f4..8ad6390a 100755 --- a/src/com/android/mms/data/WorkingMessage.java +++ b/src/com/android/mms/data/WorkingMessage.java @@ -58,6 +58,7 @@ import com.android.mms.transaction.MmsMessageSender; import com.android.mms.transaction.SmsMessageSender; import com.android.mms.ui.ComposeMessageActivity; import com.android.mms.ui.MessageUtils; +import com.android.mms.ui.MessagingPreferenceActivity; import com.android.mms.ui.SlideshowEditor; import com.android.mms.util.DraftCache; import com.android.mms.util.Recycler; @@ -836,7 +837,8 @@ public class WorkingMessage { // If we don't already have a Uri lying around, make a new one. If we do // have one already, make sure it is synced to disk. if (mMessageUri == null) { - mMessageUri = createDraftMmsMessage(persister, sendReq, mSlideshow, null); + mMessageUri = createDraftMmsMessage(persister, sendReq, mSlideshow, null, + mActivity); } else { updateDraftMmsMessage(mMessageUri, persister, mSlideshow, sendReq); } @@ -1058,7 +1060,9 @@ public class WorkingMessage { * attachment") still hold true. */ public void setHasMultipleRecipients(boolean hasMultipleRecipients, boolean notify) { - updateState(MULTIPLE_RECIPIENTS, MmsConfig.getGroupMmsEnabled() && hasMultipleRecipients, + updateState(MULTIPLE_RECIPIENTS, + hasMultipleRecipients && + MessagingPreferenceActivity.getIsGroupMmsEnabled(mActivity), notify); } @@ -1407,7 +1411,7 @@ public class WorkingMessage { try { if (newMessage) { // Create a new MMS message if one hasn't been made yet. - mmsUri = createDraftMmsMessage(persister, sendReq, slideshow, mmsUri); + mmsUri = createDraftMmsMessage(persister, sendReq, slideshow, mmsUri, mActivity); } else { // Otherwise, sync the MMS message in progress to disk. updateDraftMmsMessage(mmsUri, persister, slideshow, sendReq); @@ -1541,14 +1545,15 @@ public class WorkingMessage { } private static Uri createDraftMmsMessage(PduPersister persister, SendReq sendReq, - SlideshowModel slideshow, Uri preUri) { + SlideshowModel slideshow, Uri preUri, Context context) { if (slideshow == null) { return null; } try { PduBody pb = slideshow.toPduBody(); sendReq.setBody(pb); - Uri res = persister.persist(sendReq, preUri == null ? Mms.Draft.CONTENT_URI : preUri); + Uri res = persister.persist(sendReq, preUri == null ? Mms.Draft.CONTENT_URI : preUri, + true, MessagingPreferenceActivity.getIsGroupMmsEnabled(context)); slideshow.sync(pb); return res; } catch (MmsException e) { @@ -1571,7 +1576,8 @@ public class WorkingMessage { final SendReq sendReq = makeSendReq(conv, mSubject); if (mMessageUri == null) { - mMessageUri = createDraftMmsMessage(persister, sendReq, mSlideshow, null); + mMessageUri = createDraftMmsMessage(persister, sendReq, mSlideshow, null, + mActivity); } else { updateDraftMmsMessage(mMessageUri, persister, mSlideshow, sendReq); } diff --git a/src/com/android/mms/transaction/MmsMessageSender.java b/src/com/android/mms/transaction/MmsMessageSender.java index 531cc028..5632ce01 100644 --- a/src/com/android/mms/transaction/MmsMessageSender.java +++ b/src/com/android/mms/transaction/MmsMessageSender.java @@ -30,6 +30,7 @@ import android.provider.Telephony.MmsSms.PendingMessages; import android.util.Log; import com.android.mms.LogTag; +import com.android.mms.ui.ComposeMessageActivity; import com.android.mms.ui.MessagingPreferenceActivity; import com.android.mms.util.SendingProgressTokenManager; import com.google.android.mms.InvalidHeaderValueException; @@ -161,7 +162,8 @@ public class MmsMessageSender implements MessageSender { readRec.setDate(System.currentTimeMillis() / 1000); - PduPersister.getPduPersister(context).persist(readRec, Mms.Outbox.CONTENT_URI); + PduPersister.getPduPersister(context).persist(readRec, Mms.Outbox.CONTENT_URI, true, + MessagingPreferenceActivity.getIsGroupMmsEnabled(context)); context.startService(new Intent(context, TransactionService.class)); } catch (InvalidHeaderValueException e) { Log.e(TAG, "Invalide header value", e); diff --git a/src/com/android/mms/transaction/NotificationTransaction.java b/src/com/android/mms/transaction/NotificationTransaction.java index 1b0bd4a8..b05c8f42 100644 --- a/src/com/android/mms/transaction/NotificationTransaction.java +++ b/src/com/android/mms/transaction/NotificationTransaction.java @@ -39,6 +39,7 @@ import android.util.Log; import com.android.mms.MmsApp; import com.android.mms.MmsConfig; +import com.android.mms.ui.MessagingPreferenceActivity; import com.android.mms.util.DownloadManager; import com.android.mms.util.Recycler; import com.android.mms.widget.MmsWidgetProvider; @@ -110,7 +111,8 @@ public class NotificationTransaction extends Transaction implements Runnable { // Save the pdu. If we can start downloading the real pdu immediately, don't allow // persist() to create a thread for the notificationInd because it causes UI jank. mUri = PduPersister.getPduPersister(context).persist( - ind, Inbox.CONTENT_URI, !allowAutoDownload()); + ind, Inbox.CONTENT_URI, !allowAutoDownload(), + MessagingPreferenceActivity.getIsGroupMmsEnabled(context)); } catch (MmsException e) { Log.e(TAG, "Failed to save NotificationInd in constructor.", e); throw new IllegalArgumentException(); @@ -181,7 +183,8 @@ public class NotificationTransaction extends Transaction implements Runnable { } else { // Save the received PDU (must be a M-RETRIEVE.CONF). PduPersister p = PduPersister.getPduPersister(mContext); - Uri uri = p.persist(pdu, Inbox.CONTENT_URI); + Uri uri = p.persist(pdu, Inbox.CONTENT_URI, true, + MessagingPreferenceActivity.getIsGroupMmsEnabled(mContext)); // Use local time instead of PDU time ContentValues values = new ContentValues(1); diff --git a/src/com/android/mms/transaction/PushReceiver.java b/src/com/android/mms/transaction/PushReceiver.java index b09573f7..ba98ff91 100644 --- a/src/com/android/mms/transaction/PushReceiver.java +++ b/src/com/android/mms/transaction/PushReceiver.java @@ -37,6 +37,7 @@ import android.provider.Telephony.Mms.Inbox; import android.util.Log; import com.android.mms.MmsConfig; +import com.android.mms.ui.MessagingPreferenceActivity; import com.google.android.mms.ContentType; import com.google.android.mms.MmsException; import com.google.android.mms.pdu.DeliveryInd; @@ -92,7 +93,8 @@ public class PushReceiver extends BroadcastReceiver { break; } - Uri uri = p.persist(pdu, Inbox.CONTENT_URI); + Uri uri = p.persist(pdu, Inbox.CONTENT_URI, true, + MessagingPreferenceActivity.getIsGroupMmsEnabled(mContext)); // Update thread ID for ReadOrigInd & DeliveryInd. ContentValues values = new ContentValues(1); values.put(Mms.THREAD_ID, threadId); @@ -121,7 +123,8 @@ public class PushReceiver extends BroadcastReceiver { // don't allow persist() to create a thread for the notificationInd // because it causes UI jank. Uri uri = p.persist(pdu, Inbox.CONTENT_URI, - !NotificationTransaction.allowAutoDownload()); + !NotificationTransaction.allowAutoDownload(), + MessagingPreferenceActivity.getIsGroupMmsEnabled(mContext)); // Start service to finish the notification transaction. Intent svc = new Intent(mContext, TransactionService.class); diff --git a/src/com/android/mms/transaction/RetrieveTransaction.java b/src/com/android/mms/transaction/RetrieveTransaction.java index b055841b..fa0a5a8b 100644 --- a/src/com/android/mms/transaction/RetrieveTransaction.java +++ b/src/com/android/mms/transaction/RetrieveTransaction.java @@ -31,6 +31,7 @@ import android.util.Log; import com.android.mms.MmsConfig; import com.android.mms.ui.MessageUtils; +import com.android.mms.ui.MessagingPreferenceActivity; import com.android.mms.util.DownloadManager; import com.android.mms.util.Recycler; import com.android.mms.widget.MmsWidgetProvider; @@ -149,7 +150,8 @@ public class RetrieveTransaction extends Transaction implements Runnable { } else { // Store M-Retrieve.conf into Inbox PduPersister persister = PduPersister.getPduPersister(mContext); - msgUri = persister.persist(retrieveConf, Inbox.CONTENT_URI); + msgUri = persister.persist(retrieveConf, Inbox.CONTENT_URI, true, + MessagingPreferenceActivity.getIsGroupMmsEnabled(mContext)); // Use local time instead of PDU time ContentValues values = new ContentValues(1); diff --git a/src/com/android/mms/ui/ComposeMessageActivity.java b/src/com/android/mms/ui/ComposeMessageActivity.java index 58e7d9fc..f14531c7 100644 --- a/src/com/android/mms/ui/ComposeMessageActivity.java +++ b/src/com/android/mms/ui/ComposeMessageActivity.java @@ -1195,7 +1195,9 @@ public class ComposeMessageActivity extends Activity PduPersister persister = PduPersister.getPduPersister(ComposeMessageActivity.this); // Copy the parts of the message here. - mTempMmsUri = persister.persist(sendReq, Mms.Draft.CONTENT_URI); + mTempMmsUri = persister.persist(sendReq, Mms.Draft.CONTENT_URI, true, + MessagingPreferenceActivity + .getIsGroupMmsEnabled(ComposeMessageActivity.this)); mTempThreadId = MessagingNotification.getThreadId( ComposeMessageActivity.this, mTempMmsUri); } catch (MmsException e) { diff --git a/src/com/android/mms/ui/MessagingPreferenceActivity.java b/src/com/android/mms/ui/MessagingPreferenceActivity.java index de81d9bc..34f94910 100755 --- a/src/com/android/mms/ui/MessagingPreferenceActivity.java +++ b/src/com/android/mms/ui/MessagingPreferenceActivity.java @@ -62,6 +62,7 @@ public class MessagingPreferenceActivity extends PreferenceActivity public static final String AUTO_RETRIEVAL = "pref_key_mms_auto_retrieval"; public static final String RETRIEVAL_DURING_ROAMING = "pref_key_mms_retrieval_during_roaming"; public static final String AUTO_DELETE = "pref_key_auto_delete"; + public static final String GROUP_MMS_MODE = "pref_key_mms_group_mms"; // Menu entries private static final int MENU_RESTORE_DEFAULTS = 1; @@ -70,6 +71,7 @@ public class MessagingPreferenceActivity extends PreferenceActivity private Preference mSmsDeliveryReportPref; private Preference mMmsLimitPref; private Preference mMmsDeliveryReportPref; + private Preference mMmsGroupMmsPref; private Preference mMmsReadReportPref; private Preference mManageSimPref; private Preference mClearHistoryPref; @@ -109,6 +111,7 @@ public class MessagingPreferenceActivity extends PreferenceActivity mSmsLimitPref = findPreference("pref_key_sms_delete_limit"); mSmsDeliveryReportPref = findPreference("pref_key_sms_delivery_reports"); mMmsDeliveryReportPref = findPreference("pref_key_mms_delivery_reports"); + mMmsGroupMmsPref = findPreference("pref_key_mms_group_mms"); mMmsReadReportPref = findPreference("pref_key_mms_read_reports"); mMmsLimitPref = findPreference("pref_key_mms_delete_limit"); mClearHistoryPref = findPreference("pref_key_mms_clear_history"); @@ -163,16 +166,17 @@ public class MessagingPreferenceActivity extends PreferenceActivity (PreferenceCategory)findPreference("pref_key_storage_settings"); storageOptions.removePreference(findPreference("pref_key_mms_delete_limit")); } else { - if (!MmsConfig.getMMSDeliveryReportsEnabled()) { - PreferenceCategory mmsOptions = + PreferenceCategory mmsOptions = (PreferenceCategory)findPreference("pref_key_mms_settings"); + if (!MmsConfig.getMMSDeliveryReportsEnabled()) { mmsOptions.removePreference(mMmsDeliveryReportPref); } if (!MmsConfig.getMMSReadReportsEnabled()) { - PreferenceCategory mmsOptions = - (PreferenceCategory)findPreference("pref_key_mms_settings"); mmsOptions.removePreference(mMmsReadReportPref); } + if (!MmsConfig.getGroupMmsEnabled()) { + mmsOptions.removePreference(mMmsGroupMmsPref); + } } setEnabledNotificationsPref(); @@ -360,4 +364,11 @@ public class MessagingPreferenceActivity extends PreferenceActivity } mVibrateWhenPref.setSummary(null); } + + public static boolean getIsGroupMmsEnabled(Context context) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + boolean groupMmsPrefOn = prefs.getBoolean( + MessagingPreferenceActivity.GROUP_MMS_MODE, true); + return MmsConfig.getGroupMmsEnabled() && groupMmsPrefOn; + } } |