diff --git a/app/src/main/java/com/keylesspalace/tusky/adapter/TimelineAdapter.java b/app/src/main/java/com/keylesspalace/tusky/adapter/TimelineAdapter.java index 892197b77..4f06ef475 100644 --- a/app/src/main/java/com/keylesspalace/tusky/adapter/TimelineAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/adapter/TimelineAdapter.java @@ -145,6 +145,11 @@ public class TimelineAdapter extends RecyclerView.Adapter implements AdapterItem notifyItemRemoved(position); } + public void clear() { + statuses.clear(); + notifyDataSetChanged(); + } + public void removeAllByAccountId(String accountId) { for (int i = 0; i < statuses.size();) { Status status = statuses.get(i); diff --git a/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java b/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java index dd35d16b6..17e9b726f 100644 --- a/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java @@ -43,6 +43,7 @@ import com.keylesspalace.tusky.util.Log; import com.keylesspalace.tusky.util.TimelineReceiver; import com.keylesspalace.tusky.util.ThemeUtils; +import java.util.Iterator; import java.util.List; import retrofit2.Call; @@ -73,6 +74,9 @@ public class TimelineFragment extends SFragment implements private LinearLayoutManager layoutManager; private EndlessOnScrollListener scrollListener; private TabLayout.OnTabSelectedListener onTabSelectedListener; + private SharedPreferences preferences; + private boolean filterRemoveReplies; + private boolean filterRemoveReblogs; private boolean hideFab; private TimelineReceiver timelineReceiver; @@ -201,6 +205,8 @@ public class TimelineFragment extends SFragment implements }; } recyclerView.addOnScrollListener(scrollListener); + + preferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); } @Override @@ -292,7 +298,36 @@ public class TimelineFragment extends SFragment implements return false; } + protected void filterStatuses(List statuses) { + Iterator it = statuses.iterator(); + while (it.hasNext()) { + Status status = it.next(); + if ((status.inReplyToId != null && filterRemoveReplies) || (status.reblog != null && filterRemoveReblogs)) { + it.remove(); + } + } + } + + protected void setFiltersFromSettings() { + boolean oldRemoveReplies = filterRemoveReplies; + boolean oldRemoveReblogs = filterRemoveReblogs; + filterRemoveReplies = (kind == Kind.HOME && !preferences.getBoolean("tabFilterHomeReplies", true)); + filterRemoveReblogs = (kind == Kind.HOME && !preferences.getBoolean("tabFilterHomeBoosts", true)); + + if (adapter.getItemCount() > 1 && (oldRemoveReblogs != filterRemoveReblogs || oldRemoveReplies != filterRemoveReplies)) { + adapter.clear(); + sendFetchTimelineRequest(null, null); + } + } + + @Override + public void onResume() { + super.onResume(); + setFiltersFromSettings(); + } + public void onFetchTimelineSuccess(List statuses, String fromId) { + filterStatuses(statuses); if (fromId != null) { if (statuses.size() > 0 && !findStatus(statuses, fromId)) { adapter.addItems(statuses); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b13921d57..88cacbd1d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -160,6 +160,10 @@ Browser Use Chrome Custom Tabs Hide follow button while scrolling + Toot filtering + Tabs + Show boosts + Show replies %s mentioned you %1$s, %2$s, %3$s and %4$d others diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index b65497de0..8b6006e73 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -21,6 +21,26 @@ android:title="@string/pref_title_custom_tabs" android:defaultValue="true" /> + + + + + + + + + + + + diff --git a/build.gradle b/build.gradle index f8f4d274a..80e6fd508 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.1' + classpath 'com.android.tools.build:gradle:2.3.2' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files