emoji_reactions: implement for notifications fragment

This commit is contained in:
Alibek Omarov 2020-04-10 02:13:33 +03:00
parent 8580524300
commit f4b696cc4d
1 changed files with 45 additions and 3 deletions

View File

@ -58,9 +58,7 @@ import com.keylesspalace.tusky.appstore.*;
import com.keylesspalace.tusky.db.AccountEntity;
import com.keylesspalace.tusky.db.AccountManager;
import com.keylesspalace.tusky.di.Injectable;
import com.keylesspalace.tusky.entity.Notification;
import com.keylesspalace.tusky.entity.Poll;
import com.keylesspalace.tusky.entity.Status;
import com.keylesspalace.tusky.entity.*;
import com.keylesspalace.tusky.interfaces.ActionButtonActivity;
import com.keylesspalace.tusky.interfaces.ReselectableFragment;
import com.keylesspalace.tusky.interfaces.StatusActionListener;
@ -410,6 +408,8 @@ public class NotificationsFragment extends SFragment implements
removeAllByAccountId(((BlockEvent) event).getAccountId());
} else if (event instanceof PreferenceChangedEvent) {
onPreferenceChanged(((PreferenceChangedEvent) event).getPreferenceKey());
} else if (event instanceof EmojiReactEvent) {
handleEmojiReactEvent((EmojiReactEvent) event);
}
});
}
@ -1326,4 +1326,46 @@ public class NotificationsFragment extends SFragment implements
public void onReselect() {
jumpToTop();
}
private void setEmojiReactForStatus(int position, Status newStatus) {
NotificationViewData.Concrete viewdata = (NotificationViewData.Concrete) notifications.getPairedItem(position);
NotificationViewData.Concrete newViewData = new NotificationViewData.Concrete(
viewdata.getType(), viewdata.getId(), viewdata.getAccount(),
ViewDataUtils.statusToViewData(newStatus, false, false), viewdata.isExpanded(), viewdata.getEmoji());
notifications.setPairedItem(position, newViewData);
updateAdapter();
}
private void handleEmojiReactEvent(EmojiReactEvent event) {
Pair<Integer, Notification> posAndNotification =
findReplyPosition(event.getNewStatus().getActionableId());
if (posAndNotification == null) return;
//noinspection ConstantConditions
setEmojiReactForStatus(posAndNotification.first, event.getNewStatus());
}
@Override
public void onEmojiReact(final boolean react, final String emoji, final String statusId) {
Pair<Integer, Notification> posAndNotification = findReplyPosition(statusId);
if (posAndNotification == null)
return;
timelineCases.react(emoji, statusId, react)
.observeOn(AndroidSchedulers.mainThread())
.as(autoDisposable(from(this)))
.subscribe(
(newStatus) -> setEmojiReactForStatus(posAndNotification.first, newStatus),
(t) -> Log.d(TAG,
"Failed to react with " + emoji + " on status: " + statusId, t)
);
}
@Override
public void onEmojiReactMenu(@NonNull View view, final EmojiReaction emoji, final String statusId) {
super.emojiReactMenu(statusId, emoji, view, this);
}
}