From dafb125a4f29226b6a3e8aa93de3d5163126c9ce Mon Sep 17 00:00:00 2001 From: steckbrief Date: Sun, 4 Oct 2015 20:34:52 +0200 Subject: Publishing additional information in message details dialog such as message type and message status --- .../ui/dialogs/MessageDetailsDialog.java | 160 ++++++++++++++++++--- src/main/res/layout/dialog_message_details.xml | 61 ++++++-- src/main/res/values-de/strings.xml | 21 +++ src/main/res/values/strings.xml | 21 +++ 4 files changed, 235 insertions(+), 28 deletions(-) diff --git a/src/main/java/de/thedevstack/conversationsplus/ui/dialogs/MessageDetailsDialog.java b/src/main/java/de/thedevstack/conversationsplus/ui/dialogs/MessageDetailsDialog.java index 05830c75..25d522f0 100644 --- a/src/main/java/de/thedevstack/conversationsplus/ui/dialogs/MessageDetailsDialog.java +++ b/src/main/java/de/thedevstack/conversationsplus/ui/dialogs/MessageDetailsDialog.java @@ -1,45 +1,56 @@ package de.thedevstack.conversationsplus.ui.dialogs; import android.app.Activity; -import android.app.AlertDialog; import android.text.format.DateFormat; +import android.util.Log; import android.view.View; import android.widget.TextView; import java.util.Date; import de.thedevstack.conversationsplus.R; +import de.thedevstack.conversationsplus.entities.Conversation; import de.thedevstack.conversationsplus.entities.Message; import de.thedevstack.conversationsplus.utils.UIHelper; /** - * Created by tzur on 29.09.2015. + * Fills the contents to the message details dialog. + * The view definition is done in R.layout.dialog_message_details. */ public class MessageDetailsDialog extends AbstractAlertDialog { - private AlertDialog.Builder builder; + /** + * Initializes the Message Details Dialog. + * @param context the context of this alert dialog (the parent activity). + * @param message the message to be displayed + */ public MessageDetailsDialog(Activity context, Message message) { super(context, R.string.dlg_msg_details_title); this.createView(context, message); } + /** + * Creates the view for the message details alert dialog. + * @param context the context of this alert dialog (the parent activity). + * @param message the message to be displayed + */ protected void createView(Activity context, Message message) { int viewId = R.layout.dialog_message_details; View view = context.getLayoutInflater().inflate(viewId, null); - TextView timeSent = (TextView) view.findViewById(R.id.dlgMsgDetTimeSent); - timeSent.setText(DateFormat.format("dd.MM.yyyy kk:mm:ss", new Date(message.getMergedTimeSent()))); - TextView sender = (TextView) view.findViewById(R.id.dlgMsgDetSender); - TextView receipient = (TextView) view.findViewById(R.id.dlgMsgDetReceipient); - String me = message.getConversation().getAccount().getJid().getResourcepart(); - String other = message.getCounterpart().getResourcepart(); - if (Message.STATUS_RECEIVED == message.getStatus()) { - sender.setText(other); - receipient.setText(me); - } else { - sender.setText(me); - receipient.setText(other); - } + displayMessageSentTime(view, message); + displaySenderAndReceiver(view, message); + displayMessageTypeInfo(view, message); + displayMessageStatusInfo(view, message); + displayFileInfo(view, message); + } + + /** + * Publishes file information, if message contains an image to view. + * @param view the dialog view + * @param message the message to display in dialog + */ + protected void displayFileInfo(View view, Message message) { if (message.getType() == Message.TYPE_IMAGE || message.getType() == Message.TYPE_FILE || message.getTransferable() != null) { view.findViewById(R.id.dlgMsgDetFileTable).setVisibility(View.VISIBLE); if (null != message.getFileParams()) { @@ -53,7 +64,120 @@ public class MessageDetailsDialog extends AbstractAlertDialog { this.setView(view); } - public void show() { - this.builder.show(); + /** + * Displays message status info to view. + * @param view the dialog view + * @param message the message to display in dialog + */ + protected void displayMessageStatusInfo(View view, Message message) { + TextView msgStatusTextView = (TextView) view.findViewById(R.id.dlgMsgDetMsgStatus); + int msgStatusResId; + int msgStatusColorResId; + switch (message.getStatus()) { + case Message.STATUS_WAITING: + msgStatusResId = R.string.dlg_msg_details_msg_status_waiting; + msgStatusColorResId = R.color.black87; + break; + case Message.STATUS_UNSEND: + msgStatusResId = R.string.dlg_msg_details_msg_status_unsend; + msgStatusColorResId = R.color.black87; + break; + case Message.STATUS_OFFERED: + msgStatusResId = R.string.dlg_msg_details_msg_status_offered; + msgStatusColorResId = R.color.black87; + break; + case Message.STATUS_SEND_FAILED: + msgStatusResId = R.string.dlg_msg_details_msg_status_failed; + msgStatusColorResId = R.color.red500; + break; + case Message.STATUS_RECEIVED: + msgStatusResId = R.string.dlg_msg_details_msg_status_received; + msgStatusColorResId = R.color.black87; + break; + case Message.STATUS_SEND: + case Message.STATUS_SEND_DISPLAYED: + case Message.STATUS_SEND_RECEIVED: + default: + msgStatusResId = R.string.dlg_msg_details_msg_status_sent; + msgStatusColorResId = R.color.black87; + } + msgStatusTextView.setText(msgStatusResId); + msgStatusTextView.setTextColor(getContext().getResources().getColor(msgStatusColorResId)); + } + + /** + * Publishes message type information to view. + * @param view the dialog view + * @param message the message to display in dialog + */ + protected void displayMessageTypeInfo(View view, Message message) { + TextView msgTypeTextView = (TextView) view.findViewById(R.id.dlgMsgDetMsgType); + int msgTypeResId; + switch (message.getType()) { + case Message.TYPE_PRIVATE: + msgTypeResId = R.string.dlg_msg_details_msg_type_private; + break; + case Message.TYPE_FILE: + msgTypeResId = R.string.dlg_msg_details_msg_type_file; + break; + case Message.TYPE_IMAGE: + msgTypeResId = R.string.dlg_msg_details_msg_type_image; + break; + case Message.TYPE_STATUS: + msgTypeResId = R.string.dlg_msg_details_msg_type_status; + break; + case Message.TYPE_TEXT: + default: + msgTypeResId = R.string.dlg_msg_details_msg_type_text; + } + msgTypeTextView.setText(msgTypeResId); + } + + /** + * Publishes information about sending and receiving parties to view. + * @param view the dialog view + * @param message the message to display in dialog + */ + protected void displaySenderAndReceiver(View view, Message message) { + Conversation conversation = message.getConversation(); + // Get own resource name -> What about msg written on other client? + String me = conversation.getAccount().getJid().getResourcepart(); + // Get resource name of chat partner, if available + String other = (message.getCounterpart().isBareJid()) ? "" : message.getCounterpart().getResourcepart(); + Log.d("MesageDialog", "Me: " + me + ", other: " + other); + TextView sender = (TextView) view.findViewById(R.id.dlgMsgDetSender); + TextView receipient = (TextView) view.findViewById(R.id.dlgMsgDetReceipient); + + if (conversation.getMode() == Conversation.MODE_MULTI) { + // Change label of sending and receiving party to MUC terminology + TextView senderLabel = (TextView) view.findViewById(R.id.dlgMsgDetLblSender); + senderLabel.setText(R.string.dlg_msg_details_sender_nick); + TextView receipientLabel = (TextView) view.findViewById(R.id.dlgMsgDetLblReceipient); + receipientLabel.setText(R.string.dlg_msg_details_receipient_nick); + + // Get own nick for MUC + me = conversation.getMucOptions().getActualNick(); + } + if (Message.STATUS_RECEIVED == message.getStatus()) { + // Sender was chat partner, if the status is for my account received + sender.setText(other); + // Set receipient to myself in case of normal chat or private message in MUC + if (conversation.getMode() == Conversation.MODE_SINGLE || Message.TYPE_PRIVATE == message.getType()) { + receipient.setText(me); + } + } else { + sender.setText(me); + receipient.setText(other); + } + } + + /** + * Publishes information about message sent time to view. + * @param view the dialog view + * @param message the message to display in dialog + */ + protected void displayMessageSentTime(View view, Message message) { + TextView timeSent = (TextView) view.findViewById(R.id.dlgMsgDetTimeSent); + timeSent.setText(DateFormat.format("dd.MM.yyyy kk:mm:ss", new Date(message.getMergedTimeSent()))); } } diff --git a/src/main/res/layout/dialog_message_details.xml b/src/main/res/layout/dialog_message_details.xml index 67561ae7..4d63831e 100644 --- a/src/main/res/layout/dialog_message_details.xml +++ b/src/main/res/layout/dialog_message_details.xml @@ -11,7 +11,7 @@ + android:layout_alignParentEnd="true" + android:textAlignment="viewEnd" + android:gravity="end" /> + + + + + + + + @@ -63,7 +99,8 @@ android:layout_alignParentEnd="true" android:stretchColumns="1" android:background="@color/black87" - android:id="@+id/dlgMsgDetFileTable"> + android:id="@+id/dlgMsgDetFileTable" + android:visibility="gone"> @@ -91,12 +128,14 @@ + android:text="@string/dlg_msg_details_file_mime" /> @@ -111,12 +150,14 @@ + android:text="@string/dlg_msg_details_file_size" /> diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index c9724e5a..16ed5239 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -470,4 +470,25 @@ Nachrichtendetails Ok %1$s (%2$d) + Empfänger Resource: + Empfänger Nickname: + Absender Resource: + Absender Nickname: + Gesendet: + Nachrichtentyp: + Nachrichtenstatus: + Dateidetails + Mime Type + Größe + Text + Bild + Datei + Status + Privat + Gesendet + Empfangen + Wartend + In Übertragung + Angeboten + Fehlgeschlagen diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 0bcbb9c4..b3786b35 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -499,4 +499,25 @@ Message Details Ok %1$s (%2$d) + Receipient Resource: + Receipient Nick: + Sender Resource: + Sender Nick: + Time Sent: + Message Type: + Message Status: + File Details + Mime Type + Size + Text + Image + File + Status + Private + Sent + Received + Waiting + Unsend + Offered + Failed -- cgit v1.2.3