diff options
author | Alex Ning <chineseperson5@gmail.com> | 2020-12-08 07:12:56 +0000 |
---|---|---|
committer | Alex Ning <chineseperson5@gmail.com> | 2020-12-08 07:12:56 +0000 |
commit | a6975f2489119a0e0cc278fcdee8cead97978b14 (patch) | |
tree | 5f3a9d318a499f06bb778ed22d9680ccb2abf356 | |
parent | 69af53ddbabfa4d2b3cd6f4e1fb49dc0a697aa23 (diff) | |
download | infinity-for-reddit-a6975f2489119a0e0cc278fcdee8cead97978b14.tar infinity-for-reddit-a6975f2489119a0e0cc278fcdee8cead97978b14.tar.gz infinity-for-reddit-a6975f2489119a0e0cc278fcdee8cead97978b14.tar.bz2 infinity-for-reddit-a6975f2489119a0e0cc278fcdee8cead97978b14.tar.lz infinity-for-reddit-a6975f2489119a0e0cc278fcdee8cead97978b14.tar.xz infinity-for-reddit-a6975f2489119a0e0cc278fcdee8cead97978b14.tar.zst infinity-for-reddit-a6975f2489119a0e0cc278fcdee8cead97978b14.zip |
Hide read posts in MainActivity (there is an issue in lazy mode).
11 files changed, 131 insertions, 2 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FragmentCommunicator.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FragmentCommunicator.java index 07a18a72..3fb00c2a 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/FragmentCommunicator.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FragmentCommunicator.java @@ -35,4 +35,7 @@ public interface FragmentCommunicator { } void applyTheme(); + + default void hideReadPosts() { + } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/MainActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/MainActivity.java index c963cf84..9219de22 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/MainActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/MainActivity.java @@ -591,6 +591,9 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_RANDOM: fab.setImageResource(R.drawable.ic_random_24dp); break; + case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_HIDE_READ_POSTS: + fab.setImageResource(R.drawable.ic_hide_read_posts_24dp); + break; default: fab.setImageResource(R.drawable.ic_add_day_night_24dp); break; @@ -625,6 +628,11 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_RANDOM: randomThing(); break; + case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_HIDE_READ_POSTS: + if (sectionsPagerAdapter != null) { + sectionsPagerAdapter.hideReadPosts(); + } + break; default: postTypeBottomSheetFragment.show(getSupportFragmentManager(), postTypeBottomSheetFragment.getTag()); break; @@ -1199,6 +1207,12 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb randomThing(); break; } + case FABMoreOptionsBottomSheetFragment.FAB_HIDE_READ_POSTS: { + if (sectionsPagerAdapter != null) { + sectionsPagerAdapter.hideReadPosts(); + } + break; + } } } @@ -1523,5 +1537,12 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb Utils.displaySortTypeInToolbar(sortType, toolbar); } } + + void hideReadPosts() { + PostFragment currentFragment = getCurrentFragment(); + if (currentFragment != null) { + currentFragment.hideReadPosts(); + } + } } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java index 76df281b..9d9e890d 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java @@ -173,6 +173,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView private int mButtonTextColor; private int mPostIconAndInfoColor; private int mDividerColor; + private int mHideReadPostsIndex = 0; private float mScale; private boolean mDisplaySubredditName; private boolean mVoteButtonsOnTheRight; @@ -394,6 +395,15 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView Post post = getItem(position); if (post != null) { if (post.isRead()) { + if (position < mHideReadPostsIndex) { + holder.itemView.setVisibility(View.GONE); + RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) holder.itemView.getLayoutParams(); + params.height = 0; + params.topMargin = 0; + params.bottomMargin = 0; + holder.itemView.setLayoutParams(params); + return; + } holder.itemView.setBackgroundTintList(ColorStateList.valueOf(mReadPostCardViewBackgroundColor)); ((PostBaseViewHolder) holder).titleTextView.setTextColor(mReadPostTitleColor); } @@ -706,6 +716,13 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView Post post = getItem(position); if (post != null) { if (post.isRead()) { + if (position < mHideReadPostsIndex) { + holder.itemView.setVisibility(View.GONE); + ViewGroup.LayoutParams params = holder.itemView.getLayoutParams(); + params.height = 0; + holder.itemView.setLayoutParams(params); + return; + } holder.itemView.setBackgroundColor(mReadPostCardViewBackgroundColor); ((PostCompactBaseViewHolder) holder).titleTextView.setTextColor(mReadPostTitleColor); } @@ -1189,6 +1206,18 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView mShowAbsoluteNumberOfVotes = showAbsoluteNumberOfVotes; } + public int getHideReadPostsIndex() { + return mHideReadPostsIndex; + } + + public void setHideReadPostsIndex(int hideReadPostsIndex) { + mHideReadPostsIndex = hideReadPostsIndex; + } + + public void prepareToHideReadPosts() { + mHideReadPostsIndex = getItemCount(); + } + private boolean hasExtraRow() { return networkState != null && networkState.getStatus() != NetworkState.Status.SUCCESS; } @@ -1265,6 +1294,13 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) { super.onViewRecycled(holder); if (holder instanceof PostBaseViewHolder) { + ((PostBaseViewHolder) holder).itemView.setVisibility(View.VISIBLE); + RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) holder.itemView.getLayoutParams(); + params.height = ViewGroup.LayoutParams.WRAP_CONTENT; + int marginPixel = (int) Utils.convertDpToPixel(8, mActivity); + params.topMargin = marginPixel; + params.bottomMargin = marginPixel; + holder.itemView.setLayoutParams(params); ((PostBaseViewHolder) holder).itemView.setBackgroundTintList(ColorStateList.valueOf(mCardViewBackgroundColor)); ((PostBaseViewHolder) holder).titleTextView.setTextColor(mPostTitleColor); if (holder instanceof PostVideoAutoplayViewHolder) { @@ -1306,6 +1342,10 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView ((PostBaseViewHolder) holder).scoreTextView.setTextColor(mPostIconAndInfoColor); ((PostBaseViewHolder) holder).downvoteButton.setColorFilter(mPostIconAndInfoColor, android.graphics.PorterDuff.Mode.SRC_IN); } else if (holder instanceof PostCompactBaseViewHolder) { + ((PostCompactBaseViewHolder) holder).itemView.setVisibility(View.VISIBLE); + ViewGroup.LayoutParams params = holder.itemView.getLayoutParams(); + params.height = ViewGroup.LayoutParams.WRAP_CONTENT; + holder.itemView.setLayoutParams(params); ((PostCompactBaseViewHolder) holder).itemView.setBackgroundColor(mCardViewBackgroundColor); ((PostCompactBaseViewHolder) holder).titleTextView.setTextColor(mPostTitleColor); mGlide.clear(((PostCompactBaseViewHolder) holder).imageView); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/bottomsheetfragments/FABMoreOptionsBottomSheetFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/bottomsheetfragments/FABMoreOptionsBottomSheetFragment.java index a0061ff8..a7311736 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/bottomsheetfragments/FABMoreOptionsBottomSheetFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/bottomsheetfragments/FABMoreOptionsBottomSheetFragment.java @@ -25,6 +25,7 @@ public class FABMoreOptionsBottomSheetFragment extends RoundedBottomSheetDialogF public static final int FAB_OPTION_GO_TO_SUBREDDIT = 5; public static final int FAB_OPTION_GO_TO_USER = 6; public static final int FAB_RANDOM = 7; + public static final int FAB_HIDE_READ_POSTS = 8; @BindView(R.id.submit_post_text_view_fab_more_options_bottom_sheet_fragment) TextView submitPostTextView; @@ -42,6 +43,8 @@ public class FABMoreOptionsBottomSheetFragment extends RoundedBottomSheetDialogF TextView goToUserTextView; @BindView(R.id.random_text_view_fab_more_options_bottom_sheet_fragment) TextView randomTextView; + @BindView(R.id.hide_read_posts_text_view_fab_more_options_bottom_sheet_fragment) + TextView hideReadPostsTextView; private FABOptionSelectionCallback activity; public FABMoreOptionsBottomSheetFragment() { @@ -96,6 +99,11 @@ public class FABMoreOptionsBottomSheetFragment extends RoundedBottomSheetDialogF dismiss(); }); + hideReadPostsTextView.setOnClickListener(view -> { + activity.fabOptionSelected(FAB_HIDE_READ_POSTS); + dismiss(); + }); + return rootView; } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragment.java index 6686e3ff..c682e181 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragment.java @@ -135,6 +135,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator { private static final String RECYCLER_VIEW_POSITION_STATE = "RVPS"; private static final String READ_POST_LIST_STATE = "RPLS"; private static final String SUBREDDIT_FILTER_LIST_STATE = "SFLS"; + private static final String HIDE_READ_POSTS_INDEX_STATE = "HRPIS"; @BindView(R.id.swipe_refresh_layout_post_fragment) SwipeRefreshLayout mSwipeRefreshLayout; @@ -370,6 +371,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator { mSwipeRefreshLayout.setEnabled(mSharedPreferences.getBoolean(SharedPreferencesUtils.PULL_TO_REFRESH, true)); mSwipeRefreshLayout.setOnRefreshListener(this::refresh); + int hideReadPostsIndex = 0; if (savedInstanceState != null) { int recyclerViewPosition = savedInstanceState.getInt(RECYCLER_VIEW_POSITION_STATE); if (recyclerViewPosition > 0) { @@ -379,6 +381,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator { isInLazyMode = savedInstanceState.getBoolean(IS_IN_LAZY_MODE_STATE); readPosts = savedInstanceState.getParcelableArrayList(READ_POST_LIST_STATE); subredditFilterList = savedInstanceState.getParcelableArrayList(SUBREDDIT_FILTER_LIST_STATE); + hideReadPostsIndex = savedInstanceState.getInt(HIDE_READ_POSTS_INDEX_STATE, 0); } mPostRecyclerView.setOnTouchListener((view, motionEvent) -> { @@ -653,6 +656,8 @@ public class PostFragment extends Fragment implements FragmentCommunicator { }); } + mAdapter.setHideReadPostsIndex(hideReadPostsIndex); + if (activity instanceof ActivityToolbarInterface) { ((ActivityToolbarInterface) activity).displaySortType(); } @@ -976,6 +981,9 @@ public class PostFragment extends Fragment implements FragmentCommunicator { outState.putBoolean(IS_IN_LAZY_MODE_STATE, isInLazyMode); outState.putParcelableArrayList(READ_POST_LIST_STATE, readPosts); outState.putParcelableArrayList(SUBREDDIT_FILTER_LIST_STATE, subredditFilterList); + if (mAdapter != null) { + outState.putInt(HIDE_READ_POSTS_INDEX_STATE, mAdapter.getHideReadPostsIndex()); + } if (mLinearLayoutManager != null) { outState.putInt(RECYCLER_VIEW_POSITION_STATE, mLinearLayoutManager.findFirstVisibleItemPosition()); } else if (mStaggeredGridLayoutManager != null) { @@ -1143,6 +1151,14 @@ public class PostFragment extends Fragment implements FragmentCommunicator { mFetchPostInfoTextView.setTextColor(customThemeWrapper.getSecondaryTextColor()); } + @Override + public void hideReadPosts() { + if (mAdapter != null) { + mAdapter.prepareToHideReadPosts(); + refreshAdapter(); + } + } + @Subscribe public void onPostUpdateEvent(PostUpdateEventToPostList event) { PagedList<Post> posts = mAdapter.getCurrentList(); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/utils/SharedPreferencesUtils.java b/app/src/main/java/ml/docilealligator/infinityforreddit/utils/SharedPreferencesUtils.java index a5ba50de..44bf874f 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/utils/SharedPreferencesUtils.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/utils/SharedPreferencesUtils.java @@ -194,6 +194,7 @@ public class SharedPreferencesUtils { public static final int MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_GO_TO_SUBREDDIT = 5; public static final int MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_GO_TO_USER = 6; public static final int MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_RANDOM = 7; + public static final int MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_HIDE_READ_POSTS = 8; public static final int OTHER_ACTIVITIES_BOTTOM_APP_BAR_OPTION_HOME = 0; public static final int OTHER_ACTIVITIES_BOTTOM_APP_BAR_OPTION_SUBSCRIPTIONS = 1; public static final int OTHER_ACTIVITIES_BOTTOM_APP_BAR_OPTION_INBOX = 2; diff --git a/app/src/main/res/drawable-night/ic_hide_read_posts_24dp.xml b/app/src/main/res/drawable-night/ic_hide_read_posts_24dp.xml new file mode 100644 index 00000000..ea2c937f --- /dev/null +++ b/app/src/main/res/drawable-night/ic_hide_read_posts_24dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#FFFFFF" + android:pathData="M12,6c3.79,0 7.17,2.13 8.82,5.5 -0.59,1.22 -1.42,2.27 -2.41,3.12l1.41,1.41c1.39,-1.23 2.49,-2.77 3.18,-4.53C21.27,7.11 17,4 12,4c-1.27,0 -2.49,0.2 -3.64,0.57l1.65,1.65C10.66,6.09 11.32,6 12,6zM10.93,7.14L13,9.21c0.57,0.25 1.03,0.71 1.28,1.28l2.07,2.07c0.08,-0.34 0.14,-0.7 0.14,-1.07C16.5,9.01 14.48,7 12,7c-0.37,0 -0.72,0.05 -1.07,0.14zM2.01,3.87l2.68,2.68C3.06,7.83 1.77,9.53 1,11.5 2.73,15.89 7,19 12,19c1.52,0 2.98,-0.29 4.32,-0.82l3.42,3.42 1.41,-1.41L3.42,2.45 2.01,3.87zM9.51,11.37l2.61,2.61c-0.04,0.01 -0.08,0.02 -0.12,0.02 -1.38,0 -2.5,-1.12 -2.5,-2.5 0,-0.05 0.01,-0.08 0.01,-0.13zM6.11,7.97l1.75,1.75c-0.23,0.55 -0.36,1.15 -0.36,1.78 0,2.48 2.02,4.5 4.5,4.5 0.63,0 1.23,-0.13 1.77,-0.36l0.98,0.98c-0.88,0.24 -1.8,0.38 -2.75,0.38 -3.79,0 -7.17,-2.13 -8.82,-5.5 0.7,-1.43 1.72,-2.61 2.93,-3.53z"/> +</vector> diff --git a/app/src/main/res/drawable/ic_hide_read_posts_24dp.xml b/app/src/main/res/drawable/ic_hide_read_posts_24dp.xml new file mode 100644 index 00000000..f69f3ff8 --- /dev/null +++ b/app/src/main/res/drawable/ic_hide_read_posts_24dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#000000" + android:pathData="M12,6c3.79,0 7.17,2.13 8.82,5.5 -0.59,1.22 -1.42,2.27 -2.41,3.12l1.41,1.41c1.39,-1.23 2.49,-2.77 3.18,-4.53C21.27,7.11 17,4 12,4c-1.27,0 -2.49,0.2 -3.64,0.57l1.65,1.65C10.66,6.09 11.32,6 12,6zM10.93,7.14L13,9.21c0.57,0.25 1.03,0.71 1.28,1.28l2.07,2.07c0.08,-0.34 0.14,-0.7 0.14,-1.07C16.5,9.01 14.48,7 12,7c-0.37,0 -0.72,0.05 -1.07,0.14zM2.01,3.87l2.68,2.68C3.06,7.83 1.77,9.53 1,11.5 2.73,15.89 7,19 12,19c1.52,0 2.98,-0.29 4.32,-0.82l3.42,3.42 1.41,-1.41L3.42,2.45 2.01,3.87zM9.51,11.37l2.61,2.61c-0.04,0.01 -0.08,0.02 -0.12,0.02 -1.38,0 -2.5,-1.12 -2.5,-2.5 0,-0.05 0.01,-0.08 0.01,-0.13zM6.11,7.97l1.75,1.75c-0.23,0.55 -0.36,1.15 -0.36,1.78 0,2.48 2.02,4.5 4.5,4.5 0.63,0 1.23,-0.13 1.77,-0.36l0.98,0.98c-0.88,0.24 -1.8,0.38 -2.75,0.38 -3.79,0 -7.17,-2.13 -8.82,-5.5 0.7,-1.43 1.72,-2.61 2.93,-3.53z"/> +</vector> diff --git a/app/src/main/res/layout/fragment_fab_more_options_bottom_sheet.xml b/app/src/main/res/layout/fragment_fab_more_options_bottom_sheet.xml index 92ef8b02..6a0773b2 100644 --- a/app/src/main/res/layout/fragment_fab_more_options_bottom_sheet.xml +++ b/app/src/main/res/layout/fragment_fab_more_options_bottom_sheet.xml @@ -163,6 +163,25 @@ android:focusable="true" android:background="?attr/selectableItemBackground" /> + <TextView + android:id="@+id/hide_read_posts_text_view_fab_more_options_bottom_sheet_fragment" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center_vertical" + android:paddingTop="16dp" + android:paddingBottom="16dp" + android:paddingStart="32dp" + android:paddingEnd="32dp" + android:text="@string/hide_read_posts" + android:textColor="?attr/primaryTextColor" + android:textSize="?attr/font_default" + android:fontFamily="?attr/font_family" + app:drawableStartCompat="@drawable/ic_hide_read_posts_24dp" + android:drawablePadding="48dp" + android:clickable="true" + android:focusable="true" + android:background="?attr/selectableItemBackground" /> + </LinearLayout> </androidx.core.widget.NestedScrollView>
\ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 37228db4..d643be2c 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -260,6 +260,7 @@ <item>Go to Subreddit</item> <item>Go to User</item> <item>Random</item> + <item>Hide Read Posts</item> </string-array> <string-array name="settings_swipe_action_threshold"> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4020537a..2fe0623c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -929,8 +929,8 @@ <string name="dismiss">Dismiss</string> <string name="leave">Leave</string> - <string name="go_to_subreddit">Go to subreddit</string> - <string name="go_to_user">Go to user</string> + <string name="go_to_subreddit">Go to Subreddit</string> + <string name="go_to_user">Go to User</string> <string name="go_to_thing_hint">Name</string> <string name="random">Random</string> <string name="random_subreddit">Random Subreddit</string> @@ -941,4 +941,6 @@ <string name="select_video_quality">Select Video Quality</string> + <string name="hide_read_posts">Hide Read Posts</string> + </resources> |