From 017164056e32c739b5202aa4911f0825676492e6 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Mon, 7 Mar 2022 13:06:05 -0500 Subject: [PATCH] Load gateways into UI --- .../conversations/ui/EnterJidDialog.java | 51 +++++++++++++++---- 1 file changed, 41 insertions(+), 10 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/ui/EnterJidDialog.java b/src/main/java/eu/siacs/conversations/ui/EnterJidDialog.java index 0e26a9e4c..d54ce3d02 100644 --- a/src/main/java/eu/siacs/conversations/ui/EnterJidDialog.java +++ b/src/main/java/eu/siacs/conversations/ui/EnterJidDialog.java @@ -150,6 +150,34 @@ public class EnterJidDialog extends DialogFragment implements OnBackendConnected binding.gatewayList.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false)); binding.gatewayList.setAdapter(gatewayListAdapter); + binding.account.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView accountSpinner, View view, int position, long id) { + XmppActivity context = (XmppActivity) getActivity(); + if (context.xmppConnectionService == null || accountJid() == null) return; + + gatewayListAdapter.clear(); + final Account account = context.xmppConnectionService.findAccountByJid(accountJid()); + + for (final Contact contact : account.getRoster().getContacts()) { + if (contact.showInRoster() && (contact.getPresences().anyIdentity("gateway", null) || contact.getPresences().anySupport("jabber:iq:gateway"))) { + context.xmppConnectionService.fetchGatewayPrompt(account, contact.getJid(), (final String prompt, String errorMessage) -> { + if (prompt == null) return; + + context.runOnUiThread(() -> { + gatewayListAdapter.add(contact, prompt); + }); + }); + } + } + } + + @Override + public void onNothingSelected(AdapterView accountSpinner) { + gatewayListAdapter.clear(); + } + }); + builder.setView(binding.getRoot()); builder.setNegativeButton(R.string.cancel, null); builder.setPositiveButton(getArguments().getString(POSITIVE_BUTTON_KEY), null); @@ -171,20 +199,23 @@ public class EnterJidDialog extends DialogFragment implements OnBackendConnected return dialog; } + protected Jid accountJid() { + try { + if (Config.DOMAIN_LOCK != null) { + return Jid.ofEscaped((String) binding.account.getSelectedItem(), Config.DOMAIN_LOCK, null); + } else { + return Jid.ofEscaped((String) binding.account.getSelectedItem()); + } + } catch (final IllegalArgumentException e) { + return null; + } + } + private void handleEnter(EnterJidDialogBinding binding, String account) { - final Jid accountJid; if (!binding.account.isEnabled() && account == null) { return; } - try { - if (Config.DOMAIN_LOCK != null) { - accountJid = Jid.ofEscaped((String) binding.account.getSelectedItem(), Config.DOMAIN_LOCK, null); - } else { - accountJid = Jid.ofEscaped((String) binding.account.getSelectedItem()); - } - } catch (final IllegalArgumentException e) { - return; - } + final Jid accountJid = accountJid(); final Jid contactJid; try { contactJid = Jid.ofEscaped(binding.jid.getText().toString());