diff options
author | Alex Ning <chineseperson5@gmail.com> | 2020-12-31 09:00:25 +0000 |
---|---|---|
committer | Alex Ning <chineseperson5@gmail.com> | 2020-12-31 09:00:25 +0000 |
commit | a6f728a96b1f3968e434678fc56ed2dd38b6b54a (patch) | |
tree | cbb0898d77d9515221ac7f7f6da733fa51e93f97 /app | |
parent | 321f4da6230fd6197e5e0773db3a8d28b01e5215 (diff) | |
download | infinity-for-reddit-a6f728a96b1f3968e434678fc56ed2dd38b6b54a.tar infinity-for-reddit-a6f728a96b1f3968e434678fc56ed2dd38b6b54a.tar.gz infinity-for-reddit-a6f728a96b1f3968e434678fc56ed2dd38b6b54a.tar.bz2 infinity-for-reddit-a6f728a96b1f3968e434678fc56ed2dd38b6b54a.tar.lz infinity-for-reddit-a6f728a96b1f3968e434678fc56ed2dd38b6b54a.tar.xz infinity-for-reddit-a6f728a96b1f3968e434678fc56ed2dd38b6b54a.tar.zst infinity-for-reddit-a6f728a96b1f3968e434678fc56ed2dd38b6b54a.zip |
Mark posts as read on scroll.
Diffstat (limited to 'app')
5 files changed, 83 insertions, 20 deletions
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 970426c3..ccb2880c 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java @@ -196,6 +196,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView private boolean mDisableImagePreview = false; private boolean mMarkPostsAsRead; private boolean mMarkPostsAsReadAfterVoting; + private boolean mMarkPostsAsReadOnScroll; private boolean mHideReadPostsAutomatically; private Drawable mCommentIcon; private NetworkState networkState; @@ -261,6 +262,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView mMarkPostsAsRead = postHistorySharedPreferences.getBoolean((accountName == null ? "" : accountName) + SharedPreferencesUtils.MARK_POSTS_AS_READ_BASE, false); mMarkPostsAsReadAfterVoting = postHistorySharedPreferences.getBoolean((accountName == null ? "" : accountName) + SharedPreferencesUtils.MARK_POSTS_AS_READ_AFTER_VOTING_BASE, false); + mMarkPostsAsReadOnScroll = postHistorySharedPreferences.getBoolean((accountName == null ? "" : accountName) + SharedPreferencesUtils.MARK_POSTS_AS_READ_ON_SCROLL_BASE, false); mHideReadPostsAutomatically = postHistorySharedPreferences.getBoolean((accountName == null ? "" : accountName) + SharedPreferencesUtils.HIDE_READ_POSTS_AUTOMATICALLY_BASE, false); mPostLayout = postLayout; @@ -1318,6 +1320,13 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) { super.onViewRecycled(holder); if (holder instanceof PostBaseViewHolder) { + if (mMarkPostsAsReadOnScroll) { + int position = holder.getAdapterPosition(); + if (position < super.getItemCount() && position >= 0) { + Post post = getItem(position); + ((PostBaseViewHolder) holder).markPostRead(post, false); + } + } ((PostBaseViewHolder) holder).itemView.setVisibility(View.VISIBLE); RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) holder.itemView.getLayoutParams(); params.height = ViewGroup.LayoutParams.WRAP_CONTENT; @@ -1366,6 +1375,13 @@ 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) { + if (mMarkPostsAsReadOnScroll) { + int position = holder.getAdapterPosition(); + if (position < super.getItemCount() && position >= 0) { + Post post = getItem(position); + ((PostCompactBaseViewHolder) holder).markPostRead(post, false); + } + } ((PostCompactBaseViewHolder) holder).itemView.setVisibility(View.VISIBLE); ViewGroup.LayoutParams params = holder.itemView.getLayoutParams(); params.height = ViewGroup.LayoutParams.WRAP_CONTENT; @@ -1590,7 +1606,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView if (position >= 0 && canStartActivity) { Post post = getItem(position); if (post != null) { - markPostRead(post); + markPostRead(post, true); canStartActivity = false; Intent intent = new Intent(mActivity, ViewPostDetailActivity.class); @@ -1706,7 +1722,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView } if (mMarkPostsAsReadAfterVoting) { - markPostRead(post); + markPostRead(post, true); } if (post.isArchived()) { @@ -1796,7 +1812,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView } if (mMarkPostsAsReadAfterVoting) { - markPostRead(post); + markPostRead(post, true); } if (post.isArchived()) { @@ -1949,13 +1965,15 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView }); } - void markPostRead(Post post) { + void markPostRead(Post post, boolean changePostItemColor) { if (mAccessToken != null && !post.isRead() && mMarkPostsAsRead) { post.markAsRead(); - cardView.setBackgroundTintList(ColorStateList.valueOf(mReadPostCardViewBackgroundColor)); - titleTextView.setTextColor(mReadPostTitleColor); - if (this instanceof PostTextTypeViewHolder) { - ((PostTextTypeViewHolder) this).contentTextView.setTextColor(mReadPostContentColor); + if (changePostItemColor) { + cardView.setBackgroundTintList(ColorStateList.valueOf(mReadPostCardViewBackgroundColor)); + titleTextView.setTextColor(mReadPostTitleColor); + if (this instanceof PostTextTypeViewHolder) { + ((PostTextTypeViewHolder) this).contentTextView.setTextColor(mReadPostContentColor); + } } if (mActivity != null && mActivity instanceof MarkPostAsReadInterface) { ((MarkPostAsReadInterface) mActivity).markPostAsRead(post); @@ -2077,7 +2095,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView } Post post = getItem(position); if (post != null) { - markPostRead(post); + markPostRead(post, true); Intent intent = new Intent(mActivity, ViewVideoActivity.class); if (post.isGfycat()) { intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_GFYCAT); @@ -2322,7 +2340,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView } Post post = getItem(position); if (post != null) { - ((PostBaseViewHolder) this).markPostRead(post); + markPostRead(post, true); if (post.getPostType() == Post.VIDEO_TYPE) { Intent intent = new Intent(mActivity, ViewVideoActivity.class); if (post.isGfycat()) { @@ -2604,7 +2622,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView } Post post = getItem(position); if (post != null && canStartActivity) { - markPostRead(post); + markPostRead(post, true); canStartActivity = false; Intent intent = new Intent(mActivity, ViewPostDetailActivity.class); @@ -2623,7 +2641,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView mCallback.delayTransition(); } else { mCallback.delayTransition(); - ViewGroup.LayoutParams params = (LinearLayout.LayoutParams) bottomConstraintLayout.getLayoutParams(); + ViewGroup.LayoutParams params = bottomConstraintLayout.getLayoutParams(); params.height = 0; bottomConstraintLayout.setLayoutParams(params); } @@ -2690,7 +2708,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView } Post post = getItem(position); if (post != null) { - markPostRead(post); + markPostRead(post, true); if (post.getPostType() == Post.VIDEO_TYPE) { Intent intent = new Intent(mActivity, ViewVideoActivity.class); if (post.isGfycat()) { @@ -2756,7 +2774,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView Post post = getItem(position); if (post != null) { if (mMarkPostsAsReadAfterVoting) { - markPostRead(post); + markPostRead(post, true); } if (post.isArchived()) { @@ -2846,7 +2864,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView Post post = getItem(position); if (post != null) { if (mMarkPostsAsReadAfterVoting) { - markPostRead(post); + markPostRead(post, true); } if (post.isArchived()) { @@ -3000,11 +3018,13 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView }); } - void markPostRead(Post post) { + void markPostRead(Post post, boolean changePostItemColor) { if (mAccessToken != null && !post.isRead() && mMarkPostsAsRead) { post.markAsRead(); - itemView.setBackgroundColor(mReadPostCardViewBackgroundColor); - titleTextView.setTextColor(mReadPostTitleColor); + if (changePostItemColor) { + itemView.setBackgroundColor(mReadPostCardViewBackgroundColor); + titleTextView.setTextColor(mReadPostTitleColor); + } if (mActivity != null && mActivity instanceof MarkPostAsReadInterface) { ((MarkPostAsReadInterface) mActivity).markPostAsRead(post); } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/settings/PostHistoryFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/settings/PostHistoryFragment.java index 5d5a9e16..0c12aed9 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/settings/PostHistoryFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/settings/PostHistoryFragment.java @@ -39,6 +39,10 @@ public class PostHistoryFragment extends Fragment { LinearLayout markPostsAsReadAfterVotingLinearLayout; @BindView(R.id.mark_posts_as_read_after_voting_switch_post_history_fragment) SwitchMaterial markPostsAsReadAfterVotingSwitch; + @BindView(R.id.mark_posts_as_read_on_scroll_linear_layout_post_history_fragment) + LinearLayout markPostsAsReadOnScrollLinearLayout; + @BindView(R.id.mark_posts_as_read_on_scroll_switch_post_history_fragment) + SwitchMaterial markPostsAsReadOnScrollSwitch; @BindView(R.id.hide_read_posts_automatically_linear_layout_post_history_fragment) LinearLayout hideReadPostsAutomaticallyLinearLayout; @BindView(R.id.hide_read_posts_automatically_switch_post_history_fragment) @@ -74,6 +78,8 @@ public class PostHistoryFragment extends Fragment { accountName + SharedPreferencesUtils.MARK_POSTS_AS_READ_BASE, false)); markPostsAsReadAfterVotingSwitch.setChecked(postHistorySharedPreferences.getBoolean( accountName + SharedPreferencesUtils.MARK_POSTS_AS_READ_AFTER_VOTING_BASE, false)); + markPostsAsReadOnScrollSwitch.setChecked(postHistorySharedPreferences.getBoolean( + accountName + SharedPreferencesUtils.MARK_POSTS_AS_READ_ON_SCROLL_BASE, false)); hideReadPostsAutomaticallySwitch.setChecked(postHistorySharedPreferences.getBoolean( accountName + SharedPreferencesUtils.HIDE_READ_POSTS_AUTOMATICALLY_BASE, false)); @@ -89,6 +95,10 @@ public class PostHistoryFragment extends Fragment { markPostsAsReadAfterVotingSwitch.setOnCheckedChangeListener((compoundButton, b) -> postHistorySharedPreferences.edit().putBoolean(accountName + SharedPreferencesUtils.MARK_POSTS_AS_READ_AFTER_VOTING_BASE, b).apply()); + markPostsAsReadOnScrollLinearLayout.setOnClickListener(view -> markPostsAsReadOnScrollSwitch.performClick()); + + markPostsAsReadOnScrollSwitch.setOnCheckedChangeListener((compoundButton, b) -> postHistorySharedPreferences.edit().putBoolean(accountName + SharedPreferencesUtils.MARK_POSTS_AS_READ_ON_SCROLL_BASE, b).apply()); + hideReadPostsAutomaticallyLinearLayout.setOnClickListener(view -> hideReadPostsAutomaticallySwitch.performClick()); hideReadPostsAutomaticallySwitch.setOnCheckedChangeListener((compoundButton, b) -> postHistorySharedPreferences.edit().putBoolean(accountName + SharedPreferencesUtils.HIDE_READ_POSTS_AUTOMATICALLY_BASE, b).apply()); 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 a8f0aa34..8cfd5ce5 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/utils/SharedPreferencesUtils.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/utils/SharedPreferencesUtils.java @@ -222,6 +222,7 @@ public class SharedPreferencesUtils { public static final String POST_HISTORY_SHARED_PREFERENCES_FILE = "ml.docilealligator.infinityforreddit.post_history"; public static final String MARK_POSTS_AS_READ_BASE = "_mark_posts_as_read"; public static final String MARK_POSTS_AS_READ_AFTER_VOTING_BASE = "_mark_posts_as_read_after_voting"; + public static final String MARK_POSTS_AS_READ_ON_SCROLL_BASE = "_mark_posts_as_read_on_scroll"; public static final String HIDE_READ_POSTS_AUTOMATICALLY_BASE = "_hide_read_posts_automatically"; //Legacy Settings diff --git a/app/src/main/res/layout/fragment_post_history.xml b/app/src/main/res/layout/fragment_post_history.xml index 325d74e1..8ced3790 100644 --- a/app/src/main/res/layout/fragment_post_history.xml +++ b/app/src/main/res/layout/fragment_post_history.xml @@ -93,6 +93,37 @@ </LinearLayout> <LinearLayout + android:id="@+id/mark_posts_as_read_on_scroll_linear_layout_post_history_fragment" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="4dp" + android:paddingBottom="4dp" + android:paddingStart="72dp" + android:paddingEnd="16dp" + android:clickable="true" + android:focusable="true" + android:background="?attr/selectableItemBackground"> + + <TextView + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:layout_marginEnd="16dp" + android:layout_gravity="center_vertical" + android:text="@string/settings_mark_posts_as_read_on_scroll_title" + android:textColor="?attr/primaryTextColor" + android:textSize="?attr/font_16" + android:fontFamily="?attr/font_family" /> + + <com.google.android.material.switchmaterial.SwitchMaterial + android:id="@+id/mark_posts_as_read_on_scroll_switch_post_history_fragment" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" /> + + </LinearLayout> + + <LinearLayout android:id="@+id/hide_read_posts_automatically_linear_layout_post_history_fragment" android:layout_width="match_parent" android:layout_height="wrap_content" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c34a01ce..8223e5f7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -517,8 +517,9 @@ <string name="settings_language_title">Language</string> <string name="settings_enable_search_history_title">Enable Search History</string> <string name="settings_post_history_title">Post History</string> - <string name="settings_mark_posts_as_read_title">Mark Posts As Read</string> - <string name="settings_mark_posts_as_read_after_voting_title">Mark Posts As Read After Voting</string> + <string name="settings_mark_posts_as_read_title">Mark Posts as Read</string> + <string name="settings_mark_posts_as_read_after_voting_title">Mark Posts as Read After Voting</string> + <string name="settings_mark_posts_as_read_on_scroll_title">Mark Posts as Read on Scroll</string> <string name="settings_hide_read_posts_automatically_title">Hide Read Posts Automatically</string> <string name="no_link_available">Cannot get the link</string> |