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