diff --git a/app/src/main/java/app/fedilab/android/client/PeertubeAPI.java b/app/src/main/java/app/fedilab/android/client/PeertubeAPI.java index c82216d2f..e08e36090 100644 --- a/app/src/main/java/app/fedilab/android/client/PeertubeAPI.java +++ b/app/src/main/java/app/fedilab/android/client/PeertubeAPI.java @@ -463,8 +463,10 @@ public class PeertubeAPI { if (accountObject.has("avatar") && !accountObject.isNull("avatar")) { account.setAvatar(accountObject.getJSONObject("avatar").get("path").toString()); account.setAvatar_static(accountObject.getJSONObject("avatar").get("path").toString()); - } else + } else { account.setAvatar("null"); + account.setAvatar_static("null"); + } account.setHeader("null"); account.setHeader_static("null"); diff --git a/app/src/main/java/app/fedilab/android/drawers/ReactionAdapter.java b/app/src/main/java/app/fedilab/android/drawers/ReactionAdapter.java index 5aa0e6d2c..e2037f8b0 100644 --- a/app/src/main/java/app/fedilab/android/drawers/ReactionAdapter.java +++ b/app/src/main/java/app/fedilab/android/drawers/ReactionAdapter.java @@ -15,6 +15,8 @@ package app.fedilab.android.drawers; * see . */ +import android.content.Context; +import android.os.AsyncTask; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -31,23 +33,32 @@ import java.util.ArrayList; import java.util.List; import app.fedilab.android.R; +import app.fedilab.android.asynctasks.PostActionAsyncTask; +import app.fedilab.android.asynctasks.RetrieveFeedsAsyncTask; +import app.fedilab.android.client.API; +import app.fedilab.android.client.Entities.Error; import app.fedilab.android.client.Entities.Reaction; import app.fedilab.android.helper.Helper; +import app.fedilab.android.interfaces.OnPostActionInterface; /** * Created by Thomas on 10/03/2020. * Adapter for reactions on messages */ -public class ReactionAdapter extends RecyclerView.Adapter { +public class ReactionAdapter extends RecyclerView.Adapter implements OnPostActionInterface { private List reactions; + private RetrieveFeedsAsyncTask.Type type; + private String statusId; - ReactionAdapter(List reactions) { + ReactionAdapter(List reactions, RetrieveFeedsAsyncTask.Type type, String statusId) { this.reactions = reactions; if (reactions == null) { this.reactions = new ArrayList<>(); } + this.type = type; + this.statusId = statusId; } @NonNull @@ -61,7 +72,7 @@ public class ReactionAdapter extends RecyclerView.Adapter { public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) { final Reaction reaction = reactions.get(viewHolder.getAdapterPosition()); ViewHolder holder = (ViewHolder) viewHolder; - + Context context = viewHolder.itemView.getContext(); holder.reaction_count.setText(String.valueOf(reaction.getCount())); if (reaction.isMe()) { holder.reaction_container.setBackgroundResource(R.drawable.reaction_voted); @@ -92,6 +103,23 @@ public class ReactionAdapter extends RecyclerView.Adapter { holder.reaction_name.setVisibility(View.VISIBLE); holder.reaction_emoji.setVisibility(View.GONE); } + + holder.reaction_container.setOnClickListener(v -> { + String emojiStr = reaction.getName(); + API.StatusAction statusAction; + if (type == RetrieveFeedsAsyncTask.Type.ANNOUNCEMENTS) { + statusAction = reaction.isMe() ? API.StatusAction.REMOVE_REACTION : API.StatusAction.ADD_REACTION; + } else { + statusAction = reaction.isMe() ? API.StatusAction.REMOVE_PLEROMA_REACTION : API.StatusAction.ADD_PLEROMA_REACTION; + } + reaction.setMe(!reaction.isMe()); + if( reaction.isMe()) { + reaction.setCount(reaction.getCount()+1); + }else{ + reaction.setCount(reaction.getCount()-1); + } + new PostActionAsyncTask(context, statusAction, this.statusId, null, emojiStr, ReactionAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + }); } @Override @@ -104,6 +132,11 @@ public class ReactionAdapter extends RecyclerView.Adapter { return reactions.size(); } + @Override + public void onPostAction(int statusCode, API.StatusAction statusAction, String userId, Error error) { + notifyDataSetChanged(); + } + static class ViewHolder extends RecyclerView.ViewHolder { TextView reaction_name, reaction_count; diff --git a/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java b/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java index 940633362..d284b91ef 100644 --- a/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java +++ b/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java @@ -1014,7 +1014,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct holder.status_action_container.setVisibility(View.GONE); } holder.status_reactions.setVisibility(View.VISIBLE); - ReactionAdapter reactionAdapter = new ReactionAdapter(status.getReactions()); + ReactionAdapter reactionAdapter = new ReactionAdapter(status.getReactions(), type, status.getId()); holder.reactions_view.setAdapter(reactionAdapter); LinearLayoutManager layoutManager = new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false);