Change the adapter position

This commit is contained in:
Thomas 2022-07-25 17:35:27 +02:00
parent 16ef4513c6
commit 9ac9c3adc4
2 changed files with 35 additions and 112 deletions

View File

@ -119,25 +119,6 @@ public class NotificationAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
} }
} }
/**
* Will manage the current position of the element in the adapter. Action is async, and position might have changed
*
* @param notificationList List<Notification> - Not null when calling from notification adapter
* @param id String - Current status
* @return int - position in real time
*/
public static int getPositionAsync(List<Notification> notificationList, String id) {
int position = 0;
if (notificationList != null) {
for (Notification notification : notificationList) {
if (notification.status != null && notification.status.id.compareTo(id) == 0) {
break;
}
position++;
}
}
return position;
}
@Override @Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) { public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {

View File

@ -211,8 +211,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
* Methode that will deal with results of actions (bookmark, favourite, boost) * Methode that will deal with results of actions (bookmark, favourite, boost)
* @param context Context * @param context Context
* @param adapter RecyclerView.Adapter<RecyclerView.ViewHolder> * @param adapter RecyclerView.Adapter<RecyclerView.ViewHolder>
* @param statusList List<Status> used by the reycler * @param holder StatusViewHolder used by the reycler
* @param notificationList List<Notification>
* @param typeOfAction CrossActionHelper.TypeOfCrossAction * @param typeOfAction CrossActionHelper.TypeOfCrossAction
* @param statusToDeal Status that received the action * @param statusToDeal Status that received the action
* @param statusReturned Status returned by the API * @param statusReturned Status returned by the API
@ -220,8 +219,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
*/ */
private static void manageAction(Context context, private static void manageAction(Context context,
RecyclerView.Adapter<RecyclerView.ViewHolder> adapter, RecyclerView.Adapter<RecyclerView.ViewHolder> adapter,
List<Status> statusList, StatusViewHolder holder,
List<Notification> notificationList,
CrossActionHelper.TypeOfCrossAction typeOfAction, CrossActionHelper.TypeOfCrossAction typeOfAction,
Status statusToDeal, Status statusToDeal,
Status statusReturned, Status statusReturned,
@ -279,7 +277,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
}).start(); }).start();
} }
sendAction(context, Helper.ARG_STATUS_ACTION, statusToDeal, null); sendAction(context, Helper.ARG_STATUS_ACTION, statusToDeal, null);
adapter.notifyItemChanged(getPositionAsync(notificationList, statusList, statusToDeal)); adapter.notifyItemChanged(holder.getBindingAdapterPosition());
} }
/** /**
@ -355,7 +353,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
if (reaction.count == 0) { if (reaction.count == 0) {
status.pleroma.emoji_reactions.remove(reaction); status.pleroma.emoji_reactions.remove(reaction);
} }
adapter.notifyItemChanged(getPositionAsync(notificationList, statusList, statusToDeal)); adapter.notifyItemChanged(holder.getBindingAdapterPosition());
break; break;
} }
} }
@ -365,7 +363,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
reaction.count = 1; reaction.count = 1;
reaction.name = emojiStr; reaction.name = emojiStr;
status.pleroma.emoji_reactions.add(0, reaction); status.pleroma.emoji_reactions.add(0, reaction);
adapter.notifyItemChanged(getPositionAsync(notificationList, statusList, statusToDeal)); adapter.notifyItemChanged(holder.getBindingAdapterPosition());
} }
ActionsVM actionVM = new ViewModelProvider((ViewModelStoreOwner) context).get(ActionsVM.class); ActionsVM actionVM = new ViewModelProvider((ViewModelStoreOwner) context).get(ActionsVM.class);
if (alreadyAdded) { if (alreadyAdded) {
@ -385,7 +383,6 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
int paddingDp = (int) (paddingPixel * density); int paddingDp = (int) (paddingPixel * density);
builder.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss()); builder.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
builder.setTitle(R.string.insert_emoji); builder.setTitle(R.string.insert_emoji);
AlertDialog alertDialogEmoji = null;
if (emojis != null && emojis.size() > 0 && emojis.get(BaseMainActivity.currentInstance) != null) { if (emojis != null && emojis.size() > 0 && emojis.get(BaseMainActivity.currentInstance) != null) {
GridView gridView = new GridView(context); GridView gridView = new GridView(context);
gridView.setAdapter(new EmojiAdapter(emojis.get(BaseMainActivity.currentInstance))); gridView.setAdapter(new EmojiAdapter(emojis.get(BaseMainActivity.currentInstance)));
@ -405,7 +402,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
if (reaction.count == 0) { if (reaction.count == 0) {
status.pleroma.emoji_reactions.remove(reaction); status.pleroma.emoji_reactions.remove(reaction);
} }
adapter.notifyItemChanged(getPositionAsync(notificationList, statusList, statusToDeal)); adapter.notifyItemChanged(holder.getBindingAdapterPosition());
break; break;
} }
} }
@ -417,7 +414,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
reaction.url = url; reaction.url = url;
reaction.static_url = static_url; reaction.static_url = static_url;
status.pleroma.emoji_reactions.add(0, reaction); status.pleroma.emoji_reactions.add(0, reaction);
adapter.notifyItemChanged(getPositionAsync(notificationList, statusList, statusToDeal)); adapter.notifyItemChanged(holder.getBindingAdapterPosition());
} }
ActionsVM actionsVM = new ViewModelProvider((ViewModelStoreOwner) context).get(ActionsVM.class); ActionsVM actionsVM = new ViewModelProvider((ViewModelStoreOwner) context).get(ActionsVM.class);
if (alreadyAdded) { if (alreadyAdded) {
@ -575,7 +572,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
attachment.peertubeId = matcherLink.group(3); attachment.peertubeId = matcherLink.group(3);
attachmentList.add(attachment); attachmentList.add(attachment);
statusToDeal.media_attachments = attachmentList; statusToDeal.media_attachments = attachmentList;
//adapter.notifyItemChanged(getPositionAsync(notificationList, statusList, statusToDeal)); //adapter.notifyItemChanged(holder.getBindingAdapterPosition());
} }
} }
@ -651,7 +648,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
if (results.statuses != null && results.statuses.size() > 0) { if (results.statuses != null && results.statuses.size() > 0) {
Status fetchedStatus = statusList.get(0); Status fetchedStatus = statusList.get(0);
statusesVM.bookmark(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, fetchedStatus.id) statusesVM.bookmark(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, fetchedStatus.id)
.observe((LifecycleOwner) context, _status -> manageAction(context, adapter, statusList, notificationList, CrossActionHelper.TypeOfCrossAction.BOOKMARK_ACTION, statusToDeal, _status, true)); .observe((LifecycleOwner) context, _status -> manageAction(context, adapter, holder, CrossActionHelper.TypeOfCrossAction.BOOKMARK_ACTION, statusToDeal, _status, true));
} else { } else {
Toasty.info(context, context.getString(R.string.toast_error_search), Toasty.LENGTH_SHORT).show(); Toasty.info(context, context.getString(R.string.toast_error_search), Toasty.LENGTH_SHORT).show();
} }
@ -659,11 +656,11 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
} else { } else {
if (statusToDeal.bookmarked) { if (statusToDeal.bookmarked) {
statusesVM.unBookmark(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id) statusesVM.unBookmark(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id)
.observe((LifecycleOwner) context, _status -> manageAction(context, adapter, statusList, notificationList, CrossActionHelper.TypeOfCrossAction.UNBOOKMARK_ACTION, statusToDeal, _status, false)); .observe((LifecycleOwner) context, _status -> manageAction(context, adapter, holder, CrossActionHelper.TypeOfCrossAction.UNBOOKMARK_ACTION, statusToDeal, _status, false));
} else { } else {
((SparkButton) v).playAnimation(); ((SparkButton) v).playAnimation();
statusesVM.bookmark(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id) statusesVM.bookmark(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id)
.observe((LifecycleOwner) context, _status -> manageAction(context, adapter, statusList, notificationList, CrossActionHelper.TypeOfCrossAction.BOOKMARK_ACTION, statusToDeal, _status, false)); .observe((LifecycleOwner) context, _status -> manageAction(context, adapter, holder, CrossActionHelper.TypeOfCrossAction.BOOKMARK_ACTION, statusToDeal, _status, false));
} }
} }
}); });
@ -752,7 +749,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
if (results.statuses != null && results.statuses.size() > 0) { if (results.statuses != null && results.statuses.size() > 0) {
Status fetchedStatus = results.statuses.get(0); Status fetchedStatus = results.statuses.get(0);
statusesVM.reblog(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, fetchedStatus.id, null) statusesVM.reblog(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, fetchedStatus.id, null)
.observe((LifecycleOwner) context, _status -> manageAction(context, adapter, statusList, notificationList, CrossActionHelper.TypeOfCrossAction.REBLOG_ACTION, statusToDeal, _status, true)); .observe((LifecycleOwner) context, _status -> manageAction(context, adapter, holder, CrossActionHelper.TypeOfCrossAction.REBLOG_ACTION, statusToDeal, _status, true));
} else { } else {
Toasty.info(context, context.getString(R.string.toast_error_search), Toasty.LENGTH_SHORT).show(); Toasty.info(context, context.getString(R.string.toast_error_search), Toasty.LENGTH_SHORT).show();
} }
@ -760,11 +757,11 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
} else { } else {
if (statusToDeal.reblogged) { if (statusToDeal.reblogged) {
statusesVM.unReblog(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id) statusesVM.unReblog(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id)
.observe((LifecycleOwner) context, _status -> manageAction(context, adapter, statusList, notificationList, CrossActionHelper.TypeOfCrossAction.UNREBLOG_ACTION, statusToDeal, _status, false)); .observe((LifecycleOwner) context, _status -> manageAction(context, adapter, holder, CrossActionHelper.TypeOfCrossAction.UNREBLOG_ACTION, statusToDeal, _status, false));
} else { } else {
((SparkButton) v).playAnimation(); ((SparkButton) v).playAnimation();
statusesVM.reblog(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id, null) statusesVM.reblog(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id, null)
.observe((LifecycleOwner) context, _status -> manageAction(context, adapter, statusList, notificationList, CrossActionHelper.TypeOfCrossAction.REBLOG_ACTION, statusToDeal, _status, false)); .observe((LifecycleOwner) context, _status -> manageAction(context, adapter, holder, CrossActionHelper.TypeOfCrossAction.REBLOG_ACTION, statusToDeal, _status, false));
} }
} }
dialog.dismiss(); dialog.dismiss();
@ -780,7 +777,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
if (results.statuses != null && results.statuses.size() > 0) { if (results.statuses != null && results.statuses.size() > 0) {
Status fetchedStatus = results.statuses.get(0); Status fetchedStatus = results.statuses.get(0);
statusesVM.reblog(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, fetchedStatus.id, null) statusesVM.reblog(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, fetchedStatus.id, null)
.observe((LifecycleOwner) context, _status -> manageAction(context, adapter, statusList, notificationList, CrossActionHelper.TypeOfCrossAction.REBLOG_ACTION, statusToDeal, _status, true)); .observe((LifecycleOwner) context, _status -> manageAction(context, adapter, holder, CrossActionHelper.TypeOfCrossAction.REBLOG_ACTION, statusToDeal, _status, true));
} else { } else {
Toasty.info(context, context.getString(R.string.toast_error_search), Toasty.LENGTH_SHORT).show(); Toasty.info(context, context.getString(R.string.toast_error_search), Toasty.LENGTH_SHORT).show();
} }
@ -788,11 +785,11 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
} else { } else {
if (statusToDeal.reblogged) { if (statusToDeal.reblogged) {
statusesVM.unReblog(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id) statusesVM.unReblog(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id)
.observe((LifecycleOwner) context, _status -> manageAction(context, adapter, statusList, notificationList, CrossActionHelper.TypeOfCrossAction.UNREBLOG_ACTION, statusToDeal, _status, false)); .observe((LifecycleOwner) context, _status -> manageAction(context, adapter, holder, CrossActionHelper.TypeOfCrossAction.UNREBLOG_ACTION, statusToDeal, _status, false));
} else { } else {
((SparkButton) v).playAnimation(); ((SparkButton) v).playAnimation();
statusesVM.reblog(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id, null) statusesVM.reblog(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id, null)
.observe((LifecycleOwner) context, _status -> manageAction(context, adapter, statusList, notificationList, CrossActionHelper.TypeOfCrossAction.REBLOG_ACTION, statusToDeal, _status, false)); .observe((LifecycleOwner) context, _status -> manageAction(context, adapter, holder, CrossActionHelper.TypeOfCrossAction.REBLOG_ACTION, statusToDeal, _status, false));
} }
} }
} }
@ -822,7 +819,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
if (results.statuses != null && results.statuses.size() > 0) { if (results.statuses != null && results.statuses.size() > 0) {
Status fetchedStatus = results.statuses.get(0); Status fetchedStatus = results.statuses.get(0);
statusesVM.favourite(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, fetchedStatus.id) statusesVM.favourite(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, fetchedStatus.id)
.observe((LifecycleOwner) context, _status -> manageAction(context, adapter, statusList, notificationList, CrossActionHelper.TypeOfCrossAction.FAVOURITE_ACTION, statusToDeal, _status, true)); .observe((LifecycleOwner) context, _status -> manageAction(context, adapter, holder, CrossActionHelper.TypeOfCrossAction.FAVOURITE_ACTION, statusToDeal, _status, true));
} else { } else {
Toasty.info(context, context.getString(R.string.toast_error_search), Toasty.LENGTH_SHORT).show(); Toasty.info(context, context.getString(R.string.toast_error_search), Toasty.LENGTH_SHORT).show();
} }
@ -830,11 +827,11 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
} else { } else {
if (status.favourited) { if (status.favourited) {
statusesVM.unFavourite(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id) statusesVM.unFavourite(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id)
.observe((LifecycleOwner) context, _status -> manageAction(context, adapter, statusList, notificationList, CrossActionHelper.TypeOfCrossAction.UNFAVOURITE_ACTION, statusToDeal, _status, false)); .observe((LifecycleOwner) context, _status -> manageAction(context, adapter, holder, CrossActionHelper.TypeOfCrossAction.UNFAVOURITE_ACTION, statusToDeal, _status, false));
} else { } else {
((SparkButton) v).playAnimation(); ((SparkButton) v).playAnimation();
statusesVM.favourite(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id) statusesVM.favourite(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id)
.observe((LifecycleOwner) context, _status -> manageAction(context, adapter, statusList, notificationList, CrossActionHelper.TypeOfCrossAction.FAVOURITE_ACTION, statusToDeal, _status, false)); .observe((LifecycleOwner) context, _status -> manageAction(context, adapter, holder, CrossActionHelper.TypeOfCrossAction.FAVOURITE_ACTION, statusToDeal, _status, false));
} }
} }
dialog.dismiss(); dialog.dismiss();
@ -850,7 +847,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
if (results.statuses != null && results.statuses.size() > 0) { if (results.statuses != null && results.statuses.size() > 0) {
Status fetchedStatus = results.statuses.get(0); Status fetchedStatus = results.statuses.get(0);
statusesVM.favourite(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, fetchedStatus.id) statusesVM.favourite(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, fetchedStatus.id)
.observe((LifecycleOwner) context, _status -> manageAction(context, adapter, statusList, notificationList, CrossActionHelper.TypeOfCrossAction.FAVOURITE_ACTION, statusToDeal, _status, true)); .observe((LifecycleOwner) context, _status -> manageAction(context, adapter, holder, CrossActionHelper.TypeOfCrossAction.FAVOURITE_ACTION, statusToDeal, _status, true));
} else { } else {
Toasty.info(context, context.getString(R.string.toast_error_search), Toasty.LENGTH_SHORT).show(); Toasty.info(context, context.getString(R.string.toast_error_search), Toasty.LENGTH_SHORT).show();
} }
@ -858,11 +855,11 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
} else { } else {
if (statusToDeal.favourited) { if (statusToDeal.favourited) {
statusesVM.unFavourite(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id) statusesVM.unFavourite(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id)
.observe((LifecycleOwner) context, _status -> manageAction(context, adapter, statusList, notificationList, CrossActionHelper.TypeOfCrossAction.UNFAVOURITE_ACTION, statusToDeal, _status, false)); .observe((LifecycleOwner) context, _status -> manageAction(context, adapter, holder, CrossActionHelper.TypeOfCrossAction.UNFAVOURITE_ACTION, statusToDeal, _status, false));
} else { } else {
((SparkButton) v).playAnimation(); ((SparkButton) v).playAnimation();
statusesVM.favourite(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id) statusesVM.favourite(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id)
.observe((LifecycleOwner) context, _status -> manageAction(context, adapter, statusList, notificationList, CrossActionHelper.TypeOfCrossAction.FAVOURITE_ACTION, statusToDeal, _status, false)); .observe((LifecycleOwner) context, _status -> manageAction(context, adapter, holder, CrossActionHelper.TypeOfCrossAction.FAVOURITE_ACTION, statusToDeal, _status, false));
} }
} }
} }
@ -955,7 +952,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
holder.binding.spoilerExpand.setOnClickListener(v -> { holder.binding.spoilerExpand.setOnClickListener(v -> {
statusToDeal.isExpended = !statusToDeal.isExpended; statusToDeal.isExpended = !statusToDeal.isExpended;
statusToDeal.isMediaDisplayed = !statusToDeal.isMediaDisplayed; statusToDeal.isMediaDisplayed = !statusToDeal.isMediaDisplayed;
adapter.notifyItemChanged(getPositionAsync(notificationList, statusList, statusToDeal)); adapter.notifyItemChanged(holder.getBindingAdapterPosition());
}); });
holder.binding.spoilerExpand.setVisibility(View.VISIBLE); holder.binding.spoilerExpand.setVisibility(View.VISIBLE);
holder.binding.spoiler.setVisibility(View.VISIBLE); holder.binding.spoiler.setVisibility(View.VISIBLE);
@ -1034,7 +1031,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
} }
holder.binding.toggleTruncate.setOnClickListener(v -> { holder.binding.toggleTruncate.setOnClickListener(v -> {
statusToDeal.isTruncated = !statusToDeal.isTruncated; statusToDeal.isTruncated = !statusToDeal.isTruncated;
adapter.notifyItemChanged(getPositionAsync(notificationList, statusList, statusToDeal)); adapter.notifyItemChanged(holder.getBindingAdapterPosition());
}); });
if (statusToDeal.isTruncated) { if (statusToDeal.isTruncated) {
holder.binding.statusContent.setMaxLines(5); holder.binding.statusContent.setMaxLines(5);
@ -1091,7 +1088,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
layoutMediaBinding.media.setOnClickListener(v -> { layoutMediaBinding.media.setOnClickListener(v -> {
if (statusToDeal.isMediaObfuscated && mediaObfuscated(statusToDeal) && !expand_media) { if (statusToDeal.isMediaObfuscated && mediaObfuscated(statusToDeal) && !expand_media) {
statusToDeal.isMediaObfuscated = false; statusToDeal.isMediaObfuscated = false;
adapter.notifyItemChanged(getPositionAsync(notificationList, statusList, statusToDeal)); adapter.notifyItemChanged(holder.getBindingAdapterPosition());
final int timeout = sharedpreferences.getInt(context.getString(R.string.SET_NSFW_TIMEOUT), 5); final int timeout = sharedpreferences.getInt(context.getString(R.string.SET_NSFW_TIMEOUT), 5);
if (timeout > 0) { if (timeout > 0) {
new CountDownTimer((timeout * 1000L), 1000) { new CountDownTimer((timeout * 1000L), 1000) {
@ -1100,7 +1097,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
public void onFinish() { public void onFinish() {
status.isMediaObfuscated = true; status.isMediaObfuscated = true;
adapter.notifyItemChanged(getPositionAsync(notificationList, statusList, statusToDeal)); adapter.notifyItemChanged(holder.getBindingAdapterPosition());
} }
}.start(); }.start();
} }
@ -1164,7 +1161,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
} }
layoutMediaBinding.viewHide.setOnClickListener(v -> { layoutMediaBinding.viewHide.setOnClickListener(v -> {
statusToDeal.sensitive = !statusToDeal.sensitive; statusToDeal.sensitive = !statusToDeal.sensitive;
adapter.notifyItemChanged(getPositionAsync(notificationList, statusList, statusToDeal)); adapter.notifyItemChanged(holder.getBindingAdapterPosition());
}); });
holder.binding.mediaContainer.addView(layoutMediaBinding.getRoot()); holder.binding.mediaContainer.addView(layoutMediaBinding.getRoot());
holder.binding.mediaContainer.setVisibility(View.VISIBLE); holder.binding.mediaContainer.setVisibility(View.VISIBLE);
@ -1247,7 +1244,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
}); });
layoutMediaBinding.viewHide.setOnClickListener(v -> { layoutMediaBinding.viewHide.setOnClickListener(v -> {
statusToDeal.sensitive = !statusToDeal.sensitive; statusToDeal.sensitive = !statusToDeal.sensitive;
adapter.notifyItemChanged(getPositionAsync(notificationList, statusList, statusToDeal)); adapter.notifyItemChanged(holder.getBindingAdapterPosition());
}); });
holder.binding.attachmentsList.addView(layoutMediaBinding.getRoot()); holder.binding.attachmentsList.addView(layoutMediaBinding.getRoot());
mediaPosition++; mediaPosition++;
@ -1445,7 +1442,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
i++; i++;
} }
statusToDeal.poll = poll; statusToDeal.poll = poll;
adapter.notifyItemChanged(getPositionAsync(notificationList, statusList, statusToDeal)); adapter.notifyItemChanged(holder.getBindingAdapterPosition());
}); });
} else { } else {
Toasty.info(context, context.getString(R.string.toast_error_search), Toasty.LENGTH_SHORT).show(); Toasty.info(context, context.getString(R.string.toast_error_search), Toasty.LENGTH_SHORT).show();
@ -1461,7 +1458,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
i++; i++;
} }
statusToDeal.poll = poll; statusToDeal.poll = poll;
adapter.notifyItemChanged(getPositionAsync(notificationList, statusList, statusToDeal)); adapter.notifyItemChanged(holder.getBindingAdapterPosition());
} }
}); });
} }
@ -1476,7 +1473,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
i++; i++;
} }
statusToDeal.poll = poll; statusToDeal.poll = poll;
adapter.notifyItemChanged(getPositionAsync(notificationList, statusList, statusToDeal)); adapter.notifyItemChanged(holder.getBindingAdapterPosition());
})); }));
holder.binding.poll.pollContainer.setVisibility(View.VISIBLE); holder.binding.poll.pollContainer.setVisibility(View.VISIBLE);
String pollInfo = context.getResources().getQuantityString(R.plurals.number_of_voters, statusToDeal.poll.voters_count, statusToDeal.poll.voters_count); String pollInfo = context.getResources().getQuantityString(R.plurals.number_of_voters, statusToDeal.poll.voters_count, statusToDeal.poll.voters_count);
@ -1596,7 +1593,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
builderInner.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss()); builderInner.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
builderInner.setPositiveButton(R.string.yes, (dialog, which) -> { builderInner.setPositiveButton(R.string.yes, (dialog, which) -> {
if (statusList != null) { if (statusList != null) {
int position = getPositionAsync(notificationList, statusList, statusToDeal); int position = holder.getBindingAdapterPosition();
statusList.remove(statusToDeal); statusList.remove(statusToDeal);
adapter.notifyItemRemoved(position); adapter.notifyItemRemoved(position);
statusesVM.deleteStatus(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id).observe((LifecycleOwner) context, statusDeleted -> { statusesVM.deleteStatus(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id).observe((LifecycleOwner) context, statusDeleted -> {
@ -1638,7 +1635,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
builderInner.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss()); builderInner.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
builderInner.setPositiveButton(R.string.yes, (dialog, which) -> statusesVM.deleteStatus(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id) builderInner.setPositiveButton(R.string.yes, (dialog, which) -> statusesVM.deleteStatus(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id)
.observe((LifecycleOwner) context, statusDeleted -> { .observe((LifecycleOwner) context, statusDeleted -> {
int position = getPositionAsync(notificationList, statusList, status); int position = holder.getBindingAdapterPosition();
statusList.remove(statusToDeal); statusList.remove(statusToDeal);
adapter.notifyItemRemoved(position); adapter.notifyItemRemoved(position);
sendAction(context, Helper.ARG_STATUS_DELETED, statusToDeal, null); sendAction(context, Helper.ARG_STATUS_DELETED, statusToDeal, null);
@ -1715,7 +1712,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
if (translate.getTranslatedContent() != null) { if (translate.getTranslatedContent() != null) {
statusToDeal.translationShown = true; statusToDeal.translationShown = true;
statusToDeal.translationContent = translate.getTranslatedContent(); statusToDeal.translationContent = translate.getTranslatedContent();
adapter.notifyItemChanged(getPositionAsync(notificationList, statusList, statusToDeal)); adapter.notifyItemChanged(holder.getBindingAdapterPosition());
} else { } else {
Toasty.error(context, context.getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show(); Toasty.error(context, context.getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show();
} }
@ -1866,61 +1863,6 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
LocalBroadcastManager.getInstance(context).sendBroadcast(intentBC); LocalBroadcastManager.getInstance(context).sendBroadcast(intentBC);
} }
/**
* Will manage the current position of the element in the adapter. Action is async, and position might have changed
*
* @param notificationList List<Notification> - Not null when calling from notification adapter
* @param statusList ist<Status> statusList - Not null when calling from status adapter
* @param status Status - Current status
* @return int - position in real time
*/
public static int getPositionAsync(List<Notification> notificationList, List<Status> statusList, Status status) {
int position = 0;
if (statusList != null) {
for (Status _status : statusList) {
if (status.id != null && ((_status.id != null && _status.id.compareTo(status.id) == 0) || (_status.reblog != null && _status.reblog.id != null && _status.reblog.id.compareTo(status.id) == 0))) {
break;
}
position++;
}
} else if (notificationList != null) {
for (Notification notification : notificationList) {
if (notification.status != null && notification.status.id.compareTo(status.id) == 0) {
break;
}
position++;
}
}
return position;
}
/**
* Will manage the current position of the element in the adapter. Action is async, and position might have changed
*
* @param notificationList List<Notification> - Not null when calling from notification adapter
* @param statusList ist<Status> statusList - Not null when calling from status adapter
* @param id String - Current status
* @return int - position in real time
*/
public static int getPositionAsync(List<Notification> notificationList, List<Status> statusList, String id) {
int position = 0;
if (statusList != null) {
for (Status _status : statusList) {
if (id != null && ((_status.id != null && _status.id.compareTo(id) == 0) || (_status.reblog != null && _status.reblog.id != null && _status.reblog.id.compareTo(id) == 0))) {
break;
}
position++;
}
} else if (notificationList != null) {
for (Notification notification : notificationList) {
if (notification.status != null && notification.status.id.compareTo(id) == 0) {
break;
}
position++;
}
}
return position;
}
@Override @Override
public int getItemViewType(int position) { public int getItemViewType(int position) {