Loading app/src/main/java/app/fedilab/android/mastodon/activities/TimelineActivity.java +8 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,8 @@ package app.fedilab.android.mastodon.activities; * see <http://www.gnu.org/licenses>. */ import static app.fedilab.android.mastodon.client.entities.app.Timeline.TimeLineEnum.QUOTE_TIMELINE; import android.os.Bundle; import android.view.MenuItem; Loading Loading @@ -60,8 +62,10 @@ public class TimelineActivity extends BaseBarActivity { String tagged = null; String timelineAccountId = null; Status status = null; String status_id = null; if (bundle != null) { timelineType = (Timeline.TimeLineEnum) bundle.get(Helper.ARG_TIMELINE_TYPE); status_id = bundle.getString(Helper.ARG_STATUS_ID); lemmy_post_id = bundle.getString(Helper.ARG_LEMMY_POST_ID, null); pinnedTimeline = (PinnedTimeline) bundle.getSerializable(Helper.ARG_REMOTE_INSTANCE); status = (Status) bundle.getSerializable(Helper.ARG_STATUS); Loading @@ -74,9 +78,13 @@ public class TimelineActivity extends BaseBarActivity { if(tagged != null) { setTitle(String.format("#%s",tagged)); } if(timelineType == QUOTE_TIMELINE) { setTitle(R.string.quoting_messages); } FragmentMastodonTimeline fragmentMastodonTimeline = new FragmentMastodonTimeline(); Bundle args = new Bundle(); args.putSerializable(Helper.ARG_TIMELINE_TYPE, timelineType); args.putString(Helper.ARG_STATUS_ID,status_id); args.putSerializable(Helper.ARG_REMOTE_INSTANCE, pinnedTimeline); args.putSerializable(Helper.ARG_LEMMY_POST_ID, lemmy_post_id); args.putSerializable(Helper.ARG_TAGGED, tagged); Loading app/src/main/java/app/fedilab/android/mastodon/client/endpoints/MastodonStatusesService.java +13 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,7 @@ public interface MastodonStatusesService { @Path("id") String id); @Headers({"Accept: application/json"}) @PUT("statuses/{id}") Call<Status> updateStatus( Loading Loading @@ -177,6 +178,18 @@ public interface MastodonStatusesService { @Query("limit") int limit ); @GET("statuses/{id}/quotes") Call<List<Status>> getStatusQuotes( @Header("Authorization") String token, @Path("id") String id, @Query("max_id") String max_id, @Query("since_id") String since_id, @Query("min_id") String min_id, @Query("limit") int limit ); //Add status to favourites @POST("statuses/{id}/favourite") Call<Status> favourites( Loading app/src/main/java/app/fedilab/android/mastodon/client/entities/app/Timeline.java +2 −0 Original line number Diff line number Diff line Loading @@ -398,6 +398,8 @@ public class Timeline { MUTED_TIMELINE_HOME("MUTED_TIMELINE_HOME"), @SerializedName("BOOKMARK_TIMELINE") BOOKMARK_TIMELINE("BOOKMARK_TIMELINE"), @SerializedName("QUOTE_TIMELINE") QUOTE_TIMELINE("QUOTE_TIMELINE"), @SerializedName("BLOCKED_DOMAIN_TIMELINE") BLOCKED_DOMAIN_TIMELINE("BLOCKED_DOMAIN_TIMELINE"), @SerializedName("BLOCKED_TIMELINE") Loading app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java +11 −3 Original line number Diff line number Diff line Loading @@ -60,7 +60,6 @@ import android.text.Html; import android.text.Spannable; import android.text.SpannableString; import android.text.TextUtils; import android.util.Log; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.MenuItem; Loading Loading @@ -2095,8 +2094,17 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> } }); holder.binding.quoteInfo.setOnClickListener(v->{ if (statusToDeal.quotes_count > 0) { if (statusToDeal.quotes_count > 0 && statusToDeal.account.id.compareTo(BaseMainActivity.currentUserID) == 0) { Bundle args = new Bundle(); args.putSerializable(Helper.ARG_TIMELINE_TYPE, Timeline.TimeLineEnum.QUOTE_TIMELINE); args.putSerializable(Helper.ARG_STATUS_ID, statusToDeal.id); Intent intent = new Intent(context, TimelineActivity.class); new CachedBundle(context).insertBundle(args, Helper.getCurrentAccount(context), bundleId -> { Bundle bundle = new Bundle(); bundle.putLong(Helper.ARG_INTENT_ID, bundleId); intent.putExtras(bundle); context.startActivity(intent); }); } }); Loading app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonTimeline.java +18 −0 Original line number Diff line number Diff line Loading @@ -72,6 +72,7 @@ import app.fedilab.android.mastodon.helper.MastodonHelper; import app.fedilab.android.mastodon.ui.drawer.StatusAdapter; import app.fedilab.android.mastodon.viewmodel.mastodon.AccountsVM; import app.fedilab.android.mastodon.viewmodel.mastodon.SearchVM; import app.fedilab.android.mastodon.viewmodel.mastodon.StatusesVM; import app.fedilab.android.mastodon.viewmodel.mastodon.TimelinesVM; import es.dmoral.toasty.Toasty; Loading @@ -83,6 +84,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. private boolean scrollingUp; private FragmentPaginationBinding binding; private TimelinesVM timelinesVM; private StatusesVM statusesVM; private AccountsVM accountsVM; private boolean flagLoading; private String search, searchCache; Loading @@ -91,6 +93,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. private Integer offset; private StatusAdapter statusAdapter; private Timeline.TimeLineEnum timelineType; private String status_id; private String tagged; private List<Status> timelineStatuses; //Handle actions that can be done in other fragments Loading Loading @@ -418,6 +421,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. timelineType = (Timeline.TimeLineEnum) bundle.get(Helper.ARG_TIMELINE_TYPE); lemmy_post_id = bundle.getString(Helper.ARG_LEMMY_POST_ID, null); list_id = bundle.getString(Helper.ARG_LIST_ID, null); status_id = bundle.getString(Helper.ARG_STATUS_ID, null); search = bundle.getString(Helper.ARG_SEARCH_KEYWORD, null); tagged = bundle.getString(Helper.ARG_TAGGED, null); searchCache = bundle.getString(Helper.ARG_SEARCH_KEYWORD_CACHE, null); Loading Loading @@ -491,6 +495,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. timelinesVM = new ViewModelProvider(FragmentMastodonTimeline.this).get(viewModelKey, TimelinesVM.class); accountsVM = new ViewModelProvider(FragmentMastodonTimeline.this).get(viewModelKey, AccountsVM.class); statusesVM = new ViewModelProvider(FragmentMastodonTimeline.this).get(viewModelKey, StatusesVM.class); initialStatuses = null; lockForResumeCall = 0; Loading Loading @@ -690,6 +695,9 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. if (initialStatus != null) { timelineStatuses.add(initialStatus); } if(statuses.statuses == null) { statuses.statuses = new ArrayList<>(); } timelineStatuses.addAll(statuses.statuses); if (max_id == null || (statuses.pagination.max_id != null && Helper.compareTo(statuses.pagination.max_id, max_id) < 0) || timelineType.getValue().startsWith("TREND_")) { max_id = statuses.pagination.max_id; Loading Loading @@ -1272,6 +1280,16 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. } else { flagLoading = false; } }else if (timelineType == Timeline.TimeLineEnum.QUOTE_TIMELINE) { if (direction == null) { statusesVM.quotedStatus(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, status_id, null, null, null) .observe(getViewLifecycleOwner(), this::initializeStatusesCommonView); } else if (direction == DIRECTION.BOTTOM) { statusesVM.quotedStatus(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, status_id, max_id, null, null) .observe(getViewLifecycleOwner(), statusesBottom -> dealWithPagination(statusesBottom, DIRECTION.BOTTOM, false, true, fetchStatus)); } else { flagLoading = false; } } else if (timelineType == Timeline.TimeLineEnum.TREND_MESSAGE) { if (direction == null) { Loading Loading
app/src/main/java/app/fedilab/android/mastodon/activities/TimelineActivity.java +8 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,8 @@ package app.fedilab.android.mastodon.activities; * see <http://www.gnu.org/licenses>. */ import static app.fedilab.android.mastodon.client.entities.app.Timeline.TimeLineEnum.QUOTE_TIMELINE; import android.os.Bundle; import android.view.MenuItem; Loading Loading @@ -60,8 +62,10 @@ public class TimelineActivity extends BaseBarActivity { String tagged = null; String timelineAccountId = null; Status status = null; String status_id = null; if (bundle != null) { timelineType = (Timeline.TimeLineEnum) bundle.get(Helper.ARG_TIMELINE_TYPE); status_id = bundle.getString(Helper.ARG_STATUS_ID); lemmy_post_id = bundle.getString(Helper.ARG_LEMMY_POST_ID, null); pinnedTimeline = (PinnedTimeline) bundle.getSerializable(Helper.ARG_REMOTE_INSTANCE); status = (Status) bundle.getSerializable(Helper.ARG_STATUS); Loading @@ -74,9 +78,13 @@ public class TimelineActivity extends BaseBarActivity { if(tagged != null) { setTitle(String.format("#%s",tagged)); } if(timelineType == QUOTE_TIMELINE) { setTitle(R.string.quoting_messages); } FragmentMastodonTimeline fragmentMastodonTimeline = new FragmentMastodonTimeline(); Bundle args = new Bundle(); args.putSerializable(Helper.ARG_TIMELINE_TYPE, timelineType); args.putString(Helper.ARG_STATUS_ID,status_id); args.putSerializable(Helper.ARG_REMOTE_INSTANCE, pinnedTimeline); args.putSerializable(Helper.ARG_LEMMY_POST_ID, lemmy_post_id); args.putSerializable(Helper.ARG_TAGGED, tagged); Loading
app/src/main/java/app/fedilab/android/mastodon/client/endpoints/MastodonStatusesService.java +13 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,7 @@ public interface MastodonStatusesService { @Path("id") String id); @Headers({"Accept: application/json"}) @PUT("statuses/{id}") Call<Status> updateStatus( Loading Loading @@ -177,6 +178,18 @@ public interface MastodonStatusesService { @Query("limit") int limit ); @GET("statuses/{id}/quotes") Call<List<Status>> getStatusQuotes( @Header("Authorization") String token, @Path("id") String id, @Query("max_id") String max_id, @Query("since_id") String since_id, @Query("min_id") String min_id, @Query("limit") int limit ); //Add status to favourites @POST("statuses/{id}/favourite") Call<Status> favourites( Loading
app/src/main/java/app/fedilab/android/mastodon/client/entities/app/Timeline.java +2 −0 Original line number Diff line number Diff line Loading @@ -398,6 +398,8 @@ public class Timeline { MUTED_TIMELINE_HOME("MUTED_TIMELINE_HOME"), @SerializedName("BOOKMARK_TIMELINE") BOOKMARK_TIMELINE("BOOKMARK_TIMELINE"), @SerializedName("QUOTE_TIMELINE") QUOTE_TIMELINE("QUOTE_TIMELINE"), @SerializedName("BLOCKED_DOMAIN_TIMELINE") BLOCKED_DOMAIN_TIMELINE("BLOCKED_DOMAIN_TIMELINE"), @SerializedName("BLOCKED_TIMELINE") Loading
app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java +11 −3 Original line number Diff line number Diff line Loading @@ -60,7 +60,6 @@ import android.text.Html; import android.text.Spannable; import android.text.SpannableString; import android.text.TextUtils; import android.util.Log; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.MenuItem; Loading Loading @@ -2095,8 +2094,17 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> } }); holder.binding.quoteInfo.setOnClickListener(v->{ if (statusToDeal.quotes_count > 0) { if (statusToDeal.quotes_count > 0 && statusToDeal.account.id.compareTo(BaseMainActivity.currentUserID) == 0) { Bundle args = new Bundle(); args.putSerializable(Helper.ARG_TIMELINE_TYPE, Timeline.TimeLineEnum.QUOTE_TIMELINE); args.putSerializable(Helper.ARG_STATUS_ID, statusToDeal.id); Intent intent = new Intent(context, TimelineActivity.class); new CachedBundle(context).insertBundle(args, Helper.getCurrentAccount(context), bundleId -> { Bundle bundle = new Bundle(); bundle.putLong(Helper.ARG_INTENT_ID, bundleId); intent.putExtras(bundle); context.startActivity(intent); }); } }); Loading
app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonTimeline.java +18 −0 Original line number Diff line number Diff line Loading @@ -72,6 +72,7 @@ import app.fedilab.android.mastodon.helper.MastodonHelper; import app.fedilab.android.mastodon.ui.drawer.StatusAdapter; import app.fedilab.android.mastodon.viewmodel.mastodon.AccountsVM; import app.fedilab.android.mastodon.viewmodel.mastodon.SearchVM; import app.fedilab.android.mastodon.viewmodel.mastodon.StatusesVM; import app.fedilab.android.mastodon.viewmodel.mastodon.TimelinesVM; import es.dmoral.toasty.Toasty; Loading @@ -83,6 +84,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. private boolean scrollingUp; private FragmentPaginationBinding binding; private TimelinesVM timelinesVM; private StatusesVM statusesVM; private AccountsVM accountsVM; private boolean flagLoading; private String search, searchCache; Loading @@ -91,6 +93,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. private Integer offset; private StatusAdapter statusAdapter; private Timeline.TimeLineEnum timelineType; private String status_id; private String tagged; private List<Status> timelineStatuses; //Handle actions that can be done in other fragments Loading Loading @@ -418,6 +421,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. timelineType = (Timeline.TimeLineEnum) bundle.get(Helper.ARG_TIMELINE_TYPE); lemmy_post_id = bundle.getString(Helper.ARG_LEMMY_POST_ID, null); list_id = bundle.getString(Helper.ARG_LIST_ID, null); status_id = bundle.getString(Helper.ARG_STATUS_ID, null); search = bundle.getString(Helper.ARG_SEARCH_KEYWORD, null); tagged = bundle.getString(Helper.ARG_TAGGED, null); searchCache = bundle.getString(Helper.ARG_SEARCH_KEYWORD_CACHE, null); Loading Loading @@ -491,6 +495,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. timelinesVM = new ViewModelProvider(FragmentMastodonTimeline.this).get(viewModelKey, TimelinesVM.class); accountsVM = new ViewModelProvider(FragmentMastodonTimeline.this).get(viewModelKey, AccountsVM.class); statusesVM = new ViewModelProvider(FragmentMastodonTimeline.this).get(viewModelKey, StatusesVM.class); initialStatuses = null; lockForResumeCall = 0; Loading Loading @@ -690,6 +695,9 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. if (initialStatus != null) { timelineStatuses.add(initialStatus); } if(statuses.statuses == null) { statuses.statuses = new ArrayList<>(); } timelineStatuses.addAll(statuses.statuses); if (max_id == null || (statuses.pagination.max_id != null && Helper.compareTo(statuses.pagination.max_id, max_id) < 0) || timelineType.getValue().startsWith("TREND_")) { max_id = statuses.pagination.max_id; Loading Loading @@ -1272,6 +1280,16 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. } else { flagLoading = false; } }else if (timelineType == Timeline.TimeLineEnum.QUOTE_TIMELINE) { if (direction == null) { statusesVM.quotedStatus(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, status_id, null, null, null) .observe(getViewLifecycleOwner(), this::initializeStatusesCommonView); } else if (direction == DIRECTION.BOTTOM) { statusesVM.quotedStatus(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, status_id, max_id, null, null) .observe(getViewLifecycleOwner(), statusesBottom -> dealWithPagination(statusesBottom, DIRECTION.BOTTOM, false, true, fetchStatus)); } else { flagLoading = false; } } else if (timelineType == Timeline.TimeLineEnum.TREND_MESSAGE) { if (direction == null) { Loading