diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java index 65a51c025..d3616126d 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java @@ -1536,12 +1536,7 @@ public abstract class BaseMainActivity extends BaseActivity popup.setOnDismissListener(new PopupMenu.OnDismissListener() { @Override public void onDismiss(PopupMenu menu) { - if(homeFragment != null && homeFragment.getUserVisibleHint()) - homeFragment.refreshFilter(); - if(localFragment != null && localFragment.getUserVisibleHint()) - localFragment.refreshFilter(); - if(federatedFragment != null && federatedFragment.getUserVisibleHint()) - federatedFragment.refreshFilter(); + refreshFilters(); } }); popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @@ -1629,6 +1624,14 @@ public abstract class BaseMainActivity extends BaseActivity return true; } + public void refreshFilters(){ + if(homeFragment != null && homeFragment.getUserVisibleHint()) + homeFragment.refreshFilter(); + if(localFragment != null && localFragment.getUserVisibleHint()) + localFragment.refreshFilter(); + if(federatedFragment != null && federatedFragment.getUserVisibleHint()) + federatedFragment.refreshFilter(); + } @Override protected void onNewIntent(Intent intent) { diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/FilterAdapter.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/FilterAdapter.java index f84b2b5bc..6697ab22e 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/FilterAdapter.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/FilterAdapter.java @@ -40,6 +40,7 @@ import java.util.ArrayList; import java.util.List; import fr.gouv.etalab.mastodon.R; import fr.gouv.etalab.mastodon.activities.BaseMainActivity; +import fr.gouv.etalab.mastodon.activities.MainActivity; import fr.gouv.etalab.mastodon.asynctasks.ManageFiltersAsyncTask; import fr.gouv.etalab.mastodon.client.APIResponse; import fr.gouv.etalab.mastodon.client.Entities.Filters; @@ -208,6 +209,7 @@ public class FilterAdapter extends BaseAdapter implements OnFilterActionInterfac filterSent.setIrreversible(context_drop.isChecked()); new ManageFiltersAsyncTask(context, ManageFiltersAsyncTask.action.UPDATE_FILTER, filterSent, FilterAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } + ((MainActivity)context).refreshFilters(); dialog.dismiss(); } }); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java index b2c1e0d53..3ce012b8d 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java @@ -141,6 +141,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct private StatusListAdapter statusListAdapter; private RetrieveFeedsAsyncTask.Type type; private String targetedId; + private final int HIDDEN_STATUS = 0; private final int DISPLAYED_STATUS = 1; private final int FOCUSED_STATUS = 2; private final int COMPACT_STATUS = 3; @@ -389,6 +390,8 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct boolean isCompactMode = sharedpreferences.getBoolean(Helper.SET_COMPACT_MODE, true); if( type == RetrieveFeedsAsyncTask.Type.CONTEXT && position == conversationPosition) return FOCUSED_STATUS; + else if( !Helper.filterToots(context, statuses.get(position), timedMute, type)) + return HIDDEN_STATUS; else return isCompactMode?COMPACT_STATUS:DISPLAYED_STATUS; } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java index 51da7a85b..caa484991 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java @@ -75,7 +75,6 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn private PeertubeAdapter peertubeAdapater; private String max_id; private List statuses; - private List notFilteredStatuses; private List peertubes; private RetrieveFeedsAsyncTask.Type type; private RelativeLayout mainLoader, nextElementLoader, textviewNoAction; @@ -103,7 +102,6 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_status, container, false); statuses = new ArrayList<>(); - notFilteredStatuses = new ArrayList<>(); peertubes = new ArrayList<>(); context = getContext(); Bundle bundle = this.getArguments(); @@ -398,8 +396,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn apiResponse.setStatuses(statusesConversations); } int previousPosition = this.statuses.size(); - List statuses = Helper.filterToots(context, apiResponse.getStatuses(), mutedAccount, type); - List notFilteredStatuses = apiResponse.getStatuses(); + List statuses = apiResponse.getStatuses(); if( type == RetrieveFeedsAsyncTask.Type.HOME) { if (max_id == null || (apiResponse.getMax_id() != null && Long.parseLong(max_id) > Long.parseLong(apiResponse.getMax_id()))) max_id = apiResponse.getMax_id(); @@ -426,7 +423,6 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn //Toots are older than the bookmark -> no special treatment with them if( bookmark == null || Long.parseLong(statuses.get(0).getId())+1 < Long.parseLong(bookmark)){ this.statuses.addAll(statuses); - this.notFilteredStatuses.addAll(notFilteredStatuses); statusListAdapter.notifyItemRangeInserted(previousPosition, statuses.size()); }else { //Toots are younger than the bookmark String currentMaxId = sharedpreferences.getString(Helper.LAST_HOMETIMELINE_MAX_ID + userId + instance, null); @@ -435,9 +431,6 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn while (position < this.statuses.size() && Long.parseLong(statuses.get(0).getId()) < Long.parseLong(this.statuses.get(position).getId())) { position++; } - while (positionNotFiltered < this.notFilteredStatuses.size() && Long.parseLong(statuses.get(0).getId()) < Long.parseLong(this.notFilteredStatuses.get(positionNotFiltered).getId())) { - positionNotFiltered++; - } ArrayList tmpStatuses = new ArrayList<>(); for (Status tmpStatus : statuses) { //Mark status at new ones when their id is greater than the bookmark id / Also increments counter @@ -457,7 +450,6 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn } } this.statuses.addAll(position, tmpStatuses); - this.notFilteredStatuses.addAll(positionNotFiltered, tmpStatuses); statusListAdapter.notifyItemRangeInserted(position, tmpStatuses.size()); if( tmpStatuses.size() < 3) //If new toots are only two lv_status.scrollToPosition(0); @@ -468,7 +460,6 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn }else { this.statuses.addAll(statuses); - this.notFilteredStatuses.addAll(statuses); statusListAdapter.notifyItemRangeInserted(previousPosition, statuses.size()); } if( type == RetrieveFeedsAsyncTask.Type.HOME ) { @@ -500,10 +491,9 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn return; if( status.getId() != null && statuses != null && statuses.size() > 0 && statuses.get(0)!= null && Long.parseLong(status.getId()) > Long.parseLong(statuses.get(0).getId())) { - List tempToot = new ArrayList(); - tempToot.add(status); - List tempTootResult = Helper.filterToots(context, tempToot, mutedAccount, type); - if( tempTootResult != null && tempTootResult.size() > 0) + List tempTootResult = new ArrayList(); + tempTootResult.add(status); + if( tempTootResult.size() > 0) status = tempTootResult.get(0); if (type == RetrieveFeedsAsyncTask.Type.HOME) { @@ -512,7 +502,6 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn //Update the id of the last toot retrieved MainActivity.lastHomeId = status.getId(); statuses.add(0, status); - notFilteredStatuses.add(0, status); if (!status.getAccount().getId().equals(userId)) MainActivity.countNewStatus++; statusListAdapter.notifyItemInserted(0); @@ -525,7 +514,6 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn status.setNew(false); statuses.add(0, status); - notFilteredStatuses.add(0, status); int firstVisibleItem = mLayoutManager.findFirstVisibleItemPosition(); if (firstVisibleItem > 0) statusListAdapter.notifyItemInserted(0); @@ -538,14 +526,6 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn } } - /** - * Refresh status in list - */ - public void refreshFilter(){ - statuses.clear(); - statuses.addAll(Helper.filterToots(context, notFilteredStatuses, mutedAccount, type)); - statusListAdapter.notifyDataSetChanged(); - } @Override public void onResume(){ @@ -689,13 +669,19 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn } } + /** + * Refresh status in list + */ + public void refreshFilter(){ + statusListAdapter.notifyDataSetChanged(); + } + @Override - public void onRetrieveMissingFeeds(List statusesMissing) { + public void onRetrieveMissingFeeds(List statuses) { if(swipeRefreshLayout == null) return; swipeRefreshLayout.setRefreshing(false); - List statuses = Helper.filterToots(context, statusesMissing, mutedAccount, type); if( isSwipped && this.statuses != null && this.statuses.size() > 0) { for (Status status : this.statuses) { status.setNew(false); @@ -713,7 +699,6 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn statuses.get(i).setNew(true); inserted++; this.statuses.add(0, statuses.get(i)); - notFilteredStatuses.add(0, statuses.get(i)); if (type == RetrieveFeedsAsyncTask.Type.HOME && !statuses.get(i).getAccount().getId().equals(userId)) MainActivity.countNewStatus++; } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java index d02505597..a65f6e861 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java @@ -2584,10 +2584,8 @@ public class Helper { } - public static List filterToots(Context context, List statuses, List timedMute, RetrieveFeedsAsyncTask.Type type){ - if( statuses == null || statuses.size() == 0 ) - return statuses; - ArrayList filteredStatus = new ArrayList<>(); + + public static boolean filterToots(Context context, Status status, List timedMute, RetrieveFeedsAsyncTask.Type type){ String filter; SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); if( type == RetrieveFeedsAsyncTask.Type.HOME) @@ -2596,7 +2594,7 @@ public class Helper { filter = sharedpreferences.getString(Helper.SET_FILTER_REGEX_LOCAL, null); else filter = sharedpreferences.getString(Helper.SET_FILTER_REGEX_PUBLIC, null); - for(Status status: statuses){ + String content = status.getContent(); if( status.getSpoiler_text() != null) content += status.getSpoiler_text(); @@ -2655,12 +2653,9 @@ public class Helper { addToot = false; } } - if(addToot) - filteredStatus.add(status); - } - return filteredStatus; - } + return addToot; + } public static void colorizeIconMenu(Menu menu, int toolbarIconsColor) { final PorterDuffColorFilter colorFilter