diff options
author | Daniel Gultsch <daniel@gultsch.de> | 2016-04-23 12:19:00 +0200 |
---|---|---|
committer | Daniel Gultsch <daniel@gultsch.de> | 2016-04-23 12:19:00 +0200 |
commit | a9c17681077c82b7095aa62b10f4f78c7a467e60 (patch) | |
tree | cf9c47391bbc921798d1881e6b9cb41795952e75 /src | |
parent | 1901abd05fc051b776e2bbb10295f936408a0843 (diff) |
show status messages in contact details
Diffstat (limited to 'src')
3 files changed, 56 insertions, 17 deletions
diff --git a/src/main/java/eu/siacs/conversations/entities/Presences.java b/src/main/java/eu/siacs/conversations/entities/Presences.java index 813eda7a..5fe10de0 100644 --- a/src/main/java/eu/siacs/conversations/entities/Presences.java +++ b/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; + } } diff --git a/src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java b/src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java index 308bc742..b4a5277c 100644 --- a/src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java +++ b/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) { diff --git a/src/main/res/layout/activity_contact_details.xml b/src/main/res/layout/activity_contact_details.xml index c35f26bb..9fd4f35a 100644 --- a/src/main/res/layout/activity_contact_details.xml +++ b/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" |