From af12ac91d02e8e95c127bae4641a724a6f94ea94 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Tue, 19 Apr 2022 08:34:17 -0500 Subject: [PATCH] Check for gateway/pstn after caps has been fetched Previously we would check for the identity at contact presence change, but the first time the contact comes online (say, during onboarding or first app use) the contact has never had service discovery done and so the identity is not known. Move the identity check to after the service discovery has certainly been done in order to be sure it works first time. --- .../services/XmppConnectionService.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 5e907effb..3cec4a495 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -237,10 +237,6 @@ public class XmppConnectionService extends Service { } } } - - if (contact.getPresences().anyIdentity("gateway", "pstn")) { - contact.registerAsPhoneAccount(this); - } }; private final PresenceGenerator mPresenceGenerator = new PresenceGenerator(this); private List accounts; @@ -4677,12 +4673,16 @@ public class XmppConnectionService extends Service { public void fetchCaps(Account account, final Jid jid, final Presence presence) { final Pair key = new Pair<>(presence.getHash(), presence.getVer()); final ServiceDiscoveryResult disco = getCachedServiceDiscoveryResult(key); + if (disco != null) { presence.setServiceDiscoveryResult(disco); final Contact contact = account.getRoster().getContact(jid); if (contact.refreshRtpCapability()) { syncRoster(account); } + if (disco.hasIdentity("gateway", "pstn")) { + contact.registerAsPhoneAccount(this); + } } else { final IqPacket request = new IqPacket(IqPacket.TYPE.GET); request.setTo(jid); @@ -4699,6 +4699,10 @@ public class XmppConnectionService extends Service { if (presence.getVer().equals(discoveryResult.getVer())) { databaseBackend.insertDiscoveryResult(discoveryResult); injectServiceDiscoveryResult(a.getRoster(), presence.getHash(), presence.getVer(), discoveryResult); + if (discoveryResult.hasIdentity("gateway", "pstn")) { + final Contact contact = account.getRoster().getContact(jid); + contact.registerAsPhoneAccount(this); + } } else { Log.d(Config.LOGTAG, a.getJid().asBareJid() + ": mismatch in caps for contact " + jid + " " + presence.getVer() + " vs " + discoveryResult.getVer()); }