diff options
author | Alex Ning <chineseperson5@gmail.com> | 2020-02-01 14:36:43 +0000 |
---|---|---|
committer | Alex Ning <chineseperson5@gmail.com> | 2020-02-01 14:36:43 +0000 |
commit | 5d74aa454860c2e0a04d3d8a6c96a14a53e66ad3 (patch) | |
tree | 2986dbc9dd716c8219a18cca464c2ee7ee096323 | |
parent | 9dc596b9076963d48a9ac7d08b965cb540f9983f (diff) | |
download | infinity-for-reddit-5d74aa454860c2e0a04d3d8a6c96a14a53e66ad3.tar infinity-for-reddit-5d74aa454860c2e0a04d3d8a6c96a14a53e66ad3.tar.gz infinity-for-reddit-5d74aa454860c2e0a04d3d8a6c96a14a53e66ad3.tar.bz2 infinity-for-reddit-5d74aa454860c2e0a04d3d8a6c96a14a53e66ad3.tar.lz infinity-for-reddit-5d74aa454860c2e0a04d3d8a6c96a14a53e66ad3.tar.xz infinity-for-reddit-5d74aa454860c2e0a04d3d8a6c96a14a53e66ad3.tar.zst infinity-for-reddit-5d74aa454860c2e0a04d3d8a6c96a14a53e66ad3.zip |
Showing top-level comments at first is available.
7 files changed, 43 insertions, 21 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewPostDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewPostDetailActivity.java index e0c48770..e516cdfc 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewPostDetailActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewPostDetailActivity.java @@ -175,6 +175,7 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS private boolean mIsSmoothScrolling = false; private boolean mLockFab; private boolean mSwipeUpToHideFab; + private boolean mExpandChildren; private LinearLayoutManager mLinearLayoutManager; private CommentAndPostRecyclerViewAdapter mAdapter; private RecyclerView.SmoothScroller mSmoothScroller; @@ -257,6 +258,7 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS mVolumeKeysNavigateComments = mSharedPreferences.getBoolean(SharedPreferencesUtils.VOLUME_KEYS_NAVIGATE_COMMENTS, false); 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); mGlide = Glide.with(this); mLocale = getResources().getConfiguration().locale; @@ -494,7 +496,7 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS mAdapter = new CommentAndPostRecyclerViewAdapter(ViewPostDetailActivity.this, mRetrofit, mOauthRetrofit, mRedditDataRoomDatabase, mGlide, mAccessToken, mAccountName, mPost, mLocale, mSingleCommentId, isSingleCommentThreadMode, mNeedBlurNsfw, mNeedBlurSpoiler, - mVoteButtonsOnTheRight, mShowElapsedTime, + mVoteButtonsOnTheRight, mShowElapsedTime, mExpandChildren, new CommentAndPostRecyclerViewAdapter.CommentRecyclerViewAdapterCallback() { @Override public void updatePost(Post post) { @@ -617,7 +619,7 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS mRetrofit, mOauthRetrofit, mRedditDataRoomDatabase, mGlide, mAccessToken, mAccountName, mPost, mLocale, mSingleCommentId, isSingleCommentThreadMode, mNeedBlurNsfw, mNeedBlurSpoiler, - mVoteButtonsOnTheRight, mShowElapsedTime, + mVoteButtonsOnTheRight, mShowElapsedTime, mExpandChildren, new CommentAndPostRecyclerViewAdapter.CommentRecyclerViewAdapterCallback() { @Override public void updatePost(Post post) { @@ -640,7 +642,7 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS mRecyclerView.setAdapter(mAdapter); ParseComment.parseComment(response.body(), new ArrayList<>(), mLocale, - new ParseComment.ParseCommentListener() { + mExpandChildren, new ParseComment.ParseCommentListener() { @Override public void onParseCommentSuccess(ArrayList<CommentData> expandedComments, String parentId, ArrayList<String> moreChildrenFullnames) { ViewPostDetailActivity.this.children = moreChildrenFullnames; @@ -725,8 +727,8 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS } Retrofit retrofit = mAccessToken == null ? mRetrofit : mOauthRetrofit; - FetchComment.fetchComments(retrofit, mAccessToken, mPost.getId(), commentId, sortType, mLocale, - new FetchComment.FetchCommentListener() { + FetchComment.fetchComments(retrofit, mAccessToken, mPost.getId(), commentId, sortType, mExpandChildren, + mLocale, new FetchComment.FetchCommentListener() { @Override public void onFetchCommentSuccess(ArrayList<CommentData> expandedComments, String parentId, ArrayList<String> children) { @@ -826,7 +828,7 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS Retrofit retrofit = mAccessToken == null ? mRetrofit : mOauthRetrofit; FetchComment.fetchMoreComment(retrofit, mAccessToken, children, mChildrenStartingIndex, - 0, mLocale, new FetchComment.FetchMoreCommentListener() { + 0, mExpandChildren, mLocale, new FetchComment.FetchMoreCommentListener() { @Override public void onFetchMoreCommentSuccess(ArrayList<CommentData> expandedComments, int childrenStartingIndex) { hasMoreChildren = childrenStartingIndex < children.size(); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/CommentAndPostRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/CommentAndPostRecyclerViewAdapter.java index e001e632..a506ceba 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/CommentAndPostRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/CommentAndPostRecyclerViewAdapter.java @@ -119,6 +119,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy private boolean mNeedBlurSpoiler; private boolean mVoteButtonsOnTheRight; private boolean mShowElapsedTime; + private boolean mExpandChildren; private CommentRecyclerViewAdapterCallback mCommentRecyclerViewAdapterCallback; private boolean isInitiallyLoading; private boolean isInitiallyLoadingFailed; @@ -134,7 +135,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy String accessToken, String accountName, Post post, Locale locale, String singleCommentId, boolean isSingleCommentThreadMode, boolean needBlurNSFW, boolean needBlurSpoiler, boolean voteButtonsOnTheRight, - boolean showElapsedTime, + boolean showElapsedTime, boolean expandChildren, CommentRecyclerViewAdapterCallback commentRecyclerViewAdapterCallback) { mActivity = activity; mRetrofit = retrofit; @@ -224,6 +225,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy mNeedBlurSpoiler = needBlurSpoiler; mVoteButtonsOnTheRight = voteButtonsOnTheRight; mShowElapsedTime = showElapsedTime; + mExpandChildren = expandChildren; mCommentRecyclerViewAdapterCallback = commentRecyclerViewAdapterCallback; isInitiallyLoading = true; isInitiallyLoadingFailed = false; @@ -1107,7 +1109,8 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy Retrofit retrofit = mAccessToken == null ? mRetrofit : mOauthRetrofit; FetchComment.fetchMoreComment(retrofit, mAccessToken, parentComment.getMoreChildrenFullnames(), - parentComment.getMoreChildrenStartingIndex(), parentComment.getDepth() + 1, mLocale, + parentComment.getMoreChildrenStartingIndex(), parentComment.getDepth() + 1, + mExpandChildren, mLocale, new FetchComment.FetchMoreCommentListener() { @Override public void onFetchMoreCommentSuccess(ArrayList<CommentData> expandedComments, diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchComment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchComment.java index f40f2e1d..8fb9a851 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchComment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchComment.java @@ -14,8 +14,8 @@ import retrofit2.Retrofit; public class FetchComment { public static void fetchComments(Retrofit retrofit, @Nullable String accessToken, String article, - String commentId, String sortType, Locale locale, - FetchCommentListener fetchCommentListener) { + String commentId, String sortType, boolean expandChildren, + Locale locale, FetchCommentListener fetchCommentListener) { RedditAPI api = retrofit.create(RedditAPI.class); Call<String> comments; if (accessToken == null) { @@ -38,7 +38,7 @@ public class FetchComment { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { if (response.isSuccessful()) { ParseComment.parseComment(response.body(), new ArrayList<>(), - locale, new ParseComment.ParseCommentListener() { + locale, expandChildren, new ParseComment.ParseCommentListener() { @Override public void onParseCommentSuccess(ArrayList<CommentData> expandedComments, String parentId, ArrayList<String> moreChildrenFullnames) { @@ -65,7 +65,8 @@ public class FetchComment { public static void fetchMoreComment(Retrofit retrofit, @Nullable String accessToken, ArrayList<String> allChildren, int startingIndex, - int depth, Locale locale, FetchMoreCommentListener fetchMoreCommentListener) { + int depth, boolean expandChildren, Locale locale, + FetchMoreCommentListener fetchMoreCommentListener) { StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < 100; i++) { if (allChildren.size() <= startingIndex + i) { @@ -93,7 +94,7 @@ public class FetchComment { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { if (response.isSuccessful()) { ParseComment.parseMoreComment(response.body(), new ArrayList<>(), locale, - depth, new ParseComment.ParseCommentListener() { + depth, expandChildren, new ParseComment.ParseCommentListener() { @Override public void onParseCommentSuccess(ArrayList<CommentData> expandedComments, String parentId, ArrayList<String> moreChildrenFullnames) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ParseComment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ParseComment.java index d5c86143..54101eba 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/ParseComment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ParseComment.java @@ -23,14 +23,14 @@ import static ml.docilealligator.infinityforreddit.CommentData.VOTE_TYPE_UPVOTE; public class ParseComment { public static void parseComment(String response, ArrayList<CommentData> commentData, Locale locale, - ParseCommentListener parseCommentListener) { + boolean expandChildren, ParseCommentListener parseCommentListener) { try { JSONArray childrenArray = new JSONArray(response); String parentId = childrenArray.getJSONObject(0).getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.CHILDREN_KEY) .getJSONObject(0).getJSONObject(JSONUtils.DATA_KEY).getString(JSONUtils.NAME_KEY); childrenArray = childrenArray.getJSONObject(1).getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.CHILDREN_KEY); - new ParseCommentAsyncTask(childrenArray, commentData, locale, parentId, 0, parseCommentListener).execute(); + new ParseCommentAsyncTask(childrenArray, commentData, locale, parentId, 0, expandChildren, parseCommentListener).execute(); } catch (JSONException e) { e.printStackTrace(); parseCommentListener.onParseCommentFailed(); @@ -38,10 +38,10 @@ public class ParseComment { } static void parseMoreComment(String response, ArrayList<CommentData> commentData, Locale locale, - int depth, ParseCommentListener parseCommentListener) { + int depth, boolean expandChildren, ParseCommentListener parseCommentListener) { try { JSONArray childrenArray = new JSONObject(response).getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.CHILDREN_KEY); - new ParseCommentAsyncTask(childrenArray, commentData, locale, null, depth, parseCommentListener).execute(); + new ParseCommentAsyncTask(childrenArray, commentData, locale, null, depth, expandChildren, parseCommentListener).execute(); } catch (JSONException e) { e.printStackTrace(); parseCommentListener.onParseCommentFailed(); @@ -215,11 +215,13 @@ public class ParseComment { private Locale locale; private String parentId; private int depth; + private boolean expandChildren; private ParseCommentListener parseCommentListener; private boolean parseFailed; ParseCommentAsyncTask(JSONArray commentsJSONArray, ArrayList<CommentData> comments, Locale locale, - @Nullable String parentId, int depth, ParseCommentListener parseCommentListener) { + @Nullable String parentId, int depth, boolean expandChildren, + ParseCommentListener parseCommentListener) { this.commentsJSONArray = commentsJSONArray; this.comments = comments; newComments = new ArrayList<>(); @@ -228,6 +230,7 @@ public class ParseComment { this.locale = locale; this.parentId = parentId; this.depth = depth; + this.expandChildren = expandChildren; parseFailed = false; this.parseCommentListener = parseCommentListener; } @@ -236,7 +239,9 @@ public class ParseComment { protected Void doInBackground(Void... voids) { try { parseCommentRecursion(commentsJSONArray, newComments, moreChildrenFullnames, depth, locale); - expandChildren(newComments, expandedNewComments); + if (expandChildren) { + expandChildren(newComments, expandedNewComments); + } } catch (JSONException e) { parseFailed = true; } @@ -246,7 +251,11 @@ public class ParseComment { @Override protected void onPostExecute(Void aVoid) { if (!parseFailed) { - comments.addAll(expandedNewComments); + if (expandChildren) { + comments.addAll(expandedNewComments); + } else { + comments.addAll(newComments); + } parseCommentListener.onParseCommentSuccess(comments, parentId, moreChildrenFullnames); } else { parseCommentListener.onParseCommentFailed(); 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 6f065d5e..5ae81003 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Utils/SharedPreferencesUtils.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Utils/SharedPreferencesUtils.java @@ -71,4 +71,5 @@ public class SharedPreferencesUtils { public static final String OPEN_LINK_IN_APP = "open_link_in_app"; public static final String LOCK_JUMP_TO_NEXT_TOP_LEVEL_COMMENT_BUTTON = "lock_jump_to_next_top_level_comment_button"; public static final String SWIPE_UP_TO_HIDE_JUMP_TO_NEXT_TOP_LEVEL_COMMENT_BUTTON = "swipe_up_to_hide_jump_to_next_top_level_comments_button"; + public static final String SHOW_TOP_LEVEL_COMMENTS_FIRST = "show_top_level_comments_first"; } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d95e7be9..b1b6b636 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -302,6 +302,7 @@ <string name="settings_volume_keys_navigate_comments_title">Use Volume Keys to Navigate Comments in Posts</string> <string name="settings_volume_keys_navigate_posts_title">Use Volume Keys to Navigate Posts</string> <string name="settings_mute_video_title">Mute Video</string> + <string name="settings_show_top_level_comments_first_title">Show Top-level Comments First</string> <string name="settings_show_elapsed_time">Show Elapsed Time in Posts and Comments</string> <string name="settings_default_post_layout">Default Post Layout</string> <string name="settings_show_divider_in_compact_layout">Show Divider in Compact Layout</string> diff --git a/app/src/main/res/xml/main_preferences.xml b/app/src/main/res/xml/main_preferences.xml index f79b8234..4f238327 100644 --- a/app/src/main/res/xml/main_preferences.xml +++ b/app/src/main/res/xml/main_preferences.xml @@ -39,9 +39,14 @@ <SwitchPreference app:defaultValue="false" app:key="mute_video" - android:icon="@drawable/ic_mute_preferences_24dp" + app:icon="@drawable/ic_mute_preferences_24dp" app:title="@string/settings_mute_video_title" /> + <SwitchPreference + app:defaultValue="false" + app:key="show_top_level_comments_first" + app:title="@string/settings_show_top_level_comments_first_title" /> + <ListPreference app:defaultValue="2.5" android:entries="@array/settings_lazy_mode_interval" |