diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml
index 29356fb21ecf078357fa8100e5d35b528fd7d8bb..95eb5139c2637673c9018cd34cc4f1d384b6ad6a 100644
--- a/src/main/AndroidManifest.xml
+++ b/src/main/AndroidManifest.xml
@@ -34,7 +34,7 @@
-
+
-
+
diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
index 2c6e2c863020eefb0e82f1b1a965aa6b4eef0639..0f47f693654a2d8076dd7f60fe202b5ccd361419 100644
--- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
+++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
@@ -1273,11 +1273,17 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
private void triggerRtpSession(final String action) {
+ if (activity.xmppConnectionService.getJingleConnectionManager().isBusy()) {
+ Toast.makeText(getActivity(), R.string.only_one_call_at_a_time, Toast.LENGTH_LONG).show();
+ return;
+ }
final Contact contact = conversation.getContact();
final Intent intent = new Intent(activity, RtpSessionActivity.class);
intent.setAction(action);
intent.putExtra(RtpSessionActivity.EXTRA_ACCOUNT, contact.getAccount().getJid().toEscapedString());
intent.putExtra(RtpSessionActivity.EXTRA_WITH, contact.getJid().asBareJid().toEscapedString());
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
diff --git a/src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java b/src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java
index c3ef71c80c91da8c03dbe5bd0629f72576274c9f..f0cae4e5323d3cf1a0ba7e5bd5d4bc5716c1f044 100644
--- a/src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java
@@ -78,6 +78,7 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe
@Override
public void onCreate(Bundle savedInstanceState) {
+ Log.d(Config.LOGTAG, this.getClass().getName() + ".onCreate()");
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
@@ -87,12 +88,6 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe
setSupportActionBar(binding.toolbar);
}
- @Override
- public void onStart() {
- super.onStart();
- Log.d(Config.LOGTAG, "RtpSessionActivity.onStart()");
- }
-
private void endCall(View view) {
endCall();
}
@@ -145,7 +140,7 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe
if (isMicrophoneAvailable) {
return;
}
- runOnUiThread(() -> Toast.makeText(this, R.string.microphone_unavailable, Toast.LENGTH_SHORT).show());
+ runOnUiThread(() -> Toast.makeText(this, R.string.microphone_unavailable, Toast.LENGTH_LONG).show());
}
).start();
}
@@ -206,6 +201,7 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe
@Override
public void onNewIntent(final Intent intent) {
+ Log.d(Config.LOGTAG, this.getClass().getName() + ".onNewIntent()");
super.onNewIntent(intent);
setIntent(intent);
if (xmppConnectionService == null) {
diff --git a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnectionManager.java b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnectionManager.java
index 2846fbfaf2470e57ffb6b5ec58d19d96985ba377..0dfb65c97103ee17a072b3705168603e257acde0 100644
--- a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnectionManager.java
+++ b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnectionManager.java
@@ -104,7 +104,7 @@ public class JingleConnectionManager extends AbstractConnectionManager {
return account.isOnion() || mXmppConnectionService.useTorToConnect();
}
- private boolean isBusy() {
+ public boolean isBusy() {
for (AbstractJingleConnection connection : this.connections.values()) {
if (connection instanceof JingleRtpConnection) {
return true;
@@ -403,6 +403,9 @@ public class JingleConnectionManager extends AbstractConnectionManager {
}
}
}
+ if (isBusy()) {
+ throw new IllegalStateException("There is already a running RTP session. This should have been caught by the UI");
+ }
final RtpSessionProposal proposal = RtpSessionProposal.of(account, with.asBareJid(), media);
this.rtpSessionProposals.put(proposal, DeviceDiscoveryState.SEARCHING);
mXmppConnectionService.notifyJingleRtpConnectionUpdate(
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 63a991e761944c4df22babb0ed2eccc8e62f09bd..358d768dd4e6b26c186cbe7e7d655eab6c38e428 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -915,6 +915,7 @@
Audio call
Video call
Your microphone is unavailable
+ You can only have one call at a time.
- View %1$d Participant
- View %1$d Participants