aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/ui/reader/adapters/ReaderTagAdapter.java
diff options
context:
space:
mode:
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/reader/adapters/ReaderTagAdapter.java')
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/reader/adapters/ReaderTagAdapter.java174
1 files changed, 174 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/adapters/ReaderTagAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/adapters/ReaderTagAdapter.java
new file mode 100644
index 000000000..de203e0a3
--- /dev/null
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/adapters/ReaderTagAdapter.java
@@ -0,0 +1,174 @@
+package org.wordpress.android.ui.reader.adapters;
+
+import android.content.Context;
+import android.os.AsyncTask;
+import android.support.annotation.NonNull;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageButton;
+import android.widget.TextView;
+
+import org.wordpress.android.R;
+import org.wordpress.android.datasets.ReaderTagTable;
+import org.wordpress.android.models.ReaderTag;
+import org.wordpress.android.models.ReaderTagList;
+import org.wordpress.android.ui.reader.ReaderInterfaces;
+import org.wordpress.android.ui.reader.actions.ReaderActions;
+import org.wordpress.android.ui.reader.actions.ReaderTagActions;
+import org.wordpress.android.ui.reader.utils.ReaderUtils;
+import org.wordpress.android.util.AppLog;
+import org.wordpress.android.util.AppLog.T;
+import org.wordpress.android.util.NetworkUtils;
+import org.wordpress.android.util.ToastUtils;
+
+import java.lang.ref.WeakReference;
+
+public class ReaderTagAdapter extends RecyclerView.Adapter<ReaderTagAdapter.TagViewHolder> {
+
+ public interface TagDeletedListener {
+ void onTagDeleted(ReaderTag tag);
+ }
+
+ private final WeakReference<Context> mWeakContext;
+ private final ReaderTagList mTags = new ReaderTagList();
+ private TagDeletedListener mTagDeletedListener;
+ private ReaderInterfaces.DataLoadedListener mDataLoadedListener;
+
+ public ReaderTagAdapter(Context context) {
+ super();
+ setHasStableIds(true);
+ mWeakContext = new WeakReference<>(context);
+ }
+
+ public void setTagDeletedListener(TagDeletedListener listener) {
+ mTagDeletedListener = listener;
+ }
+
+ public void setDataLoadedListener(ReaderInterfaces.DataLoadedListener listener) {
+ mDataLoadedListener = listener;
+ }
+
+ private boolean hasContext() {
+ return (getContext() != null);
+ }
+
+ private Context getContext() {
+ return mWeakContext.get();
+ }
+
+ public void refresh() {
+ if (mIsTaskRunning) {
+ AppLog.w(T.READER, "tag task is already running");
+ return;
+ }
+ new LoadTagsTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ }
+
+ @Override
+ public int getItemCount() {
+ return mTags.size();
+ }
+
+ public boolean isEmpty() {
+ return (getItemCount() == 0);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return mTags.get(position).getTagSlug().hashCode();
+ }
+
+ @Override
+ public TagViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.reader_listitem_tag, parent, false);
+ return new TagViewHolder(view);
+ }
+
+ @Override
+ public void onBindViewHolder(TagViewHolder holder, int position) {
+ final ReaderTag tag = mTags.get(position);
+ holder.txtTagName.setText(tag.getLabel());
+ holder.btnRemove.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ performDeleteTag(tag);
+
+ }
+ });
+ }
+
+ private void performDeleteTag(@NonNull ReaderTag tag) {
+ if (!NetworkUtils.checkConnection(getContext())) {
+ return;
+ }
+
+ ReaderActions.ActionListener actionListener = new ReaderActions.ActionListener() {
+ @Override
+ public void onActionResult(boolean succeeded) {
+ if (!succeeded && hasContext()) {
+ ToastUtils.showToast(getContext(), R.string.reader_toast_err_remove_tag);
+ refresh();
+ }
+ }
+ };
+
+ boolean success = ReaderTagActions.deleteTag(tag, actionListener);
+
+ if (success) {
+ int index = mTags.indexOfTagName(tag.getTagSlug());
+ if (index > -1) {
+ mTags.remove(index);
+ notifyItemRemoved(index);
+ }
+ if (mTagDeletedListener != null) {
+ mTagDeletedListener.onTagDeleted(tag);
+ }
+ }
+ }
+
+ class TagViewHolder extends RecyclerView.ViewHolder {
+ private final TextView txtTagName;
+ private final ImageButton btnRemove;
+
+ public TagViewHolder(View view) {
+ super(view);
+ txtTagName = (TextView) view.findViewById(R.id.text_topic);
+ btnRemove = (ImageButton) view.findViewById(R.id.btn_remove);
+ ReaderUtils.setBackgroundToRoundRipple(btnRemove);
+ }
+ }
+
+ /*
+ * AsyncTask to load tags
+ */
+ private boolean mIsTaskRunning = false;
+ private class LoadTagsTask extends AsyncTask<Void, Void, ReaderTagList> {
+ @Override
+ protected void onPreExecute() {
+ mIsTaskRunning = true;
+ }
+ @Override
+ protected void onCancelled() {
+ mIsTaskRunning = false;
+ }
+ @Override
+ protected ReaderTagList doInBackground(Void... params) {
+ return ReaderTagTable.getFollowedTags();
+ }
+ @Override
+ protected void onPostExecute(ReaderTagList tagList) {
+ if (tagList != null && !tagList.isSameList(mTags)) {
+ mTags.clear();
+ mTags.addAll(tagList);
+ notifyDataSetChanged();
+ }
+ mIsTaskRunning = false;
+ if (mDataLoadedListener != null) {
+ mDataLoadedListener.onDataLoaded(isEmpty());
+ }
+ }
+ }
+
+}