aboutsummaryrefslogtreecommitdiffstats
path: root/src/eu/siacs/conversations
diff options
context:
space:
mode:
Diffstat (limited to 'src/eu/siacs/conversations')
-rw-r--r--src/eu/siacs/conversations/entities/Message.java12
-rw-r--r--src/eu/siacs/conversations/ui/ConversationFragment.java72
2 files changed, 73 insertions, 11 deletions
diff --git a/src/eu/siacs/conversations/entities/Message.java b/src/eu/siacs/conversations/entities/Message.java
index b468fef7..cc6bc7c2 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 130cc303..5607c6e4 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(
@@ -382,23 +394,45 @@ public class ConversationFragment extends Fragment {
.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()