Save post in the anonymous mode in PostDetailRecyclerViewAdapter.

This commit is contained in:
Docile-Alligator
2026-03-30 10:51:12 -04:00
parent 5211975e16
commit 2f5991cc05
2 changed files with 64 additions and 43 deletions

View File

@ -118,6 +118,9 @@ import ml.docilealligator.infinityforreddit.markdown.MarkdownUtils;
import ml.docilealligator.infinityforreddit.post.FetchStreamableVideo;
import ml.docilealligator.infinityforreddit.post.Post;
import ml.docilealligator.infinityforreddit.post.PostType;
import ml.docilealligator.infinityforreddit.readpost.ReadPostModification;
import ml.docilealligator.infinityforreddit.readpost.ReadPostType;
import ml.docilealligator.infinityforreddit.readpost.ReadPostsUtils;
import ml.docilealligator.infinityforreddit.thing.SaveThing;
import ml.docilealligator.infinityforreddit.thing.StreamableVideo;
import ml.docilealligator.infinityforreddit.thing.VoteThing;
@ -154,6 +157,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
private final Provider<StreamableAPI> mStreamableApiProvider;
private final RedditDataRoomDatabase mRedditDataRoomDatabase;
private final SharedPreferences mCurrentAccountSharedPreferences;
private final SharedPreferences mPostHistorySharedPreferences;
private final RequestManager mGlide;
private final SaveMemoryCenterInisdeDownsampleStrategy mSaveMemoryCenterInsideDownsampleStrategy;
private final EmoteCloseBracketInlineProcessor mEmoteCloseBracketInlineProcessor;
@ -242,6 +246,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
SharedPreferences currentAccountSharedPreferences,
SharedPreferences nsfwAndSpoilerSharedPreferences,
SharedPreferences postDetailsSharedPreferences,
SharedPreferences postHistorySharedPreferences,
ExoCreator exoCreator,
PostDetailRecyclerViewAdapterCallback postDetailRecyclerViewAdapterCallback) {
mActivity = activity;
@ -313,6 +318,8 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
mHideTheNumberOfVotes = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_THE_NUMBER_OF_VOTES, false);
mHideTheNumberOfComments = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_THE_NUMBER_OF_COMMENTS, false);
mPostHistorySharedPreferences = postHistorySharedPreferences;
mPostDetailRecyclerViewAdapterCallback = postDetailRecyclerViewAdapterCallback;
mScale = resources.getDisplayMetrics().density;
@ -1577,51 +1584,63 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
}
this.saveButton.setOnClickListener(view -> {
if (mAccountName.equals(Account.ANONYMOUS_ACCOUNT)) {
Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show();
return;
}
if (mPost.isSaved()) {
this.saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
SaveThing.unsaveThing(mOauthRetrofit, mAccessToken, mPost.getFullName(),
new SaveThing.SaveThingListener() {
@Override
public void success() {
mPost.setSaved(false);
PostDetailBaseViewHolder.this.saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
Toast.makeText(mActivity, R.string.post_unsaved_success, Toast.LENGTH_SHORT).show();
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
}
if (Account.ANONYMOUS_ACCOUNT.equals(mAccountName)) {
ReadPostModification.deleteReadPost(mRedditDataRoomDatabase, mExecutor, mActivity.accountName,
mPost.getId(), ReadPostType.ANONYMOUS_SAVED_POSTS);
mPost.setSaved(false);
Toast.makeText(mActivity, R.string.post_unsaved_success, Toast.LENGTH_SHORT).show();
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
} else {
SaveThing.unsaveThing(mOauthRetrofit, mAccessToken, mPost.getFullName(),
new SaveThing.SaveThingListener() {
@Override
public void success() {
mPost.setSaved(false);
PostDetailBaseViewHolder.this.saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
Toast.makeText(mActivity, R.string.post_unsaved_success, Toast.LENGTH_SHORT).show();
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
}
@Override
public void failed() {
mPost.setSaved(true);
PostDetailBaseViewHolder.this.saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
Toast.makeText(mActivity, R.string.post_unsaved_failed, Toast.LENGTH_SHORT).show();
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
}
});
@Override
public void failed() {
mPost.setSaved(true);
PostDetailBaseViewHolder.this.saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
Toast.makeText(mActivity, R.string.post_unsaved_failed, Toast.LENGTH_SHORT).show();
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
}
});
}
} else {
this.saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
SaveThing.saveThing(mOauthRetrofit, mAccessToken, mPost.getFullName(),
new SaveThing.SaveThingListener() {
@Override
public void success() {
mPost.setSaved(true);
PostDetailBaseViewHolder.this.saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
Toast.makeText(mActivity, R.string.post_saved_success, Toast.LENGTH_SHORT).show();
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
}
if (Account.ANONYMOUS_ACCOUNT.equals(mAccountName)) {
ReadPostModification.insertReadPost(mRedditDataRoomDatabase, mExecutor, mActivity.accountName,
mPost.getId(), ReadPostType.ANONYMOUS_SAVED_POSTS,
ReadPostsUtils.GetReadPostsLimit(mActivity.accountName, mPostHistorySharedPreferences));
mPost.setSaved(true);
Toast.makeText(mActivity, R.string.post_saved_success, Toast.LENGTH_SHORT).show();
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
} else {
SaveThing.saveThing(mOauthRetrofit, mAccessToken, mPost.getFullName(),
new SaveThing.SaveThingListener() {
@Override
public void success() {
mPost.setSaved(true);
PostDetailBaseViewHolder.this.saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
Toast.makeText(mActivity, R.string.post_saved_success, Toast.LENGTH_SHORT).show();
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
}
@Override
public void failed() {
mPost.setSaved(false);
PostDetailBaseViewHolder.this.saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
Toast.makeText(mActivity, R.string.post_saved_failed, Toast.LENGTH_SHORT).show();
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
}
});
@Override
public void failed() {
mPost.setSaved(false);
PostDetailBaseViewHolder.this.saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
Toast.makeText(mActivity, R.string.post_saved_failed, Toast.LENGTH_SHORT).show();
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
}
});
}
}
});

