AccountAdapter.java

  1package eu.siacs.conversations.ui.adapter;
  2
  3import android.view.LayoutInflater;
  4import android.view.View;
  5import android.view.ViewGroup;
  6import android.widget.ArrayAdapter;
  7
  8import androidx.annotation.NonNull;
  9import androidx.databinding.DataBindingUtil;
 10
 11import java.util.List;
 12
 13import eu.siacs.conversations.Config;
 14import eu.siacs.conversations.R;
 15import eu.siacs.conversations.databinding.AccountRowBinding;
 16import eu.siacs.conversations.entities.Account;
 17import eu.siacs.conversations.ui.XmppActivity;
 18import eu.siacs.conversations.ui.util.AvatarWorkerTask;
 19import eu.siacs.conversations.ui.util.StyledAttributes;
 20
 21public class AccountAdapter extends ArrayAdapter<Account> {
 22
 23    private final XmppActivity activity;
 24    private final boolean showStateButton;
 25
 26    public AccountAdapter(XmppActivity activity, List<Account> objects, boolean showStateButton) {
 27        super(activity, 0, objects);
 28        this.activity = activity;
 29        this.showStateButton = showStateButton;
 30    }
 31
 32    public AccountAdapter(XmppActivity activity, List<Account> objects) {
 33        super(activity, 0, objects);
 34        this.activity = activity;
 35        this.showStateButton = true;
 36    }
 37
 38    @Override
 39    public View getView(int position, View view, @NonNull ViewGroup parent) {
 40        final Account account = getItem(position);
 41        final ViewHolder viewHolder;
 42        if (view == null) {
 43            AccountRowBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.account_row, parent, false);
 44            view = binding.getRoot();
 45            viewHolder = new ViewHolder(binding);
 46            view.setTag(viewHolder);
 47        } else {
 48            viewHolder = (ViewHolder) view.getTag();
 49        }
 50        if (Config.DOMAIN_LOCK != null) {
 51            viewHolder.binding.accountJid.setText(account.getJid().getLocal());
 52        } else {
 53            viewHolder.binding.accountJid.setText(account.getJid().asBareJid().toEscapedString());
 54        }
 55        AvatarWorkerTask.loadAvatar(account, viewHolder.binding.accountImage, R.dimen.avatar);
 56        viewHolder.binding.accountStatus.setText(getContext().getString(account.getStatus().getReadableId()));
 57        switch (account.getStatus()) {
 58            case ONLINE:
 59                viewHolder.binding.accountStatus.setTextColor(StyledAttributes.getColor(activity, R.attr.TextColorOnline));
 60                break;
 61            case DISABLED:
 62            case LOGGED_OUT:
 63            case CONNECTING:
 64                viewHolder.binding.accountStatus.setTextColor(StyledAttributes.getColor(activity, android.R.attr.textColorSecondary));
 65                break;
 66            default:
 67                viewHolder.binding.accountStatus.setTextColor(StyledAttributes.getColor(activity, R.attr.TextColorError));
 68                break;
 69        }
 70        final boolean isDisabled = (account.getStatus() == Account.State.DISABLED);
 71        viewHolder.binding.tglAccountStatus.setOnCheckedChangeListener(null);
 72        viewHolder.binding.tglAccountStatus.setChecked(!isDisabled);
 73        if (this.showStateButton) {
 74            viewHolder.binding.tglAccountStatus.setVisibility(View.VISIBLE);
 75        } else {
 76            viewHolder.binding.tglAccountStatus.setVisibility(View.GONE);
 77        }
 78        viewHolder.binding.tglAccountStatus.setOnCheckedChangeListener((compoundButton, b) -> {
 79            if (b == isDisabled && activity instanceof OnTglAccountState) {
 80                ((OnTglAccountState) activity).onClickTglAccountState(account, b);
 81            }
 82        });
 83        return view;
 84    }
 85
 86    private static class ViewHolder {
 87        private final AccountRowBinding binding;
 88
 89        private ViewHolder(AccountRowBinding binding) {
 90            this.binding = binding;
 91        }
 92    }
 93
 94
 95
 96    public interface OnTglAccountState {
 97        void onClickTglAccountState(Account account, boolean state);
 98    }
 99
100}