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.
This commit is contained in:
parent
abde1336e8
commit
af12ac91d0
|
@ -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 final PresenceGenerator mPresenceGenerator = new PresenceGenerator(this);
|
||||||
private List<Account> accounts;
|
private List<Account> accounts;
|
||||||
|
@ -4677,12 +4673,16 @@ public class XmppConnectionService extends Service {
|
||||||
public void fetchCaps(Account account, final Jid jid, final Presence presence) {
|
public void fetchCaps(Account account, final Jid jid, final Presence presence) {
|
||||||
final Pair<String, String> key = new Pair<>(presence.getHash(), presence.getVer());
|
final Pair<String, String> key = new Pair<>(presence.getHash(), presence.getVer());
|
||||||
final ServiceDiscoveryResult disco = getCachedServiceDiscoveryResult(key);
|
final ServiceDiscoveryResult disco = getCachedServiceDiscoveryResult(key);
|
||||||
|
|
||||||
if (disco != null) {
|
if (disco != null) {
|
||||||
presence.setServiceDiscoveryResult(disco);
|
presence.setServiceDiscoveryResult(disco);
|
||||||
final Contact contact = account.getRoster().getContact(jid);
|
final Contact contact = account.getRoster().getContact(jid);
|
||||||
if (contact.refreshRtpCapability()) {
|
if (contact.refreshRtpCapability()) {
|
||||||
syncRoster(account);
|
syncRoster(account);
|
||||||
}
|
}
|
||||||
|
if (disco.hasIdentity("gateway", "pstn")) {
|
||||||
|
contact.registerAsPhoneAccount(this);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
final IqPacket request = new IqPacket(IqPacket.TYPE.GET);
|
final IqPacket request = new IqPacket(IqPacket.TYPE.GET);
|
||||||
request.setTo(jid);
|
request.setTo(jid);
|
||||||
|
@ -4699,6 +4699,10 @@ public class XmppConnectionService extends Service {
|
||||||
if (presence.getVer().equals(discoveryResult.getVer())) {
|
if (presence.getVer().equals(discoveryResult.getVer())) {
|
||||||
databaseBackend.insertDiscoveryResult(discoveryResult);
|
databaseBackend.insertDiscoveryResult(discoveryResult);
|
||||||
injectServiceDiscoveryResult(a.getRoster(), presence.getHash(), presence.getVer(), 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 {
|
} else {
|
||||||
Log.d(Config.LOGTAG, a.getJid().asBareJid() + ": mismatch in caps for contact " + jid + " " + presence.getVer() + " vs " + discoveryResult.getVer());
|
Log.d(Config.LOGTAG, a.getJid().asBareJid() + ": mismatch in caps for contact " + jid + " " + presence.getVer() + " vs " + discoveryResult.getVer());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue