summaryrefslogtreecommitdiffstats
path: root/src/com/android/messaging/ui/conversation/MessageDetailsDialog.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/messaging/ui/conversation/MessageDetailsDialog.java')
-rw-r--r--src/com/android/messaging/ui/conversation/MessageDetailsDialog.java381
1 files changed, 0 insertions, 381 deletions
diff --git a/src/com/android/messaging/ui/conversation/MessageDetailsDialog.java b/src/com/android/messaging/ui/conversation/MessageDetailsDialog.java
deleted file mode 100644
index 89b9148..0000000
--- a/src/com/android/messaging/ui/conversation/MessageDetailsDialog.java
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.messaging.ui.conversation;
-
-import android.app.AlertDialog;
-import android.content.Context;
-import android.content.res.Resources;
-import android.net.Uri;
-import android.text.TextUtils;
-import android.text.format.Formatter;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.data.ConversationMessageData;
-import com.android.messaging.datamodel.data.ConversationParticipantsData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.mmslib.pdu.PduHeaders;
-import com.android.messaging.sms.DatabaseMessages.MmsMessage;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.Assert.DoesNotRunOnMainThread;
-import com.android.messaging.util.Dates;
-import com.android.messaging.util.DebugUtils;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-import com.android.messaging.util.SafeAsyncTask;
-
-import java.util.List;
-
-public class MessageDetailsDialog {
- private static final String RECIPIENT_SEPARATOR = ", ";
-
- // All methods are static, no creating this class
- private MessageDetailsDialog() {
- }
-
- public static void show(final Context context, final ConversationMessageData data,
- final ConversationParticipantsData participants, final ParticipantData self) {
- if (DebugUtils.isDebugEnabled()) {
- new SafeAsyncTask<Void, Void, String>() {
- @Override
- protected String doInBackgroundTimed(Void... params) {
- return getMessageDetails(context, data, participants, self);
- }
-
- @Override
- protected void onPostExecute(String messageDetails) {
- showDialog(context, messageDetails);
- }
- }.executeOnThreadPool(null, null, null);
- } else {
- String messageDetails = getMessageDetails(context, data, participants, self);
- showDialog(context, messageDetails);
- }
- }
-
- private static String getMessageDetails(final Context context,
- final ConversationMessageData data,
- final ConversationParticipantsData participants, final ParticipantData self) {
- String messageDetails = null;
- if (data.getIsSms()) {
- messageDetails = getSmsMessageDetails(data, participants, self);
- } else {
- // TODO: Handle SMS_TYPE_MMS_PUSH_NOTIFICATION type differently?
- messageDetails = getMmsMessageDetails(context, data, participants, self);
- }
-
- return messageDetails;
- }
-
- private static void showDialog(final Context context, String messageDetails) {
- if (!TextUtils.isEmpty(messageDetails)) {
- new AlertDialog.Builder(context)
- .setTitle(R.string.message_details_title)
- .setMessage(messageDetails)
- .setCancelable(true)
- .show();
- }
- }
-
- /**
- * Return a string, separated by newlines, that contains a number of labels and values
- * for this sms message. The string will be displayed in a modal dialog.
- * @return string list of various message properties
- */
- private static String getSmsMessageDetails(final ConversationMessageData data,
- final ConversationParticipantsData participants, final ParticipantData self) {
- final Resources res = Factory.get().getApplicationContext().getResources();
- final StringBuilder details = new StringBuilder();
-
- // Type: Text message
- details.append(res.getString(R.string.message_type_label));
- details.append(res.getString(R.string.text_message));
-
- // From: +1425xxxxxxx
- // or To: +1425xxxxxxx
- final String rawSender = data.getSenderNormalizedDestination();
- if (!TextUtils.isEmpty(rawSender)) {
- details.append('\n');
- details.append(res.getString(R.string.from_label));
- details.append(rawSender);
- }
- final String rawRecipients = getRecipientParticipantString(participants,
- data.getParticipantId(), data.getIsIncoming(), data.getSelfParticipantId());
- if (!TextUtils.isEmpty(rawRecipients)) {
- details.append('\n');
- details.append(res.getString(R.string.to_address_label));
- details.append(rawRecipients);
- }
-
- // Sent: Mon 11:42AM
- if (data.getIsIncoming()) {
- if (data.getSentTimeStamp() != MmsUtils.INVALID_TIMESTAMP) {
- details.append('\n');
- details.append(res.getString(R.string.sent_label));
- details.append(
- Dates.getMessageDetailsTimeString(data.getSentTimeStamp()).toString());
- }
- }
-
- // Sent: Mon 11:43AM
- // or Received: Mon 11:43AM
- appendSentOrReceivedTimestamp(res, details, data);
-
- appendSimInfo(res, self, details);
-
- if (DebugUtils.isDebugEnabled()) {
- appendDebugInfo(details, data);
- }
-
- return details.toString();
- }
-
- /**
- * Return a string, separated by newlines, that contains a number of labels and values
- * for this mms message. The string will be displayed in a modal dialog.
- * @return string list of various message properties
- */
- private static String getMmsMessageDetails(Context context, final ConversationMessageData data,
- final ConversationParticipantsData participants, final ParticipantData self) {
- final Resources res = Factory.get().getApplicationContext().getResources();
- // TODO: when we support non-auto-download of mms messages, we'll have to handle
- // the case when the message is a PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND and display
- // something different. See the Messaging app's MessageUtils.getNotificationIndDetails()
-
- final StringBuilder details = new StringBuilder();
-
- // Type: Multimedia message.
- details.append(res.getString(R.string.message_type_label));
- details.append(res.getString(R.string.multimedia_message));
-
- // From: +1425xxxxxxx
- final String rawSender = data.getSenderNormalizedDestination();
- details.append('\n');
- details.append(res.getString(R.string.from_label));
- details.append(!TextUtils.isEmpty(rawSender) ? rawSender :
- res.getString(R.string.hidden_sender_address));
-
- // To: +1425xxxxxxx
- final String rawRecipients = getRecipientParticipantString(participants,
- data.getParticipantId(), data.getIsIncoming(), data.getSelfParticipantId());
- if (!TextUtils.isEmpty(rawRecipients)) {
- details.append('\n');
- details.append(res.getString(R.string.to_address_label));
- details.append(rawRecipients);
- }
-
- // Sent: Tue 3:05PM
- // or Received: Tue 3:05PM
- appendSentOrReceivedTimestamp(res, details, data);
-
- // Subject: You're awesome
- details.append('\n');
- details.append(res.getString(R.string.subject_label));
- if (!TextUtils.isEmpty(MmsUtils.cleanseMmsSubject(res, data.getMmsSubject()))) {
- details.append(data.getMmsSubject());
- }
-
- // Priority: High/Normal/Low
- details.append('\n');
- details.append(res.getString(R.string.priority_label));
- details.append(getPriorityDescription(res, data.getSmsPriority()));
-
- // Message size: 30 KB
- if (data.getSmsMessageSize() > 0) {
- details.append('\n');
- details.append(res.getString(R.string.message_size_label));
- details.append(Formatter.formatFileSize(context, data.getSmsMessageSize()));
- }
-
- appendSimInfo(res, self, details);
-
- if (DebugUtils.isDebugEnabled()) {
- appendDebugInfo(details, data);
- }
-
- return details.toString();
- }
-
- private static void appendSentOrReceivedTimestamp(Resources res, StringBuilder details,
- ConversationMessageData data) {
- int labelId = -1;
- if (data.getIsIncoming()) {
- labelId = R.string.received_label;
- } else if (data.getIsSendComplete()) {
- labelId = R.string.sent_label;
- }
- if (labelId >= 0) {
- details.append('\n');
- details.append(res.getString(labelId));
- details.append(
- Dates.getMessageDetailsTimeString(data.getReceivedTimeStamp()).toString());
- }
- }
-
- @DoesNotRunOnMainThread
- private static void appendDebugInfo(StringBuilder details, ConversationMessageData data) {
- // We grab the thread id from the database, so this needs to run in the background
- Assert.isNotMainThread();
- details.append("\n\n");
- details.append("DEBUG");
-
- details.append('\n');
- details.append("Message id: ");
- details.append(data.getMessageId());
-
- final String telephonyUri = data.getSmsMessageUri();
- details.append('\n');
- details.append("Telephony uri: ");
- details.append(telephonyUri);
-
- final String conversationId = data.getConversationId();
-
- if (conversationId == null) {
- return;
- }
-
- details.append('\n');
- details.append("Conversation id: ");
- details.append(conversationId);
-
- final long threadId = BugleDatabaseOperations.getThreadId(DataModel.get().getDatabase(),
- conversationId);
-
- details.append('\n');
- details.append("Conversation telephony thread id: ");
- details.append(threadId);
-
- MmsMessage mms = null;
-
- if (data.getIsMms()) {
- if (telephonyUri == null) {
- return;
- }
- mms = MmsUtils.loadMms(Uri.parse(telephonyUri));
- if (mms == null) {
- return;
- }
-
- // We log the thread id again to check that they are internally consistent
- final long mmsThreadId = mms.mThreadId;
- details.append('\n');
- details.append("Telephony thread id: ");
- details.append(mmsThreadId);
-
- // Log the MMS content location
- final String mmsContentLocation = mms.mContentLocation;
- details.append('\n');
- details.append("Content location URL: ");
- details.append(mmsContentLocation);
- }
-
- final String recipientsString = MmsUtils.getRawRecipientIdsForThread(threadId);
- if (recipientsString != null) {
- details.append('\n');
- details.append("Thread recipient ids: ");
- details.append(recipientsString);
- }
-
- final List<String> recipients = MmsUtils.getRecipientsByThread(threadId);
- if (recipients != null) {
- details.append('\n');
- details.append("Thread recipients: ");
- details.append(recipients.toString());
-
- if (mms != null) {
- final String from = MmsUtils.getMmsSender(recipients, mms.getUri());
- details.append('\n');
- details.append("Sender: ");
- details.append(from);
- }
- }
- }
-
- private static String getRecipientParticipantString(
- final ConversationParticipantsData participants, final String senderId,
- final boolean addSelf, final String selfId) {
- final StringBuilder recipients = new StringBuilder();
- for (final ParticipantData participant : participants) {
- if (TextUtils.equals(participant.getId(), senderId)) {
- // Don't add sender
- continue;
- }
- if (participant.isSelf() &&
- (!participant.getId().equals(selfId) || !addSelf)) {
- // For self participants, don't add the one that's not relevant to this message
- // or if we are asked not to add self
- continue;
- }
- final String phoneNumber = participant.getNormalizedDestination();
- // Don't add empty number. This should not happen. But if that happens
- // we should not add it.
- if (!TextUtils.isEmpty(phoneNumber)) {
- if (recipients.length() > 0) {
- recipients.append(RECIPIENT_SEPARATOR);
- }
- recipients.append(phoneNumber);
- }
- }
- return recipients.toString();
- }
-
- /**
- * Convert the numeric mms priority into a human-readable string
- * @param res
- * @param priorityValue coded PduHeader priority
- * @return string representation of the priority
- */
- private static String getPriorityDescription(final Resources res, final int priorityValue) {
- switch(priorityValue) {
- case PduHeaders.PRIORITY_HIGH:
- return res.getString(R.string.priority_high);
- case PduHeaders.PRIORITY_LOW:
- return res.getString(R.string.priority_low);
- case PduHeaders.PRIORITY_NORMAL:
- default:
- return res.getString(R.string.priority_normal);
- }
- }
-
- private static void appendSimInfo(final Resources res,
- final ParticipantData self, final StringBuilder outString) {
- if (!OsUtil.isAtLeastL_MR1()
- || self == null
- || PhoneUtils.getDefault().getActiveSubscriptionCount() < 2) {
- return;
- }
- // The appended SIM info would look like:
- // SIM: SUB 01
- // or SIM: SIM 1
- // or SIM: Unknown
- Assert.isTrue(self.isSelf());
- outString.append('\n');
- outString.append(res.getString(R.string.sim_label));
- if (self.isActiveSubscription() && !self.isDefaultSelf()) {
- final String subscriptionName = self.getSubscriptionName();
- if (TextUtils.isEmpty(subscriptionName)) {
- outString.append(res.getString(R.string.sim_slot_identifier,
- self.getDisplaySlotId()));
- } else {
- outString.append(subscriptionName);
- }
- }
- }
-}