package com.xabber.android.ui.dialog; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.entity.AccountJid; import com.xabber.android.data.entity.UserJid; import com.xabber.android.data.roster.RosterContact; import com.xabber.android.data.roster.RosterManager; import com.xabber.android.ui.adapter.AccountChooseAdapter; import java.util.ArrayList; import java.util.Collection; public class AccountChooseDialogFragment extends DialogFragment implements DialogInterface.OnClickListener { public static final String ARGUMENT_USER = "com.xabber.android.ui.dialog.AccountChooseDialogFragment.ARGUMENT_USER"; public static final String ARGUMENT_TEXT = "com.xabber.android.ui.dialog.AccountChooseDialogFragment.ARGUMENT_TEXT"; UserJid user; private String text; private Adapter adapter; public static DialogFragment newInstance(UserJid user, String text) { AccountChooseDialogFragment fragment = new AccountChooseDialogFragment(); Bundle arguments = new Bundle(); arguments.putParcelable(ARGUMENT_USER, user); arguments.putString(ARGUMENT_TEXT, text); fragment.setArguments(arguments); return fragment; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Bundle args = getArguments(); user = args.getParcelable(ARGUMENT_USER); text = args.getString(ARGUMENT_TEXT, null); adapter = new Adapter(getActivity()); return new AlertDialog.Builder(getActivity()) .setSingleChoiceItems(adapter, -1, this) .create(); } @Override public void onClick(DialogInterface dialog, int which) { AccountJid account = (AccountJid) adapter.getItem(which); OnChooseListener listener = (OnChooseListener) getActivity(); listener.onChoose(account, user, text); } private class Adapter extends AccountChooseAdapter { public Adapter(Activity activity) { super(activity); ArrayList<AccountJid> available = new ArrayList<>(); Collection<AccountJid> enabledAccounts = AccountManager.getInstance().getEnabledAccounts(); RosterManager rosterManager = RosterManager.getInstance(); for (AccountJid accountJid : enabledAccounts) { RosterContact rosterContact = rosterManager.getRosterContact(accountJid, user); if (rosterContact != null && rosterContact.isEnabled()) { available.add(accountJid); } } if (!available.isEmpty()) { accounts.clear(); accounts.addAll(available); } } @Override public View getView(int position, View convertView, ViewGroup parent) { return getDropDownView(position, convertView, parent); } } public interface OnChooseListener { void onChoose(AccountJid account, UserJid user, String text); } }