show proposal as ongoing call
This commit is contained in:
parent
f7a0d2031a
commit
48163a5604
|
@ -29,6 +29,7 @@ import eu.siacs.conversations.services.XmppConnectionService;
|
|||
import eu.siacs.conversations.utils.UIHelper;
|
||||
import eu.siacs.conversations.utils.XmppUri;
|
||||
import eu.siacs.conversations.xmpp.XmppConnection;
|
||||
import eu.siacs.conversations.xmpp.jingle.RtpCapability;
|
||||
import rocks.xmpp.addr.Jid;
|
||||
|
||||
public class Account extends AbstractEntity implements AvatarService.Avatarable {
|
||||
|
@ -426,6 +427,16 @@ public class Account extends AbstractEntity implements AvatarService.Avatarable
|
|||
return this.getSelfContact().getPresences().size();
|
||||
}
|
||||
|
||||
public int activeDevicesWithRtpCapability() {
|
||||
int i = 0;
|
||||
for(Presence presence : getSelfContact().getPresences().getPresences().values()) {
|
||||
if (RtpCapability.check(presence) != RtpCapability.Capability.NONE) {
|
||||
i++;
|
||||
}
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
public String getPgpSignature() {
|
||||
return getKey(KEY_PGP_SIGNATURE);
|
||||
}
|
||||
|
|
|
@ -120,7 +120,10 @@ import eu.siacs.conversations.utils.UIHelper;
|
|||
import eu.siacs.conversations.xmpp.XmppConnection;
|
||||
import eu.siacs.conversations.xmpp.chatstate.ChatState;
|
||||
import eu.siacs.conversations.xmpp.jingle.AbstractJingleConnection;
|
||||
import eu.siacs.conversations.xmpp.jingle.JingleConnectionManager;
|
||||
import eu.siacs.conversations.xmpp.jingle.JingleFileTransferConnection;
|
||||
import eu.siacs.conversations.xmpp.jingle.Media;
|
||||
import eu.siacs.conversations.xmpp.jingle.OngoingRtpSession;
|
||||
import eu.siacs.conversations.xmpp.jingle.RtpCapability;
|
||||
import rocks.xmpp.addr.Jid;
|
||||
|
||||
|
@ -971,7 +974,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
|
|||
menuCall.setVisible(false);
|
||||
menuOngoingCall.setVisible(false);
|
||||
} else {
|
||||
final Optional<AbstractJingleConnection.Id> ongoingRtpSession = activity.xmppConnectionService.getJingleConnectionManager().getOngoingRtpConnection(conversation.getContact());
|
||||
final Optional<OngoingRtpSession> ongoingRtpSession = activity.xmppConnectionService.getJingleConnectionManager().getOngoingRtpConnection(conversation.getContact());
|
||||
if (ongoingRtpSession.isPresent()) {
|
||||
menuOngoingCall.setVisible(true);
|
||||
menuCall.setVisible(false);
|
||||
|
@ -1267,13 +1270,22 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
|
|||
}
|
||||
|
||||
private void returnToOngoingCall() {
|
||||
final Optional<AbstractJingleConnection.Id> ongoingRtpSession = activity.xmppConnectionService.getJingleConnectionManager().getOngoingRtpConnection(conversation.getContact());
|
||||
final Optional<OngoingRtpSession> ongoingRtpSession = activity.xmppConnectionService.getJingleConnectionManager().getOngoingRtpConnection(conversation.getContact());
|
||||
if (ongoingRtpSession.isPresent()) {
|
||||
final AbstractJingleConnection.Id id = ongoingRtpSession.get();
|
||||
final OngoingRtpSession id = ongoingRtpSession.get();
|
||||
final Intent intent = new Intent(getActivity(), RtpSessionActivity.class);
|
||||
intent.putExtra(RtpSessionActivity.EXTRA_ACCOUNT, id.account.getJid().asBareJid().toEscapedString());
|
||||
intent.putExtra(RtpSessionActivity.EXTRA_WITH, id.with.toEscapedString());
|
||||
intent.putExtra(RtpSessionActivity.EXTRA_SESSION_ID, id.sessionId);
|
||||
intent.putExtra(RtpSessionActivity.EXTRA_ACCOUNT, id.getAccount().getJid().asBareJid().toEscapedString());
|
||||
intent.putExtra(RtpSessionActivity.EXTRA_WITH, id.getWith().toEscapedString());
|
||||
if (id instanceof AbstractJingleConnection.Id) {
|
||||
intent.setAction(Intent.ACTION_VIEW);
|
||||
intent.putExtra(RtpSessionActivity.EXTRA_SESSION_ID, id.getSessionId());
|
||||
} else if (id instanceof JingleConnectionManager.RtpSessionProposal) {
|
||||
if (((JingleConnectionManager.RtpSessionProposal) id).media.contains(Media.VIDEO)) {
|
||||
intent.setAction(RtpSessionActivity.ACTION_MAKE_VIDEO_CALL);
|
||||
} else {
|
||||
intent.setAction(RtpSessionActivity.ACTION_MAKE_VOICE_CALL);
|
||||
}
|
||||
}
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ import eu.siacs.conversations.utils.EmojiWrapper;
|
|||
import eu.siacs.conversations.utils.IrregularUnicodeDetector;
|
||||
import eu.siacs.conversations.utils.UIHelper;
|
||||
import eu.siacs.conversations.xmpp.jingle.AbstractJingleConnection;
|
||||
import eu.siacs.conversations.xmpp.jingle.OngoingRtpSession;
|
||||
import rocks.xmpp.addr.Jid;
|
||||
|
||||
public class ConversationAdapter extends RecyclerView.Adapter<ConversationAdapter.ConversationViewHolder> {
|
||||
|
@ -165,7 +166,7 @@ public class ConversationAdapter extends RecyclerView.Adapter<ConversationAdapte
|
|||
}
|
||||
|
||||
|
||||
final Optional<AbstractJingleConnection.Id> ongoingCall;
|
||||
final Optional<OngoingRtpSession> ongoingCall;
|
||||
if (conversation.getMode() == Conversational.MODE_MULTI) {
|
||||
ongoingCall = Optional.absent();
|
||||
} else {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package eu.siacs.conversations.xmpp.jingle;
|
||||
|
||||
import com.google.common.base.Objects;
|
||||
import com.google.common.base.Optional;
|
||||
import com.google.common.base.Preconditions;
|
||||
|
||||
import eu.siacs.conversations.entities.Account;
|
||||
|
@ -40,7 +41,7 @@ public abstract class AbstractJingleConnection {
|
|||
abstract void notifyRebound();
|
||||
|
||||
|
||||
public static class Id {
|
||||
public static class Id implements OngoingRtpSession {
|
||||
public final Account account;
|
||||
public final Jid with;
|
||||
public final String sessionId;
|
||||
|
@ -87,6 +88,21 @@ public abstract class AbstractJingleConnection {
|
|||
public int hashCode() {
|
||||
return Objects.hashCode(account.getJid(), with, sessionId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Account getAccount() {
|
||||
return account;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Jid getWith() {
|
||||
return with;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSessionId() {
|
||||
return sessionId;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -233,8 +233,8 @@ public class JingleConnectionManager extends AbstractConnectionManager {
|
|||
Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": ignoring call proposal from stranger " + id.with);
|
||||
return;
|
||||
}
|
||||
final int activeDevices = account.countPresences();
|
||||
Log.d(Config.LOGTAG, "active devices: " + activeDevices);
|
||||
final int activeDevices = account.activeDevicesWithRtpCapability();
|
||||
Log.d(Config.LOGTAG, "active devices with rtp capability: " + activeDevices);
|
||||
if (activeDevices == 0) {
|
||||
final MessagePacket reject = mXmppConnectionService.getMessageGenerator().sessionReject(from, sessionId);
|
||||
mXmppConnectionService.sendMessagePacket(account, reject);
|
||||
|
@ -353,7 +353,7 @@ public class JingleConnectionManager extends AbstractConnectionManager {
|
|||
connection.init(message);
|
||||
}
|
||||
|
||||
public Optional<AbstractJingleConnection.Id> getOngoingRtpConnection(final Contact contact) {
|
||||
public Optional<OngoingRtpSession> getOngoingRtpConnection(final Contact contact) {
|
||||
for (final Map.Entry<AbstractJingleConnection.Id, AbstractJingleConnection> entry : this.connections.entrySet()) {
|
||||
if (entry.getValue() instanceof JingleRtpConnection) {
|
||||
final AbstractJingleConnection.Id id = entry.getKey();
|
||||
|
@ -362,6 +362,17 @@ public class JingleConnectionManager extends AbstractConnectionManager {
|
|||
}
|
||||
}
|
||||
}
|
||||
synchronized (this.rtpSessionProposals) {
|
||||
for (Map.Entry<RtpSessionProposal, DeviceDiscoveryState> entry : this.rtpSessionProposals.entrySet()) {
|
||||
RtpSessionProposal proposal = entry.getKey();
|
||||
if (proposal.account == contact.getAccount() && contact.getJid().asBareJid().equals(proposal.with)) {
|
||||
final DeviceDiscoveryState preexistingState = entry.getValue();
|
||||
if (preexistingState != null && preexistingState != DeviceDiscoveryState.FAILED) {
|
||||
return Optional.of(proposal);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return Optional.absent();
|
||||
}
|
||||
|
||||
|
@ -625,7 +636,7 @@ public class JingleConnectionManager extends AbstractConnectionManager {
|
|||
}
|
||||
}
|
||||
|
||||
public static class RtpSessionProposal {
|
||||
public static class RtpSessionProposal implements OngoingRtpSession {
|
||||
public final Jid with;
|
||||
public final String sessionId;
|
||||
public final Set<Media> media;
|
||||
|
@ -660,5 +671,20 @@ public class JingleConnectionManager extends AbstractConnectionManager {
|
|||
public int hashCode() {
|
||||
return Objects.hashCode(account.getJid(), with, sessionId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Account getAccount() {
|
||||
return account;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Jid getWith() {
|
||||
return with;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSessionId() {
|
||||
return sessionId;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
package eu.siacs.conversations.xmpp.jingle;
|
||||
|
||||
import com.google.common.base.Optional;
|
||||
|
||||
import eu.siacs.conversations.entities.Account;
|
||||
import rocks.xmpp.addr.Jid;
|
||||
|
||||
public interface OngoingRtpSession {
|
||||
Account getAccount();
|
||||
Jid getWith();
|
||||
String getSessionId();
|
||||
}
|
Loading…
Reference in a new issue