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}