Some fixes with cache and notifications
This commit is contained in:
parent
ea1df98d15
commit
bb4851e424
|
@ -35,6 +35,9 @@ public class Notification {
|
||||||
public Account account;
|
public Account account;
|
||||||
@SerializedName("status")
|
@SerializedName("status")
|
||||||
public Status status;
|
public Status status;
|
||||||
|
@SerializedName("cached")
|
||||||
|
public boolean cached;
|
||||||
|
|
||||||
public PositionFetchMore positionFetchMore = PositionFetchMore.BOTTOM;
|
public PositionFetchMore positionFetchMore = PositionFetchMore.BOTTOM;
|
||||||
|
|
||||||
public enum PositionFetchMore {
|
public enum PositionFetchMore {
|
||||||
|
|
|
@ -358,7 +358,7 @@ public class StatusCache {
|
||||||
throw new DBException("db is null. Wrong initialization.");
|
throw new DBException("db is null. Wrong initialization.");
|
||||||
}
|
}
|
||||||
String order = " DESC";
|
String order = " DESC";
|
||||||
String selection = Sqlite.COL_INSTANCE + "='" + instance + "' AND " + Sqlite.COL_USER_ID + "= '" + user_id + "' AND " + Sqlite.COL_SLUG + "= '" + Timeline.TimeLineEnum.NOTIFICATION.getValue() + "' ";
|
String selection = Sqlite.COL_INSTANCE + "='" + instance + "' AND " + Sqlite.COL_USER_ID + "= '" + user_id + "' AND " + Sqlite.COL_TYPE + "= '" + Timeline.TimeLineEnum.NOTIFICATION.getValue() + "' ";
|
||||||
String limit = String.valueOf(MastodonHelper.statusesPerCall(context));
|
String limit = String.valueOf(MastodonHelper.statusesPerCall(context));
|
||||||
if (min_id != null) {
|
if (min_id != null) {
|
||||||
selection += "AND " + Sqlite.COL_STATUS_ID + " > '" + min_id + "' ";
|
selection += "AND " + Sqlite.COL_STATUS_ID + " > '" + min_id + "' ";
|
||||||
|
@ -369,6 +369,7 @@ public class StatusCache {
|
||||||
selection += "AND " + Sqlite.COL_STATUS_ID + " > '" + since_id + "' ";
|
selection += "AND " + Sqlite.COL_STATUS_ID + " > '" + since_id + "' ";
|
||||||
limit = null;
|
limit = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (exclude_type != null && exclude_type.size() > 0) {
|
if (exclude_type != null && exclude_type.size() > 0) {
|
||||||
StringBuilder exclude = new StringBuilder();
|
StringBuilder exclude = new StringBuilder();
|
||||||
for (String excluded : exclude_type) {
|
for (String excluded : exclude_type) {
|
||||||
|
|
|
@ -101,6 +101,9 @@ public class TimelineHelper {
|
||||||
|
|
||||||
//If there are filters:
|
//If there are filters:
|
||||||
if (BaseMainActivity.mainFilters != null && BaseMainActivity.mainFilters.size() > 0 && statuses != null && statuses.size() > 0) {
|
if (BaseMainActivity.mainFilters != null && BaseMainActivity.mainFilters.size() > 0 && statuses != null && statuses.size() > 0) {
|
||||||
|
for (Status status : statuses) {
|
||||||
|
status.cached = cached;
|
||||||
|
}
|
||||||
for (Filter filter : BaseMainActivity.mainFilters) {
|
for (Filter filter : BaseMainActivity.mainFilters) {
|
||||||
if (filter.irreversible) { //Dealt by the server
|
if (filter.irreversible) { //Dealt by the server
|
||||||
continue;
|
continue;
|
||||||
|
@ -111,7 +114,6 @@ public class TimelineHelper {
|
||||||
Pattern p = Pattern.compile("(^" + Pattern.quote(filter.phrase) + "\\b|\\b" + Pattern.quote(filter.phrase) + "$)");
|
Pattern p = Pattern.compile("(^" + Pattern.quote(filter.phrase) + "\\b|\\b" + Pattern.quote(filter.phrase) + "$)");
|
||||||
for (Status status : statuses) {
|
for (Status status : statuses) {
|
||||||
String content;
|
String content;
|
||||||
status.cached = cached;
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
||||||
content = Html.fromHtml(status.content, Html.FROM_HTML_MODE_LEGACY).toString();
|
content = Html.fromHtml(status.content, Html.FROM_HTML_MODE_LEGACY).toString();
|
||||||
else
|
else
|
||||||
|
@ -136,7 +138,6 @@ public class TimelineHelper {
|
||||||
} else {
|
} else {
|
||||||
for (Status status : statuses) {
|
for (Status status : statuses) {
|
||||||
String content;
|
String content;
|
||||||
status.cached = cached;
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
||||||
content = Html.fromHtml(status.content, Html.FROM_HTML_MODE_LEGACY).toString();
|
content = Html.fromHtml(status.content, Html.FROM_HTML_MODE_LEGACY).toString();
|
||||||
else
|
else
|
||||||
|
@ -175,7 +176,7 @@ public class TimelineHelper {
|
||||||
* @param notifications - List of {@link Notification}
|
* @param notifications - List of {@link Notification}
|
||||||
* @return filtered List<Status>
|
* @return filtered List<Status>
|
||||||
*/
|
*/
|
||||||
public static List<Notification> filterNotification(Context context, List<Notification> notifications) {
|
public static List<Notification> filterNotification(Context context, List<Notification> notifications, boolean cached) {
|
||||||
//A security to make sure filters have been fetched before displaying messages
|
//A security to make sure filters have been fetched before displaying messages
|
||||||
List<Notification> notificationToRemove = new ArrayList<>();
|
List<Notification> notificationToRemove = new ArrayList<>();
|
||||||
if (!BaseMainActivity.filterFetched) {
|
if (!BaseMainActivity.filterFetched) {
|
||||||
|
@ -200,6 +201,7 @@ public class TimelineHelper {
|
||||||
if (filter.whole_word) {
|
if (filter.whole_word) {
|
||||||
Pattern p = Pattern.compile("(^" + Pattern.quote(filter.phrase) + "\\b|\\b" + Pattern.quote(filter.phrase) + "$)");
|
Pattern p = Pattern.compile("(^" + Pattern.quote(filter.phrase) + "\\b|\\b" + Pattern.quote(filter.phrase) + "$)");
|
||||||
for (Notification notification : notifications) {
|
for (Notification notification : notifications) {
|
||||||
|
notification.cached = cached;
|
||||||
if (notification.status != null) {
|
if (notification.status != null) {
|
||||||
String content;
|
String content;
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
||||||
|
@ -215,6 +217,7 @@ public class TimelineHelper {
|
||||||
} else {
|
} else {
|
||||||
for (Notification notification : notifications) {
|
for (Notification notification : notifications) {
|
||||||
String content;
|
String content;
|
||||||
|
notification.cached = cached;
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
||||||
content = Html.fromHtml(notification.status.content, Html.FROM_HTML_MODE_LEGACY).toString();
|
content = Html.fromHtml(notification.status.content, Html.FROM_HTML_MODE_LEGACY).toString();
|
||||||
else
|
else
|
||||||
|
@ -224,6 +227,10 @@ public class TimelineHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
for (Notification notification : notifications) {
|
||||||
|
notification.cached = cached;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,6 +186,11 @@ public class NotificationAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
|
||||||
} else {
|
} else {
|
||||||
holderFollow.binding.layoutFetchMore.fetchMoreContainer.setVisibility(View.GONE);
|
holderFollow.binding.layoutFetchMore.fetchMoreContainer.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
if (notification.cached) {
|
||||||
|
holderFollow.binding.cacheIndicator.setVisibility(View.VISIBLE);
|
||||||
|
} else {
|
||||||
|
holderFollow.binding.cacheIndicator.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
StatusAdapter.StatusViewHolder holderStatus = (StatusAdapter.StatusViewHolder) viewHolder;
|
StatusAdapter.StatusViewHolder holderStatus = (StatusAdapter.StatusViewHolder) viewHolder;
|
||||||
holderStatus.bindingNotification.status.typeOfNotification.setVisibility(View.VISIBLE);
|
holderStatus.bindingNotification.status.typeOfNotification.setVisibility(View.VISIBLE);
|
||||||
|
@ -205,6 +210,9 @@ public class NotificationAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
|
||||||
}
|
}
|
||||||
StatusesVM statusesVM = new ViewModelProvider((ViewModelStoreOwner) context).get(StatusesVM.class);
|
StatusesVM statusesVM = new ViewModelProvider((ViewModelStoreOwner) context).get(StatusesVM.class);
|
||||||
SearchVM searchVM = new ViewModelProvider((ViewModelStoreOwner) context).get(SearchVM.class);
|
SearchVM searchVM = new ViewModelProvider((ViewModelStoreOwner) context).get(SearchVM.class);
|
||||||
|
if (notification.status != null) {
|
||||||
|
notification.status.cached = notification.cached;
|
||||||
|
}
|
||||||
statusManagement(context, statusesVM, searchVM, holderStatus, this, null, notification.status, Timeline.TimeLineEnum.NOTIFICATION, false, true, null);
|
statusManagement(context, statusesVM, searchVM, holderStatus, this, null, notification.status, Timeline.TimeLineEnum.NOTIFICATION, false, true, null);
|
||||||
holderStatus.bindingNotification.status.dateShort.setText(Helper.dateDiff(context, notification.created_at));
|
holderStatus.bindingNotification.status.dateShort.setText(Helper.dateDiff(context, notification.created_at));
|
||||||
holderStatus.bindingNotification.containerTransparent.setAlpha(.3f);
|
holderStatus.bindingNotification.containerTransparent.setAlpha(.3f);
|
||||||
|
|
|
@ -109,8 +109,8 @@ public class NotificationsVM extends AndroidViewModel {
|
||||||
try {
|
try {
|
||||||
Response<List<Notification>> notificationsResponse = notificationsCall.execute();
|
Response<List<Notification>> notificationsResponse = notificationsCall.execute();
|
||||||
if (notificationsResponse.isSuccessful()) {
|
if (notificationsResponse.isSuccessful()) {
|
||||||
notifications.notifications = notificationsResponse.body();
|
List<Notification> notFiltered = notificationsResponse.body();
|
||||||
TimelineHelper.filterNotification(getApplication().getApplicationContext(), notifications.notifications);
|
notifications.notifications = TimelineHelper.filterNotification(getApplication().getApplicationContext(), notFiltered, false);
|
||||||
addFetchMoreNotifications(notifications.notifications, notificationList, timelineParams);
|
addFetchMoreNotifications(notifications.notifications, notificationList, timelineParams);
|
||||||
notifications.pagination = MastodonHelper.getPagination(notificationsResponse.headers());
|
notifications.pagination = MastodonHelper.getPagination(notificationsResponse.headers());
|
||||||
|
|
||||||
|
@ -154,7 +154,7 @@ public class NotificationsVM extends AndroidViewModel {
|
||||||
notifications = statusCacheDAO.getNotifications(timelineParams.excludeType, timelineParams.instance, timelineParams.userId, timelineParams.maxId, timelineParams.minId, timelineParams.sinceId);
|
notifications = statusCacheDAO.getNotifications(timelineParams.excludeType, timelineParams.instance, timelineParams.userId, timelineParams.maxId, timelineParams.minId, timelineParams.sinceId);
|
||||||
if (notifications != null) {
|
if (notifications != null) {
|
||||||
if (notifications.notifications != null && notifications.notifications.size() > 0) {
|
if (notifications.notifications != null && notifications.notifications.size() > 0) {
|
||||||
TimelineHelper.filterNotification(getApplication().getApplicationContext(), notifications.notifications);
|
TimelineHelper.filterNotification(getApplication().getApplicationContext(), notifications.notifications, true);
|
||||||
addFetchMoreNotifications(notifications.notifications, notificationList, timelineParams);
|
addFetchMoreNotifications(notifications.notifications, notificationList, timelineParams);
|
||||||
notifications.pagination = new Pagination();
|
notifications.pagination = new Pagination();
|
||||||
notifications.pagination.min_id = notifications.notifications.get(0).id;
|
notifications.pagination.min_id = notifications.notifications.get(0).id;
|
||||||
|
|
|
@ -34,6 +34,17 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/cache_indicator"
|
||||||
|
android:layout_width="16sp"
|
||||||
|
android:layout_height="16sp"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:layout_marginEnd="12dp"
|
||||||
|
android:adjustViewBounds="true"
|
||||||
|
android:src="@drawable/ic_baseline_cached_24"
|
||||||
|
android:visibility="gone"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatTextView
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
android:id="@+id/title"
|
android:id="@+id/title"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
|
|
Loading…
Reference in New Issue