Put more info in the exception for debugging the common crash

This commit is contained in:
Stephen Paul Weber 2022-02-21 10:48:56 -05:00
parent 1a450b8d51
commit 6d44d443ba
No known key found for this signature in database
GPG key ID: D11C2911CE519CDE
2 changed files with 13 additions and 11 deletions

View file

@ -1373,7 +1373,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
private void triggerRtpSession(final String action) {
if (activity.xmppConnectionService.getJingleConnectionManager().isBusy()) {
if (activity.xmppConnectionService.getJingleConnectionManager().isBusy() != null) {
Toast.makeText(getActivity(), R.string.only_one_call_at_a_time, Toast.LENGTH_LONG).show();
return;
}

View file

@ -94,7 +94,7 @@ public class JingleConnectionManager extends AbstractConnectionManager {
} else if (Namespace.JINGLE_APPS_RTP.equals(descriptionNamespace) && isUsingClearNet(account)) {
final boolean sessionEnded = this.terminatedSessions.asMap().containsKey(PersistableSessionId.of(id));
final boolean stranger = isWithStrangerAndStrangerNotificationsAreOff(account, id.with);
if (isBusy() || sessionEnded || stranger) {
if (isBusy() != null || sessionEnded || stranger) {
Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": rejected session with " + id.with + " because busy. sessionEnded=" + sessionEnded + ", stranger=" + stranger);
mXmppConnectionService.sendIqPacket(account, packet.generateResponse(IqPacket.TYPE.RESULT), null);
final JinglePacket sessionTermination = new JinglePacket(JinglePacket.Action.SESSION_TERMINATE, id.sessionId);
@ -121,22 +121,23 @@ public class JingleConnectionManager extends AbstractConnectionManager {
return !account.isOnion() && !mXmppConnectionService.useTorToConnect();
}
public boolean isBusy() {
public String isBusy() {
if (mXmppConnectionService.isPhoneInCall()) {
return true;
return "isPhoneInCall";
}
for (AbstractJingleConnection connection : this.connections.values()) {
if (connection instanceof JingleRtpConnection) {
if (((JingleRtpConnection) connection).isTerminated()) {
continue;
}
return true;
return "connection !isTerminated";
}
}
synchronized (this.rtpSessionProposals) {
return this.rtpSessionProposals.containsValue(DeviceDiscoveryState.DISCOVERED)
|| this.rtpSessionProposals.containsValue(DeviceDiscoveryState.SEARCHING)
|| this.rtpSessionProposals.containsValue(DeviceDiscoveryState.SEARCHING_ACKNOWLEDGED);
if (this.rtpSessionProposals.containsValue(DeviceDiscoveryState.DISCOVERED)) return "discovered";
if (this.rtpSessionProposals.containsValue(DeviceDiscoveryState.SEARCHING)) return "searching";
if (this.rtpSessionProposals.containsValue(DeviceDiscoveryState.SEARCHING_ACKNOWLEDGED)) return "searching_acknolwedged";
return null;
}
}
@ -305,7 +306,7 @@ public class JingleConnectionManager extends AbstractConnectionManager {
return;
}
final boolean stranger = isWithStrangerAndStrangerNotificationsAreOff(account, id.with);
if (isBusy() || stranger) {
if (isBusy() != null || stranger) {
writeLogMissedIncoming(account, id.with.asBareJid(), id.sessionId, serverMsgId, timestamp);
if (stranger) {
Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": ignoring call proposal from stranger " + id.with);
@ -591,12 +592,13 @@ public class JingleConnectionManager extends AbstractConnectionManager {
}
}
}
if (isBusy()) {
String busyCode = isBusy();
if (busyCode != null) {
if (hasMatchingRtpSession(account, with, media)) {
Log.d(Config.LOGTAG, "ignoring request to propose jingle session because the other party already created one for us");
return;
}
throw new IllegalStateException("There is already a running RTP session. This should have been caught by the UI");
throw new IllegalStateException("There is already a running RTP session: " + busyCode);
}
final RtpSessionProposal proposal = RtpSessionProposal.of(account, with.asBareJid(), media);
this.rtpSessionProposals.put(proposal, DeviceDiscoveryState.SEARCHING);