2019-06-03 01:16:49 +02:00
|
|
|
package org.mercury_im.messenger.ui.login;
|
|
|
|
|
|
|
|
import android.util.Log;
|
|
|
|
import android.view.LayoutInflater;
|
|
|
|
import android.view.View;
|
|
|
|
import android.view.ViewGroup;
|
|
|
|
import android.widget.Switch;
|
|
|
|
import android.widget.TextView;
|
|
|
|
|
2019-08-20 20:14:57 +02:00
|
|
|
import androidx.recyclerview.widget.DiffUtil;
|
|
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
|
|
|
2019-09-13 09:17:59 +02:00
|
|
|
import de.hdodenhof.circleimageview.CircleImageView;
|
|
|
|
|
2019-06-03 01:16:49 +02:00
|
|
|
import org.mercury_im.messenger.MercuryImApplication;
|
|
|
|
import org.mercury_im.messenger.R;
|
|
|
|
import org.mercury_im.messenger.persistence.model.AccountModel;
|
2019-08-20 20:14:57 +02:00
|
|
|
import org.mercury_im.messenger.ui.login.AccountsFragment.OnAccountListItemClickListener;
|
|
|
|
import org.mercury_im.messenger.util.AbstractDiffCallback;
|
2019-06-03 01:16:49 +02:00
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
public class AccountsRecyclerViewAdapter extends RecyclerView.Adapter<AccountsRecyclerViewAdapter.ViewHolder> {
|
|
|
|
|
2019-08-04 04:22:08 +02:00
|
|
|
private final List<AccountModel> mValues;
|
2019-08-20 20:14:57 +02:00
|
|
|
private final OnAccountListItemClickListener mListener;
|
2019-06-03 01:16:49 +02:00
|
|
|
|
2019-09-01 04:56:23 +02:00
|
|
|
public AccountsRecyclerViewAdapter(OnAccountListItemClickListener listener) {
|
|
|
|
mValues = new ArrayList<>();
|
2019-06-03 01:16:49 +02:00
|
|
|
mListener = listener;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
|
|
|
View view = LayoutInflater.from(parent.getContext())
|
|
|
|
.inflate(R.layout.recycler_view_item_account, parent, false);
|
|
|
|
return new ViewHolder(view);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onBindViewHolder(final ViewHolder holder, int position) {
|
|
|
|
AccountModel account = mValues.get(position);
|
|
|
|
holder.jid.setText(account.getJid());
|
|
|
|
holder.enabled.setChecked(account.getEnabled());
|
2019-08-20 20:14:57 +02:00
|
|
|
holder.enabled.setOnCheckedChangeListener((compoundButton, b) -> {
|
|
|
|
account.setEnabled(b);
|
|
|
|
|
|
|
|
});
|
2019-06-03 01:16:49 +02:00
|
|
|
holder.accountModel = account;
|
2019-07-03 00:56:55 +02:00
|
|
|
holder.status.setText(account.getState());
|
2019-08-20 20:14:57 +02:00
|
|
|
holder.mView.setOnClickListener(v -> {
|
|
|
|
if (null != mListener) {
|
|
|
|
// Notify the active callbacks interface (the activity, if the
|
|
|
|
// fragment is attached to one) that an item has been selected.
|
|
|
|
mListener.onAccountListItemClick(holder.accountModel);
|
2019-06-03 01:16:49 +02:00
|
|
|
}
|
|
|
|
});
|
2019-08-24 23:06:06 +02:00
|
|
|
holder.mView.setOnLongClickListener(v -> {
|
|
|
|
if (null != mListener) {
|
|
|
|
mListener.onAccountListItemLongClick(holder.accountModel);
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
});
|
2019-06-03 01:16:49 +02:00
|
|
|
}
|
|
|
|
|
2019-08-04 04:22:08 +02:00
|
|
|
public void setValues(List<AccountModel> values) {
|
2019-08-20 20:14:57 +02:00
|
|
|
DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new AccountsDiffCallback(values, mValues), true);
|
|
|
|
mValues.clear();
|
|
|
|
mValues.addAll(values);
|
|
|
|
diffResult.dispatchUpdatesTo(this);
|
2019-06-03 01:16:49 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getItemCount() {
|
|
|
|
Log.d(MercuryImApplication.TAG, "Accounts Item Count: " + mValues.size());
|
|
|
|
return mValues.size();
|
|
|
|
}
|
|
|
|
|
|
|
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
|
|
|
public AccountModel accountModel;
|
|
|
|
public final View mView;
|
|
|
|
public final CircleImageView avatar;
|
|
|
|
public final TextView jid;
|
|
|
|
public final Switch enabled;
|
2019-07-03 00:56:55 +02:00
|
|
|
public final TextView status;
|
2019-06-03 01:16:49 +02:00
|
|
|
|
|
|
|
public ViewHolder(View view) {
|
|
|
|
super(view);
|
|
|
|
mView = view;
|
|
|
|
avatar = view.findViewById(R.id.avatar_account);
|
|
|
|
jid = view.findViewById(R.id.text_account_jid);
|
|
|
|
enabled = view.findViewById(R.id.switch_account_enabled);
|
2019-07-03 00:56:55 +02:00
|
|
|
status = view.findViewById(R.id.text_account_status);
|
2019-06-03 01:16:49 +02:00
|
|
|
}
|
|
|
|
}
|
2019-08-20 20:14:57 +02:00
|
|
|
|
|
|
|
public class AccountsDiffCallback extends AbstractDiffCallback<AccountModel> {
|
|
|
|
|
|
|
|
public AccountsDiffCallback(List<AccountModel> newItems, List<AccountModel> oldItems) {
|
|
|
|
super(newItems, oldItems);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
|
|
|
|
return oldItems.get(oldItemPosition).getId() == newItems.get(newItemPosition).getId();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
|
|
|
|
AccountModel oldM = oldItems.get(oldItemPosition);
|
|
|
|
AccountModel newM = newItems.get(newItemPosition);
|
|
|
|
return oldM.equals(newM);
|
|
|
|
}
|
|
|
|
}
|
2019-06-03 01:16:49 +02:00
|
|
|
}
|