do not use JMI if any rtp capable device does not support it

This commit is contained in:
Daniel Gultsch 2023-10-09 16:23:02 +02:00
parent 8f014d5525
commit c53e035935
No known key found for this signature in database
GPG key ID: F43D18AD2A0982C2
4 changed files with 31 additions and 34 deletions

View file

@ -134,20 +134,6 @@ public class Presences {
return true; return true;
} }
public boolean anySupport(final String namespace) {
synchronized (this.presences) {
if (this.presences.size() == 0) {
return true;
}
for (Presence presence : this.presences.values()) {
ServiceDiscoveryResult disco = presence.getServiceDiscoveryResult();
if (disco != null && disco.getFeatures().contains(namespace)) {
return true;
}
}
}
return false;
}
public Pair<Map<String, String>, Map<String, String>> toTypeAndNameMap() { public Pair<Map<String, String>, Map<String, String>> toTypeAndNameMap() {
Map<String, String> typeMap = new HashMap<>(); Map<String, String> typeMap = new HashMap<>();

View file

@ -64,19 +64,6 @@ import androidx.databinding.DataBindingUtil;
import com.google.common.base.Optional; import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicBoolean;
import eu.siacs.conversations.Config; import eu.siacs.conversations.Config;
import eu.siacs.conversations.R; import eu.siacs.conversations.R;
import eu.siacs.conversations.crypto.axolotl.AxolotlService; import eu.siacs.conversations.crypto.axolotl.AxolotlService;
@ -123,13 +110,11 @@ import eu.siacs.conversations.utils.Compatibility;
import eu.siacs.conversations.utils.GeoHelper; import eu.siacs.conversations.utils.GeoHelper;
import eu.siacs.conversations.utils.MessageUtils; import eu.siacs.conversations.utils.MessageUtils;
import eu.siacs.conversations.utils.NickValidityChecker; import eu.siacs.conversations.utils.NickValidityChecker;
import eu.siacs.conversations.utils.Patterns;
import eu.siacs.conversations.utils.PermissionUtils; import eu.siacs.conversations.utils.PermissionUtils;
import eu.siacs.conversations.utils.QuickLoader; import eu.siacs.conversations.utils.QuickLoader;
import eu.siacs.conversations.utils.StylingHelper; import eu.siacs.conversations.utils.StylingHelper;
import eu.siacs.conversations.utils.TimeFrameUtils; import eu.siacs.conversations.utils.TimeFrameUtils;
import eu.siacs.conversations.utils.UIHelper; import eu.siacs.conversations.utils.UIHelper;
import eu.siacs.conversations.xml.Namespace;
import eu.siacs.conversations.xmpp.Jid; import eu.siacs.conversations.xmpp.Jid;
import eu.siacs.conversations.xmpp.XmppConnection; import eu.siacs.conversations.xmpp.XmppConnection;
import eu.siacs.conversations.xmpp.chatstate.ChatState; import eu.siacs.conversations.xmpp.chatstate.ChatState;
@ -140,6 +125,19 @@ import eu.siacs.conversations.xmpp.jingle.Media;
import eu.siacs.conversations.xmpp.jingle.OngoingRtpSession; import eu.siacs.conversations.xmpp.jingle.OngoingRtpSession;
import eu.siacs.conversations.xmpp.jingle.RtpCapability; import eu.siacs.conversations.xmpp.jingle.RtpCapability;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicBoolean;
public class ConversationFragment extends XmppFragment public class ConversationFragment extends XmppFragment
implements EditMessage.KeyboardListener, implements EditMessage.KeyboardListener,
MessageAdapter.OnContactPictureLongClicked, MessageAdapter.OnContactPictureLongClicked,
@ -1611,7 +1609,7 @@ public class ConversationFragment extends XmppFragment
return; return;
} }
final Contact contact = conversation.getContact(); final Contact contact = conversation.getContact();
if (contact.getPresences().anySupport(Namespace.JINGLE_MESSAGE)) { if (RtpCapability.jmiSupport(contact)) {
triggerRtpSession(contact.getAccount(), contact.getJid().asBareJid(), action); triggerRtpSession(contact.getAccount(), contact.getJid().asBareJid(), action);
} else { } else {
final RtpCapability.Capability capability; final RtpCapability.Capability capability;

View file

@ -70,6 +70,7 @@ import eu.siacs.conversations.xmpp.jingle.ContentAddition;
import eu.siacs.conversations.xmpp.jingle.JingleConnectionManager; import eu.siacs.conversations.xmpp.jingle.JingleConnectionManager;
import eu.siacs.conversations.xmpp.jingle.JingleRtpConnection; import eu.siacs.conversations.xmpp.jingle.JingleRtpConnection;
import eu.siacs.conversations.xmpp.jingle.Media; import eu.siacs.conversations.xmpp.jingle.Media;
import eu.siacs.conversations.xmpp.jingle.RtpCapability;
import eu.siacs.conversations.xmpp.jingle.RtpEndUserState; import eu.siacs.conversations.xmpp.jingle.RtpEndUserState;
public class RtpSessionActivity extends XmppActivity public class RtpSessionActivity extends XmppActivity
@ -1484,10 +1485,8 @@ public class RtpSessionActivity extends XmppActivity
final Account account, Jid with, final RtpEndUserState state, final Set<Media> media) { final Account account, Jid with, final RtpEndUserState state, final Set<Media> media) {
final Intent intent = new Intent(Intent.ACTION_VIEW); final Intent intent = new Intent(Intent.ACTION_VIEW);
intent.putExtra(EXTRA_ACCOUNT, account.getJid().toEscapedString()); intent.putExtra(EXTRA_ACCOUNT, account.getJid().toEscapedString());
if (account.getRoster() if (RtpCapability.jmiSupport(account.getRoster()
.getContact(with) .getContact(with))) {
.getPresences()
.anySupport(Namespace.JINGLE_MESSAGE)) {
intent.putExtra(EXTRA_WITH, with.asBareJid().toEscapedString()); intent.putExtra(EXTRA_WITH, with.asBareJid().toEscapedString());
} else { } else {
intent.putExtra(EXTRA_WITH, with.toEscapedString()); intent.putExtra(EXTRA_WITH, with.toEscapedString());

View file

@ -1,9 +1,11 @@
package eu.siacs.conversations.xmpp.jingle; package eu.siacs.conversations.xmpp.jingle;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.google.common.collect.Collections2;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -77,6 +79,18 @@ public class RtpCapability {
return result; return result;
} }
// do all devices that support Rtp Call also support JMI?
public static boolean jmiSupport(final Contact contact) {
return !Collections2.transform(
Collections2.filter(
contact.getPresences().getPresences(),
p -> RtpCapability.check(p) != RtpCapability.Capability.NONE),
p -> {
ServiceDiscoveryResult disco = p.getServiceDiscoveryResult();
return disco != null && disco.getFeatures().contains(Namespace.JINGLE_MESSAGE);
}).contains(false);
}
public enum Capability { public enum Capability {
NONE, AUDIO, VIDEO; NONE, AUDIO, VIDEO;