Improve filters

This commit is contained in:
stom79 2018-11-10 08:52:17 +01:00
parent c1848ffdc4
commit e97f05d1d4
5 changed files with 31 additions and 43 deletions

View File

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

View File

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

View File

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

View File

@ -75,7 +75,6 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
private PeertubeAdapter peertubeAdapater;
private String max_id;
private List<Status> statuses;
private List<Status> notFilteredStatuses;
private List<Peertube> 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<Status> statuses = Helper.filterToots(context, apiResponse.getStatuses(), mutedAccount, type);
List<Status> notFilteredStatuses = apiResponse.getStatuses();
List<Status> 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<Status> 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<Status> tempToot = new ArrayList();
tempToot.add(status);
List<Status> tempTootResult = Helper.filterToots(context, tempToot, mutedAccount, type);
if( tempTootResult != null && tempTootResult.size() > 0)
List<Status> 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<Status> statusesMissing) {
public void onRetrieveMissingFeeds(List<Status> statuses) {
if(swipeRefreshLayout == null)
return;
swipeRefreshLayout.setRefreshing(false);
List<Status> 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++;
}

View File

@ -2584,10 +2584,8 @@ public class Helper {
}
public static List<Status> filterToots(Context context, List<Status> statuses, List<String> timedMute, RetrieveFeedsAsyncTask.Type type){
if( statuses == null || statuses.size() == 0 )
return statuses;
ArrayList<Status> filteredStatus = new ArrayList<>();
public static boolean filterToots(Context context, Status status, List<String> 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