show status messages in contact details

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/entities/Presences.java        | 14 
src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java | 24 
src/main/res/layout/activity_contact_details.xml                    | 35 
3 files changed, 56 insertions(+), 17 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/entities/Presences.java 🔗

@@ -1,8 +1,10 @@
 package eu.siacs.conversations.entities;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Hashtable;
 import java.util.Iterator;
+import java.util.List;
 
 import eu.siacs.conversations.xml.Element;
 
@@ -57,4 +59,16 @@ public class Presences {
 			return presences.containsKey(presence);
 		}
 	}
+
+	public List<String> getStatusMessages() {
+		ArrayList<String> messages = new ArrayList<>();
+		synchronized (this.presences) {
+			for(Presence presence : this.presences.values()) {
+				if (presence.message != null && !presence.message.trim().isEmpty()) {
+					messages.add(presence.message.trim());
+				}
+			}
+		}
+		return messages;
+	}
 }

src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java 🔗

@@ -42,6 +42,7 @@ import eu.siacs.conversations.crypto.axolotl.XmppAxolotlSession;
 import eu.siacs.conversations.entities.Account;
 import eu.siacs.conversations.entities.Contact;
 import eu.siacs.conversations.entities.ListItem;
+import eu.siacs.conversations.entities.Presence;
 import eu.siacs.conversations.services.XmppConnectionService.OnAccountUpdate;
 import eu.siacs.conversations.services.XmppConnectionService.OnRosterUpdate;
 import eu.siacs.conversations.utils.CryptoHelper;
@@ -107,6 +108,7 @@ public class ContactDetailsActivity extends XmppActivity implements OnAccountUpd
 	private TextView contactJidTv;
 	private TextView accountJidTv;
 	private TextView lastseen;
+	private TextView statusMessage;
 	private CheckBox send;
 	private CheckBox receive;
 	private Button addContactButton;
@@ -203,6 +205,7 @@ public class ContactDetailsActivity extends XmppActivity implements OnAccountUpd
 		contactJidTv = (TextView) findViewById(R.id.details_contactjid);
 		accountJidTv = (TextView) findViewById(R.id.details_account);
 		lastseen = (TextView) findViewById(R.id.details_lastseen);
+		statusMessage = (TextView) findViewById(R.id.status_message);
 		send = (CheckBox) findViewById(R.id.details_send_presence);
 		receive = (CheckBox) findViewById(R.id.details_receive_presence);
 		badge = (QuickContactBadge) findViewById(R.id.details_contact_badge);
@@ -310,6 +313,25 @@ public class ContactDetailsActivity extends XmppActivity implements OnAccountUpd
 			send.setOnCheckedChangeListener(null);
 			receive.setOnCheckedChangeListener(null);
 
+			List<String> statusMessages = contact.getPresences().getStatusMessages();
+			if (statusMessages.size() == 0) {
+				statusMessage.setVisibility(View.GONE);
+			} else {
+				StringBuilder builder = new StringBuilder();
+				statusMessage.setVisibility(View.VISIBLE);
+				int s = statusMessages.size();
+				for(int i = 0; i < s; ++i) {
+					if (s > 1) {
+						builder.append("• ");
+					}
+					builder.append(statusMessages.get(i));
+					if (i < s - 1) {
+						builder.append("\n");
+					}
+				}
+				statusMessage.setText(builder);
+			}
+
 			if (contact.getOption(Contact.Options.FROM)) {
 				send.setText(R.string.send_presence_updates);
 				send.setChecked(true);
@@ -342,13 +364,13 @@ public class ContactDetailsActivity extends XmppActivity implements OnAccountUpd
 				receive.setEnabled(false);
 				send.setEnabled(false);
 			}
-
 			send.setOnCheckedChangeListener(this.mOnSendCheckedChange);
 			receive.setOnCheckedChangeListener(this.mOnReceiveCheckedChange);
 		} else {
 			addContactButton.setVisibility(View.VISIBLE);
 			send.setVisibility(View.GONE);
 			receive.setVisibility(View.GONE);
+			statusMessage.setVisibility(View.GONE);
 		}
 
 		if (contact.isBlocked() && !this.showDynamicTags) {

src/main/res/layout/activity_contact_details.xml 🔗

@@ -45,26 +45,29 @@
                     android:textStyle="bold" />
 
                 <LinearLayout
+                    android:id="@+id/tags"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:orientation="vertical" >
+                    android:layout_marginTop="4dp"
+                    android:layout_marginBottom="4dp"
+                    android:orientation="horizontal">
+                </LinearLayout>
 
-                    <LinearLayout
-                        android:id="@+id/tags"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:layout_marginTop="4dp"
-                        android:layout_marginBottom="4dp"
-                        android:orientation="horizontal">
-                    </LinearLayout>
+                <TextView
+                    android:id="@+id/details_lastseen"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:textColor="@color/black54"
+                    android:textSize="?attr/TextSizeBody" />
 
-                    <TextView
-                        android:id="@+id/details_lastseen"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:textColor="@color/black54"
-                        android:textSize="?attr/TextSizeBody" />
-                </LinearLayout>
+                <TextView
+                    android:layout_marginTop="8dp"
+                    android:id="@+id/status_message"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:textColor="@color/black87"
+                    android:textStyle="italic"
+                    android:textSize="?attr/TextSizeBody" />
 
                 <Button
                     android:id="@+id/add_contact_button"