AccountAdapter.java

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