enable multiple hashtags in one hashtag tab (#1790)
* enable multiple hashtags in one hashtag tab * add comment explaining the code in TabAdapter * delete unused drawables * add padding to EditText in dialog
This commit is contained in:
parent
2fc7ad13bb
commit
df8dc3a198
39 changed files with 105 additions and 121 deletions
|
@ -88,11 +88,11 @@ import com.keylesspalace.tusky.view.EndlessOnScrollListener;
|
|||
import com.keylesspalace.tusky.viewdata.StatusViewData;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.ListIterator;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
@ -116,7 +116,8 @@ public class TimelineFragment extends SFragment implements
|
|||
Injectable, ReselectableFragment, RefreshableFragment {
|
||||
private static final String TAG = "TimelineF"; // logging tag
|
||||
private static final String KIND_ARG = "kind";
|
||||
private static final String HASHTAG_OR_ID_ARG = "hashtag_or_id";
|
||||
private static final String ID_ARG = "id";
|
||||
private static final String HASHTAGS_ARG = "hastags";
|
||||
private static final String ARG_ENABLE_SWIPE_TO_REFRESH = "arg.enable.swipe.to.refresh";
|
||||
|
||||
private static final int LOAD_AT_ONCE = 30;
|
||||
|
@ -160,7 +161,8 @@ public class TimelineFragment extends SFragment implements
|
|||
|
||||
private TimelineAdapter adapter;
|
||||
private Kind kind;
|
||||
private String hashtagOrId;
|
||||
private String id;
|
||||
private List<String> tags;
|
||||
private LinearLayoutManager layoutManager;
|
||||
private EndlessOnScrollListener scrollListener;
|
||||
private boolean filterRemoveReplies;
|
||||
|
@ -201,25 +203,37 @@ public class TimelineFragment extends SFragment implements
|
|||
|
||||
public static TimelineFragment newInstance(Kind kind, @Nullable String hashtagOrId, boolean enableSwipeToRefresh) {
|
||||
TimelineFragment fragment = new TimelineFragment();
|
||||
Bundle arguments = new Bundle();
|
||||
Bundle arguments = new Bundle(3);
|
||||
arguments.putString(KIND_ARG, kind.name());
|
||||
arguments.putString(HASHTAG_OR_ID_ARG, hashtagOrId);
|
||||
arguments.putString(ID_ARG, hashtagOrId);
|
||||
arguments.putBoolean(ARG_ENABLE_SWIPE_TO_REFRESH, enableSwipeToRefresh);
|
||||
fragment.setArguments(arguments);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
public static TimelineFragment newHashtagInstance(@NonNull List<String> hashtags) {
|
||||
TimelineFragment fragment = new TimelineFragment();
|
||||
Bundle arguments = new Bundle(3);
|
||||
arguments.putString(KIND_ARG, Kind.TAG.name());
|
||||
arguments.putStringArrayList(HASHTAGS_ARG, new ArrayList<>(hashtags));
|
||||
arguments.putBoolean(ARG_ENABLE_SWIPE_TO_REFRESH, true);
|
||||
fragment.setArguments(arguments);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
Bundle arguments = requireArguments();
|
||||
kind = Kind.valueOf(arguments.getString(KIND_ARG));
|
||||
if (kind == Kind.TAG
|
||||
|| kind == Kind.USER
|
||||
if (kind == Kind.USER
|
||||
|| kind == Kind.USER_PINNED
|
||||
|| kind == Kind.USER_WITH_REPLIES
|
||||
|| kind == Kind.LIST) {
|
||||
hashtagOrId = arguments.getString(HASHTAG_OR_ID_ARG);
|
||||
id = arguments.getString(ID_ARG);
|
||||
}
|
||||
if(kind == Kind.TAG) {
|
||||
tags = arguments.getStringArrayList(HASHTAGS_ARG);
|
||||
}
|
||||
|
||||
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||
|
@ -822,7 +836,7 @@ public class TimelineFragment extends SFragment implements
|
|||
|
||||
@Override
|
||||
public void onViewTag(String tag) {
|
||||
if (kind == Kind.TAG && hashtagOrId.equals(tag)) {
|
||||
if (kind == Kind.TAG && tags.size() == 1 && tags.contains(tag)) {
|
||||
// If already viewing a tag page, then ignore any request to view that tag again.
|
||||
return;
|
||||
}
|
||||
|
@ -831,7 +845,7 @@ public class TimelineFragment extends SFragment implements
|
|||
|
||||
@Override
|
||||
public void onViewAccount(String id) {
|
||||
if ((kind == Kind.USER || kind == Kind.USER_WITH_REPLIES) && hashtagOrId.equals(id)) {
|
||||
if ((kind == Kind.USER || kind == Kind.USER_WITH_REPLIES) && this.id.equals(id)) {
|
||||
/* If already viewing an account page, then any requests to view that account page
|
||||
* should be ignored. */
|
||||
return;
|
||||
|
@ -981,8 +995,7 @@ public class TimelineFragment extends SFragment implements
|
|||
}
|
||||
}
|
||||
|
||||
private Call<List<Status>> getFetchCallByTimelineType(Kind kind, String tagOrId, String fromId,
|
||||
String uptoId) {
|
||||
private Call<List<Status>> getFetchCallByTimelineType(String fromId, String uptoId) {
|
||||
MastodonApi api = mastodonApi;
|
||||
switch (kind) {
|
||||
default:
|
||||
|
@ -993,19 +1006,21 @@ public class TimelineFragment extends SFragment implements
|
|||
case PUBLIC_LOCAL:
|
||||
return api.publicTimeline(true, fromId, uptoId, LOAD_AT_ONCE);
|
||||
case TAG:
|
||||
return api.hashtagTimeline(tagOrId, null, fromId, uptoId, LOAD_AT_ONCE);
|
||||
String firstHashtag = tags.get(0);
|
||||
List<String> additionalHashtags = tags.subList(1, tags.size());
|
||||
return api.hashtagTimeline(firstHashtag, additionalHashtags, null, fromId, uptoId, LOAD_AT_ONCE);
|
||||
case USER:
|
||||
return api.accountStatuses(tagOrId, fromId, uptoId, LOAD_AT_ONCE, true, null, null);
|
||||
return api.accountStatuses(id, fromId, uptoId, LOAD_AT_ONCE, true, null, null);
|
||||
case USER_PINNED:
|
||||
return api.accountStatuses(tagOrId, fromId, uptoId, LOAD_AT_ONCE, null, null, true);
|
||||
return api.accountStatuses(id, fromId, uptoId, LOAD_AT_ONCE, null, null, true);
|
||||
case USER_WITH_REPLIES:
|
||||
return api.accountStatuses(tagOrId, fromId, uptoId, LOAD_AT_ONCE, null, null, null);
|
||||
return api.accountStatuses(id, fromId, uptoId, LOAD_AT_ONCE, null, null, null);
|
||||
case FAVOURITES:
|
||||
return api.favourites(fromId, uptoId, LOAD_AT_ONCE);
|
||||
case BOOKMARKS:
|
||||
return api.bookmarks(fromId, uptoId, LOAD_AT_ONCE);
|
||||
case LIST:
|
||||
return api.listTimeline(tagOrId, fromId, uptoId, LOAD_AT_ONCE);
|
||||
return api.listTimeline(id, fromId, uptoId, LOAD_AT_ONCE);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1047,7 +1062,7 @@ public class TimelineFragment extends SFragment implements
|
|||
}
|
||||
};
|
||||
|
||||
Call<List<Status>> listCall = getFetchCallByTimelineType(kind, hashtagOrId, maxId, sinceId);
|
||||
Call<List<Status>> listCall = getFetchCallByTimelineType(maxId, sinceId);
|
||||
callList.add(listCall);
|
||||
listCall.enqueue(callback);
|
||||
}
|
||||
|
@ -1330,7 +1345,7 @@ public class TimelineFragment extends SFragment implements
|
|||
break;
|
||||
case USER:
|
||||
case USER_WITH_REPLIES:
|
||||
if (status.getAccount().getId().equals(hashtagOrId)) {
|
||||
if (status.getAccount().getId().equals(id)) {
|
||||
break;
|
||||
} else {
|
||||
return;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue