diff options
author | Alex Ning <chineseperson5@gmail.com> | 2021-09-22 12:17:33 +0000 |
---|---|---|
committer | Alex Ning <chineseperson5@gmail.com> | 2021-09-22 12:17:33 +0000 |
commit | cc9952525b96c56c61f43477fbbcfa881694adec (patch) | |
tree | 18d25c95833ba8ddc355723a37f165b2c8f7d7dc | |
parent | d6c3bfddd713b064e545461238978d3fa6c9941e (diff) | |
download | infinity-for-reddit-cc9952525b96c56c61f43477fbbcfa881694adec.tar infinity-for-reddit-cc9952525b96c56c61f43477fbbcfa881694adec.tar.gz infinity-for-reddit-cc9952525b96c56c61f43477fbbcfa881694adec.tar.bz2 infinity-for-reddit-cc9952525b96c56c61f43477fbbcfa881694adec.tar.lz infinity-for-reddit-cc9952525b96c56c61f43477fbbcfa881694adec.tar.xz infinity-for-reddit-cc9952525b96c56c61f43477fbbcfa881694adec.tar.zst infinity-for-reddit-cc9952525b96c56c61f43477fbbcfa881694adec.zip |
Only save read post ids in PostFragment. Add read post ids to readPosts in PostFragment.
9 files changed, 43 insertions, 83 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchPostFilterReadPostsAndConcatenatedSubredditNames.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchPostFilterReadPostsAndConcatenatedSubredditNames.java index 328a2e52..468a1ce2 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchPostFilterReadPostsAndConcatenatedSubredditNames.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchPostFilterReadPostsAndConcatenatedSubredditNames.java @@ -12,7 +12,7 @@ import ml.docilealligator.infinityforreddit.subscribedsubreddit.SubscribedSubred public class FetchPostFilterReadPostsAndConcatenatedSubredditNames { public interface FetchPostFilterAndReadPostsListener { - void success(PostFilter postFilter, ArrayList<ReadPost> readPostList); + void success(PostFilter postFilter, ArrayList<String> readPostList); } public interface FetchPostFilterAndConcatenatecSubredditNamesListener { @@ -26,8 +26,12 @@ public class FetchPostFilterReadPostsAndConcatenatedSubredditNames { List<PostFilter> postFilters = redditDataRoomDatabase.postFilterDao().getValidPostFilters(postFilterUsage, nameOfUsage); PostFilter mergedPostFilter = PostFilter.mergePostFilter(postFilters); if (accountName != null) { - ArrayList<ReadPost> readPosts = (ArrayList<ReadPost>) redditDataRoomDatabase.readPostDao().getAllReadPosts(accountName); - handler.post(() -> fetchPostFilterAndReadPostsListener.success(mergedPostFilter, readPosts)); + List<ReadPost> readPosts = redditDataRoomDatabase.readPostDao().getAllReadPosts(accountName); + ArrayList<String> readPostStrings = new ArrayList<>(); + for (ReadPost readPost : readPosts) { + readPostStrings.add(readPost.getId()); + } + handler.post(() -> fetchPostFilterAndReadPostsListener.success(mergedPostFilter, readPostStrings)); } else { handler.post(() -> fetchPostFilterAndReadPostsListener.success(mergedPostFilter, null)); } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewPostDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewPostDetailActivity.java index ae3538b1..21d40979 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewPostDetailActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewPostDetailActivity.java @@ -314,6 +314,14 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele if (savedInstanceState == null) { viewPager2.setCurrentItem(getIntent().getIntExtra(EXTRA_POST_LIST_POSITION, 0), false); } + if (mSharedPreferences.getBoolean(mAccountName + SharedPreferencesUtils.MARK_POSTS_AS_READ_BASE, false)) { + viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { + @Override + public void onPageSelected(int position) { + //EventBus.getDefault().post(new (getClass().getName())); + } + }); + } searchPanelMaterialCardView.setOnClickListener(null); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/Paging3LoadingStateAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/Paging3LoadingStateAdapter.java index 0c094f4f..3f80d65e 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/Paging3LoadingStateAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/Paging3LoadingStateAdapter.java @@ -1,6 +1,5 @@ package ml.docilealligator.infinityforreddit.adapters; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -60,12 +59,9 @@ public class Paging3LoadingStateAdapter extends LoadStateAdapter<Paging3LoadingS mRetry.setTextColor(mCustomThemeWrapper.getButtonTextColor()); mRetry.setOnClickListener(retryCallback); mErrorView.setOnClickListener(retryCallback); - - Log.i("asfasdf", "asdf "); } public void bind(LoadState loadState) { - Log.i("asfasdf", "asdf bind"); mProgressBar.setVisibility(loadState instanceof LoadState.Loading ? View.VISIBLE : View.GONE); mErrorView.setVisibility(loadState instanceof LoadState.Error 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 41f06453..93a4ef30 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java @@ -2574,6 +2574,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie } if (mActivity != null && mActivity instanceof MarkPostAsReadInterface) { ((MarkPostAsReadInterface) mActivity).markPostAsRead(post); + mFragment.markPostAsRead(post); } } } @@ -3560,6 +3561,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie } if (mActivity != null && mActivity instanceof MarkPostAsReadInterface) { ((MarkPostAsReadInterface) mActivity).markPostAsRead(post); + mFragment.markPostAsRead(post); } } } @@ -3796,6 +3798,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie } if (mActivity != null && mActivity instanceof MarkPostAsReadInterface) { ((MarkPostAsReadInterface) mActivity).markPostAsRead(post); + mFragment.markPostAsRead(post); } } } 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 745cdc1e..299505ec 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragment.java @@ -129,7 +129,6 @@ import ml.docilealligator.infinityforreddit.post.PostPagingSource; import ml.docilealligator.infinityforreddit.post.PostViewModel; import ml.docilealligator.infinityforreddit.postfilter.PostFilter; import ml.docilealligator.infinityforreddit.postfilter.PostFilterUsage; -import ml.docilealligator.infinityforreddit.readpost.ReadPost; import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.utils.Utils; import retrofit2.Retrofit; @@ -248,7 +247,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator { private boolean vibrateWhenActionTriggered; private float swipeActionThreshold; private ItemTouchHelper touchHelper; - private ArrayList<ReadPost> readPosts; + private ArrayList<String> readPosts; private Unbinder unbinder; private Map<String, String> subredditOrUserIcons = new HashMap<>(); @@ -390,7 +389,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator { recyclerViewPosition = savedInstanceState.getInt(RECYCLER_VIEW_POSITION_STATE); isInLazyMode = savedInstanceState.getBoolean(IS_IN_LAZY_MODE_STATE); - readPosts = savedInstanceState.getParcelableArrayList(READ_POST_LIST_STATE); + readPosts = savedInstanceState.getStringArrayList(READ_POST_LIST_STATE); postFilter = savedInstanceState.getParcelable(POST_FILTER_STATE); concatenatedSubredditNames = savedInstanceState.getString(CONCATENATED_SUBREDDIT_NAMES_STATE); postFragmentId = savedInstanceState.getLong(POST_FRAGMENT_ID_STATE); @@ -1264,7 +1263,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator { public void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean(IS_IN_LAZY_MODE_STATE, isInLazyMode); - outState.putParcelableArrayList(READ_POST_LIST_STATE, readPosts); + outState.putStringArrayList(READ_POST_LIST_STATE, readPosts); if (mLinearLayoutManager != null) { outState.putInt(RECYCLER_VIEW_POSITION_STATE, mLinearLayoutManager.findFirstVisibleItemPosition()); } else if (mStaggeredGridLayoutManager != null) { @@ -1561,6 +1560,10 @@ public class PostFragment extends Fragment implements FragmentCommunicator { } } + public void markPostAsRead(Post post) { + readPosts.add(post.getId()); + } + @Subscribe public void onPostUpdateEvent(PostUpdateEventToPostList event) { ItemSnapshotList<Post> posts = mAdapter.snapshot(); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/post/ParsePost.java b/app/src/main/java/ml/docilealligator/infinityforreddit/post/ParsePost.java index 8b02bab9..ff341041 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/post/ParsePost.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/post/ParsePost.java @@ -17,7 +17,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import ml.docilealligator.infinityforreddit.postfilter.PostFilter; -import ml.docilealligator.infinityforreddit.readpost.ReadPost; import ml.docilealligator.infinityforreddit.utils.JSONUtils; import ml.docilealligator.infinityforreddit.utils.Utils; @@ -26,54 +25,7 @@ import ml.docilealligator.infinityforreddit.utils.Utils; */ public class ParsePost { - public static void parsePosts(Executor executor, Handler handler, String response, int nPosts, - PostFilter postFilter, List<ReadPost> readPostList, - ParsePostsListingListener parsePostsListingListener) { - executor.execute(() -> { - LinkedHashSet<Post> newPosts = new LinkedHashSet<>(); - try { - JSONObject jsonResponse = new JSONObject(response); - JSONArray allData = jsonResponse.getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.CHILDREN_KEY); - String lastItem = jsonResponse.getJSONObject(JSONUtils.DATA_KEY).getString(JSONUtils.AFTER_KEY); - - //Posts listing - int size; - if (nPosts < 0 || nPosts > allData.length()) { - size = allData.length(); - } else { - size = nPosts; - } - - HashSet<ReadPost> readPostHashSet = null; - if (readPostList != null) { - readPostHashSet = new HashSet<>(readPostList); - } - for (int i = 0; i < size; i++) { - try { - if (allData.getJSONObject(i).getString(JSONUtils.KIND_KEY).equals("t3")) { - JSONObject data = allData.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY); - Post post = parseBasicData(data); - if (readPostHashSet != null && readPostHashSet.contains(ReadPost.convertPost(post))) { - post.markAsRead(false); - } - if (PostFilter.isPostAllowed(post, postFilter)) { - newPosts.add(post); - } - } - } catch (JSONException e) { - e.printStackTrace(); - } - } - - handler.post(() -> parsePostsListingListener.onParsePostsListingSuccess(newPosts, lastItem)); - } catch (JSONException e) { - e.printStackTrace(); - handler.post(parsePostsListingListener::onParsePostsListingFail); - } - }); - } - - public static LinkedHashSet<Post> parsePostsSync(String response, int nPosts, PostFilter postFilter, List<ReadPost> readPostList) { + public static LinkedHashSet<Post> parsePostsSync(String response, int nPosts, PostFilter postFilter, List<String> readPostList) { LinkedHashSet<Post> newPosts = new LinkedHashSet<>(); try { JSONObject jsonResponse = new JSONObject(response); @@ -87,7 +39,7 @@ public class ParsePost { size = nPosts; } - HashSet<ReadPost> readPostHashSet = null; + HashSet<String> readPostHashSet = null; if (readPostList != null) { readPostHashSet = new HashSet<>(readPostList); } @@ -96,7 +48,7 @@ public class ParsePost { if (allData.getJSONObject(i).getString(JSONUtils.KIND_KEY).equals("t3")) { JSONObject data = allData.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY); Post post = parseBasicData(data); - if (readPostHashSet != null && readPostHashSet.contains(ReadPost.convertPost(post))) { + if (readPostHashSet != null && readPostHashSet.contains(post.getId())) { post.markAsRead(false); } if (PostFilter.isPostAllowed(post, postFilter)) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/post/PostPagingSource.java b/app/src/main/java/ml/docilealligator/infinityforreddit/post/PostPagingSource.java index 38288785..fe19a962 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/post/PostPagingSource.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/post/PostPagingSource.java @@ -54,7 +54,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<String, Post> private int postType; private SortType sortType; private PostFilter postFilter; - private List<ReadPost> readPostList; + private List<String> readPostList; private String userWhere; private String multiRedditPath; private LinkedHashSet<Post> postLinkedHashSet; @@ -62,7 +62,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<String, Post> PostPagingSource(Executor executor, Retrofit retrofit, String accessToken, String accountName, SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences, int postType, - SortType sortType, PostFilter postFilter, List<ReadPost> readPostList) { + SortType sortType, PostFilter postFilter, List<String> readPostList) { this.executor = executor; this.retrofit = retrofit; this.accessToken = accessToken; @@ -79,7 +79,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<String, Post> PostPagingSource(Executor executor, Retrofit retrofit, String accessToken, String accountName, SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences, String path, int postType, SortType sortType, PostFilter postFilter, - List<ReadPost> readPostList) { + List<String> readPostList) { this.executor = executor; this.retrofit = retrofit; this.accessToken = accessToken; @@ -117,7 +117,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<String, Post> PostPagingSource(Executor executor, Retrofit retrofit, String accessToken, String accountName, SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences, String subredditOrUserName, int postType, SortType sortType, PostFilter postFilter, - String where, List<ReadPost> readPostList) { + String where, List<String> readPostList) { this.executor = executor; this.retrofit = retrofit; this.accessToken = accessToken; @@ -136,7 +136,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<String, Post> PostPagingSource(Executor executor, Retrofit retrofit, String accessToken, String accountName, SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences, String subredditOrUserName, String query, String trendingSource, int postType, - SortType sortType, PostFilter postFilter, List<ReadPost> readPostList) { + SortType sortType, PostFilter postFilter, List<String> readPostList) { this.executor = executor; this.retrofit = retrofit; this.accessToken = accessToken; diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/post/PostViewModel.java b/app/src/main/java/ml/docilealligator/infinityforreddit/post/PostViewModel.java index ca574517..66505924 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/post/PostViewModel.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/post/PostViewModel.java @@ -23,7 +23,6 @@ import java.util.concurrent.Executor; import ml.docilealligator.infinityforreddit.SortType; import ml.docilealligator.infinityforreddit.postfilter.PostFilter; -import ml.docilealligator.infinityforreddit.readpost.ReadPost; import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; import retrofit2.Retrofit; @@ -41,7 +40,7 @@ public class PostViewModel extends ViewModel { private SortType sortType; private PostFilter postFilter; private String userWhere; - private List<ReadPost> readPostList; + private List<String> readPostList; private MutableLiveData<Boolean> currentlyReadPostIdsLiveData = new MutableLiveData<>(); private LiveData<PagingData<Post>> posts; @@ -54,7 +53,7 @@ public class PostViewModel extends ViewModel { public PostViewModel(Executor executor, Retrofit retrofit, String accessToken, String accountName, SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences, @Nullable SharedPreferences postHistorySharedPreferences, int postType, - SortType sortType, PostFilter postFilter, List<ReadPost> readPostList) { + SortType sortType, PostFilter postFilter, List<String> readPostList) { this.executor = executor; this.retrofit = retrofit; this.accessToken = accessToken; @@ -95,7 +94,7 @@ public class PostViewModel extends ViewModel { public PostViewModel(Executor executor, Retrofit retrofit, String accessToken, String accountName, SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences, @Nullable SharedPreferences postHistorySharedPreferences, String subredditName, int postType, - SortType sortType, PostFilter postFilter, List<ReadPost> readPostList) { + SortType sortType, PostFilter postFilter, List<String> readPostList) { this.executor = executor; this.retrofit = retrofit; this.accessToken = accessToken; @@ -139,7 +138,7 @@ public class PostViewModel extends ViewModel { SharedPreferences postFeedScrolledPositionSharedPreferences, @Nullable SharedPreferences postHistorySharedPreferences, String username, int postType, SortType sortType, PostFilter postFilter, String userWhere, - List<ReadPost> readPostList) { + List<String> readPostList) { this.executor = executor; this.retrofit = retrofit; this.accessToken = accessToken; @@ -183,7 +182,7 @@ public class PostViewModel extends ViewModel { SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences, @Nullable SharedPreferences postHistorySharedPreferences, String subredditName, String query, String trendingSource, int postType, SortType sortType, PostFilter postFilter, - List<ReadPost> readPostList) { + List<String> readPostList) { this.executor = executor; this.retrofit = retrofit; this.accessToken = accessToken; @@ -290,12 +289,12 @@ public class PostViewModel extends ViewModel { private SortType sortType; private PostFilter postFilter; private String userWhere; - private List<ReadPost> readPostList; + private List<String> readPostList; public Factory(Executor executor, Retrofit retrofit, String accessToken, String accountName, SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences, SharedPreferences postHistorySharedPreferences, int postType, SortType sortType, - PostFilter postFilter, List<ReadPost> readPostList) { + PostFilter postFilter, List<String> readPostList) { this.executor = executor; this.retrofit = retrofit; this.accessToken = accessToken; @@ -312,7 +311,7 @@ public class PostViewModel extends ViewModel { public Factory(Executor executor, Retrofit retrofit, String accessToken, String accountName, SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences, SharedPreferences postHistorySharedPreferences, String name, int postType, SortType sortType, - PostFilter postFilter, List<ReadPost> readPostList) { + PostFilter postFilter, List<String> readPostList) { this.executor = executor; this.retrofit = retrofit; this.accessToken = accessToken; @@ -331,7 +330,7 @@ public class PostViewModel extends ViewModel { public Factory(Executor executor, Retrofit retrofit, String accessToken, String accountName, SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences, SharedPreferences postHistorySharedPreferences, String username, int postType, - SortType sortType, PostFilter postFilter, String where, List<ReadPost> readPostList) { + SortType sortType, PostFilter postFilter, String where, List<String> readPostList) { this.executor = executor; this.retrofit = retrofit; this.accessToken = accessToken; @@ -350,7 +349,7 @@ public class PostViewModel extends ViewModel { public Factory(Executor executor, Retrofit retrofit, String accessToken, String accountName, SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences, SharedPreferences postHistorySharedPreferences, String name, String query, String trendingSource, - int postType, SortType sortType, PostFilter postFilter, List<ReadPost> readPostList) { + int postType, SortType sortType, PostFilter postFilter, List<String> readPostList) { this.executor = executor; this.retrofit = retrofit; this.accessToken = accessToken; diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/readpost/ReadPost.java b/app/src/main/java/ml/docilealligator/infinityforreddit/readpost/ReadPost.java index df704f3d..2a3da252 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/readpost/ReadPost.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/readpost/ReadPost.java @@ -10,7 +10,6 @@ import androidx.room.Entity; import androidx.room.ForeignKey; import ml.docilealligator.infinityforreddit.account.Account; -import ml.docilealligator.infinityforreddit.post.Post; @Entity(tableName = "read_posts", primaryKeys = {"username", "id"}, foreignKeys = @ForeignKey(entity = Account.class, parentColumns = "username", @@ -23,10 +22,6 @@ public class ReadPost implements Parcelable { @ColumnInfo(name = "id") private String id; - public static ReadPost convertPost(Post post) { - return new ReadPost("temp", post.getId()); - } - public ReadPost(@NonNull String username, @NonNull String id) { this.username = username; this.id = id; |