Loading app/src/main/java/app/fedilab/android/client/entities/api/Status.java +2 −0 Original line number Diff line number Diff line Loading @@ -92,6 +92,8 @@ public class Status implements Serializable, Cloneable { public Poll poll; @SerializedName("pleroma") public Pleroma pleroma; @SerializedName("cached") public boolean cached = false; @Override public boolean equals(@Nullable Object obj) { Loading app/src/main/java/app/fedilab/android/client/entities/app/StatusCache.java +2 −2 Original line number Diff line number Diff line Loading @@ -194,8 +194,9 @@ public class StatusCache { ContentValues values = new ContentValues(); values.put(Sqlite.COL_USER_ID, statusCache.user_id); values.put(Sqlite.COL_INSTANCE, statusCache.instance); values.put(Sqlite.COL_SLUG, statusCache.slug); values.put(Sqlite.COL_SLUG, slug); values.put(Sqlite.COL_STATUS_ID, statusCache.status_id); values.put(Sqlite.COL_TYPE, statusCache.type.getValue()); values.put(Sqlite.COL_STATUS, mastodonStatusToStringStorage(statusCache.status)); values.put(Sqlite.COL_CREATED_AT, Helper.dateToString(new Date())); //Inserts token Loading Loading @@ -415,7 +416,6 @@ public class StatusCache { /** * Get statuses from db * * @param statusCache StatusCache - status in cache to compare * @return Statuses * @throws DBException - throws a db exception */ Loading app/src/main/java/app/fedilab/android/client/entities/app/Timeline.java +2 −0 Original line number Diff line number Diff line Loading @@ -362,6 +362,8 @@ public class Timeline { LOCAL("LOCAL"), @SerializedName("PUBLIC") PUBLIC("PUBLIC"), @SerializedName("CONTEXT") CONTEXT("CONTEXT"), @SerializedName("TAG") TAG("TAG"), @SerializedName("ART") Loading app/src/main/java/app/fedilab/android/helper/TimelineHelper.java +19 −25 Original line number Diff line number Diff line Loading @@ -22,8 +22,6 @@ import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelStoreOwner; import com.google.gson.annotations.SerializedName; import java.io.IOException; import java.util.ArrayList; import java.util.List; Loading @@ -36,6 +34,7 @@ import app.fedilab.android.client.endpoints.MastodonAccountsService; import app.fedilab.android.client.entities.api.Filter; import app.fedilab.android.client.entities.api.Notification; import app.fedilab.android.client.entities.api.Status; import app.fedilab.android.client.entities.app.Timeline; import app.fedilab.android.viewmodel.mastodon.AccountsVM; import okhttp3.OkHttpClient; import retrofit2.Call; Loading Loading @@ -64,10 +63,22 @@ public class TimelineHelper { * * @param context - Context * @param statuses - List of {@link Status} * @param filterTimeLineType - {@link FilterTimeLineType} * @param filterTimeLineType - {@link Timeline.TimeLineEnum} * @return filtered List<Status> */ public static List<Status> filterStatus(Context context, List<Status> statuses, FilterTimeLineType filterTimeLineType) { public static List<Status> filterStatus(Context context, List<Status> statuses, Timeline.TimeLineEnum filterTimeLineType) { return filterStatus(context, statuses, filterTimeLineType, false); } /** * Allows to filter statuses, should be called in API calls (background) * * @param context - Context * @param statuses - List of {@link Status} * @param filterTimeLineType - {@link Timeline.TimeLineEnum} * @return filtered List<Status> */ public static List<Status> filterStatus(Context context, List<Status> statuses, Timeline.TimeLineEnum filterTimeLineType, boolean cached) { //A security to make sure filters have been fetched before displaying messages List<Status> statusesToRemove = new ArrayList<>(); if (!BaseMainActivity.filterFetched) { Loading Loading @@ -95,11 +106,12 @@ public class TimelineHelper { continue; } for (String filterContext : filter.context) { if (filterTimeLineType.value.equalsIgnoreCase(filterContext)) { if (filterTimeLineType.getValue().equalsIgnoreCase(filterContext)) { if (filter.whole_word) { Pattern p = Pattern.compile("(^" + Pattern.quote(filter.phrase) + "\\b|\\b" + Pattern.quote(filter.phrase) + "$)"); for (Status status : statuses) { String content; status.cached = cached; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) content = Html.fromHtml(status.content, Html.FROM_HTML_MODE_LEGACY).toString(); else Loading @@ -124,6 +136,7 @@ public class TimelineHelper { } else { for (Status status : statuses) { String content; status.cached = cached; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) content = Html.fromHtml(status.content, Html.FROM_HTML_MODE_LEGACY).toString(); else Loading Loading @@ -183,7 +196,7 @@ public class TimelineHelper { continue; } for (String filterContext : filter.context) { if (FilterTimeLineType.NOTIFICATION.value.equalsIgnoreCase(filterContext)) { if (Timeline.TimeLineEnum.NOTIFICATION.getValue().equalsIgnoreCase(filterContext)) { if (filter.whole_word) { Pattern p = Pattern.compile("(^" + Pattern.quote(filter.phrase) + "\\b|\\b" + Pattern.quote(filter.phrase) + "$)"); for (Notification notification : notifications) { Loading Loading @@ -219,23 +232,4 @@ public class TimelineHelper { return notifications; } public enum FilterTimeLineType { @SerializedName("HOME") HOME("HOME"), @SerializedName("PUBLIC") PUBLIC("PUBLIC"), @SerializedName("CONTEXT") CONTEXT("CONTEXT"), @SerializedName("NOTIFICATION") NOTIFICATION("NOTIFICATION"); private final String value; FilterTimeLineType(String value) { this.value = value; } public String getValue() { return value; } } } app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java +8 −1 Original line number Diff line number Diff line Loading @@ -495,7 +495,8 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> holder.binding.actionButtonFavorite.setInActiveImageTintColor(theme_icons_color); holder.binding.actionButtonBookmark.setInActiveImageTintColor(theme_icons_color); holder.binding.actionButtonBoost.setInActiveImageTintColor(theme_icons_color); holder.binding.replyCount.setTextColor(theme_text_color); Helper.changeDrawableColor(context, R.drawable.ic_baseline_cached_24, theme_icons_color); holder.binding.replyCount.setTextColor(theme_icons_color); } else { holder.binding.actionButtonFavorite.setInActiveImageTintColor(ThemeHelper.getAttColor(context, R.attr.colorControlNormal)); holder.binding.actionButtonBookmark.setInActiveImageTintColor(ThemeHelper.getAttColor(context, R.attr.colorControlNormal)); Loading @@ -515,6 +516,12 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> holder.binding.actionButtonBoost.setActiveImageTint(R.color.boost_icon); holder.binding.actionButtonBookmark.setActiveImageTint(R.color.marked_icon); if (status.cached) { holder.binding.cacheIndicator.setVisibility(View.VISIBLE); } else { holder.binding.cacheIndicator.setVisibility(View.GONE); } if (status.pinned) { holder.binding.statusPinned.setVisibility(View.VISIBLE); Loading Loading
app/src/main/java/app/fedilab/android/client/entities/api/Status.java +2 −0 Original line number Diff line number Diff line Loading @@ -92,6 +92,8 @@ public class Status implements Serializable, Cloneable { public Poll poll; @SerializedName("pleroma") public Pleroma pleroma; @SerializedName("cached") public boolean cached = false; @Override public boolean equals(@Nullable Object obj) { Loading
app/src/main/java/app/fedilab/android/client/entities/app/StatusCache.java +2 −2 Original line number Diff line number Diff line Loading @@ -194,8 +194,9 @@ public class StatusCache { ContentValues values = new ContentValues(); values.put(Sqlite.COL_USER_ID, statusCache.user_id); values.put(Sqlite.COL_INSTANCE, statusCache.instance); values.put(Sqlite.COL_SLUG, statusCache.slug); values.put(Sqlite.COL_SLUG, slug); values.put(Sqlite.COL_STATUS_ID, statusCache.status_id); values.put(Sqlite.COL_TYPE, statusCache.type.getValue()); values.put(Sqlite.COL_STATUS, mastodonStatusToStringStorage(statusCache.status)); values.put(Sqlite.COL_CREATED_AT, Helper.dateToString(new Date())); //Inserts token Loading Loading @@ -415,7 +416,6 @@ public class StatusCache { /** * Get statuses from db * * @param statusCache StatusCache - status in cache to compare * @return Statuses * @throws DBException - throws a db exception */ Loading
app/src/main/java/app/fedilab/android/client/entities/app/Timeline.java +2 −0 Original line number Diff line number Diff line Loading @@ -362,6 +362,8 @@ public class Timeline { LOCAL("LOCAL"), @SerializedName("PUBLIC") PUBLIC("PUBLIC"), @SerializedName("CONTEXT") CONTEXT("CONTEXT"), @SerializedName("TAG") TAG("TAG"), @SerializedName("ART") Loading
app/src/main/java/app/fedilab/android/helper/TimelineHelper.java +19 −25 Original line number Diff line number Diff line Loading @@ -22,8 +22,6 @@ import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelStoreOwner; import com.google.gson.annotations.SerializedName; import java.io.IOException; import java.util.ArrayList; import java.util.List; Loading @@ -36,6 +34,7 @@ import app.fedilab.android.client.endpoints.MastodonAccountsService; import app.fedilab.android.client.entities.api.Filter; import app.fedilab.android.client.entities.api.Notification; import app.fedilab.android.client.entities.api.Status; import app.fedilab.android.client.entities.app.Timeline; import app.fedilab.android.viewmodel.mastodon.AccountsVM; import okhttp3.OkHttpClient; import retrofit2.Call; Loading Loading @@ -64,10 +63,22 @@ public class TimelineHelper { * * @param context - Context * @param statuses - List of {@link Status} * @param filterTimeLineType - {@link FilterTimeLineType} * @param filterTimeLineType - {@link Timeline.TimeLineEnum} * @return filtered List<Status> */ public static List<Status> filterStatus(Context context, List<Status> statuses, FilterTimeLineType filterTimeLineType) { public static List<Status> filterStatus(Context context, List<Status> statuses, Timeline.TimeLineEnum filterTimeLineType) { return filterStatus(context, statuses, filterTimeLineType, false); } /** * Allows to filter statuses, should be called in API calls (background) * * @param context - Context * @param statuses - List of {@link Status} * @param filterTimeLineType - {@link Timeline.TimeLineEnum} * @return filtered List<Status> */ public static List<Status> filterStatus(Context context, List<Status> statuses, Timeline.TimeLineEnum filterTimeLineType, boolean cached) { //A security to make sure filters have been fetched before displaying messages List<Status> statusesToRemove = new ArrayList<>(); if (!BaseMainActivity.filterFetched) { Loading Loading @@ -95,11 +106,12 @@ public class TimelineHelper { continue; } for (String filterContext : filter.context) { if (filterTimeLineType.value.equalsIgnoreCase(filterContext)) { if (filterTimeLineType.getValue().equalsIgnoreCase(filterContext)) { if (filter.whole_word) { Pattern p = Pattern.compile("(^" + Pattern.quote(filter.phrase) + "\\b|\\b" + Pattern.quote(filter.phrase) + "$)"); for (Status status : statuses) { String content; status.cached = cached; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) content = Html.fromHtml(status.content, Html.FROM_HTML_MODE_LEGACY).toString(); else Loading @@ -124,6 +136,7 @@ public class TimelineHelper { } else { for (Status status : statuses) { String content; status.cached = cached; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) content = Html.fromHtml(status.content, Html.FROM_HTML_MODE_LEGACY).toString(); else Loading Loading @@ -183,7 +196,7 @@ public class TimelineHelper { continue; } for (String filterContext : filter.context) { if (FilterTimeLineType.NOTIFICATION.value.equalsIgnoreCase(filterContext)) { if (Timeline.TimeLineEnum.NOTIFICATION.getValue().equalsIgnoreCase(filterContext)) { if (filter.whole_word) { Pattern p = Pattern.compile("(^" + Pattern.quote(filter.phrase) + "\\b|\\b" + Pattern.quote(filter.phrase) + "$)"); for (Notification notification : notifications) { Loading Loading @@ -219,23 +232,4 @@ public class TimelineHelper { return notifications; } public enum FilterTimeLineType { @SerializedName("HOME") HOME("HOME"), @SerializedName("PUBLIC") PUBLIC("PUBLIC"), @SerializedName("CONTEXT") CONTEXT("CONTEXT"), @SerializedName("NOTIFICATION") NOTIFICATION("NOTIFICATION"); private final String value; FilterTimeLineType(String value) { this.value = value; } public String getValue() { return value; } } }
app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java +8 −1 Original line number Diff line number Diff line Loading @@ -495,7 +495,8 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> holder.binding.actionButtonFavorite.setInActiveImageTintColor(theme_icons_color); holder.binding.actionButtonBookmark.setInActiveImageTintColor(theme_icons_color); holder.binding.actionButtonBoost.setInActiveImageTintColor(theme_icons_color); holder.binding.replyCount.setTextColor(theme_text_color); Helper.changeDrawableColor(context, R.drawable.ic_baseline_cached_24, theme_icons_color); holder.binding.replyCount.setTextColor(theme_icons_color); } else { holder.binding.actionButtonFavorite.setInActiveImageTintColor(ThemeHelper.getAttColor(context, R.attr.colorControlNormal)); holder.binding.actionButtonBookmark.setInActiveImageTintColor(ThemeHelper.getAttColor(context, R.attr.colorControlNormal)); Loading @@ -515,6 +516,12 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> holder.binding.actionButtonBoost.setActiveImageTint(R.color.boost_icon); holder.binding.actionButtonBookmark.setActiveImageTint(R.color.marked_icon); if (status.cached) { holder.binding.cacheIndicator.setVisibility(View.VISIBLE); } else { holder.binding.cacheIndicator.setVisibility(View.GONE); } if (status.pinned) { holder.binding.statusPinned.setVisibility(View.VISIBLE); Loading