Merge pull request #416 from FineFindus/refactor/remote-interaction

refactor: deduplicate remote interactions
This commit is contained in:
LucasGGamerM
2024-05-26 11:47:06 -03:00
committed by GitHub

View File

@@ -200,18 +200,10 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
private void onReplyClick(View v){ private void onReplyClick(View v){
if(item.status.preview) return; if(item.status.preview) return;
if(item.status.isRemote){ applyInteraction(v, status -> {
UiUtils.lookupStatus(v.getContext(), UiUtils.opacityIn(v);
item.status, item.accountID, null, openComposeView(status, item.accountID);
status -> { });
UiUtils.opacityIn(v);
openComposeView(status, item.accountID);
}
);
return;
}
UiUtils.opacityIn(v);
openComposeView(item.status, item.accountID);
} }
private boolean onReplyLongClick(View v) { private boolean onReplyLongClick(View v) {
@@ -243,22 +235,13 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
onBoostLongClick(v); onBoostLongClick(v);
return; return;
} }
if(item.status.isRemote){ applyInteraction(v, status -> {
UiUtils.lookupStatus(v.getContext(), if(status == null)
item.status, item.accountID, null, return;
status -> { boost.setSelected(!status.reblogged);
if(status == null) vibrateForAction(boost, !status.reblogged);
return; AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setReblogged(status, !status.reblogged, null, r->boostConsumer(v, r));
boost.setSelected(!status.reblogged); });
vibrateForAction(boost, !status.reblogged);
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setReblogged(status, !status.reblogged, null, r->boostConsumer(v, r));
}
);
return;
}
boost.setSelected(!item.status.reblogged);
vibrateForAction(boost, !item.status.reblogged);
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setReblogged(item.status, !item.status.reblogged, null, r->boostConsumer(v, r));
} }
private void boostConsumer(View v, Status r) { private void boostConsumer(View v, Status r) {
@@ -275,22 +258,12 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
Consumer<StatusPrivacy> doReblog = (visibility) -> { Consumer<StatusPrivacy> doReblog = (visibility) -> {
UiUtils.opacityOut(v); UiUtils.opacityOut(v);
if(item.status.isRemote){ applyInteraction(v,status -> {
UiUtils.lookupStatus(v.getContext(),
item.status, item.accountID, null,
status -> {
session.getStatusInteractionController()
.setReblogged(status, !status.reblogged, visibility, r->boostConsumer(v, r));
boost.setSelected(status.reblogged);
dialog.dismiss();
}
);
} else {
session.getStatusInteractionController() session.getStatusInteractionController()
.setReblogged(item.status, !item.status.reblogged, visibility, r->boostConsumer(v, r)); .setReblogged(status, !status.reblogged, visibility, r->boostConsumer(v, r));
boost.setSelected(item.status.reblogged); boost.setSelected(status.reblogged);
dialog.dismiss(); dialog.dismiss();
} });
}; };
View separator = menu.findViewById(R.id.separator); View separator = menu.findViewById(R.id.separator);
@@ -364,33 +337,18 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
private void onFavoriteClick(View v){ private void onFavoriteClick(View v){
if(item.status.preview) return; if(item.status.preview) return;
if(item.status.isRemote){ applyInteraction(v, status -> {
UiUtils.lookupStatus(v.getContext(), if(status == null)
item.status, item.accountID, null, return;
status -> { favorite.setSelected(!status.favourited);
if(status == null) vibrateForAction(favorite, !status.favourited);
return; AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setFavorited(status, !status.favourited, r->{
favorite.setSelected(!status.favourited); if (status.favourited && !GlobalUserPreferences.reduceMotion && !GlobalUserPreferences.likeIcon) {
vibrateForAction(favorite, !status.favourited); v.startAnimation(spin);
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setFavorited(status, !status.favourited, r->{ }
if (status.favourited && !GlobalUserPreferences.reduceMotion && !GlobalUserPreferences.likeIcon) { UiUtils.opacityIn(v);
v.startAnimation(spin); bindText(favorites, r.favouritesCount);
} });
UiUtils.opacityIn(v);
bindText(favorites, r.favouritesCount);
});
}
);
return;
}
favorite.setSelected(!item.status.favourited);
vibrateForAction(favorite, !item.status.favourited);
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setFavorited(item.status, !item.status.favourited, r->{
if (item.status.favourited && !GlobalUserPreferences.reduceMotion && !GlobalUserPreferences.likeIcon) {
v.startAnimation(spin);
}
UiUtils.opacityIn(v);
bindText(favorites, r.favouritesCount);
}); });
} }
@@ -411,26 +369,16 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
private void onBookmarkClick(View v){ private void onBookmarkClick(View v){
if(item.status.preview) return; if(item.status.preview) return;
if(item.status.isRemote){ applyInteraction(v,
UiUtils.lookupStatus(v.getContext(), status -> {
item.status, item.accountID, null, if(status == null)
status -> { return;
if(status == null) bookmark.setSelected(!status.bookmarked);
return; vibrateForAction(bookmark, !status.bookmarked);
bookmark.setSelected(!status.bookmarked); AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setBookmarked(status, !status.bookmarked, r->{
vibrateForAction(bookmark, !status.bookmarked); UiUtils.opacityIn(v);
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setBookmarked(status, !status.bookmarked, r->{ });
UiUtils.opacityIn(v); });
});
}
);
return;
}
bookmark.setSelected(!item.status.bookmarked);
vibrateForAction(bookmark, !item.status.bookmarked);
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setBookmarked(item.status, !item.status.bookmarked, r->{
UiUtils.opacityIn(v);
});
} }
private boolean onBookmarkLongClick(View v) { private boolean onBookmarkLongClick(View v) {
@@ -474,6 +422,17 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
return 0; return 0;
} }
private void applyInteraction(View v, Consumer<Status> interactionConsumer) {
if(!item.status.isRemote){
interactionConsumer.accept(item.status);
return;
}
UiUtils.lookupStatus(v.getContext(),
item.status, item.accountID, null,
interactionConsumer
);
}
private static void vibrateForAction(View view, boolean isPositive) { private static void vibrateForAction(View view, boolean isPositive) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
view.performHapticFeedback(isPositive ? HapticFeedbackConstants.CONFIRM : HapticFeedbackConstants.REJECT); view.performHapticFeedback(isPositive ? HapticFeedbackConstants.CONFIRM : HapticFeedbackConstants.REJECT);