Respecting subreddit recommended comment sort type is available.

This commit is contained in:
Alex Ning 2020-10-19 22:54:28 +08:00
parent 966f41f3b6
commit 5787a1f7ca

View File

@ -99,6 +99,8 @@ import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.SaveThing; import ml.docilealligator.infinityforreddit.SaveThing;
import ml.docilealligator.infinityforreddit.SortType; import ml.docilealligator.infinityforreddit.SortType;
import ml.docilealligator.infinityforreddit.SortTypeSelectionCallback; import ml.docilealligator.infinityforreddit.SortTypeSelectionCallback;
import ml.docilealligator.infinityforreddit.Subreddit.FetchSubredditData;
import ml.docilealligator.infinityforreddit.Subreddit.SubredditData;
import ml.docilealligator.infinityforreddit.Utils.APIUtils; import ml.docilealligator.infinityforreddit.Utils.APIUtils;
import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils;
import ml.docilealligator.infinityforreddit.Utils.Utils; import ml.docilealligator.infinityforreddit.Utils.Utils;
@ -154,6 +156,10 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
String mMessageFullname; String mMessageFullname;
@State @State
String mNewAccountName; String mNewAccountName;
@State
String sortType;
@State
boolean mRespectSubredditRecommendedSortType;
@BindView(R.id.coordinator_layout_view_post_detail) @BindView(R.id.coordinator_layout_view_post_detail)
CoordinatorLayout mCoordinatorLayout; CoordinatorLayout mCoordinatorLayout;
@BindView(R.id.appbar_layout_view_post_detail_activity) @BindView(R.id.appbar_layout_view_post_detail_activity)
@ -208,7 +214,6 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
private int orientation; private int orientation;
private int postListPosition = -1; private int postListPosition = -1;
private String mSingleCommentId; private String mSingleCommentId;
private String sortType;
private boolean showToast = false; private boolean showToast = false;
private boolean isSortingComments = false; private boolean isSortingComments = false;
private boolean mVolumeKeysNavigateComments; private boolean mVolumeKeysNavigateComments;
@ -216,7 +221,6 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
private boolean mLockFab; private boolean mLockFab;
private boolean mSwipeUpToHideFab; private boolean mSwipeUpToHideFab;
private boolean mExpandChildren; private boolean mExpandChildren;
private boolean mRespectSubredditRecommendedSortType;
private int mWindowWidth; private int mWindowWidth;
private LinearLayoutManager mLinearLayoutManager; private LinearLayoutManager mLinearLayoutManager;
private CommentAndPostRecyclerViewAdapter mAdapter; private CommentAndPostRecyclerViewAdapter mAdapter;
@ -297,7 +301,9 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
mLockFab = mSharedPreferences.getBoolean(SharedPreferencesUtils.LOCK_JUMP_TO_NEXT_TOP_LEVEL_COMMENT_BUTTON, 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); 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); mExpandChildren = !mSharedPreferences.getBoolean(SharedPreferencesUtils.SHOW_TOP_LEVEL_COMMENTS_FIRST, false);
if (savedInstanceState == null) {
mRespectSubredditRecommendedSortType = mSharedPreferences.getBoolean(SharedPreferencesUtils.RESPECT_SUBREDDIT_RECOMMENDED_COMMENT_SORT_TYPE, false); mRespectSubredditRecommendedSortType = mSharedPreferences.getBoolean(SharedPreferencesUtils.RESPECT_SUBREDDIT_RECOMMENDED_COMMENT_SORT_TYPE, false);
}
mGlide = Glide.with(this); mGlide = Glide.with(this);
Resources resources = getResources(); Resources resources = getResources();
@ -503,9 +509,20 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
}; };
mSingleCommentId = getIntent().getStringExtra(EXTRA_SINGLE_COMMENT_ID); mSingleCommentId = getIntent().getStringExtra(EXTRA_SINGLE_COMMENT_ID);
if (savedInstanceState == null) {
if (!mRespectSubredditRecommendedSortType) {
sortType = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TYPE_POST_COMMENT, SortType.Type.BEST.value.toUpperCase()); sortType = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TYPE_POST_COMMENT, SortType.Type.BEST.value.toUpperCase());
if (sortType != null) {
mToolbar.setTitle(new SortType(SortType.Type.valueOf(sortType)).getType().fullName); mToolbar.setTitle(new SortType(SortType.Type.valueOf(sortType)).getType().fullName);
sortType = sortType.toLowerCase(); sortType = sortType.toLowerCase();
}
}
} else {
if (sortType != null) {
mToolbar.setTitle(new SortType(SortType.Type.valueOf(sortType.toUpperCase())).getType().fullName);
}
}
if (savedInstanceState == null) { if (savedInstanceState == null) {
if (mSingleCommentId != null) { if (mSingleCommentId != null) {
isSingleCommentThreadMode = true; isSingleCommentThreadMode = true;
@ -638,7 +655,7 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
@Override @Override
public void retryFetchingComments() { public void retryFetchingComments() {
fetchComments(false); fetchCommentsRespectRecommendedSort(false);
} }
@Override @Override
@ -652,13 +669,13 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
mRecyclerView.setAdapter(mAdapter); mRecyclerView.setAdapter(mAdapter);
if (comments == null) { if (comments == null) {
fetchComments(false); fetchCommentsRespectRecommendedSort(false);
} else { } else {
if (isRefreshing) { if (isRefreshing) {
isRefreshing = false; isRefreshing = false;
refresh(true, true); refresh(true, true);
} else if (isFetchingComments) { } else if (isFetchingComments) {
fetchComments(false); fetchCommentsRespectRecommendedSort(false);
} else { } else {
mAdapter.addComments(comments, hasMoreChildren); mAdapter.addComments(comments, hasMoreChildren);
if (isLoadingMoreChildren) { if (isLoadingMoreChildren) {
@ -802,7 +819,7 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
@Override @Override
public void retryFetchingComments() { public void retryFetchingComments() {
fetchComments(false); fetchCommentsRespectRecommendedSort(false);
} }
@Override @Override
@ -895,6 +912,43 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
}); });
} }
private void fetchCommentsRespectRecommendedSort(boolean changeRefreshState, boolean checkSortState, String sortType) {
if (mRespectSubredditRecommendedSortType && mPost != null) {
FetchSubredditData.fetchSubredditData(mRetrofit, mPost.getSubredditName(),
new FetchSubredditData.FetchSubredditDataListener() {
@Override
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
if (subredditData.getSuggestedCommentSort() == null || subredditData.getSuggestedCommentSort().equals("null") || subredditData.getSuggestedCommentSort().equals("")) {
mRespectSubredditRecommendedSortType = false;
ViewPostDetailActivity.this.sortType = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TYPE_POST_COMMENT, SortType.Type.BEST.value.toUpperCase());
if (ViewPostDetailActivity.this.sortType != null) {
mToolbar.setTitle(new SortType(SortType.Type.valueOf(ViewPostDetailActivity.this.sortType)).getType().fullName);
ViewPostDetailActivity.this.sortType = ViewPostDetailActivity.this.sortType.toLowerCase();
}
fetchComments(changeRefreshState, checkSortState, sortType);
} else {
ViewPostDetailActivity.this.sortType = subredditData.getSuggestedCommentSort();
String sortTypeTemp = ViewPostDetailActivity.this.sortType.toLowerCase().substring(0, 1).toUpperCase() + ViewPostDetailActivity.this.sortType.substring(1);
mToolbar.setTitle(sortTypeTemp);
fetchComments(changeRefreshState, checkSortState, subredditData.getSuggestedCommentSort());
}
}
@Override
public void onFetchSubredditDataFail() {
mRespectSubredditRecommendedSortType = false;
ViewPostDetailActivity.this.sortType = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TYPE_POST_COMMENT, SortType.Type.BEST.value.toUpperCase());
if (ViewPostDetailActivity.this.sortType != null) {
mToolbar.setTitle(new SortType(SortType.Type.valueOf(ViewPostDetailActivity.this.sortType)).getType().fullName);
ViewPostDetailActivity.this.sortType = ViewPostDetailActivity.this.sortType.toLowerCase();
}
}
});
} else {
fetchComments(changeRefreshState, checkSortState, sortType);
}
}
private void fetchComments(boolean changeRefreshState, boolean checkSortState, String sortType) { private void fetchComments(boolean changeRefreshState, boolean checkSortState, String sortType) {
isFetchingComments = true; isFetchingComments = true;
mAdapter.setSingleComment(mSingleCommentId, isSingleCommentThreadMode); mAdapter.setSingleComment(mSingleCommentId, isSingleCommentThreadMode);
@ -995,8 +1049,8 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
}); });
} }
private void fetchComments(boolean changeRefreshState) { private void fetchCommentsRespectRecommendedSort(boolean changeRefreshState) {
fetchComments(changeRefreshState, true, sortType); fetchCommentsRespectRecommendedSort(changeRefreshState, true, sortType);
} }
void fetchMoreComments() { void fetchMoreComments() {
@ -1036,11 +1090,7 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
mGlide.clear(mFetchPostInfoImageView); mGlide.clear(mFetchPostInfoImageView);
if (fetchComments) { if (fetchComments) {
if (!fetchPost) { fetchCommentsRespectRecommendedSort(!fetchPost);
fetchComments(true);
} else {
fetchComments(false);
}
} }
if (fetchPost) { if (fetchPost) {
@ -1761,8 +1811,12 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
if (children != null) { if (children != null) {
children.clear(); children.clear();
} }
fetchComments(false, false, sortType.getType().value); this.sortType = sortType.getType().value;
if (!mRespectSubredditRecommendedSortType) {
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TYPE_POST_COMMENT, sortType.getType().name()).apply(); mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TYPE_POST_COMMENT, sortType.getType().name()).apply();
}
mRespectSubredditRecommendedSortType = false;
fetchCommentsRespectRecommendedSort(false, false, sortType.getType().value);
mToolbar.setTitle(sortType.getType().fullName); mToolbar.setTitle(sortType.getType().fullName);
} }