Added Android code
[wl-app.git] / Android / folioreader / src / main / java / com / folioreader / ui / folio / adapter / HighlightAdapter.java
1 package com.folioreader.ui.folio.adapter;
2
3 import android.content.Context;
4 import android.support.v4.content.ContextCompat;
5 import android.support.v7.app.AppCompatActivity;
6 import android.support.v7.widget.RecyclerView;
7 import android.text.Html;
8 import android.view.LayoutInflater;
9 import android.view.View;
10 import android.view.ViewGroup;
11 import android.widget.FrameLayout;
12 import android.widget.ImageView;
13 import android.widget.LinearLayout;
14 import android.widget.RelativeLayout;
15 import android.widget.TextView;
16
17 import com.folioreader.Config;
18 import com.folioreader.R;
19 import com.folioreader.model.HighlightImpl;
20 import com.folioreader.util.AppUtil;
21 import com.folioreader.util.UiUtil;
22 import com.folioreader.view.UnderlinedTextView;
23
24 import java.util.List;
25
26 /**
27  * @author gautam chibde on 16/6/17.
28  */
29
30 public class HighlightAdapter extends RecyclerView.Adapter<HighlightAdapter.HighlightHolder> {
31     private List<HighlightImpl> highlights;
32     private HighLightAdapterCallback callback;
33     private Context context;
34     private  Config config;
35
36     public HighlightAdapter(Context context, List<HighlightImpl> highlights, HighLightAdapterCallback callback, Config config) {
37         this.context = context;
38         this.highlights = highlights;
39         this.callback = callback;
40         this.config = config;
41     }
42
43     @Override
44     public HighlightHolder onCreateViewHolder(ViewGroup parent, int viewType) {
45         return new HighlightHolder(LayoutInflater.from(parent.getContext())
46                 .inflate(R.layout.row_highlight, parent, false));
47     }
48
49     @Override
50     public void onBindViewHolder(final HighlightHolder holder, final int position) {
51
52         holder.container.postDelayed(new Runnable() {
53             @Override
54             public void run() {
55                 ((AppCompatActivity) context).runOnUiThread(new Runnable() {
56                     @Override
57                     public void run() {
58                         holder.container.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,FrameLayout.LayoutParams.WRAP_CONTENT));
59                     }
60                 });
61             }
62         }, 10);
63
64         holder.content.setText(Html.fromHtml(getItem(position).getContent()));
65         UiUtil.setBackColorToTextView(holder.content,
66                 getItem(position).getType());
67         holder.date.setText(AppUtil.formatDate(getItem(position).getDate()));
68         holder.container.setOnClickListener(new View.OnClickListener() {
69             @Override
70             public void onClick(View v) {
71                 callback.onItemClick(getItem(position));
72             }
73         });
74         holder.delete.setOnClickListener(new View.OnClickListener() {
75             @Override
76             public void onClick(View v) {
77                 callback.deleteHighlight(getItem(position).getId());
78                 highlights.remove(position);
79                 notifyDataSetChanged();
80
81             }
82         });
83         holder.editNote.setOnClickListener(new View.OnClickListener() {
84             @Override
85             public void onClick(View v) {
86                 callback.editNote(getItem(position), position);
87             }
88         });
89         if (getItem(position).getNote() != null) {
90             if (getItem(position).getNote().isEmpty()) {
91                 holder.note.setVisibility(View.GONE);
92             } else {
93                 holder.note.setVisibility(View.VISIBLE);
94                 holder.note.setText(getItem(position).getNote());
95             }
96         } else {
97             holder.note.setVisibility(View.GONE);
98         }
99         holder.container.postDelayed(new Runnable() {
100             @Override
101             public void run() {
102                 final int height = holder.container.getHeight();
103                 ((AppCompatActivity) context).runOnUiThread(new Runnable() {
104                     @Override
105                     public void run() {
106                         ViewGroup.LayoutParams params =
107                                 holder.swipeLinearLayout.getLayoutParams();
108                         params.height = height;
109                         holder.swipeLinearLayout.setLayoutParams(params);
110                     }
111                 });
112             }
113         }, 30);
114         if (config.isNightMode()) {
115             holder.container.setBackgroundColor(ContextCompat.getColor(context,
116                     R.color.black));
117             holder.note.setTextColor(ContextCompat.getColor(context,
118                     R.color.white));
119             holder.date.setTextColor(ContextCompat.getColor(context,
120                     R.color.white));
121             holder.content.setTextColor(ContextCompat.getColor(context,
122                     R.color.white));
123         } else {
124             holder.container.setBackgroundColor(ContextCompat.getColor(context,
125                     R.color.white));
126             holder.note.setTextColor(ContextCompat.getColor(context,
127                     R.color.black));
128             holder.date.setTextColor(ContextCompat.getColor(context,
129                     R.color.black));
130             holder.content.setTextColor(ContextCompat.getColor(context,
131                     R.color.black));
132         }
133     }
134
135     private HighlightImpl getItem(int position) {
136         return highlights.get(position);
137     }
138
139     @Override
140     public int getItemCount() {
141         return highlights.size();
142     }
143
144     public void editNote(String note, int position) {
145         highlights.get(position).setNote(note);
146         notifyDataSetChanged();
147     }
148
149     static class HighlightHolder extends RecyclerView.ViewHolder {
150         private UnderlinedTextView content;
151         private ImageView delete, editNote;
152         private TextView date;
153         private RelativeLayout container;
154         private TextView note;
155         private LinearLayout swipeLinearLayout;
156
157         HighlightHolder(View itemView) {
158             super(itemView);
159             container = (RelativeLayout) itemView.findViewById(R.id.container);
160             swipeLinearLayout = (LinearLayout) itemView.findViewById(R.id.swipe_linear_layout);
161             content = (UnderlinedTextView) itemView.findViewById(R.id.utv_highlight_content);
162             delete = (ImageView) itemView.findViewById(R.id.iv_delete);
163             editNote = (ImageView) itemView.findViewById(R.id.iv_edit_note);
164             date = (TextView) itemView.findViewById(R.id.tv_highlight_date);
165             note = (TextView) itemView.findViewById(R.id.tv_note);
166         }
167     }
168
169     public interface HighLightAdapterCallback {
170         void onItemClick(HighlightImpl highlightImpl);
171
172         void deleteHighlight(int id);
173
174         void editNote(HighlightImpl highlightImpl, int position);
175     }
176 }