diff --git a/app/src/main/java/app/fedilab/android/activities/ContextActivity.java b/app/src/main/java/app/fedilab/android/activities/ContextActivity.java index b763e87f3..533ba40f0 100644 --- a/app/src/main/java/app/fedilab/android/activities/ContextActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/ContextActivity.java @@ -82,7 +82,7 @@ public class ContextActivity extends BaseActivity { focusedStatus = null; // or other values if (b != null) focusedStatus = (Status) b.getSerializable(Helper.ARG_STATUS); - if (focusedStatus == null && currentAccount == null || currentAccount.mastodon_account == null) { + if (focusedStatus == null || currentAccount == null || currentAccount.mastodon_account == null) { finish(); return; } diff --git a/app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java b/app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java index 34c970a06..c8aacea37 100644 --- a/app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java +++ b/app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java @@ -1787,10 +1787,6 @@ public class StatusAdapter extends RecyclerView.Adapter holder.timer.cancel(); holder.timer = null; } - if (holder.dateTimer != null) { - holder.dateTimer.cancel(); - holder.dateTimer = null; - } if (status.emojis != null && status.emojis.size() > 0) { holder.timer = new Timer(); holder.timer.scheduleAtFixedRate(new TimerTask() { @@ -1803,16 +1799,6 @@ public class StatusAdapter extends RecyclerView.Adapter } }, 100, 100); } - holder.dateTimer = new Timer(); - holder.dateTimer.scheduleAtFixedRate(new TimerTask() { - @Override - public void run() { - Handler mainHandler = new Handler(Looper.getMainLooper()); - Runnable myRunnable = () -> holder.binding.dateShort.setText(Helper.dateDiff(context, status.created_at)); - mainHandler.post(myRunnable); - - } - }, 100, 10000); } else if (viewHolder.getItemViewType() == STATUS_ART) { StatusViewHolder holder = (StatusViewHolder) viewHolder; MastodonHelper.loadPPMastodon(holder.bindingArt.artPp, status.account); @@ -1881,9 +1867,6 @@ public class StatusAdapter extends RecyclerView.Adapter if (holder instanceof StatusViewHolder && ((StatusViewHolder) holder).timer != null) { ((StatusViewHolder) holder).timer.cancel(); } - if (holder instanceof StatusViewHolder && ((StatusViewHolder) holder).dateTimer != null) { - ((StatusViewHolder) holder).dateTimer.cancel(); - } } public interface FetchMoreCallBack { @@ -1900,7 +1883,6 @@ public class StatusAdapter extends RecyclerView.Adapter DrawerStatusNotificationBinding bindingNotification; DrawerStatusArtBinding bindingArt; Timer timer; - Timer dateTimer; StatusViewHolder(DrawerStatusBinding itemView) { super(itemView.getRoot()); diff --git a/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonNotification.java b/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonNotification.java index 70005b28e..bd7a50e46 100644 --- a/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonNotification.java +++ b/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonNotification.java @@ -456,25 +456,28 @@ public class FragmentMastodonNotification extends Fragment implements Notificati } int position = 0; //We loop through messages already in the timeline - for (Notification notificationsAlreadyPresent : this.notificationList) { - //We compare the date of each status and we only add status having a date greater than the another, it is inserted at this position - //Pinned messages are ignored because their date can be older - if (notificationReceived.id.compareTo(notificationsAlreadyPresent.id) > 0) { + if (this.notificationList != null) { + notificationAdapter.notifyItemRangeChanged(0, this.notificationList.size()); + for (Notification notificationsAlreadyPresent : this.notificationList) { + //We compare the date of each status and we only add status having a date greater than the another, it is inserted at this position + //Pinned messages are ignored because their date can be older + if (notificationReceived.id.compareTo(notificationsAlreadyPresent.id) > 0) { + //We add the status to a list of id - thus we know it is already in the timeline + idOfAddedNotifications.add(notificationReceived.id); + this.notificationList.add(position, notificationReceived); + notificationAdapter.notifyItemInserted(position); + break; + } + position++; + } + //Statuses added at the bottom, we flag them by position = -2 for not dealing with them and fetch more + if (position == this.notificationList.size()) { //We add the status to a list of id - thus we know it is already in the timeline idOfAddedNotifications.add(notificationReceived.id); this.notificationList.add(position, notificationReceived); notificationAdapter.notifyItemInserted(position); - break; + return NOTIFICATION__AT_THE_BOTTOM; } - position++; - } - //Statuses added at the bottom, we flag them by position = -2 for not dealing with them and fetch more - if (position == this.notificationList.size()) { - //We add the status to a list of id - thus we know it is already in the timeline - idOfAddedNotifications.add(notificationReceived.id); - this.notificationList.add(position, notificationReceived); - notificationAdapter.notifyItemInserted(position); - return NOTIFICATION__AT_THE_BOTTOM; } return position; } diff --git a/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTimeline.java b/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTimeline.java index 5d3089797..a69d7d38d 100644 --- a/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTimeline.java +++ b/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTimeline.java @@ -499,27 +499,31 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. return STATUS_PRESENT; } int position = 0; - //We loop through messages already in the timeline - for (Status statusAlreadyPresent : this.statuses) { - //We compare the date of each status and we only add status having a date greater than the another, it is inserted at this position - //Pinned messages are ignored because their date can be older - if (statusReceived.id.compareTo(statusAlreadyPresent.id) > 0 && !statusAlreadyPresent.pinned) { + if (this.statuses != null) { + statusAdapter.notifyItemRangeChanged(0, this.statuses.size()); + //We loop through messages already in the timeline + for (Status statusAlreadyPresent : this.statuses) { + //We compare the date of each status and we only add status having a date greater than the another, it is inserted at this position + //Pinned messages are ignored because their date can be older + if (statusReceived.id.compareTo(statusAlreadyPresent.id) > 0 && !statusAlreadyPresent.pinned) { + //We add the status to a list of id - thus we know it is already in the timeline + idOfAddedStatuses.add(statusReceived.id); + this.statuses.add(position, statusReceived); + statusAdapter.notifyItemInserted(position); + break; + } + position++; + } + //Statuses added at the bottom, we flag them by position = -2 for not dealing with them and fetch more + if (position == this.statuses.size()) { //We add the status to a list of id - thus we know it is already in the timeline idOfAddedStatuses.add(statusReceived.id); this.statuses.add(position, statusReceived); statusAdapter.notifyItemInserted(position); - break; + return STATUS_AT_THE_BOTTOM; } - position++; - } - //Statuses added at the bottom, we flag them by position = -2 for not dealing with them and fetch more - if (position == this.statuses.size()) { - //We add the status to a list of id - thus we know it is already in the timeline - idOfAddedStatuses.add(statusReceived.id); - this.statuses.add(position, statusReceived); - statusAdapter.notifyItemInserted(position); - return STATUS_AT_THE_BOTTOM; } + return position; }