diff options
author | Docile-Alligator <chineseperson5@gmail.com> | 2021-09-23 12:02:10 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-23 12:02:10 +0000 |
commit | ccd80a3e15edc675e7296215f3828e5ff281d722 (patch) | |
tree | f3d357b3f7e2f89f1c5f91307be3067275d66bc1 | |
parent | 97d630392cd8161c1428d1451f1690ee2a667830 (diff) | |
parent | cf9829046ac7ba92aa42db67468d23dd5b25cf97 (diff) | |
download | infinity-for-reddit-ccd80a3e15edc675e7296215f3828e5ff281d722.tar infinity-for-reddit-ccd80a3e15edc675e7296215f3828e5ff281d722.tar.gz infinity-for-reddit-ccd80a3e15edc675e7296215f3828e5ff281d722.tar.bz2 infinity-for-reddit-ccd80a3e15edc675e7296215f3828e5ff281d722.tar.lz infinity-for-reddit-ccd80a3e15edc675e7296215f3828e5ff281d722.tar.xz infinity-for-reddit-ccd80a3e15edc675e7296215f3828e5ff281d722.tar.zst infinity-for-reddit-ccd80a3e15edc675e7296215f3828e5ff281d722.zip |
Merge branch 'master' into go-to-top-of-page-button
16 files changed, 141 insertions, 109 deletions
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 78090f43..e709293f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -272,70 +272,100 @@ <data android:host="www.reddit.com" - android:scheme="https" /> + android:scheme="https" + android:pathPattern=".*"/> <data android:host="reddit.com" - android:scheme="https" /> + android:scheme="https" + android:pathPattern=".*" /> + <data + android:host="www.google.com" + android:scheme="https" + android:pathPattern="/amp/s/amp.reddit.com/.*" /> + <data + android:host="v.redd.it" + android:scheme="https" + android:pathPattern=".*" /> <data android:host="amp.reddit.com" - android:scheme="https" /> + android:scheme="https" + android:pathPattern=".*" /> <data android:host="m.reddit.com" - android:scheme="https" /> + android:scheme="https" + android:pathPattern=".*" /> <data android:host="old.reddit.com" - android:scheme="https" /> + android:scheme="https" + android:pathPattern=".*" /> <data android:host="new.reddit.com" - android:scheme="https" /> + android:scheme="https" + android:pathPattern=".*" /> <data android:host="np.reddit.com" - android:scheme="https" /> + android:scheme="https" + android:pathPattern=".*" /> <data android:host="reddit.app.link" - android:scheme="https" /> + android:scheme="https" + android:pathPattern=".*" /> <data android:host="redd.it" - android:scheme="https" /> + android:scheme="https" + android:pathPattern=".*" /> <data android:host="s.reddit.com" - android:scheme="https" /> + android:scheme="https" + android:pathPattern=".*" /> <data android:host="click.redditmail.com" - android:scheme="https" /> + android:scheme="https" + android:pathPattern=".*" /> <data android:host="www.reddit.com" - android:scheme="http" /> + android:scheme="http" + android:pathPattern=".*" /> <data android:host="reddit.com" - android:scheme="http" /> + android:scheme="http" + android:pathPattern=".*" /> <data android:host="amp.reddit.com" - android:scheme="http" /> + android:scheme="http" + android:pathPattern=".*" /> <data android:host="m.reddit.com" - android:scheme="http" /> + android:scheme="http" + android:pathPattern=".*" /> <data android:host="old.reddit.com" - android:scheme="http" /> + android:scheme="http" + android:pathPattern=".*" /> <data android:host="new.reddit.com" - android:scheme="http" /> + android:scheme="http" + android:pathPattern=".*" /> <data android:host="np.reddit.com" - android:scheme="http" /> + android:scheme="http" + android:pathPattern=".*" /> <data android:host="reddit.app.link" - android:scheme="http" /> + android:scheme="http" + android:pathPattern=".*" /> <data android:host="redd.it" - android:scheme="http" /> + android:scheme="http" + android:pathPattern=".*" /> <data android:host="s.reddit.com" - android:scheme="http" /> + android:scheme="http" + android:pathPattern=".*" /> <data android:host="click.redditmail.com" - android:scheme="http" /> + android:scheme="http" + android:pathPattern=".*" /> </intent-filter> </activity> <activity 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/LinkResolverActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/LinkResolverActivity.java index a6596edb..3db1af77 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,8 @@ 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+)+"; + private static final String GOOGLE_AMP_PATTERN = "/amp/s/amp.reddit.com/.*"; @Inject @Named("default") @@ -173,8 +174,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); @@ -266,6 +269,13 @@ public class LinkResolverActivity extends AppCompatActivity { } else { deepLinkError(uri); } + } else if (authority.contains("google.com") ){ + if ( path.matches(GOOGLE_AMP_PATTERN) ) { + String url = path.substring(11, path.length()); // skipping past amp straight to reddit + handleUri(Uri.parse("https://" + url)); + } else { + deepLinkError(uri); + } } else { deepLinkError(uri); } 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 54267df9..c6695f41 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewSubredditDetailActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewSubredditDetailActivity.java @@ -1188,6 +1188,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/java/ml/docilealligator/infinityforreddit/activities/WikiActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/WikiActivity.java index f4cc17fa..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,6 +71,7 @@ import retrofit2.Retrofit; public class WikiActivity extends BaseActivity { public static final String EXTRA_SUBREDDIT_NAME = "ESN"; + public static final String EXTRA_WIKI_PATH = "EWP"; private static final String WIKI_MARKDOWN_STATE = "WMS"; @BindView(R.id.coordinator_layout_comment_wiki_activity) @@ -281,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<String>() { + retrofit.create(RedditAPI.class).getWikiPage(getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME), getIntent().getStringExtra(EXTRA_WIKI_PATH)).enqueue(new Callback<String>() { @Override public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { if (response.isSuccessful()) { 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/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<String> getTrendingSearches(@HeaderMap Map<String, String> headers); - @GET("/r/{subredditName}/wiki/index.json?raw_json=1") - Call<String> getWiki(@Path("subredditName") String subredditName); + default Call<String> getWiki(@Path("subredditName") String subredditName) { + return getWikiPage(subredditName, "index"); + }; + + @GET("/r/{subredditName}/wiki/{wikiPage}.json?raw_json=1") + Call<String> getWikiPage(@Path("subredditName") String subredditName, @Path("wikiPage") String wikiPage); @GET("{sortType}?raw_json=1") ListenableFuture<Response<String>> getBestPostsListenableFuture(@Path("sortType") String sortType, @Query("after") String lastItem, @HeaderMap Map<String, String> headers); 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..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; @@ -129,7 +130,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 +248,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 +390,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 +1264,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 +1561,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(); @@ -1575,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); } 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; 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" /> + + <item + android:id="@+id/action_go_to_wiki_activity" + android:orderInCategory="10" + android:title="@string/action_go_to_wiki" + app:showAsAction="never" /> </menu> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b94cac10..7b44a036 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1190,6 +1190,8 @@ <string name="app_lock_timeout_6_hours">6 hours</string> <string name="app_lock_timeout_12_hours">12 hours</string> <string name="app_lock_timeout_24_hours">24 hours</string> + <string name="go_to_top">Go To Top</string> + <string name="action_go_to_wiki">Go to Wiki</string> </resources> |