Loading app/src/main/java/app/fedilab/android/client/entities/api/Status.java +0 −1 Original line number Diff line number Diff line Loading @@ -98,7 +98,6 @@ public class Status implements Serializable, Cloneable { public boolean isExpended = false; public boolean isTruncated = true; public boolean isFetchMore = false; public boolean isFetchMoreHidden = false; public boolean isMediaDisplayed = false; public boolean isMediaObfuscated = true; public boolean isChecked = false; Loading app/src/main/java/app/fedilab/android/ui/drawer/ContextAdapter.java +1 −1 Original line number Diff line number Diff line Loading @@ -72,7 +72,7 @@ public class ContextAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder StatusesVM statusesVM = new ViewModelProvider((ViewModelStoreOwner) context).get(StatusesVM.class); SearchVM searchVM = new ViewModelProvider((ViewModelStoreOwner) context).get(SearchVM.class); StatusAdapter.StatusViewHolder holder = (StatusAdapter.StatusViewHolder) viewHolder; statusManagement(context, statusesVM, searchVM, holder, this, statusList, status, Timeline.TimeLineEnum.UNKNOWN, false, true); statusManagement(context, statusesVM, searchVM, holder, this, statusList, status, Timeline.TimeLineEnum.UNKNOWN, false, true, null); //Hide/Show specific view } Loading app/src/main/java/app/fedilab/android/ui/drawer/NotificationAdapter.java +15 −31 Original line number Diff line number Diff line Loading @@ -42,7 +42,6 @@ import app.fedilab.android.R; import app.fedilab.android.activities.ProfileActivity; import app.fedilab.android.client.entities.api.Notification; import app.fedilab.android.client.entities.app.Timeline; import app.fedilab.android.databinding.DrawerFetchMoreBinding; import app.fedilab.android.databinding.DrawerFollowBinding; import app.fedilab.android.databinding.DrawerStatusNotificationBinding; import app.fedilab.android.databinding.NotificationsRelatedAccountsBinding; Loading @@ -62,9 +61,8 @@ public class NotificationAdapter extends RecyclerView.Adapter<RecyclerView.ViewH private final int TYPE_FAVOURITE = 4; private final int TYPE_POLL = 5; private final int TYPE_STATUS = 6; private final int NOTIFICATION_FETCH_MORE = 7; private final int TYPE_REACTION = 8; public FetchMoreCallBack fetchMoreCallBack; public StatusAdapter.FetchMoreCallBack fetchMoreCallBack; private Context context; public NotificationAdapter(List<Notification> notificationList) { Loading @@ -81,9 +79,6 @@ public class NotificationAdapter extends RecyclerView.Adapter<RecyclerView.ViewH @Override public int getItemViewType(int position) { if (notificationList.get(position).isFetchMore) { return NOTIFICATION_FETCH_MORE; } String type = notificationList.get(position).type; switch (type) { case "follow": Loading Loading @@ -113,9 +108,6 @@ public class NotificationAdapter extends RecyclerView.Adapter<RecyclerView.ViewH if (viewType == TYPE_FOLLOW || viewType == TYPE_FOLLOW_REQUEST) { DrawerFollowBinding itemBinding = DrawerFollowBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); return new ViewHolderFollow(itemBinding); } else if (viewType == NOTIFICATION_FETCH_MORE) { //Fetch more button DrawerFetchMoreBinding itemBinding = DrawerFetchMoreBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); return new StatusAdapter.StatusViewHolder(itemBinding); } else { DrawerStatusNotificationBinding itemBinding = DrawerStatusNotificationBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); return new StatusAdapter.StatusViewHolder(itemBinding); Loading Loading @@ -164,25 +156,22 @@ public class NotificationAdapter extends RecyclerView.Adapter<RecyclerView.ViewH // start the new activity context.startActivity(intent, options.toBundle()); }); } else if (viewHolder.getItemViewType() == NOTIFICATION_FETCH_MORE) { StatusAdapter.StatusViewHolder holder = (StatusAdapter.StatusViewHolder) viewHolder; holder.bindingFetchMore.fetchMoreContainer.setEnabled(!notification.isFetchMoreHidden); holder.bindingFetchMore.fetchMoreMin.setOnClickListener(v -> { if (position + 1 < notificationList.size()) { //We hide the button notification.isFetchMoreHidden = true; if (notification.isFetchMore && fetchMoreCallBack != null) { holderFollow.binding.layoutFetchMore.fetchMoreContainer.setVisibility(View.VISIBLE); holderFollow.binding.layoutFetchMore.fetchMoreMin.setOnClickListener(v -> { notification.isFetchMore = false; notifyItemChanged(position); fetchMoreCallBack.onClickMin(notificationList.get(position + 1).id, notification.id); } fetchMoreCallBack.onClickMinId(notification.id); }); holder.bindingFetchMore.fetchMoreMax.setOnClickListener(v -> { if (position - 1 >= 0) { holderFollow.binding.layoutFetchMore.fetchMoreMax.setOnClickListener(v -> { //We hide the button notification.isFetchMoreHidden = true; notification.isFetchMore = false; notifyItemChanged(position); fetchMoreCallBack.onClickMax(notificationList.get(position - 1).id, notification.id); } fetchMoreCallBack.onClickMaxId(notification.id); }); } else { holderFollow.binding.layoutFetchMore.fetchMoreContainer.setVisibility(View.GONE); } } else { StatusAdapter.StatusViewHolder holderStatus = (StatusAdapter.StatusViewHolder) viewHolder; holderStatus.bindingNotification.status.typeOfNotification.setVisibility(View.VISIBLE); Loading @@ -202,7 +191,7 @@ public class NotificationAdapter extends RecyclerView.Adapter<RecyclerView.ViewH } StatusesVM statusesVM = new ViewModelProvider((ViewModelStoreOwner) context).get(StatusesVM.class); SearchVM searchVM = new ViewModelProvider((ViewModelStoreOwner) context).get(SearchVM.class); statusManagement(context, statusesVM, searchVM, holderStatus, this, null, notification.status, Timeline.TimeLineEnum.NOTIFICATION, false, true); statusManagement(context, statusesVM, searchVM, holderStatus, this, null, notification.status, Timeline.TimeLineEnum.NOTIFICATION, false, true, fetchMoreCallBack); holderStatus.bindingNotification.status.dateShort.setText(Helper.dateDiff(context, notification.created_at)); holderStatus.bindingNotification.containerTransparent.setAlpha(.3f); if (getItemViewType(position) == TYPE_MENTION || getItemViewType(position) == TYPE_STATUS || getItemViewType(position) == TYPE_REACTION) { Loading Loading @@ -321,11 +310,6 @@ public class NotificationAdapter extends RecyclerView.Adapter<RecyclerView.ViewH return notificationList.size(); } public interface FetchMoreCallBack { void onClickMin(String min_id, String fetchmoreId); void onClickMax(String max_id, String fetchmoreId); } static class ViewHolderFollow extends RecyclerView.ViewHolder { DrawerFollowBinding binding; Loading app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java +50 −33 Original line number Diff line number Diff line Loading @@ -143,7 +143,6 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> public static final int STATUS_HIDDEN = 0; public static final int STATUS_VISIBLE = 1; public static final int STATUS_ART = 2; public static final int STATUS_FETCH_MORE = 3; private final List<Status> statusList; private final boolean minified; private final Timeline.TimeLineEnum timelineType; Loading Loading @@ -322,7 +321,8 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> List<Status> statusList, Status status, Timeline.TimeLineEnum timelineType, boolean minified, boolean canBeFederated) { boolean minified, boolean canBeFederated, FetchMoreCallBack fetchMoreCallBack) { if (status == null) { return; } Loading Loading @@ -1868,6 +1868,51 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> holder.bindingReport.checkbox.setOnClickListener(v -> status.isChecked = !status.isChecked); } if (status.isFetchMore && fetchMoreCallBack != null) { holder.binding.layoutFetchMore.fetchMoreContainer.setVisibility(View.VISIBLE); holder.binding.layoutFetchMore.fetchMoreMin.setOnClickListener(v -> { status.isFetchMore = false; adapter.notifyItemChanged(holder.getBindingAdapterPosition()); fetchMoreCallBack.onClickMinId(status.id); if (!remote) { new Thread(() -> { StatusCache statusCache = new StatusCache(); statusCache.instance = BaseMainActivity.currentInstance; statusCache.user_id = BaseMainActivity.currentUserID; statusCache.status = status; statusCache.status_id = status.id; try { new StatusCache(context).updateIfExists(statusCache); } catch (DBException e) { e.printStackTrace(); } }).start(); } }); holder.binding.layoutFetchMore.fetchMoreMax.setOnClickListener(v -> { //We hide the button status.isFetchMore = false; adapter.notifyItemChanged(holder.getBindingAdapterPosition()); if (!remote) { new Thread(() -> { StatusCache statusCache = new StatusCache(); statusCache.instance = BaseMainActivity.currentInstance; statusCache.user_id = BaseMainActivity.currentUserID; statusCache.status = status; statusCache.status_id = status.id; try { new StatusCache(context).updateIfExists(statusCache); } catch (DBException e) { e.printStackTrace(); } }).start(); } fetchMoreCallBack.onClickMaxId(status.id); }); } else { holder.binding.layoutFetchMore.fetchMoreContainer.setVisibility(View.GONE); } } private static boolean mediaObfuscated(Status status) { Loading Loading @@ -1911,8 +1956,6 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> public int getItemViewType(int position) { if (timelineType == Timeline.TimeLineEnum.ART) { return STATUS_ART; } else if (statusList.get(position).isFetchMore) { return STATUS_FETCH_MORE; } else { return isVisible(timelineType, statusList.get(position)) ? STATUS_VISIBLE : STATUS_HIDDEN; } Loading @@ -1928,9 +1971,6 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> } else if (viewType == STATUS_ART) { //Art statuses DrawerStatusArtBinding itemBinding = DrawerStatusArtBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); return new StatusViewHolder(itemBinding); } else if (viewType == STATUS_FETCH_MORE) { //Fetch more button DrawerFetchMoreBinding itemBinding = DrawerFetchMoreBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); return new StatusViewHolder(itemBinding); } else { //Classic statuses if (!minified) { DrawerStatusBinding itemBinding = DrawerStatusBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); Loading Loading @@ -1966,7 +2006,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> StatusViewHolder holder = (StatusViewHolder) viewHolder; StatusesVM statusesVM = new ViewModelProvider((ViewModelStoreOwner) context).get(StatusesVM.class); SearchVM searchVM = new ViewModelProvider((ViewModelStoreOwner) context).get(SearchVM.class); statusManagement(context, statusesVM, searchVM, holder, this, statusList, status, timelineType, minified, canBeFederated); statusManagement(context, statusesVM, searchVM, holder, this, statusList, status, timelineType, minified, canBeFederated, fetchMoreCallBack); } else if (viewHolder.getItemViewType() == STATUS_ART) { StatusViewHolder holder = (StatusViewHolder) viewHolder; MastodonHelper.loadPPMastodon(holder.bindingArt.artPp, status.account); Loading Loading @@ -2007,25 +2047,6 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> intent.putExtra(Helper.ARG_STATUS, status); context.startActivity(intent); }); } else if (viewHolder.getItemViewType() == STATUS_FETCH_MORE) { StatusViewHolder holder = (StatusViewHolder) viewHolder; holder.bindingFetchMore.fetchMoreContainer.setEnabled(!status.isFetchMoreHidden); holder.bindingFetchMore.fetchMoreMin.setOnClickListener(v -> { if (position + 1 < statusList.size()) { //We hide the button status.isFetchMoreHidden = true; notifyItemChanged(position); fetchMoreCallBack.onClickMinId(statusList.get(position + 1).id, status.id); } }); holder.bindingFetchMore.fetchMoreMax.setOnClickListener(v -> { if (position - 1 >= 0) { //We hide the button status.isFetchMoreHidden = true; notifyItemChanged(position); fetchMoreCallBack.onClickMaxId(statusList.get(position - 1).id, status.id); } }); } } Loading @@ -2040,9 +2061,9 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> } public interface FetchMoreCallBack { void onClickMinId(String min_id, String fetchmoreId); void onClickMinId(String min_id); void onClickMaxId(String max_id, String fetchmoreId); void onClickMaxId(String max_id); } public static class StatusViewHolder extends RecyclerView.ViewHolder { Loading Loading @@ -2075,10 +2096,6 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> bindingHidden = itemView; } StatusViewHolder(DrawerFetchMoreBinding itemView) { super(itemView.getRoot()); bindingFetchMore = itemView; } StatusViewHolder(DrawerStatusArtBinding itemView) { super(itemView.getRoot()); Loading app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonNotification.java +5 −32 Original line number Diff line number Diff line Loading @@ -48,10 +48,11 @@ import app.fedilab.android.helper.Helper; import app.fedilab.android.helper.MastodonHelper; import app.fedilab.android.helper.ThemeHelper; import app.fedilab.android.ui.drawer.NotificationAdapter; import app.fedilab.android.ui.drawer.StatusAdapter; import app.fedilab.android.viewmodel.mastodon.NotificationsVM; public class FragmentMastodonNotification extends Fragment implements NotificationAdapter.FetchMoreCallBack { public class FragmentMastodonNotification extends Fragment implements StatusAdapter.FetchMoreCallBack { private static final int NOTIFICATION_PRESENT = -1; Loading Loading @@ -86,7 +87,6 @@ public class FragmentMastodonNotification extends Fragment implements Notificati }; private String max_id, min_id, min_id_fetch_more, max_id_fetch_more; private LinearLayoutManager mLayoutManager; private String instance, user_id; private ArrayList<String> idOfAddedNotifications; private NotificationTypeEnum notificationType; private List<String> excludeType; Loading Loading @@ -115,8 +115,6 @@ public class FragmentMastodonNotification extends Fragment implements Notificati ViewGroup container, Bundle savedInstanceState) { flagLoading = false; instance = BaseMainActivity.currentInstance; user_id = BaseMainActivity.currentUserID; idOfAddedNotifications = new ArrayList<>(); binding = FragmentPaginationBinding.inflate(inflater, container, false); View root = binding.getRoot(); Loading Loading @@ -456,43 +454,18 @@ public class FragmentMastodonNotification extends Fragment implements Notificati super.onPause(); } @Override public void onClickMin(String min_id, String id) { public void onClickMinId(String min_id) { //Fetch more has been pressed min_id_fetch_more = min_id; Notification notification = null; int position = 0; for (Notification currentNotification : this.notificationList) { if (currentNotification.id.compareTo(id) == 0) { notification = currentNotification; break; } position++; } if (notification != null) { this.notificationList.remove(position); notificationAdapter.notifyItemRemoved(position); } route(FragmentMastodonTimeline.DIRECTION.TOP, true); } @Override public void onClickMax(String max_id, String id) { public void onClickMaxId(String max_id) { //Fetch more has been pressed max_id_fetch_more = max_id; Notification notification = null; int position = 0; for (Notification currentNotification : this.notificationList) { if (currentNotification.id.compareTo(id) == 0) { notification = currentNotification; break; } position++; } if (notification != null) { this.notificationList.remove(position); notificationAdapter.notifyItemRemoved(position); } route(FragmentMastodonTimeline.DIRECTION.BOTTOM, true); } Loading Loading
app/src/main/java/app/fedilab/android/client/entities/api/Status.java +0 −1 Original line number Diff line number Diff line Loading @@ -98,7 +98,6 @@ public class Status implements Serializable, Cloneable { public boolean isExpended = false; public boolean isTruncated = true; public boolean isFetchMore = false; public boolean isFetchMoreHidden = false; public boolean isMediaDisplayed = false; public boolean isMediaObfuscated = true; public boolean isChecked = false; Loading
app/src/main/java/app/fedilab/android/ui/drawer/ContextAdapter.java +1 −1 Original line number Diff line number Diff line Loading @@ -72,7 +72,7 @@ public class ContextAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder StatusesVM statusesVM = new ViewModelProvider((ViewModelStoreOwner) context).get(StatusesVM.class); SearchVM searchVM = new ViewModelProvider((ViewModelStoreOwner) context).get(SearchVM.class); StatusAdapter.StatusViewHolder holder = (StatusAdapter.StatusViewHolder) viewHolder; statusManagement(context, statusesVM, searchVM, holder, this, statusList, status, Timeline.TimeLineEnum.UNKNOWN, false, true); statusManagement(context, statusesVM, searchVM, holder, this, statusList, status, Timeline.TimeLineEnum.UNKNOWN, false, true, null); //Hide/Show specific view } Loading
app/src/main/java/app/fedilab/android/ui/drawer/NotificationAdapter.java +15 −31 Original line number Diff line number Diff line Loading @@ -42,7 +42,6 @@ import app.fedilab.android.R; import app.fedilab.android.activities.ProfileActivity; import app.fedilab.android.client.entities.api.Notification; import app.fedilab.android.client.entities.app.Timeline; import app.fedilab.android.databinding.DrawerFetchMoreBinding; import app.fedilab.android.databinding.DrawerFollowBinding; import app.fedilab.android.databinding.DrawerStatusNotificationBinding; import app.fedilab.android.databinding.NotificationsRelatedAccountsBinding; Loading @@ -62,9 +61,8 @@ public class NotificationAdapter extends RecyclerView.Adapter<RecyclerView.ViewH private final int TYPE_FAVOURITE = 4; private final int TYPE_POLL = 5; private final int TYPE_STATUS = 6; private final int NOTIFICATION_FETCH_MORE = 7; private final int TYPE_REACTION = 8; public FetchMoreCallBack fetchMoreCallBack; public StatusAdapter.FetchMoreCallBack fetchMoreCallBack; private Context context; public NotificationAdapter(List<Notification> notificationList) { Loading @@ -81,9 +79,6 @@ public class NotificationAdapter extends RecyclerView.Adapter<RecyclerView.ViewH @Override public int getItemViewType(int position) { if (notificationList.get(position).isFetchMore) { return NOTIFICATION_FETCH_MORE; } String type = notificationList.get(position).type; switch (type) { case "follow": Loading Loading @@ -113,9 +108,6 @@ public class NotificationAdapter extends RecyclerView.Adapter<RecyclerView.ViewH if (viewType == TYPE_FOLLOW || viewType == TYPE_FOLLOW_REQUEST) { DrawerFollowBinding itemBinding = DrawerFollowBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); return new ViewHolderFollow(itemBinding); } else if (viewType == NOTIFICATION_FETCH_MORE) { //Fetch more button DrawerFetchMoreBinding itemBinding = DrawerFetchMoreBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); return new StatusAdapter.StatusViewHolder(itemBinding); } else { DrawerStatusNotificationBinding itemBinding = DrawerStatusNotificationBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); return new StatusAdapter.StatusViewHolder(itemBinding); Loading Loading @@ -164,25 +156,22 @@ public class NotificationAdapter extends RecyclerView.Adapter<RecyclerView.ViewH // start the new activity context.startActivity(intent, options.toBundle()); }); } else if (viewHolder.getItemViewType() == NOTIFICATION_FETCH_MORE) { StatusAdapter.StatusViewHolder holder = (StatusAdapter.StatusViewHolder) viewHolder; holder.bindingFetchMore.fetchMoreContainer.setEnabled(!notification.isFetchMoreHidden); holder.bindingFetchMore.fetchMoreMin.setOnClickListener(v -> { if (position + 1 < notificationList.size()) { //We hide the button notification.isFetchMoreHidden = true; if (notification.isFetchMore && fetchMoreCallBack != null) { holderFollow.binding.layoutFetchMore.fetchMoreContainer.setVisibility(View.VISIBLE); holderFollow.binding.layoutFetchMore.fetchMoreMin.setOnClickListener(v -> { notification.isFetchMore = false; notifyItemChanged(position); fetchMoreCallBack.onClickMin(notificationList.get(position + 1).id, notification.id); } fetchMoreCallBack.onClickMinId(notification.id); }); holder.bindingFetchMore.fetchMoreMax.setOnClickListener(v -> { if (position - 1 >= 0) { holderFollow.binding.layoutFetchMore.fetchMoreMax.setOnClickListener(v -> { //We hide the button notification.isFetchMoreHidden = true; notification.isFetchMore = false; notifyItemChanged(position); fetchMoreCallBack.onClickMax(notificationList.get(position - 1).id, notification.id); } fetchMoreCallBack.onClickMaxId(notification.id); }); } else { holderFollow.binding.layoutFetchMore.fetchMoreContainer.setVisibility(View.GONE); } } else { StatusAdapter.StatusViewHolder holderStatus = (StatusAdapter.StatusViewHolder) viewHolder; holderStatus.bindingNotification.status.typeOfNotification.setVisibility(View.VISIBLE); Loading @@ -202,7 +191,7 @@ public class NotificationAdapter extends RecyclerView.Adapter<RecyclerView.ViewH } StatusesVM statusesVM = new ViewModelProvider((ViewModelStoreOwner) context).get(StatusesVM.class); SearchVM searchVM = new ViewModelProvider((ViewModelStoreOwner) context).get(SearchVM.class); statusManagement(context, statusesVM, searchVM, holderStatus, this, null, notification.status, Timeline.TimeLineEnum.NOTIFICATION, false, true); statusManagement(context, statusesVM, searchVM, holderStatus, this, null, notification.status, Timeline.TimeLineEnum.NOTIFICATION, false, true, fetchMoreCallBack); holderStatus.bindingNotification.status.dateShort.setText(Helper.dateDiff(context, notification.created_at)); holderStatus.bindingNotification.containerTransparent.setAlpha(.3f); if (getItemViewType(position) == TYPE_MENTION || getItemViewType(position) == TYPE_STATUS || getItemViewType(position) == TYPE_REACTION) { Loading Loading @@ -321,11 +310,6 @@ public class NotificationAdapter extends RecyclerView.Adapter<RecyclerView.ViewH return notificationList.size(); } public interface FetchMoreCallBack { void onClickMin(String min_id, String fetchmoreId); void onClickMax(String max_id, String fetchmoreId); } static class ViewHolderFollow extends RecyclerView.ViewHolder { DrawerFollowBinding binding; Loading
app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java +50 −33 Original line number Diff line number Diff line Loading @@ -143,7 +143,6 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> public static final int STATUS_HIDDEN = 0; public static final int STATUS_VISIBLE = 1; public static final int STATUS_ART = 2; public static final int STATUS_FETCH_MORE = 3; private final List<Status> statusList; private final boolean minified; private final Timeline.TimeLineEnum timelineType; Loading Loading @@ -322,7 +321,8 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> List<Status> statusList, Status status, Timeline.TimeLineEnum timelineType, boolean minified, boolean canBeFederated) { boolean minified, boolean canBeFederated, FetchMoreCallBack fetchMoreCallBack) { if (status == null) { return; } Loading Loading @@ -1868,6 +1868,51 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> holder.bindingReport.checkbox.setOnClickListener(v -> status.isChecked = !status.isChecked); } if (status.isFetchMore && fetchMoreCallBack != null) { holder.binding.layoutFetchMore.fetchMoreContainer.setVisibility(View.VISIBLE); holder.binding.layoutFetchMore.fetchMoreMin.setOnClickListener(v -> { status.isFetchMore = false; adapter.notifyItemChanged(holder.getBindingAdapterPosition()); fetchMoreCallBack.onClickMinId(status.id); if (!remote) { new Thread(() -> { StatusCache statusCache = new StatusCache(); statusCache.instance = BaseMainActivity.currentInstance; statusCache.user_id = BaseMainActivity.currentUserID; statusCache.status = status; statusCache.status_id = status.id; try { new StatusCache(context).updateIfExists(statusCache); } catch (DBException e) { e.printStackTrace(); } }).start(); } }); holder.binding.layoutFetchMore.fetchMoreMax.setOnClickListener(v -> { //We hide the button status.isFetchMore = false; adapter.notifyItemChanged(holder.getBindingAdapterPosition()); if (!remote) { new Thread(() -> { StatusCache statusCache = new StatusCache(); statusCache.instance = BaseMainActivity.currentInstance; statusCache.user_id = BaseMainActivity.currentUserID; statusCache.status = status; statusCache.status_id = status.id; try { new StatusCache(context).updateIfExists(statusCache); } catch (DBException e) { e.printStackTrace(); } }).start(); } fetchMoreCallBack.onClickMaxId(status.id); }); } else { holder.binding.layoutFetchMore.fetchMoreContainer.setVisibility(View.GONE); } } private static boolean mediaObfuscated(Status status) { Loading Loading @@ -1911,8 +1956,6 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> public int getItemViewType(int position) { if (timelineType == Timeline.TimeLineEnum.ART) { return STATUS_ART; } else if (statusList.get(position).isFetchMore) { return STATUS_FETCH_MORE; } else { return isVisible(timelineType, statusList.get(position)) ? STATUS_VISIBLE : STATUS_HIDDEN; } Loading @@ -1928,9 +1971,6 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> } else if (viewType == STATUS_ART) { //Art statuses DrawerStatusArtBinding itemBinding = DrawerStatusArtBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); return new StatusViewHolder(itemBinding); } else if (viewType == STATUS_FETCH_MORE) { //Fetch more button DrawerFetchMoreBinding itemBinding = DrawerFetchMoreBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); return new StatusViewHolder(itemBinding); } else { //Classic statuses if (!minified) { DrawerStatusBinding itemBinding = DrawerStatusBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); Loading Loading @@ -1966,7 +2006,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> StatusViewHolder holder = (StatusViewHolder) viewHolder; StatusesVM statusesVM = new ViewModelProvider((ViewModelStoreOwner) context).get(StatusesVM.class); SearchVM searchVM = new ViewModelProvider((ViewModelStoreOwner) context).get(SearchVM.class); statusManagement(context, statusesVM, searchVM, holder, this, statusList, status, timelineType, minified, canBeFederated); statusManagement(context, statusesVM, searchVM, holder, this, statusList, status, timelineType, minified, canBeFederated, fetchMoreCallBack); } else if (viewHolder.getItemViewType() == STATUS_ART) { StatusViewHolder holder = (StatusViewHolder) viewHolder; MastodonHelper.loadPPMastodon(holder.bindingArt.artPp, status.account); Loading Loading @@ -2007,25 +2047,6 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> intent.putExtra(Helper.ARG_STATUS, status); context.startActivity(intent); }); } else if (viewHolder.getItemViewType() == STATUS_FETCH_MORE) { StatusViewHolder holder = (StatusViewHolder) viewHolder; holder.bindingFetchMore.fetchMoreContainer.setEnabled(!status.isFetchMoreHidden); holder.bindingFetchMore.fetchMoreMin.setOnClickListener(v -> { if (position + 1 < statusList.size()) { //We hide the button status.isFetchMoreHidden = true; notifyItemChanged(position); fetchMoreCallBack.onClickMinId(statusList.get(position + 1).id, status.id); } }); holder.bindingFetchMore.fetchMoreMax.setOnClickListener(v -> { if (position - 1 >= 0) { //We hide the button status.isFetchMoreHidden = true; notifyItemChanged(position); fetchMoreCallBack.onClickMaxId(statusList.get(position - 1).id, status.id); } }); } } Loading @@ -2040,9 +2061,9 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> } public interface FetchMoreCallBack { void onClickMinId(String min_id, String fetchmoreId); void onClickMinId(String min_id); void onClickMaxId(String max_id, String fetchmoreId); void onClickMaxId(String max_id); } public static class StatusViewHolder extends RecyclerView.ViewHolder { Loading Loading @@ -2075,10 +2096,6 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> bindingHidden = itemView; } StatusViewHolder(DrawerFetchMoreBinding itemView) { super(itemView.getRoot()); bindingFetchMore = itemView; } StatusViewHolder(DrawerStatusArtBinding itemView) { super(itemView.getRoot()); Loading
app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonNotification.java +5 −32 Original line number Diff line number Diff line Loading @@ -48,10 +48,11 @@ import app.fedilab.android.helper.Helper; import app.fedilab.android.helper.MastodonHelper; import app.fedilab.android.helper.ThemeHelper; import app.fedilab.android.ui.drawer.NotificationAdapter; import app.fedilab.android.ui.drawer.StatusAdapter; import app.fedilab.android.viewmodel.mastodon.NotificationsVM; public class FragmentMastodonNotification extends Fragment implements NotificationAdapter.FetchMoreCallBack { public class FragmentMastodonNotification extends Fragment implements StatusAdapter.FetchMoreCallBack { private static final int NOTIFICATION_PRESENT = -1; Loading Loading @@ -86,7 +87,6 @@ public class FragmentMastodonNotification extends Fragment implements Notificati }; private String max_id, min_id, min_id_fetch_more, max_id_fetch_more; private LinearLayoutManager mLayoutManager; private String instance, user_id; private ArrayList<String> idOfAddedNotifications; private NotificationTypeEnum notificationType; private List<String> excludeType; Loading Loading @@ -115,8 +115,6 @@ public class FragmentMastodonNotification extends Fragment implements Notificati ViewGroup container, Bundle savedInstanceState) { flagLoading = false; instance = BaseMainActivity.currentInstance; user_id = BaseMainActivity.currentUserID; idOfAddedNotifications = new ArrayList<>(); binding = FragmentPaginationBinding.inflate(inflater, container, false); View root = binding.getRoot(); Loading Loading @@ -456,43 +454,18 @@ public class FragmentMastodonNotification extends Fragment implements Notificati super.onPause(); } @Override public void onClickMin(String min_id, String id) { public void onClickMinId(String min_id) { //Fetch more has been pressed min_id_fetch_more = min_id; Notification notification = null; int position = 0; for (Notification currentNotification : this.notificationList) { if (currentNotification.id.compareTo(id) == 0) { notification = currentNotification; break; } position++; } if (notification != null) { this.notificationList.remove(position); notificationAdapter.notifyItemRemoved(position); } route(FragmentMastodonTimeline.DIRECTION.TOP, true); } @Override public void onClickMax(String max_id, String id) { public void onClickMaxId(String max_id) { //Fetch more has been pressed max_id_fetch_more = max_id; Notification notification = null; int position = 0; for (Notification currentNotification : this.notificationList) { if (currentNotification.id.compareTo(id) == 0) { notification = currentNotification; break; } position++; } if (notification != null) { this.notificationList.remove(position); notificationAdapter.notifyItemRemoved(position); } route(FragmentMastodonTimeline.DIRECTION.BOTTOM, true); } Loading