From 5cfe8a601645383d0068f9acded1e99aa5f28459 Mon Sep 17 00:00:00 2001 From: andrewrasch Date: Tue, 21 Sep 2021 23:01:17 -0400 Subject: Added API call for generic wiki page. Updated old wiki-only call to cascade to new generic. --- .../infinityforreddit/activities/WikiActivity.java | 1 + .../java/ml/docilealligator/infinityforreddit/apis/RedditAPI.java | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/WikiActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/WikiActivity.java index f4cc17fa..b6fc29af 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/WikiActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/WikiActivity.java @@ -71,6 +71,7 @@ import retrofit2.Retrofit; public class WikiActivity extends BaseActivity { public static final String EXTRA_SUBREDDIT_NAME = "ESN"; + public static final String WIKI_PATH = "WP"; private static final String WIKI_MARKDOWN_STATE = "WMS"; @BindView(R.id.coordinator_layout_comment_wiki_activity) diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/apis/RedditAPI.java b/app/src/main/java/ml/docilealligator/infinityforreddit/apis/RedditAPI.java index 91b96c70..a7c67893 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/apis/RedditAPI.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/apis/RedditAPI.java @@ -294,8 +294,12 @@ public interface RedditAPI { @GET("/api/trending_searches_v1.json?withAds=0&raw_json=1&gilding_detail=1") Call getTrendingSearches(@HeaderMap Map headers); - @GET("/r/{subredditName}/wiki/index.json?raw_json=1") - Call getWiki(@Path("subredditName") String subredditName); + default Call getWiki(@Path("subredditName") String subredditName) { + return getWikiPage(subredditName, "index"); + }; + + @GET("/r/{subredditName}/wiki/{wikiPage}.json?raw_json=1") + Call getWikiPage(@Path("subredditName") String subredditName, @Path("wikiPage") String wikiPage); @GET("{sortType}?raw_json=1") ListenableFuture> getBestPostsListenableFuture(@Path("sortType") String sortType, @Query("after") String lastItem, @HeaderMap Map headers); -- cgit v1.2.3 From 2d5829830e062d5cef8ca3ffa55e7dab607b84a7 Mon Sep 17 00:00:00 2001 From: andrewrasch Date: Tue, 21 Sep 2021 23:50:30 -0400 Subject: Fixed handling of wiki pages LinkResolverActivity now handles wiki pages other than index and their subpages. --- .../infinityforreddit/activities/LinkResolverActivity.java | 4 +++- .../ml/docilealligator/infinityforreddit/activities/WikiActivity.java | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/LinkResolverActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/LinkResolverActivity.java index a6596edb..a4668cc5 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/LinkResolverActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/LinkResolverActivity.java @@ -49,7 +49,7 @@ public class LinkResolverActivity extends AppCompatActivity { private static final String IMGUR_ALBUM_PATTERN = "/(album|a)/\\w+/?"; private static final String IMGUR_IMAGE_PATTERN = "/\\w+/?"; private static final String RPAN_BROADCAST_PATTERN = "/rpan/r/[\\w-]+/\\w+/?\\w+/?"; - private static final String WIKI_PATTERN = "/[rR]/[\\w-]+/(wiki|w)/?\\w+"; + private static final String WIKI_PATTERN = "/[rR]/[\\w-]+/(wiki|w)?(?:/\\w+)+"; @Inject @Named("default") @@ -173,8 +173,10 @@ public class LinkResolverActivity extends AppCompatActivity { deepLinkError(uri); } } else if (path.matches(WIKI_PATTERN)) { + final String wikiPage = path.substring(path.lastIndexOf("/wiki/") + 6); Intent intent = new Intent(this, WikiActivity.class); intent.putExtra(WikiActivity.EXTRA_SUBREDDIT_NAME, segments.get(1)); + intent.putExtra(WikiActivity.EXTRA_WIKI_PATH, wikiPage); startActivity(intent); } else if (path.matches(SUBREDDIT_PATTERN)) { Intent intent = new Intent(this, ViewSubredditDetailActivity.class); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/WikiActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/WikiActivity.java index b6fc29af..372d3c6f 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/WikiActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/WikiActivity.java @@ -71,7 +71,7 @@ import retrofit2.Retrofit; public class WikiActivity extends BaseActivity { public static final String EXTRA_SUBREDDIT_NAME = "ESN"; - public static final String WIKI_PATH = "WP"; + public static final String EXTRA_WIKI_PATH = "EWP"; private static final String WIKI_MARKDOWN_STATE = "WMS"; @BindView(R.id.coordinator_layout_comment_wiki_activity) @@ -282,7 +282,7 @@ public class WikiActivity extends BaseActivity { Glide.with(this).clear(mFetchWikiInfoImageView); mFetchWikiInfoLinearLayout.setVisibility(View.GONE); - retrofit.create(RedditAPI.class).getWiki(getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME)).enqueue(new Callback() { + retrofit.create(RedditAPI.class).getWikiPage(getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME), getIntent().getStringExtra(EXTRA_WIKI_PATH)).enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { if (response.isSuccessful()) { -- cgit v1.2.3 From 0ca6bc25af02b52ce7b89b1c895a3d00e307d821 Mon Sep 17 00:00:00 2001 From: andrewrasch Date: Wed, 22 Sep 2021 00:04:21 -0400 Subject: Added link to wiki in subreddit Subreddit details menu now has a link to its wiki. Subs without a wiki will show the "this subreddit has no wiki" page. --- .../infinityforreddit/activities/ViewSubredditDetailActivity.java | 6 ++++++ app/src/main/res/menu/view_subreddit_detail_activity.xml | 6 ++++++ app/src/main/res/values/strings.xml | 1 + 3 files changed, 13 insertions(+) diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewSubredditDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewSubredditDetailActivity.java index 4096a96b..11d19e16 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewSubredditDetailActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewSubredditDetailActivity.java @@ -1180,6 +1180,12 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp Toast.makeText(this, R.string.no_app, Toast.LENGTH_SHORT).show(); } return true; + } else if (itemId == R.id.action_go_to_wiki_activity ) { + Intent wikiIntent = new Intent(this, WikiActivity.class); + wikiIntent.putExtra(WikiActivity.EXTRA_SUBREDDIT_NAME, subredditName); + wikiIntent.putExtra(WikiActivity.EXTRA_WIKI_PATH, "index"); + startActivity(wikiIntent); + return true; } return false; } diff --git a/app/src/main/res/menu/view_subreddit_detail_activity.xml b/app/src/main/res/menu/view_subreddit_detail_activity.xml index c1631814..cb92de44 100644 --- a/app/src/main/res/menu/view_subreddit_detail_activity.xml +++ b/app/src/main/res/menu/view_subreddit_detail_activity.xml @@ -58,4 +58,10 @@ android:orderInCategory="9" android:title="@string/action_share" app:showAsAction="never" /> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 68ab820b..08ce7077 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1190,5 +1190,6 @@ 6 hours 12 hours 24 hours + Go to Wiki -- cgit v1.2.3 From cc9952525b96c56c61f43477fbbcfa881694adec Mon Sep 17 00:00:00 2001 From: Alex Ning Date: Wed, 22 Sep 2021 20:17:33 +0800 Subject: Only save read post ids in PostFragment. Add read post ids to readPosts in PostFragment. --- ...lterReadPostsAndConcatenatedSubredditNames.java | 10 ++-- .../activities/ViewPostDetailActivity.java | 8 ++++ .../adapters/Paging3LoadingStateAdapter.java | 4 -- .../adapters/PostRecyclerViewAdapter.java | 3 ++ .../infinityforreddit/fragments/PostFragment.java | 11 +++-- .../infinityforreddit/post/ParsePost.java | 54 ++-------------------- .../infinityforreddit/post/PostPagingSource.java | 10 ++-- .../infinityforreddit/post/PostViewModel.java | 21 ++++----- .../infinityforreddit/readpost/ReadPost.java | 5 -- 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 readPostList); + void success(PostFilter postFilter, ArrayList readPostList); } public interface FetchPostFilterAndConcatenatecSubredditNamesListener { @@ -26,8 +26,12 @@ public class FetchPostFilterReadPostsAndConcatenatedSubredditNames { List postFilters = redditDataRoomDatabase.postFilterDao().getValidPostFilters(postFilterUsage, nameOfUsage); PostFilter mergedPostFilter = PostFilter.mergePostFilter(postFilters); if (accountName != null) { - ArrayList readPosts = (ArrayList) redditDataRoomDatabase.readPostDao().getAllReadPosts(accountName); - handler.post(() -> fetchPostFilterAndReadPostsListener.success(mergedPostFilter, readPosts)); + List readPosts = redditDataRoomDatabase.readPostDao().getAllReadPosts(accountName); + ArrayList 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 readPosts; + private ArrayList readPosts; private Unbinder unbinder; private Map 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 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 readPostList, - ParsePostsListingListener parsePostsListingListener) { - executor.execute(() -> { - LinkedHashSet 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 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 parsePostsSync(String response, int nPosts, PostFilter postFilter, List readPostList) { + public static LinkedHashSet parsePostsSync(String response, int nPosts, PostFilter postFilter, List readPostList) { LinkedHashSet newPosts = new LinkedHashSet<>(); try { JSONObject jsonResponse = new JSONObject(response); @@ -87,7 +39,7 @@ public class ParsePost { size = nPosts; } - HashSet readPostHashSet = null; + HashSet 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 private int postType; private SortType sortType; private PostFilter postFilter; - private List readPostList; + private List readPostList; private String userWhere; private String multiRedditPath; private LinkedHashSet postLinkedHashSet; @@ -62,7 +62,7 @@ public class PostPagingSource extends ListenableFuturePagingSource PostPagingSource(Executor executor, Retrofit retrofit, String accessToken, String accountName, SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences, int postType, - SortType sortType, PostFilter postFilter, List readPostList) { + SortType sortType, PostFilter postFilter, List readPostList) { this.executor = executor; this.retrofit = retrofit; this.accessToken = accessToken; @@ -79,7 +79,7 @@ public class PostPagingSource extends ListenableFuturePagingSource PostPagingSource(Executor executor, Retrofit retrofit, String accessToken, String accountName, SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences, String path, int postType, SortType sortType, PostFilter postFilter, - List readPostList) { + List readPostList) { this.executor = executor; this.retrofit = retrofit; this.accessToken = accessToken; @@ -117,7 +117,7 @@ public class PostPagingSource extends ListenableFuturePagingSource PostPagingSource(Executor executor, Retrofit retrofit, String accessToken, String accountName, SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences, String subredditOrUserName, int postType, SortType sortType, PostFilter postFilter, - String where, List readPostList) { + String where, List readPostList) { this.executor = executor; this.retrofit = retrofit; this.accessToken = accessToken; @@ -136,7 +136,7 @@ public class PostPagingSource extends ListenableFuturePagingSource 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 readPostList) { + SortType sortType, PostFilter postFilter, List 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 readPostList; + private List readPostList; private MutableLiveData currentlyReadPostIdsLiveData = new MutableLiveData<>(); private LiveData> 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 readPostList) { + SortType sortType, PostFilter postFilter, List 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 readPostList) { + SortType sortType, PostFilter postFilter, List 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 readPostList) { + List 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 readPostList) { + List 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 readPostList; + private List readPostList; public Factory(Executor executor, Retrofit retrofit, String accessToken, String accountName, SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences, SharedPreferences postHistorySharedPreferences, int postType, SortType sortType, - PostFilter postFilter, List readPostList) { + PostFilter postFilter, List 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 readPostList) { + PostFilter postFilter, List 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 readPostList) { + SortType sortType, PostFilter postFilter, String where, List 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 readPostList) { + int postType, SortType sortType, PostFilter postFilter, List 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; -- cgit v1.2.3 From 5f4ecbbe881fcfda3e7c4ec69efbbc7d546fedca Mon Sep 17 00:00:00 2001 From: Alex Ning Date: Wed, 22 Sep 2021 21:02:31 +0800 Subject: Fix posts not marked as read in ViewPostDetailActivity if swipe between posts is enabled. --- .../activities/ViewPostDetailActivity.java | 8 -------- .../infinityforreddit/fragments/PostFragment.java | 4 ++++ .../fragments/ViewPostDetailFragment.java | 17 +++++++++++++++++ 3 files changed, 21 insertions(+), 8 deletions(-) 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 21d40979..ae3538b1 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewPostDetailActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewPostDetailActivity.java @@ -314,14 +314,6 @@ 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/fragments/PostFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragment.java index 299505ec..9eac7f5f 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragment.java @@ -18,6 +18,7 @@ import android.os.Bundle; import android.os.CountDownTimer; import android.os.Handler; import android.util.DisplayMetrics; +import android.util.Log; import android.view.HapticFeedbackConstants; import android.view.KeyEvent; import android.view.LayoutInflater; @@ -1578,6 +1579,9 @@ public class PostFragment extends Fragment implements FragmentCommunicator { post.setSpoiler(event.post.isSpoiler()); post.setFlair(event.post.getFlair()); post.setSaved(event.post.isSaved()); + if (event.post.isRead()) { + post.markAsRead(true); + } mAdapter.notifyItemChanged(event.positionInList); } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewPostDetailFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewPostDetailFragment.java index 2b79125d..0fb79a49 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewPostDetailFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewPostDetailFragment.java @@ -106,6 +106,7 @@ import ml.docilealligator.infinityforreddit.post.FetchRemovedPost; import ml.docilealligator.infinityforreddit.post.HidePost; import ml.docilealligator.infinityforreddit.post.ParsePost; import ml.docilealligator.infinityforreddit.post.Post; +import ml.docilealligator.infinityforreddit.readpost.InsertReadPost; import ml.docilealligator.infinityforreddit.subreddit.FetchSubredditData; import ml.docilealligator.infinityforreddit.subreddit.SubredditData; import ml.docilealligator.infinityforreddit.utils.APIUtils; @@ -170,6 +171,9 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic @Named("post_details") SharedPreferences mPostDetailsSharedPreferences; @Inject + @Named("post_history") + SharedPreferences mPostHistorySharedPreferences; + @Inject CustomThemeWrapper mCustomThemeWrapper; @Inject ExoCreator mExoCreator; @@ -219,6 +223,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic private boolean mSwipeUpToHideFab; private boolean mExpandChildren; private boolean mSeparatePostAndComments = false; + private boolean mMarkPostsAsRead; private int mWindowWidth; private ConcatAdapter mConcatAdapter; private PostDetailRecyclerViewAdapter mPostAdapter; @@ -292,6 +297,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic mLockFab = mSharedPreferences.getBoolean(SharedPreferencesUtils.LOCK_JUMP_TO_NEXT_TOP_LEVEL_COMMENT_BUTTON, false); mSwipeUpToHideFab = mSharedPreferences.getBoolean(SharedPreferencesUtils.SWIPE_UP_TO_HIDE_JUMP_TO_NEXT_TOP_LEVEL_COMMENT_BUTTON, false); mExpandChildren = !mSharedPreferences.getBoolean(SharedPreferencesUtils.SHOW_TOP_LEVEL_COMMENTS_FIRST, false); + mMarkPostsAsRead = mPostHistorySharedPreferences.getBoolean(mAccountName + SharedPreferencesUtils.MARK_POSTS_AS_READ_BASE, false); if (savedInstanceState == null) { mRespectSubredditRecommendedSortType = mSharedPreferences.getBoolean(SharedPreferencesUtils.RESPECT_SUBREDDIT_RECOMMENDED_COMMENT_SORT_TYPE, false); viewPostDetailFragmentId = System.currentTimeMillis(); @@ -1087,12 +1093,21 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic } } + private void tryMarkingPostAsRead() { + if (mMarkPostsAsRead && !mPost.isRead()) { + mPost.markAsRead(true); + InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountName, mPost.getId()); + EventBus.getDefault().post(new PostUpdateEventToPostList(mPost, postListPosition)); + } + } + @Override public void onResume() { super.onResume(); if (mRecyclerView != null) { mRecyclerView.onWindowVisibilityChanged(View.VISIBLE); } + tryMarkingPostAsRead(); } @Override @@ -1173,6 +1188,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic @Override public void onParsePostSuccess(Post post) { mPost = post; + tryMarkingPostAsRead(); setupMenu(); @@ -1758,6 +1774,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic @Override public void fetchSuccess(Post post) { mPost = post; + tryMarkingPostAsRead(); if (mPostAdapter != null) { mPostAdapter.updatePost(post); } -- cgit v1.2.3