From 83e919f8afbb167b7e32e9e9ff246d09e291b58b Mon Sep 17 00:00:00 2001 From: iNPUTmice Date: Wed, 4 Jun 2014 21:40:17 +0200 Subject: [PATCH] experimental gui to display read status --- res/layout/message_status.xml | 49 +++++++++++++ .../siacs/conversations/entities/Message.java | 12 ++++ .../ui/ConversationFragment.java | 72 ++++++++++++++++--- 3 files changed, 122 insertions(+), 11 deletions(-) create mode 100644 res/layout/message_status.xml diff --git a/res/layout/message_status.xml b/res/layout/message_status.xml new file mode 100644 index 000000000..fd8890eab --- /dev/null +++ b/res/layout/message_status.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/eu/siacs/conversations/entities/Message.java b/src/eu/siacs/conversations/entities/Message.java index b468fef76..cc6bc7c26 100644 --- a/src/eu/siacs/conversations/entities/Message.java +++ b/src/eu/siacs/conversations/entities/Message.java @@ -32,6 +32,7 @@ public class Message extends AbstractEntity { public static final int TYPE_TEXT = 0; public static final int TYPE_IMAGE = 1; public static final int TYPE_AUDIO = 2; + public static final int TYPE_STATUS = 3; public static String CONVERSATION = "conversationUuid"; public static String COUNTERPART = "counterpart"; @@ -54,6 +55,10 @@ public class Message extends AbstractEntity { protected transient Conversation conversation = null; protected transient JingleConnection jingleConnection = null; + + private Message() { + + } public Message(Conversation conversation, String body, int encryption) { this(java.util.UUID.randomUUID().toString(), conversation.getUuid(), @@ -205,4 +210,11 @@ public class Message extends AbstractEntity { public JingleConnection getJingleConnection() { return this.jingleConnection; } + + public static Message createStatusMessage(Conversation conversation) { + Message message = new Message(); + message.setType(Message.TYPE_STATUS); + message.setConversation(conversation); + return message; + } } diff --git a/src/eu/siacs/conversations/ui/ConversationFragment.java b/src/eu/siacs/conversations/ui/ConversationFragment.java index 130cc3033..5607c6e48 100644 --- a/src/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/eu/siacs/conversations/ui/ConversationFragment.java @@ -170,15 +170,18 @@ public class ConversationFragment extends Fragment { private static final int SENT = 0; private static final int RECIEVED = 1; + private static final int STATUS = 2; @Override public int getViewTypeCount() { - return 2; + return 3; } @Override public int getItemViewType(int position) { - if (getItem(position).getStatus() <= Message.STATUS_RECIEVED) { + if (getItem(position).getType() == Message.TYPE_STATUS) { + return STATUS; + } else if (getItem(position).getStatus() <= Message.STATUS_RECIEVED) { return RECIEVED; } else { return SENT; @@ -360,6 +363,15 @@ public class ConversationFragment extends Fragment { viewHolder.contact_picture = (ImageView) view .findViewById(R.id.message_photo); viewHolder.contact_picture.setImageBitmap(selfBitmap); + viewHolder.indicator = (ImageView) view + .findViewById(R.id.security_indicator); + viewHolder.image = (ImageView) view + .findViewById(R.id.message_image); + viewHolder.messageBody = (TextView) view + .findViewById(R.id.message_body); + viewHolder.time = (TextView) view + .findViewById(R.id.message_time); + view.setTag(viewHolder); break; case RECIEVED: view = (View) inflater.inflate( @@ -381,24 +393,46 @@ public class ConversationFragment extends Fragment { getActivity() .getApplicationContext())); + } + viewHolder.indicator = (ImageView) view + .findViewById(R.id.security_indicator); + viewHolder.image = (ImageView) view + .findViewById(R.id.message_image); + viewHolder.messageBody = (TextView) view + .findViewById(R.id.message_body); + viewHolder.time = (TextView) view + .findViewById(R.id.message_time); + view.setTag(viewHolder); + break; + case STATUS: + view = (View) inflater.inflate( + R.layout.message_status, null); + viewHolder.contact_picture = (ImageView) view + .findViewById(R.id.message_photo); + if (item.getConversation().getMode() == Conversation.MODE_SINGLE) { + + viewHolder.contact_picture + .setImageBitmap(mBitmapCache.get( + item.getConversation().getName( + useSubject), item + .getConversation() + .getContact(), + getActivity() + .getApplicationContext())); + } break; default: viewHolder = null; break; } - viewHolder.indicator = (ImageView) view - .findViewById(R.id.security_indicator); - viewHolder.image = (ImageView) view - .findViewById(R.id.message_image); - viewHolder.messageBody = (TextView) view - .findViewById(R.id.message_body); - viewHolder.time = (TextView) view - .findViewById(R.id.message_time); - view.setTag(viewHolder); } else { viewHolder = (ViewHolder) view.getTag(); } + + if (type == STATUS) { + return view; + } if (type == RECIEVED) { if (item.getConversation().getMode() == Conversation.MODE_MULTI) { @@ -620,6 +654,7 @@ public class ConversationFragment extends Fragment { } this.messageList.clear(); this.messageList.addAll(this.conversation.getMessages()); + updateStatusMessages(); this.messageListAdapter.notifyDataSetChanged(); if (conversation.getMode() == Conversation.MODE_SINGLE) { if (messageList.size() >= 1) { @@ -649,6 +684,21 @@ public class ConversationFragment extends Fragment { } } } + + protected void updateStatusMessages() { + if (conversation.getMode() == Conversation.MODE_SINGLE) { + for(int i = this.messageList.size() - 1; i >= 0; --i) { + if (this.messageList.get(i).getStatus() == Message.STATUS_RECIEVED) { + return; + } else { + if (this.messageList.get(i).getStatus() == Message.STATUS_SEND_DISPLAYED) { + this.messageList.add(i+1, Message.createStatusMessage(conversation)); + return; + } + } + } + } + } protected void makeFingerprintWarning(int latestEncryption) { final LinearLayout fingerprintWarning = (LinearLayout) getView()