Advertisement
Guest User

Untitled

a guest
Feb 26th, 2020
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.07 KB | None | 0 0
  1. package ru.hse.events.client.adapterEvent;
  2.  
  3. import android.annotation.SuppressLint;
  4. import android.graphics.Color;
  5. import android.graphics.drawable.Drawable;
  6. import android.util.Log;
  7. import android.view.LayoutInflater;
  8. import android.view.View;
  9. import android.view.ViewGroup;
  10. import android.widget.TextView;
  11.  
  12. import androidx.annotation.NonNull;
  13. import androidx.core.content.ContextCompat;
  14. import androidx.core.graphics.drawable.DrawableCompat;
  15. import androidx.recyclerview.widget.RecyclerView;
  16.  
  17. import butterknife.ButterKnife;
  18.  
  19. import java.sql.Timestamp;
  20. import java.util.ArrayList;
  21. import java.util.List;
  22.  
  23. import ru.hse.events.client.R;
  24. import ru.hse.events.client.connection.entities.Event;
  25. import ru.hse.events.client.connection.entities.Tag;
  26.  
  27. public class EventRecyclerAdapter extends RecyclerView.Adapter<BaseViewHolder> {
  28.  
  29. private static final int VIEW_TYPE_LOADING = 0;//ProgressHolder
  30. private static final int VIEW_TYPE_NORMAL = 1;//EventHolder
  31. private static final int VIEW_TYPE_DELIMITER = 2;//DelimiterHolder
  32. private boolean isLoaderVisible = false;
  33. private List<EventWithDelimiter> events;
  34. private OnEventViewListener onEventViewListener;
  35.  
  36. public EventRecyclerAdapter(List<EventWithDelimiter> events,OnEventViewListener onEventViewListener) {
  37. this.events = events;
  38. this.onEventViewListener = onEventViewListener;
  39. }
  40.  
  41. @NonNull
  42. @Override
  43. public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  44. switch (viewType) {
  45. case VIEW_TYPE_NORMAL:
  46. return new ViewHolder(
  47. LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_item_tags_down, parent, false),onEventViewListener);
  48. case VIEW_TYPE_LOADING:
  49. return new ProgressHolder(
  50. LayoutInflater.from(parent.getContext()).inflate(R.layout.item_loading, parent, false));
  51. case VIEW_TYPE_DELIMITER:
  52. return new DelimiterHolder(
  53. LayoutInflater.from(parent.getContext()).inflate(R.layout.item_delimiter, parent, false));
  54. default:
  55. return null;
  56. }
  57. }
  58.  
  59. @Override
  60. public void onBindViewHolder(@NonNull BaseViewHolder holder, int position) {
  61. holder.onBind(position);
  62. }
  63.  
  64. @Override
  65. public int getItemViewType(int position) {
  66.  
  67. if (isLoaderVisible) {
  68. if (position == events.size() - 1)
  69. return VIEW_TYPE_LOADING;
  70. else {
  71. if (events.get(position).getType() == ViewType.VIEW_TYPE_EVENT)
  72. return VIEW_TYPE_NORMAL;
  73. else return VIEW_TYPE_DELIMITER;
  74. }
  75. } else {
  76. if (events.get(position).getType() == ViewType.VIEW_TYPE_EVENT)
  77. return VIEW_TYPE_NORMAL;
  78. else return VIEW_TYPE_DELIMITER;
  79. }
  80. }
  81.  
  82. @Override
  83. public int getItemCount() {
  84. return events == null ? 0 : events.size();
  85. }
  86.  
  87. public void addItems(List<EventWithDelimiter> events) {
  88. this.events.addAll(events);
  89. notifyDataSetChanged();
  90. }
  91.  
  92. public void addLoading() {
  93. isLoaderVisible = true;
  94. EventWithDelimiter event = new EventWithDelimiter();
  95. Log.d("addLoading ", "Create new Events " + event);
  96. events.add(event);
  97.  
  98. Log.d("addLoading ", "Create new Events " + events.get(events.size() - 1));
  99. notifyItemInserted(events.size() - 1);
  100. }
  101.  
  102. public void removeLoading() {
  103.  
  104. isLoaderVisible = false;
  105. int position = events.size() - 1;
  106. EventWithDelimiter item = getItem(position);
  107. if (item != null) {
  108. events.remove(position);
  109. notifyItemRemoved(position);
  110. }
  111. }
  112.  
  113. public void clear() {
  114. events.clear();
  115. notifyDataSetChanged();
  116. }
  117.  
  118. EventWithDelimiter getItem(int position) {
  119. return events.get(position);
  120. }
  121.  
  122. public class ViewHolder extends BaseViewHolder implements View.OnClickListener{
  123.  
  124. private TextView dateStartView;
  125. private TextView dateEndView;
  126. private TextView titleView;
  127. private TextView placeNameView;
  128. private TextView tag1View;
  129. private TextView tag2View;
  130. OnEventViewListener OnEventViewListener;
  131.  
  132. public ViewHolder(@NonNull View itemView, OnEventViewListener OnEventViewListener) {
  133. super(itemView);
  134. dateStartView = itemView.findViewById(R.id.textTimeStart);
  135. dateEndView = itemView.findViewById(R.id.textTimeEnd);
  136. titleView = itemView.findViewById(R.id.text_name_event);
  137. placeNameView = itemView.findViewById(R.id.text_place_event);
  138. tag1View = itemView.findViewById(R.id.text_tag1);
  139. tag2View = itemView.findViewById(R.id.text_tag2);
  140. this.OnEventViewListener = OnEventViewListener;
  141. itemView.setOnClickListener(new View.OnClickListener() {
  142. @Override
  143. public void onClick(View v) {
  144. if (onEventViewListener != null) {
  145. int position = getAdapterPosition();
  146. if (position != RecyclerView.NO_POSITION) {
  147. onEventViewListener.onEventClick(position);
  148. }
  149. }
  150. }
  151. });
  152. }
  153. @Override
  154. public void onClick(View v) {
  155. OnEventViewListener.onEventClick(getCurrentPosition());
  156.  
  157. }
  158. @Override
  159. protected void clear() {
  160.  
  161. }
  162.  
  163. @SuppressLint("SetTextI18n")
  164. public void onBind(int position) {
  165. super.onBind(position);
  166. Event item = events.get(position).getEvent();
  167.  
  168. dateStartView.setText(getHoursMinutes(item.getDateStart()));
  169. if (item.getDateEnd() != null)
  170. dateEndView.setText(getHoursMinutes(item.getDateEnd()));
  171. else
  172. dateEndView.setText("");
  173. titleView.setText(item.getTitle());
  174. placeNameView.setText(item.getInnerAddress());
  175. addTags(item);
  176. }
  177.  
  178. private void addTags(Event event) {
  179. List<Tag> tagList = new ArrayList<>(event.getTags());
  180. if (!tagList.isEmpty()) {
  181.  
  182. tag1View.setText(tagList.get(0).getName());
  183. tag2View.setText(tagList.get(1).getName());
  184.  
  185. int firstTagColor = Color.parseColor("#" + tagList.get(0).getColor());
  186. Drawable unwrappedDrawable = ContextCompat.getDrawable(tag1View.getContext(), R.drawable.rounded_edit_text);
  187. Drawable wrappedDrawable = DrawableCompat.wrap(unwrappedDrawable);
  188. DrawableCompat.setTint(wrappedDrawable, firstTagColor);
  189. tag1View.setBackground(wrappedDrawable);
  190. tag1View.setTextColor(Color.parseColor("#" + tagList.get(0).getTextColor()));
  191.  
  192. int secondTagColor = Color.parseColor("#" + tagList.get(1).getColor());
  193. unwrappedDrawable = ContextCompat.getDrawable(tag2View.getContext(), R.drawable.rounded_edit_text);
  194. wrappedDrawable = DrawableCompat.wrap(unwrappedDrawable);
  195. DrawableCompat.setTint(wrappedDrawable, secondTagColor);
  196. tag2View.setBackground(wrappedDrawable);
  197. tag2View.setTextColor(Color.parseColor("#" + tagList.get(1).getTextColor()));
  198. }
  199. }
  200.  
  201. /**
  202. * Converts {@link Timestamp} to hh:mm format.
  203. *
  204. * @param date timestamp to format
  205. * @return time in hh:mm format
  206. */
  207. private String getHoursMinutes(Timestamp date) {
  208. StringBuilder result = new StringBuilder();
  209. int hours = date.getHours(), minutes = date.getMinutes();
  210. if (hours < 10)
  211. result.append("0");
  212. result.append(hours);
  213. result.append(":");
  214. if (minutes < 10)
  215. result.append("0");
  216. result.append(minutes);
  217. return result.toString();
  218. }
  219.  
  220. }
  221.  
  222. public class ProgressHolder extends BaseViewHolder {
  223.  
  224. ProgressHolder(View itemView) {
  225. super(itemView);
  226. ButterKnife.bind(this, itemView);
  227. }
  228.  
  229. @Override
  230. protected void clear() {
  231. }
  232. }
  233.  
  234. public class DelimiterHolder extends BaseViewHolder {
  235.  
  236. private TextView dateTextView;
  237.  
  238. public DelimiterHolder(View itemView) {
  239. super(itemView);
  240. dateTextView = itemView.findViewById(R.id.dateTextView);
  241. }
  242.  
  243. @SuppressLint("SetTextI18n")
  244. public void onBind(int position) {
  245. super.onBind(position);
  246. EventWithDelimiter item = events.get(position);
  247. dateTextView.setText(item.getDateName());
  248. }
  249.  
  250. @Override
  251. protected void clear() {
  252. }
  253. }
  254.  
  255. public interface OnEventViewListener {
  256. void onEventClick(int position);
  257. }
  258. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement