Mercury-IM/app/src/main/java/org/mercury_im/messenger/ui/chatlist/ChatListRecyclerViewAdapter...

138 lines
4.3 KiB
Java
Raw Normal View History

2019-09-01 04:56:23 +02:00
package org.mercury_im.messenger.ui.chatlist;
2019-09-23 23:20:43 +02:00
import android.content.Context;
import android.content.Intent;
2019-09-01 04:56:23 +02:00
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
2019-09-01 04:56:23 +02:00
import android.view.View;
import android.view.ViewGroup;
2019-09-25 22:50:52 +02:00
import android.widget.ImageView;
2019-09-01 04:56:23 +02:00
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.view.ActionMode;
2019-09-01 04:56:23 +02:00
import androidx.recyclerview.widget.RecyclerView;
import org.mercury_im.messenger.R;
2019-12-06 15:52:50 +01:00
import org.mercury_im.messenger.entity.chat.DirectChat;
import org.mercury_im.messenger.ui.avatar.AvatarDrawable;
2019-09-23 23:20:43 +02:00
import org.mercury_im.messenger.ui.chat.ChatActivity;
import org.mercury_im.messenger.ui.util.AbstractRecyclerViewAdapter;
2019-09-25 22:50:52 +02:00
import org.mercury_im.messenger.util.ColorUtil;
2019-12-22 05:47:17 +01:00
import java.util.logging.Level;
import java.util.logging.Logger;
2019-09-25 22:50:52 +02:00
import butterknife.BindView;
import butterknife.ButterKnife;
2019-09-01 04:56:23 +02:00
public class ChatListRecyclerViewAdapter
2019-12-06 15:52:50 +01:00
extends AbstractRecyclerViewAdapter<DirectChat, ChatListRecyclerViewAdapter.ChatHolder> {
2019-09-01 04:56:23 +02:00
public ChatListRecyclerViewAdapter() {
2019-09-02 01:06:17 +02:00
super(new ChatMessageDiffCallback(true));
2019-09-01 04:56:23 +02:00
}
@NonNull
@Override
2019-09-02 01:06:17 +02:00
public ChatHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
2019-09-23 23:20:43 +02:00
.inflate(R.layout.list_item_chat, parent, false);
return new ChatHolder(parent.getContext(), view);
2019-09-01 04:56:23 +02:00
}
@Override
2019-09-02 01:06:17 +02:00
public void onBindViewHolder(@NonNull ChatHolder holder, int position) {
2019-12-22 05:47:17 +01:00
Logger.getAnonymousLogger().log(Level.INFO, "BIND");
2019-12-06 15:52:50 +01:00
DirectChat model = getItemAt(position);
String name = model.getPeer().getDisplayName();
String address = model.getPeer().getAddress();
holder.nameView.setText(name);
holder.avatarView.setImageDrawable(new AvatarDrawable(name, address));
2019-09-23 23:20:43 +02:00
holder.itemView.setOnClickListener(view -> {
Intent intent = new Intent(holder.context, ChatActivity.class);
2019-12-06 15:52:50 +01:00
intent.putExtra(ChatActivity.EXTRA_JID, model.getPeer().getAddress());
intent.putExtra(ChatActivity.EXTRA_ACCOUNT, model.getPeer().getAccount().getId().toString());
2019-09-23 23:20:43 +02:00
holder.context.startActivity(intent);
});
holder.itemView.setOnLongClickListener(v -> {
((AppCompatActivity) v.getContext()).startSupportActionMode(actionModeCallback);
return true;
});
2019-09-01 04:56:23 +02:00
}
2019-09-02 01:06:17 +02:00
public static class ChatHolder extends RecyclerView.ViewHolder {
2019-09-01 04:56:23 +02:00
@BindView(R.id.chat_name)
TextView nameView;
@BindView(R.id.chat_message)
TextView chatMessage;
@BindView(R.id.chat_time)
TextView chatTime;
@BindView(R.id.chat_avatar)
2019-09-25 22:50:52 +02:00
ImageView avatarView;
2019-09-01 04:56:23 +02:00
2019-09-23 23:20:43 +02:00
Context context;
public ChatHolder(Context context, @NonNull View itemView) {
2019-09-01 04:56:23 +02:00
super(itemView);
2019-09-23 23:20:43 +02:00
this.context = context;
2019-09-02 01:06:17 +02:00
ButterKnife.bind(this, itemView);
}
}
2019-12-06 15:52:50 +01:00
private static class ChatMessageDiffCallback extends AbstractDiffCallback<DirectChat> {
2019-09-02 01:06:17 +02:00
ChatMessageDiffCallback(boolean detectMoves) {
2019-09-02 01:06:17 +02:00
super(detectMoves);
}
@Override
2019-12-06 15:52:50 +01:00
public boolean areItemsTheSame(DirectChat oldItem, DirectChat newItem) {
return oldItem.getId() == newItem.getId();
2019-09-01 04:56:23 +02:00
}
2019-09-02 01:06:17 +02:00
@Override
2019-12-06 15:52:50 +01:00
public boolean areContentsTheSame(DirectChat oldItem, DirectChat newItem) {
2019-12-22 05:47:17 +01:00
return oldItem.getPeer().getName().equals(newItem.getPeer().getName());
2019-09-01 04:56:23 +02:00
}
}
private androidx.appcompat.view.ActionMode.Callback actionModeCallback = new androidx.appcompat.view.ActionMode.Callback() {
private boolean multiSelect = false;
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.actionmode_chatlist, menu);
multiSelect = true;
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
mode.finish();
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
notifyDataSetChanged();
}
};
2019-09-01 04:56:23 +02:00
}