View File

@ -612,9 +612,11 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
mPostAdapter = new PostDetailRecyclerViewAdapter(mActivity,
this, mExecutor, mCustomThemeWrapper, mOauthRetrofit, mRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mRedditDataRoomDatabase, mGlide,
mSeparatePostAndComments, mActivity.accessToken, mActivity.accountName, mPost, mLocale,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostDetailsSharedPreferences,
mExoCreator, post -> EventBus.getDefault().post(new PostUpdateEventToPostList(mPost, postListPosition)));
mSeparatePostAndComments, mActivity.accessToken, mActivity.accountName, mPost,
mLocale, mSharedPreferences, mCurrentAccountSharedPreferences,
mNsfwAndSpoilerSharedPreferences, mPostDetailsSharedPreferences,
mPostHistorySharedPreferences, mExoCreator,
post -> EventBus.getDefault().post(new PostUpdateEventToPostList(mPost, postListPosition)));
mCommentsAdapter = new CommentsRecyclerViewAdapter(mActivity,
this, mCustomThemeWrapper, mExecutor, mRetrofit, mOauthRetrofit,
mActivity.accessToken, mActivity.accountName, mPost, mLocale, mSingleCommentId,
@ -1359,7 +1361,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
mStreamableApiProvider, mRedditDataRoomDatabase, mGlide, mSeparatePostAndComments,
mActivity.accessToken, mActivity.accountName, mPost, mLocale, mSharedPreferences,
mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences,
mPostDetailsSharedPreferences, mExoCreator,
mPostDetailsSharedPreferences, mPostHistorySharedPreferences, mExoCreator,
post1 -> EventBus.getDefault().post(new PostUpdateEventToPostList(mPost, postListPosition)));
mCommentsAdapter = new CommentsRecyclerViewAdapter(mActivity,