Load gateways into UI

This commit is contained in:
Stephen Paul Weber 2022-03-07 13:06:05 -05:00
parent 49cbe7448e
commit 017164056e
No known key found for this signature in database
GPG Key ID: D11C2911CE519CDE
1 changed files with 41 additions and 10 deletions

View File

@ -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());