Commit 53ed3d42 authored by Thomas's avatar Thomas
Browse files

Allow to see who quoted

parent 24b58e04
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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;

@@ -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);
@@ -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);
+13 −0
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ public interface MastodonStatusesService {
            @Path("id") String id);



    @Headers({"Accept: application/json"})
    @PUT("statuses/{id}")
    Call<Status> updateStatus(
@@ -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(
+2 −0
Original line number Diff line number Diff line
@@ -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")
+11 −3
Original line number Diff line number Diff line
@@ -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;
@@ -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);
                });
            }
        });

+18 −0
Original line number Diff line number Diff line
@@ -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;

@@ -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;
@@ -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
@@ -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);
@@ -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;

@@ -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;
@@ -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