2022-04-27 15:20:42 +02:00
|
|
|
package app.fedilab.android.ui.drawer;
|
|
|
|
/* Copyright 2021 Thomas Schneider
|
|
|
|
*
|
|
|
|
* This file is a part of Fedilab
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
|
|
|
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
|
|
|
|
* License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* Fedilab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
|
|
|
|
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
|
|
|
* Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License along with Fedilab; if not,
|
|
|
|
* see <http://www.gnu.org/licenses>. */
|
|
|
|
|
|
|
|
|
|
|
|
import static app.fedilab.android.ui.drawer.StatusAdapter.statusManagement;
|
|
|
|
|
|
|
|
import android.app.Activity;
|
|
|
|
import android.content.Context;
|
|
|
|
import android.content.Intent;
|
2022-10-19 11:35:00 +02:00
|
|
|
import android.content.SharedPreferences;
|
2022-04-27 15:20:42 +02:00
|
|
|
import android.os.Bundle;
|
|
|
|
import android.view.LayoutInflater;
|
|
|
|
import android.view.View;
|
|
|
|
import android.view.ViewGroup;
|
2022-07-13 12:50:48 +02:00
|
|
|
import android.widget.TextView;
|
2022-04-27 15:20:42 +02:00
|
|
|
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import androidx.core.app.ActivityOptionsCompat;
|
2022-09-20 07:48:04 +02:00
|
|
|
import androidx.lifecycle.LifecycleOwner;
|
2022-04-27 15:20:42 +02:00
|
|
|
import androidx.lifecycle.ViewModelProvider;
|
|
|
|
import androidx.lifecycle.ViewModelStoreOwner;
|
2022-10-19 11:35:00 +02:00
|
|
|
import androidx.preference.PreferenceManager;
|
2022-04-27 15:20:42 +02:00
|
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
|
|
|
2022-07-18 11:43:23 +02:00
|
|
|
import java.lang.ref.WeakReference;
|
2022-04-27 15:20:42 +02:00
|
|
|
import java.util.List;
|
|
|
|
import java.util.Locale;
|
|
|
|
|
2022-09-20 07:48:04 +02:00
|
|
|
import app.fedilab.android.BaseMainActivity;
|
2022-04-27 15:20:42 +02:00
|
|
|
import app.fedilab.android.R;
|
|
|
|
import app.fedilab.android.activities.ProfileActivity;
|
2022-05-24 10:12:04 +02:00
|
|
|
import app.fedilab.android.client.entities.api.Notification;
|
|
|
|
import app.fedilab.android.client.entities.app.Timeline;
|
2022-04-27 15:20:42 +02:00
|
|
|
import app.fedilab.android.databinding.DrawerFollowBinding;
|
|
|
|
import app.fedilab.android.databinding.DrawerStatusNotificationBinding;
|
2022-05-21 17:45:23 +02:00
|
|
|
import app.fedilab.android.databinding.NotificationsRelatedAccountsBinding;
|
2022-04-27 15:20:42 +02:00
|
|
|
import app.fedilab.android.helper.Helper;
|
|
|
|
import app.fedilab.android.helper.MastodonHelper;
|
2022-09-20 07:48:04 +02:00
|
|
|
import app.fedilab.android.viewmodel.mastodon.AccountsVM;
|
2022-04-27 15:20:42 +02:00
|
|
|
import app.fedilab.android.viewmodel.mastodon.SearchVM;
|
|
|
|
import app.fedilab.android.viewmodel.mastodon.StatusesVM;
|
|
|
|
|
|
|
|
|
|
|
|
public class NotificationAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
|
|
|
private final List<Notification> notificationList;
|
|
|
|
private final int TYPE_FOLLOW = 0;
|
|
|
|
private final int TYPE_FOLLOW_REQUEST = 1;
|
|
|
|
private final int TYPE_MENTION = 2;
|
|
|
|
private final int TYPE_REBLOG = 3;
|
|
|
|
private final int TYPE_FAVOURITE = 4;
|
|
|
|
private final int TYPE_POLL = 5;
|
|
|
|
private final int TYPE_STATUS = 6;
|
2022-07-19 14:28:25 +02:00
|
|
|
private final int TYPE_REACTION = 8;
|
2022-11-17 11:42:06 +01:00
|
|
|
private final int TYPE_UPDATE = 9;
|
2022-09-29 17:59:53 +02:00
|
|
|
public FetchMoreCallBack fetchMoreCallBack;
|
2022-06-21 17:09:34 +02:00
|
|
|
private Context context;
|
2022-04-27 15:20:42 +02:00
|
|
|
|
|
|
|
public NotificationAdapter(List<Notification> notificationList) {
|
|
|
|
this.notificationList = notificationList;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getCount() {
|
|
|
|
return notificationList.size();
|
|
|
|
}
|
|
|
|
|
|
|
|
public Notification getItem(int position) {
|
|
|
|
return notificationList.get(position);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getItemViewType(int position) {
|
|
|
|
String type = notificationList.get(position).type;
|
2022-11-05 14:57:41 +01:00
|
|
|
if (type != null) {
|
|
|
|
switch (type) {
|
|
|
|
case "follow":
|
|
|
|
return TYPE_FOLLOW;
|
|
|
|
case "follow_request":
|
|
|
|
return TYPE_FOLLOW_REQUEST;
|
|
|
|
case "mention":
|
|
|
|
return TYPE_MENTION;
|
|
|
|
case "reblog":
|
|
|
|
return TYPE_REBLOG;
|
2022-11-17 11:42:06 +01:00
|
|
|
case "update":
|
|
|
|
return TYPE_UPDATE;
|
2022-11-05 14:57:41 +01:00
|
|
|
case "favourite":
|
|
|
|
return TYPE_FAVOURITE;
|
|
|
|
case "poll":
|
|
|
|
return TYPE_POLL;
|
|
|
|
case "status":
|
|
|
|
return TYPE_STATUS;
|
|
|
|
case "pleroma:emoji_reaction":
|
|
|
|
return TYPE_REACTION;
|
|
|
|
}
|
2022-04-27 15:20:42 +02:00
|
|
|
}
|
|
|
|
return super.getItemViewType(position);
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
@Override
|
|
|
|
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
|
|
|
context = parent.getContext();
|
|
|
|
if (viewType == TYPE_FOLLOW || viewType == TYPE_FOLLOW_REQUEST) {
|
|
|
|
DrawerFollowBinding itemBinding = DrawerFollowBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
|
|
|
return new ViewHolderFollow(itemBinding);
|
|
|
|
} else {
|
|
|
|
DrawerStatusNotificationBinding itemBinding = DrawerStatusNotificationBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
|
|
|
return new StatusAdapter.StatusViewHolder(itemBinding);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
|
|
|
|
Notification notification = notificationList.get(position);
|
|
|
|
if (getItemViewType(position) == TYPE_FOLLOW || getItemViewType(position) == TYPE_FOLLOW_REQUEST) {
|
|
|
|
ViewHolderFollow holderFollow = (ViewHolderFollow) viewHolder;
|
|
|
|
MastodonHelper.loadPPMastodon(holderFollow.binding.avatar, notification.account);
|
2022-07-18 11:43:23 +02:00
|
|
|
holderFollow.binding.displayName.setText(
|
|
|
|
notification.account.getSpanDisplayName(context,
|
2022-07-18 14:13:12 +02:00
|
|
|
new WeakReference<>(holderFollow.binding.displayName)),
|
2022-07-18 11:43:23 +02:00
|
|
|
TextView.BufferType.SPANNABLE);
|
2022-04-27 15:20:42 +02:00
|
|
|
holderFollow.binding.username.setText(String.format("@%s", notification.account.acct));
|
2022-10-19 11:35:00 +02:00
|
|
|
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
|
|
|
|
int theme_icons_color = -1;
|
|
|
|
int theme_text_color = -1;
|
|
|
|
if (sharedpreferences.getBoolean("use_custom_theme", false)) {
|
|
|
|
//Getting custom colors
|
|
|
|
theme_icons_color = sharedpreferences.getInt("theme_icons_color", -1);
|
|
|
|
theme_text_color = sharedpreferences.getInt("theme_text_color", -1);
|
|
|
|
}
|
|
|
|
if (theme_icons_color != -1) {
|
|
|
|
Helper.changeDrawableColor(context, holderFollow.binding.cacheIndicator, theme_icons_color);
|
|
|
|
}
|
|
|
|
if (theme_text_color != -1) {
|
|
|
|
holderFollow.binding.displayName.setTextColor(theme_text_color);
|
|
|
|
holderFollow.binding.username.setTextColor(theme_text_color);
|
|
|
|
holderFollow.binding.title.setTextColor(theme_text_color);
|
|
|
|
}
|
2022-04-27 15:20:42 +02:00
|
|
|
if (getItemViewType(position) == TYPE_FOLLOW_REQUEST) {
|
|
|
|
holderFollow.binding.rejectButton.setVisibility(View.VISIBLE);
|
|
|
|
holderFollow.binding.acceptButton.setVisibility(View.VISIBLE);
|
|
|
|
holderFollow.binding.title.setText(R.string.follow_request);
|
|
|
|
} else {
|
|
|
|
holderFollow.binding.rejectButton.setVisibility(View.GONE);
|
|
|
|
holderFollow.binding.acceptButton.setVisibility(View.GONE);
|
|
|
|
holderFollow.binding.title.setText(R.string.follow);
|
|
|
|
}
|
2022-09-20 07:48:04 +02:00
|
|
|
AccountsVM accountsVM = new ViewModelProvider((ViewModelStoreOwner) context).get(AccountsVM.class);
|
|
|
|
holderFollow.binding.rejectButton.setOnClickListener(v -> accountsVM.rejectFollow(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, notification.account.id)
|
|
|
|
.observe((LifecycleOwner) context, relationShip -> {
|
2022-10-22 11:53:09 +02:00
|
|
|
if (notificationList.size() > position) {
|
|
|
|
notificationList.remove(position);
|
|
|
|
notifyItemRemoved(position);
|
|
|
|
}
|
2022-09-20 07:48:04 +02:00
|
|
|
}));
|
|
|
|
holderFollow.binding.acceptButton.setOnClickListener(v -> accountsVM.acceptFollow(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, notification.account.id)
|
|
|
|
.observe((LifecycleOwner) context, relationShip -> {
|
2022-10-22 11:53:09 +02:00
|
|
|
if (notificationList.size() > position) {
|
|
|
|
notificationList.remove(position);
|
|
|
|
notifyItemRemoved(position);
|
|
|
|
}
|
2022-09-20 07:48:04 +02:00
|
|
|
}));
|
2022-04-27 15:20:42 +02:00
|
|
|
holderFollow.binding.avatar.setOnClickListener(v -> {
|
|
|
|
Intent intent = new Intent(context, ProfileActivity.class);
|
|
|
|
Bundle b = new Bundle();
|
|
|
|
b.putSerializable(Helper.ARG_ACCOUNT, notification.account);
|
|
|
|
intent.putExtras(b);
|
|
|
|
ActivityOptionsCompat options = ActivityOptionsCompat
|
|
|
|
.makeSceneTransitionAnimation((Activity) context, holderFollow.binding.avatar, context.getString(R.string.activity_porfile_pp));
|
|
|
|
// start the new activity
|
|
|
|
context.startActivity(intent, options.toBundle());
|
|
|
|
});
|
2022-09-27 18:01:06 +02:00
|
|
|
if (notification.isFetchMore && fetchMoreCallBack != null) {
|
|
|
|
holderFollow.binding.layoutFetchMore.fetchMoreContainer.setVisibility(View.VISIBLE);
|
|
|
|
holderFollow.binding.layoutFetchMore.fetchMoreMin.setOnClickListener(v -> {
|
|
|
|
notification.isFetchMore = false;
|
2022-09-29 17:59:53 +02:00
|
|
|
if (holderFollow.getBindingAdapterPosition() < notificationList.size() - 1) {
|
|
|
|
String fromId;
|
|
|
|
if (notification.positionFetchMore == Notification.PositionFetchMore.TOP) {
|
|
|
|
fromId = notificationList.get(position + 1).id;
|
|
|
|
} else {
|
|
|
|
fromId = notification.id;
|
|
|
|
}
|
|
|
|
fetchMoreCallBack.onClickMinId(fromId, notification);
|
|
|
|
notifyItemChanged(position);
|
|
|
|
}
|
|
|
|
|
2022-09-27 18:01:06 +02:00
|
|
|
});
|
|
|
|
holderFollow.binding.layoutFetchMore.fetchMoreMax.setOnClickListener(v -> {
|
2022-07-08 19:02:18 +02:00
|
|
|
//We hide the button
|
2022-09-27 18:01:06 +02:00
|
|
|
notification.isFetchMore = false;
|
2022-09-29 17:59:53 +02:00
|
|
|
String fromId;
|
|
|
|
if (notification.positionFetchMore == Notification.PositionFetchMore.TOP) {
|
|
|
|
fromId = notificationList.get(position).id;
|
|
|
|
} else {
|
|
|
|
fromId = notificationList.get(position - 1).id;
|
|
|
|
}
|
2022-07-08 19:02:18 +02:00
|
|
|
notifyItemChanged(position);
|
2022-09-29 17:59:53 +02:00
|
|
|
fetchMoreCallBack.onClickMaxId(fromId, notification);
|
2022-09-27 18:01:06 +02:00
|
|
|
});
|
|
|
|
} else {
|
|
|
|
holderFollow.binding.layoutFetchMore.fetchMoreContainer.setVisibility(View.GONE);
|
|
|
|
}
|
2022-09-30 16:47:40 +02:00
|
|
|
if (notification.cached) {
|
|
|
|
holderFollow.binding.cacheIndicator.setVisibility(View.VISIBLE);
|
|
|
|
} else {
|
|
|
|
holderFollow.binding.cacheIndicator.setVisibility(View.GONE);
|
|
|
|
}
|
2022-04-27 15:20:42 +02:00
|
|
|
} else {
|
|
|
|
StatusAdapter.StatusViewHolder holderStatus = (StatusAdapter.StatusViewHolder) viewHolder;
|
2022-05-23 17:13:59 +02:00
|
|
|
holderStatus.bindingNotification.status.typeOfNotification.setVisibility(View.VISIBLE);
|
2022-06-11 18:53:12 +02:00
|
|
|
|
2022-05-23 17:13:59 +02:00
|
|
|
if (getItemViewType(position) == TYPE_MENTION) {
|
|
|
|
holderStatus.bindingNotification.status.typeOfNotification.setImageResource(R.drawable.ic_baseline_message_24);
|
|
|
|
} else if (getItemViewType(position) == TYPE_STATUS) {
|
|
|
|
holderStatus.bindingNotification.status.typeOfNotification.setImageResource(R.drawable.ic_baseline_message_24);
|
|
|
|
} else if (getItemViewType(position) == TYPE_FAVOURITE) {
|
|
|
|
holderStatus.bindingNotification.status.typeOfNotification.setImageResource(R.drawable.ic_baseline_star_24);
|
|
|
|
} else if (getItemViewType(position) == TYPE_REBLOG) {
|
|
|
|
holderStatus.bindingNotification.status.typeOfNotification.setImageResource(R.drawable.ic_baseline_repeat_24);
|
2022-11-17 11:42:06 +01:00
|
|
|
} else if (getItemViewType(position) == TYPE_UPDATE) {
|
|
|
|
holderStatus.bindingNotification.status.typeOfNotification.setImageResource(R.drawable.ic_baseline_edit_24);
|
2022-07-19 14:28:25 +02:00
|
|
|
} else if (getItemViewType(position) == TYPE_REACTION) {
|
|
|
|
holderStatus.bindingNotification.status.typeOfNotification.setImageResource(R.drawable.ic_baseline_insert_emoticon_24);
|
2022-05-23 17:13:59 +02:00
|
|
|
} else if (getItemViewType(position) == TYPE_POLL) {
|
|
|
|
holderStatus.bindingNotification.status.typeOfNotification.setImageResource(R.drawable.ic_baseline_poll_24);
|
|
|
|
}
|
2022-10-20 12:18:53 +02:00
|
|
|
|
2022-04-27 15:20:42 +02:00
|
|
|
StatusesVM statusesVM = new ViewModelProvider((ViewModelStoreOwner) context).get(StatusesVM.class);
|
|
|
|
SearchVM searchVM = new ViewModelProvider((ViewModelStoreOwner) context).get(SearchVM.class);
|
2022-09-30 16:47:40 +02:00
|
|
|
if (notification.status != null) {
|
|
|
|
notification.status.cached = notification.cached;
|
|
|
|
}
|
2022-09-29 17:59:53 +02:00
|
|
|
statusManagement(context, statusesVM, searchVM, holderStatus, this, null, notification.status, Timeline.TimeLineEnum.NOTIFICATION, false, true, null);
|
2022-06-11 18:53:12 +02:00
|
|
|
holderStatus.bindingNotification.status.dateShort.setText(Helper.dateDiff(context, notification.created_at));
|
2022-04-27 15:20:42 +02:00
|
|
|
holderStatus.bindingNotification.containerTransparent.setAlpha(.3f);
|
2022-07-19 14:28:25 +02:00
|
|
|
if (getItemViewType(position) == TYPE_MENTION || getItemViewType(position) == TYPE_STATUS || getItemViewType(position) == TYPE_REACTION) {
|
2022-04-27 15:20:42 +02:00
|
|
|
holderStatus.bindingNotification.status.actionButtons.setVisibility(View.VISIBLE);
|
2022-07-18 11:43:23 +02:00
|
|
|
String title = "";
|
2022-04-27 15:20:42 +02:00
|
|
|
if (getItemViewType(position) == TYPE_MENTION) {
|
2022-07-18 11:43:23 +02:00
|
|
|
title = String.format(Locale.getDefault(), "%s %s", notification.account.display_name, context.getString(R.string.notif_mention));
|
2022-04-27 15:20:42 +02:00
|
|
|
} else if (getItemViewType(position) == TYPE_STATUS) {
|
2022-07-18 11:43:23 +02:00
|
|
|
title = String.format(Locale.getDefault(), "%s %s", notification.account.display_name, context.getString(R.string.notif_status));
|
2022-07-19 14:28:25 +02:00
|
|
|
} else if (getItemViewType(position) == TYPE_REACTION) {
|
|
|
|
if (notification.emoji == null) {
|
|
|
|
notification.emoji = "";
|
|
|
|
}
|
|
|
|
title = String.format(Locale.getDefault(), "%s reacted with %s", notification.account.username, notification.emoji);
|
|
|
|
MastodonHelper.loadPPMastodon(holderStatus.bindingNotification.status.avatar, notification.account);
|
2022-08-02 10:45:03 +02:00
|
|
|
holderStatus.bindingNotification.status.statusUserInfo.setOnClickListener(v -> {
|
2022-07-25 15:33:57 +02:00
|
|
|
Intent intent = new Intent(context, ProfileActivity.class);
|
|
|
|
Bundle b = new Bundle();
|
|
|
|
b.putSerializable(Helper.ARG_ACCOUNT, notification.account);
|
|
|
|
intent.putExtras(b);
|
|
|
|
ActivityOptionsCompat options = ActivityOptionsCompat
|
|
|
|
.makeSceneTransitionAnimation((Activity) context, holderStatus.bindingNotification.status.avatar, context.getString(R.string.activity_porfile_pp));
|
|
|
|
// start the new activity
|
|
|
|
context.startActivity(intent, options.toBundle());
|
|
|
|
});
|
2022-04-27 15:20:42 +02:00
|
|
|
}
|
2022-07-18 11:43:23 +02:00
|
|
|
holderStatus.bindingNotification.status.displayName.setText(
|
2022-07-20 09:33:34 +02:00
|
|
|
notification.account.getSpanDisplayNameTitle(context,
|
|
|
|
new WeakReference<>(holderStatus.bindingNotification.status.displayName), title),
|
2022-07-18 11:43:23 +02:00
|
|
|
TextView.BufferType.SPANNABLE);
|
2022-04-27 15:20:42 +02:00
|
|
|
holderStatus.bindingNotification.status.username.setText(String.format("@%s", notification.account.acct));
|
|
|
|
holderStatus.bindingNotification.containerTransparent.setAlpha(.1f);
|
|
|
|
if (notification.status != null && notification.status.visibility.equalsIgnoreCase("direct")) {
|
|
|
|
holderStatus.bindingNotification.containerTransparent.setVisibility(View.GONE);
|
|
|
|
} else {
|
|
|
|
holderStatus.bindingNotification.containerTransparent.setVisibility(View.VISIBLE);
|
|
|
|
holderStatus.bindingNotification.containerTransparent.setAlpha(.1f);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
holderStatus.bindingNotification.containerTransparent.setVisibility(View.VISIBLE);
|
2022-10-26 16:48:57 +02:00
|
|
|
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
|
|
|
|
boolean displayMedia = sharedpreferences.getBoolean(context.getString(R.string.SET_DISPLAY_MEDIA_NOTIFICATION), true);
|
2022-11-05 14:57:41 +01:00
|
|
|
if (displayMedia && notification.status != null && notification.status.media_attachments != null && notification.status.media_attachments.size() > 0) {
|
2022-10-26 16:48:57 +02:00
|
|
|
holderStatus.bindingNotification.status.mediaContainer.setVisibility(View.VISIBLE);
|
|
|
|
} else {
|
|
|
|
holderStatus.bindingNotification.status.mediaContainer.setVisibility(View.GONE);
|
|
|
|
}
|
2022-07-18 11:43:23 +02:00
|
|
|
String title = "";
|
2022-04-27 15:20:42 +02:00
|
|
|
MastodonHelper.loadPPMastodon(holderStatus.binding.avatar, notification.account);
|
|
|
|
if (getItemViewType(position) == TYPE_FAVOURITE) {
|
2022-07-18 11:43:23 +02:00
|
|
|
title = String.format(Locale.getDefault(), "%s %s", notification.account.display_name, context.getString(R.string.notif_favourite));
|
2022-04-27 15:20:42 +02:00
|
|
|
} else if (getItemViewType(position) == TYPE_REBLOG) {
|
2022-07-18 11:43:23 +02:00
|
|
|
title = String.format(Locale.getDefault(), "%s %s", notification.account.display_name, context.getString(R.string.notif_reblog));
|
2022-11-17 11:42:06 +01:00
|
|
|
} else if (getItemViewType(position) == TYPE_UPDATE) {
|
|
|
|
title = String.format(Locale.getDefault(), "%s %s", notification.account.display_name, context.getString(R.string.notif_update));
|
2022-04-27 15:20:42 +02:00
|
|
|
} else if (getItemViewType(position) == TYPE_POLL) {
|
2022-07-18 11:43:23 +02:00
|
|
|
title = context.getString(R.string.notif_poll);
|
2022-04-27 15:20:42 +02:00
|
|
|
}
|
2022-05-21 17:45:23 +02:00
|
|
|
if (notification.relatedNotifications != null && notification.relatedNotifications.size() > 0) {
|
2022-05-21 19:04:07 +02:00
|
|
|
if (notification.type.equals("favourite")) {
|
|
|
|
holderStatus.bindingNotification.typeOfConcat.setText(R.string.also_favourite_by);
|
|
|
|
} else if (notification.type.equals("reblog")) {
|
|
|
|
holderStatus.bindingNotification.typeOfConcat.setText(R.string.also_boosted_by);
|
|
|
|
}
|
|
|
|
holderStatus.bindingNotification.relatedAccounts.removeAllViews();
|
2022-05-21 17:45:23 +02:00
|
|
|
for (Notification relativeNotif : notification.relatedNotifications) {
|
|
|
|
NotificationsRelatedAccountsBinding notificationsRelatedAccountsBinding = NotificationsRelatedAccountsBinding.inflate(LayoutInflater.from(context));
|
|
|
|
MastodonHelper.loadPPMastodon(notificationsRelatedAccountsBinding.profilePicture, relativeNotif.account);
|
2022-05-21 19:04:07 +02:00
|
|
|
notificationsRelatedAccountsBinding.acc.setText(relativeNotif.account.username);
|
2022-05-21 17:45:23 +02:00
|
|
|
notificationsRelatedAccountsBinding.relatedAccountContainer.setOnClickListener(v -> {
|
|
|
|
Intent intent = new Intent(context, ProfileActivity.class);
|
|
|
|
Bundle b = new Bundle();
|
|
|
|
b.putSerializable(Helper.ARG_ACCOUNT, relativeNotif.account);
|
|
|
|
intent.putExtras(b);
|
|
|
|
ActivityOptionsCompat options = ActivityOptionsCompat
|
|
|
|
.makeSceneTransitionAnimation((Activity) context, notificationsRelatedAccountsBinding.profilePicture, context.getString(R.string.activity_porfile_pp));
|
|
|
|
// start the new activity
|
|
|
|
context.startActivity(intent, options.toBundle());
|
|
|
|
});
|
2022-05-21 19:04:07 +02:00
|
|
|
holderStatus.bindingNotification.relatedAccounts.addView(notificationsRelatedAccountsBinding.getRoot());
|
2022-05-21 17:45:23 +02:00
|
|
|
}
|
|
|
|
holderStatus.bindingNotification.otherAccounts.setVisibility(View.VISIBLE);
|
|
|
|
} else {
|
|
|
|
holderStatus.bindingNotification.otherAccounts.setVisibility(View.GONE);
|
|
|
|
}
|
2022-04-27 15:20:42 +02:00
|
|
|
holderStatus.bindingNotification.status.avatar.setOnClickListener(v -> {
|
|
|
|
Intent intent = new Intent(context, ProfileActivity.class);
|
|
|
|
Bundle b = new Bundle();
|
|
|
|
b.putSerializable(Helper.ARG_ACCOUNT, notification.account);
|
|
|
|
intent.putExtras(b);
|
|
|
|
ActivityOptionsCompat options = ActivityOptionsCompat
|
|
|
|
.makeSceneTransitionAnimation((Activity) context, holderStatus.bindingNotification.status.avatar, context.getString(R.string.activity_porfile_pp));
|
2022-05-04 11:22:51 +02:00
|
|
|
// start the new activity
|
|
|
|
context.startActivity(intent, options.toBundle());
|
|
|
|
});
|
|
|
|
holderStatus.bindingNotification.status.statusUserInfo.setOnClickListener(v -> {
|
|
|
|
Intent intent = new Intent(context, ProfileActivity.class);
|
|
|
|
Bundle b = new Bundle();
|
|
|
|
b.putSerializable(Helper.ARG_ACCOUNT, notification.account);
|
|
|
|
intent.putExtras(b);
|
|
|
|
ActivityOptionsCompat options = ActivityOptionsCompat
|
|
|
|
.makeSceneTransitionAnimation((Activity) context, holderStatus.bindingNotification.status.avatar, context.getString(R.string.activity_porfile_pp));
|
2022-04-27 15:20:42 +02:00
|
|
|
// start the new activity
|
|
|
|
context.startActivity(intent, options.toBundle());
|
|
|
|
});
|
2022-07-20 09:33:34 +02:00
|
|
|
|
2022-07-18 11:43:23 +02:00
|
|
|
holderStatus.bindingNotification.status.displayName.setText(
|
2022-07-20 09:33:34 +02:00
|
|
|
notification.account.getSpanDisplayNameTitle(context,
|
|
|
|
new WeakReference<>(holderStatus.bindingNotification.status.displayName), title),
|
2022-07-18 11:43:23 +02:00
|
|
|
TextView.BufferType.SPANNABLE);
|
2022-07-13 12:50:48 +02:00
|
|
|
holderStatus.bindingNotification.status.displayName.setText(title, TextView.BufferType.SPANNABLE);
|
2022-04-27 15:20:42 +02:00
|
|
|
holderStatus.bindingNotification.status.username.setText(String.format("@%s", notification.account.acct));
|
|
|
|
holderStatus.bindingNotification.status.actionButtons.setVisibility(View.GONE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public long getItemId(int position) {
|
|
|
|
return position;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getItemCount() {
|
|
|
|
return notificationList.size();
|
|
|
|
}
|
|
|
|
|
2022-11-02 18:37:29 +01:00
|
|
|
public interface FetchMoreCallBack {
|
|
|
|
void onClickMinId(String min_id, Notification notificationToUpdate);
|
|
|
|
|
|
|
|
void onClickMaxId(String max_id, Notification notificationToUpdate);
|
|
|
|
}
|
2022-04-27 15:20:42 +02:00
|
|
|
|
|
|
|
static class ViewHolderFollow extends RecyclerView.ViewHolder {
|
|
|
|
DrawerFollowBinding binding;
|
|
|
|
|
|
|
|
ViewHolderFollow(DrawerFollowBinding itemView) {
|
|
|
|
super(itemView.getRoot());
|
|
|
|
binding = itemView;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|