mirror of
https://github.com/KokaKiwi/BarInsta
synced 2024-11-22 22:57:29 +00:00
Fix clicking story from story list after searching opens wrong story. Fixes austinhuang0131/barinsta#1189
This commit is contained in:
parent
e4c4f099e5
commit
b3cd83ad31
@ -23,23 +23,29 @@ public final class FeedStoriesListAdapter extends ListAdapter<FeedStoryModel, St
|
||||
private List<FeedStoryModel> list;
|
||||
|
||||
private final Filter filter = new Filter() {
|
||||
@Nullable
|
||||
@NonNull
|
||||
@Override
|
||||
protected FilterResults performFiltering(final CharSequence filter) {
|
||||
final boolean isFilterEmpty = TextUtils.isEmpty(filter);
|
||||
final String query = isFilterEmpty ? null : filter.toString().toLowerCase();
|
||||
|
||||
for (FeedStoryModel item : list) {
|
||||
if (isFilterEmpty) item.setShown(true);
|
||||
else item.setShown(item.getProfileModel().getUsername().toLowerCase().contains(query));
|
||||
final String query = TextUtils.isEmpty(filter) ? null : filter.toString().toLowerCase();
|
||||
List<FeedStoryModel> filteredList = list;
|
||||
if (list != null && query != null) {
|
||||
filteredList = list.stream()
|
||||
.filter(feedStoryModel -> feedStoryModel.getProfileModel()
|
||||
.getUsername()
|
||||
.toLowerCase()
|
||||
.contains(query))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
return null;
|
||||
final FilterResults filterResults = new FilterResults();
|
||||
filterResults.count = filteredList != null ? filteredList.size() : 0;
|
||||
filterResults.values = filteredList;
|
||||
return filterResults;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void publishResults(final CharSequence constraint, final FilterResults results) {
|
||||
submitList(list);
|
||||
notifyDataSetChanged();
|
||||
//noinspection unchecked
|
||||
submitList((List<FeedStoryModel>) results.values, true);
|
||||
}
|
||||
};
|
||||
|
||||
@ -65,10 +71,16 @@ public final class FeedStoriesListAdapter extends ListAdapter<FeedStoryModel, St
|
||||
return filter;
|
||||
}
|
||||
|
||||
private void submitList(@Nullable final List<FeedStoryModel> list, final boolean isFiltered) {
|
||||
if (!isFiltered) {
|
||||
this.list = list;
|
||||
}
|
||||
super.submitList(list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void submitList(final List<FeedStoryModel> list) {
|
||||
super.submitList(list.stream().filter(i -> i.isShown()).collect(Collectors.toList()));
|
||||
this.list = list;
|
||||
submitList(list, false);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@ -82,11 +94,11 @@ public final class FeedStoriesListAdapter extends ListAdapter<FeedStoryModel, St
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull final StoryListViewHolder holder, final int position) {
|
||||
final FeedStoryModel model = getItem(position);
|
||||
holder.bind(model, position, listener);
|
||||
holder.bind(model, listener);
|
||||
}
|
||||
|
||||
public interface OnFeedStoryClickListener {
|
||||
void onFeedStoryClick(final FeedStoryModel model, final int position);
|
||||
void onFeedStoryClick(final FeedStoryModel model);
|
||||
|
||||
void onProfileClick(final String username);
|
||||
}
|
||||
|
@ -20,7 +20,6 @@ public final class StoryListViewHolder extends RecyclerView.ViewHolder {
|
||||
}
|
||||
|
||||
public void bind(final FeedStoryModel model,
|
||||
final int position,
|
||||
final OnFeedStoryClickListener notificationClickListener) {
|
||||
if (model == null) return;
|
||||
|
||||
@ -53,7 +52,7 @@ public final class StoryListViewHolder extends RecyclerView.ViewHolder {
|
||||
|
||||
itemView.setOnClickListener(v -> {
|
||||
if (notificationClickListener == null) return;
|
||||
notificationClickListener.onFeedStoryClick(model, position);
|
||||
notificationClickListener.onFeedStoryClick(model);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -23,9 +23,12 @@ import androidx.navigation.fragment.NavHostFragment;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import awais.instagrabber.R;
|
||||
import awais.instagrabber.adapters.FeedStoriesListAdapter;
|
||||
@ -58,15 +61,17 @@ public final class StoryListViewerFragment extends Fragment implements SwipeRefr
|
||||
private StoriesService storiesService;
|
||||
private Context context;
|
||||
private String type;
|
||||
private String currentQuery;
|
||||
private String endCursor = null;
|
||||
private FeedStoriesListAdapter adapter;
|
||||
private MenuItem menuSearch;
|
||||
|
||||
private final OnFeedStoryClickListener clickListener = new OnFeedStoryClickListener() {
|
||||
@Override
|
||||
public void onFeedStoryClick(final FeedStoryModel model, final int position) {
|
||||
public void onFeedStoryClick(final FeedStoryModel model) {
|
||||
if (model == null) return;
|
||||
final List<FeedStoryModel> feedStoryModels = feedStoriesViewModel.getList().getValue();
|
||||
if (feedStoryModels == null) return;
|
||||
final int position = Iterables.indexOf(feedStoryModels, feedStoryModel -> feedStoryModel != null
|
||||
&& Objects.equals(feedStoryModel.getStoryMediaId(), model.getStoryMediaId()));
|
||||
final NavDirections action = StoryListViewerFragmentDirections
|
||||
.actionStoryListFragmentToStoryViewerFragment(StoryViewerOptions.forFeedStoryPosition(position));
|
||||
NavHostFragment.findNavController(StoryListViewerFragment.this).navigate(action);
|
||||
@ -153,7 +158,7 @@ public final class StoryListViewerFragment extends Fragment implements SwipeRefr
|
||||
@Override
|
||||
public void onCreateOptionsMenu(@NonNull final Menu menu, final MenuInflater inflater) {
|
||||
inflater.inflate(R.menu.search, menu);
|
||||
menuSearch = menu.findItem(R.id.action_search);
|
||||
final MenuItem menuSearch = menu.findItem(R.id.action_search);
|
||||
final SearchView searchView = (SearchView) menuSearch.getActionView();
|
||||
searchView.setQueryHint(getResources().getString(R.string.action_search));
|
||||
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
|
||||
@ -166,7 +171,6 @@ public final class StoryListViewerFragment extends Fragment implements SwipeRefr
|
||||
@Override
|
||||
public boolean onQueryTextChange(final String query) {
|
||||
if (adapter != null) {
|
||||
currentQuery = query;
|
||||
adapter.getFilter().filter(query);
|
||||
}
|
||||
return true;
|
||||
|
@ -16,11 +16,15 @@ public final class FeedStoryModel implements Serializable {
|
||||
private final boolean isLive, isBestie;
|
||||
private final long timestamp;
|
||||
private final int mediaCount;
|
||||
private boolean isShown = true;
|
||||
|
||||
public FeedStoryModel(final String storyMediaId, final User profileModel, final boolean fullyRead,
|
||||
final long timestamp, final StoryModel firstStoryModel, final int mediaCount,
|
||||
final boolean isLive, final boolean isBestie) {
|
||||
public FeedStoryModel(final String storyMediaId,
|
||||
final User profileModel,
|
||||
final boolean fullyRead,
|
||||
final long timestamp,
|
||||
final StoryModel firstStoryModel,
|
||||
final int mediaCount,
|
||||
final boolean isLive,
|
||||
final boolean isBestie) {
|
||||
this.storyMediaId = storyMediaId;
|
||||
this.profileModel = profileModel;
|
||||
this.fullyRead = fullyRead;
|
||||
@ -52,10 +56,6 @@ public final class FeedStoryModel implements Serializable {
|
||||
return profileModel;
|
||||
}
|
||||
|
||||
// public void setFirstStoryModel(final StoryModel firstStoryModel) {
|
||||
// this.firstStoryModel = firstStoryModel;
|
||||
// }
|
||||
|
||||
public StoryModel getFirstStoryModel() {
|
||||
return firstStoryModel;
|
||||
}
|
||||
@ -75,12 +75,4 @@ public final class FeedStoryModel implements Serializable {
|
||||
public boolean isBestie() {
|
||||
return isBestie;
|
||||
}
|
||||
|
||||
public boolean isShown() {
|
||||
return isShown;
|
||||
}
|
||||
|
||||
public void setShown(final boolean shown) {
|
||||
isShown = shown;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user