use dnd as overriding status

This commit is contained in:
Daniel Gultsch 2016-06-30 23:08:55 +02:00
parent 91c3732c63
commit 30110431ba
4 changed files with 15 additions and 15 deletions

View File

@ -148,7 +148,7 @@ public class Contact implements ListItem, Blockable {
for (final String group : getGroups()) { for (final String group : getGroups()) {
tags.add(new Tag(group, UIHelper.getColorForName(group))); tags.add(new Tag(group, UIHelper.getColorForName(group)));
} }
Presence.Status status = getMostAvailableStatus(); Presence.Status status = getShownStatus();
if (status != Presence.Status.OFFLINE) { if (status != Presence.Status.OFFLINE) {
tags.add(UIHelper.getTagForStatus(context, status)); tags.add(UIHelper.getTagForStatus(context, status));
} }
@ -237,13 +237,8 @@ public class Contact implements ListItem, Blockable {
this.resetOption(Options.PENDING_SUBSCRIPTION_REQUEST); this.resetOption(Options.PENDING_SUBSCRIPTION_REQUEST);
} }
public Presence.Status getMostAvailableStatus() { public Presence.Status getShownStatus() {
Presence p = this.presences.getMostAvailablePresence(); return this.presences.getShownStatus();
if (p == null) {
return Presence.Status.OFFLINE;
}
return p.getStatus();
} }
public boolean setPhotoUri(String uri) { public boolean setPhotoUri(String uri) {

View File

@ -34,12 +34,19 @@ public class Presences {
} }
} }
public Presence getMostAvailablePresence() { public Presence.Status getShownStatus() {
Presence.Status status = Presence.Status.OFFLINE;
synchronized (this.presences) { synchronized (this.presences) {
if (presences.size() < 1) { return null; } for(Presence p : presences.values()) {
return Collections.min(presences.values()); if (p.getStatus() == Presence.Status.DND) {
return p.getStatus();
} else if (p.getStatus().compareTo(status) < 0){
status = p.getStatus();
} }
} }
}
return status;
}
public int size() { public int size() {
synchronized (this.presences) { synchronized (this.presences) {

View File

@ -1083,7 +1083,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
if (activity.useSendButtonToIndicateStatus() && c != null if (activity.useSendButtonToIndicateStatus() && c != null
&& c.getAccount().getStatus() == Account.State.ONLINE) { && c.getAccount().getStatus() == Account.State.ONLINE) {
if (c.getMode() == Conversation.MODE_SINGLE) { if (c.getMode() == Conversation.MODE_SINGLE) {
status = c.getContact().getMostAvailableStatus(); status = c.getContact().getShownStatus();
} else { } else {
status = c.getMucOptions().online() ? Presence.Status.ONLINE : Presence.Status.OFFLINE; status = c.getMucOptions().online() ? Presence.Status.ONLINE : Presence.Status.OFFLINE;
} }

View File

@ -56,7 +56,6 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.concurrent.RunnableFuture;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import eu.siacs.conversations.Config; import eu.siacs.conversations.Config;
@ -893,8 +892,7 @@ public class StartConversationActivity extends XmppActivity implements OnRosterU
for (Account account : xmppConnectionService.getAccounts()) { for (Account account : xmppConnectionService.getAccounts()) {
if (account.getStatus() != Account.State.DISABLED) { if (account.getStatus() != Account.State.DISABLED) {
for (Contact contact : account.getRoster().getContacts()) { for (Contact contact : account.getRoster().getContacts()) {
Presence p = contact.getPresences().getMostAvailablePresence(); Presence.Status s = contact.getShownStatus();
Presence.Status s = p == null ? Presence.Status.OFFLINE : p.getStatus();
if (contact.showInRoster() && contact.match(this, needle) if (contact.showInRoster() && contact.match(this, needle)
&& (!this.mHideOfflineContacts && (!this.mHideOfflineContacts
|| (needle != null && !needle.trim().isEmpty()) || (needle != null && !needle.trim().isEmpty())