Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ru.hse.events.client.adapterEvent;
- import android.annotation.SuppressLint;
- import android.graphics.Color;
- import android.graphics.drawable.Drawable;
- import android.util.Log;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.TextView;
- import androidx.annotation.NonNull;
- import androidx.core.content.ContextCompat;
- import androidx.core.graphics.drawable.DrawableCompat;
- import androidx.recyclerview.widget.RecyclerView;
- import butterknife.ButterKnife;
- import java.sql.Timestamp;
- import java.util.ArrayList;
- import java.util.List;
- import ru.hse.events.client.R;
- import ru.hse.events.client.connection.entities.Event;
- import ru.hse.events.client.connection.entities.Tag;
- public class EventRecyclerAdapter extends RecyclerView.Adapter<BaseViewHolder> {
- private static final int VIEW_TYPE_LOADING = 0;//ProgressHolder
- private static final int VIEW_TYPE_NORMAL = 1;//EventHolder
- private static final int VIEW_TYPE_DELIMITER = 2;//DelimiterHolder
- private boolean isLoaderVisible = false;
- private List<EventWithDelimiter> events;
- private OnEventViewListener onEventViewListener;
- public EventRecyclerAdapter(List<EventWithDelimiter> events,OnEventViewListener onEventViewListener) {
- this.events = events;
- this.onEventViewListener = onEventViewListener;
- }
- @NonNull
- @Override
- public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- switch (viewType) {
- case VIEW_TYPE_NORMAL:
- return new ViewHolder(
- LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_item_tags_down, parent, false),onEventViewListener);
- case VIEW_TYPE_LOADING:
- return new ProgressHolder(
- LayoutInflater.from(parent.getContext()).inflate(R.layout.item_loading, parent, false));
- case VIEW_TYPE_DELIMITER:
- return new DelimiterHolder(
- LayoutInflater.from(parent.getContext()).inflate(R.layout.item_delimiter, parent, false));
- default:
- return null;
- }
- }
- @Override
- public void onBindViewHolder(@NonNull BaseViewHolder holder, int position) {
- holder.onBind(position);
- }
- @Override
- public int getItemViewType(int position) {
- if (isLoaderVisible) {
- if (position == events.size() - 1)
- return VIEW_TYPE_LOADING;
- else {
- if (events.get(position).getType() == ViewType.VIEW_TYPE_EVENT)
- return VIEW_TYPE_NORMAL;
- else return VIEW_TYPE_DELIMITER;
- }
- } else {
- if (events.get(position).getType() == ViewType.VIEW_TYPE_EVENT)
- return VIEW_TYPE_NORMAL;
- else return VIEW_TYPE_DELIMITER;
- }
- }
- @Override
- public int getItemCount() {
- return events == null ? 0 : events.size();
- }
- public void addItems(List<EventWithDelimiter> events) {
- this.events.addAll(events);
- notifyDataSetChanged();
- }
- public void addLoading() {
- isLoaderVisible = true;
- EventWithDelimiter event = new EventWithDelimiter();
- Log.d("addLoading ", "Create new Events " + event);
- events.add(event);
- Log.d("addLoading ", "Create new Events " + events.get(events.size() - 1));
- notifyItemInserted(events.size() - 1);
- }
- public void removeLoading() {
- isLoaderVisible = false;
- int position = events.size() - 1;
- EventWithDelimiter item = getItem(position);
- if (item != null) {
- events.remove(position);
- notifyItemRemoved(position);
- }
- }
- public void clear() {
- events.clear();
- notifyDataSetChanged();
- }
- EventWithDelimiter getItem(int position) {
- return events.get(position);
- }
- public class ViewHolder extends BaseViewHolder implements View.OnClickListener{
- private TextView dateStartView;
- private TextView dateEndView;
- private TextView titleView;
- private TextView placeNameView;
- private TextView tag1View;
- private TextView tag2View;
- OnEventViewListener OnEventViewListener;
- public ViewHolder(@NonNull View itemView, OnEventViewListener OnEventViewListener) {
- super(itemView);
- dateStartView = itemView.findViewById(R.id.textTimeStart);
- dateEndView = itemView.findViewById(R.id.textTimeEnd);
- titleView = itemView.findViewById(R.id.text_name_event);
- placeNameView = itemView.findViewById(R.id.text_place_event);
- tag1View = itemView.findViewById(R.id.text_tag1);
- tag2View = itemView.findViewById(R.id.text_tag2);
- this.OnEventViewListener = OnEventViewListener;
- itemView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (onEventViewListener != null) {
- int position = getAdapterPosition();
- if (position != RecyclerView.NO_POSITION) {
- onEventViewListener.onEventClick(position);
- }
- }
- }
- });
- }
- @Override
- public void onClick(View v) {
- OnEventViewListener.onEventClick(getCurrentPosition());
- }
- @Override
- protected void clear() {
- }
- @SuppressLint("SetTextI18n")
- public void onBind(int position) {
- super.onBind(position);
- Event item = events.get(position).getEvent();
- dateStartView.setText(getHoursMinutes(item.getDateStart()));
- if (item.getDateEnd() != null)
- dateEndView.setText(getHoursMinutes(item.getDateEnd()));
- else
- dateEndView.setText("");
- titleView.setText(item.getTitle());
- placeNameView.setText(item.getInnerAddress());
- addTags(item);
- }
- private void addTags(Event event) {
- List<Tag> tagList = new ArrayList<>(event.getTags());
- if (!tagList.isEmpty()) {
- tag1View.setText(tagList.get(0).getName());
- tag2View.setText(tagList.get(1).getName());
- int firstTagColor = Color.parseColor("#" + tagList.get(0).getColor());
- Drawable unwrappedDrawable = ContextCompat.getDrawable(tag1View.getContext(), R.drawable.rounded_edit_text);
- Drawable wrappedDrawable = DrawableCompat.wrap(unwrappedDrawable);
- DrawableCompat.setTint(wrappedDrawable, firstTagColor);
- tag1View.setBackground(wrappedDrawable);
- tag1View.setTextColor(Color.parseColor("#" + tagList.get(0).getTextColor()));
- int secondTagColor = Color.parseColor("#" + tagList.get(1).getColor());
- unwrappedDrawable = ContextCompat.getDrawable(tag2View.getContext(), R.drawable.rounded_edit_text);
- wrappedDrawable = DrawableCompat.wrap(unwrappedDrawable);
- DrawableCompat.setTint(wrappedDrawable, secondTagColor);
- tag2View.setBackground(wrappedDrawable);
- tag2View.setTextColor(Color.parseColor("#" + tagList.get(1).getTextColor()));
- }
- }
- /**
- * Converts {@link Timestamp} to hh:mm format.
- *
- * @param date timestamp to format
- * @return time in hh:mm format
- */
- private String getHoursMinutes(Timestamp date) {
- StringBuilder result = new StringBuilder();
- int hours = date.getHours(), minutes = date.getMinutes();
- if (hours < 10)
- result.append("0");
- result.append(hours);
- result.append(":");
- if (minutes < 10)
- result.append("0");
- result.append(minutes);
- return result.toString();
- }
- }
- public class ProgressHolder extends BaseViewHolder {
- ProgressHolder(View itemView) {
- super(itemView);
- ButterKnife.bind(this, itemView);
- }
- @Override
- protected void clear() {
- }
- }
- public class DelimiterHolder extends BaseViewHolder {
- private TextView dateTextView;
- public DelimiterHolder(View itemView) {
- super(itemView);
- dateTextView = itemView.findViewById(R.id.dateTextView);
- }
- @SuppressLint("SetTextI18n")
- public void onBind(int position) {
- super.onBind(position);
- EventWithDelimiter item = events.get(position);
- dateTextView.setText(item.getDateName());
- }
- @Override
- protected void clear() {
- }
- }
- public interface OnEventViewListener {
- void onEventClick(int position);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement