Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@
import ml.docilealligator.infinityforreddit.readpost.ReadPostDao;
import ml.docilealligator.infinityforreddit.recentsearchquery.RecentSearchQuery;
import ml.docilealligator.infinityforreddit.recentsearchquery.RecentSearchQueryDao;
import ml.docilealligator.infinityforreddit.savedpost.SavedPost;
import ml.docilealligator.infinityforreddit.savedpost.SavedPostDao;
import ml.docilealligator.infinityforreddit.subreddit.SubredditDao;
import ml.docilealligator.infinityforreddit.subreddit.SubredditData;
import ml.docilealligator.infinityforreddit.subscribedsubreddit.SubscribedSubredditDao;
Expand All @@ -50,7 +52,7 @@
@Database(entities = {Account.class, SubredditData.class, SubscribedSubredditData.class, UserData.class,
SubscribedUserData.class, MultiReddit.class, CustomTheme.class, RecentSearchQuery.class,
ReadPost.class, PostFilter.class, PostFilterUsage.class, AnonymousMultiredditSubreddit.class,
CommentFilter.class, CommentFilterUsage.class, CommentDraft.class}, version = 31, exportSchema = false)
CommentFilter.class, CommentFilterUsage.class, CommentDraft.class, SavedPost.class}, version = 32, exportSchema = false)
@TypeConverters(Converters.class)
public abstract class RedditDataRoomDatabase extends RoomDatabase {

Expand All @@ -64,7 +66,7 @@ public static RedditDataRoomDatabase create(final Context context) {
MIGRATION_17_18, MIGRATION_18_19, MIGRATION_19_20, MIGRATION_20_21,
MIGRATION_21_22, MIGRATION_22_23, MIGRATION_23_24, MIGRATION_24_25,
MIGRATION_25_26, MIGRATION_26_27, MIGRATION_27_28, MIGRATION_28_29,
MIGRATION_29_30, MIGRATION_30_31)
MIGRATION_29_30, MIGRATION_30_31, MIGRATION_31_32)
.build();
}

Expand Down Expand Up @@ -106,6 +108,8 @@ public static RedditDataRoomDatabase create(final Context context) {

public abstract CommentDraftDao commentDraftDao();

public abstract SavedPostDao savedPostDao();

private static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
Expand Down Expand Up @@ -484,5 +488,18 @@ public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("ALTER TABLE anonymous_multireddit_subreddits ADD COLUMN icon_url TEXT");
}
};

private static final Migration MIGRATION_31_32 = new Migration(31, 32) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE IF NOT EXISTS saved_posts (" +
"username TEXT NOT NULL, " +
"id TEXT NOT NULL, " +
"time INTEGER NOT NULL, " +
"type INTEGER NOT NULL, " +
"PRIMARY KEY(username, id), " +
"FOREIGN KEY(username) REFERENCES accounts(username) ON DELETE CASCADE)");
}
};
}

Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@
import ml.docilealligator.infinityforreddit.post.FetchStreamableVideo;
import ml.docilealligator.infinityforreddit.post.Post;
import ml.docilealligator.infinityforreddit.post.PostPagingSource;
import ml.docilealligator.infinityforreddit.savedpost.SavedPost;
import ml.docilealligator.infinityforreddit.thing.SaveThing;
import ml.docilealligator.infinityforreddit.thing.StreamableVideo;
import ml.docilealligator.infinityforreddit.thing.VoteThing;
Expand Down Expand Up @@ -1578,7 +1579,48 @@ public void onVoteThingFail() {

this.saveButton.setOnClickListener(view -> {
if (mAccountName.equals(Account.ANONYMOUS_ACCOUNT)) {
Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show();
// Use local storage for anonymous users
if (mPost.isSaved()) {
this.saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
SaveThing.unsaveThingLocally(mRedditDataRoomDatabase, mExecutor, mAccountName, mPost.getId(),
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);
}
});
} else {
this.saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
SaveThing.saveThingLocally(mRedditDataRoomDatabase, mExecutor, mAccountName, mPost.getId(), SavedPost.TYPE_POST,
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);
}
});
}
return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
import ml.docilealligator.infinityforreddit.FetchVideoLinkListener;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.SaveMemoryCenterInisdeDownsampleStrategy;
import ml.docilealligator.infinityforreddit.account.Account;
import ml.docilealligator.infinityforreddit.activities.BaseActivity;
Expand Down Expand Up @@ -121,6 +122,7 @@
import ml.docilealligator.infinityforreddit.post.MarkPostAsReadInterface;
import ml.docilealligator.infinityforreddit.post.Post;
import ml.docilealligator.infinityforreddit.post.PostPagingSource;
import ml.docilealligator.infinityforreddit.savedpost.SavedPost;
import ml.docilealligator.infinityforreddit.thing.SaveThing;
import ml.docilealligator.infinityforreddit.thing.StreamableVideo;
import ml.docilealligator.infinityforreddit.thing.VoteThing;
Expand Down Expand Up @@ -182,6 +184,7 @@ public boolean areContentsTheSame(@NonNull Post post, @NonNull Post t1) {
private Retrofit mOauthRetrofit;
private Retrofit mRedgifsRetrofit;
private Provider<StreamableAPI> mStreamableApiProvider;
private RedditDataRoomDatabase mRedditDataRoomDatabase;
private String mAccessToken;
private String mAccountName;
private RequestManager mGlide;
Expand Down Expand Up @@ -276,7 +279,7 @@ public boolean areContentsTheSame(@NonNull Post post, @NonNull Post t1) {
// postHistorySharedPreferences will be null when being used in HistoryPostFragment.
public PostRecyclerViewAdapter(BaseActivity activity, PostFragmentBase fragment, Executor executor, Retrofit oauthRetrofit,
Retrofit redgifsRetrofit, Provider<StreamableAPI> streamableApiProvider,
CustomThemeWrapper customThemeWrapper, Locale locale,
RedditDataRoomDatabase redditDataRoomDatabase, CustomThemeWrapper customThemeWrapper, Locale locale,
@Nullable String accessToken, @NonNull String accountName, int postType, int postLayout, boolean displaySubredditName,
SharedPreferences sharedPreferences, SharedPreferences currentAccountSharedPreferences,
SharedPreferences nsfwAndSpoilerSharedPreferences,
Expand All @@ -292,6 +295,7 @@ public PostRecyclerViewAdapter(BaseActivity activity, PostFragmentBase fragment,
mOauthRetrofit = oauthRetrofit;
mRedgifsRetrofit = redgifsRetrofit;
mStreamableApiProvider = streamableApiProvider;
mRedditDataRoomDatabase = redditDataRoomDatabase;
mAccessToken = accessToken;
mAccountName = accountName;
mPostType = postType;
Expand Down Expand Up @@ -2389,7 +2393,56 @@ public void onVoteThingFail(int position1) {
Post post = getItem(position);
if (post != null) {
if (mAccountName.equals(Account.ANONYMOUS_ACCOUNT)) {
Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show();
// Use local storage for anonymous users
if (post.isSaved()) {
saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
SaveThing.unsaveThingLocally(mRedditDataRoomDatabase, mExecutor, mAccountName, post.getId(),
new SaveThing.SaveThingListener() {
@Override
public void success() {
post.setSaved(false);
if (getBindingAdapterPosition() == position) {
saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
}
Toast.makeText(mActivity, R.string.post_unsaved_success, Toast.LENGTH_SHORT).show();
EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post));
}

@Override
public void failed() {
post.setSaved(true);
if (getBindingAdapterPosition() == position) {
saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
}
Toast.makeText(mActivity, R.string.post_unsaved_failed, Toast.LENGTH_SHORT).show();
EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post));
}
});
} else {
saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
SaveThing.saveThingLocally(mRedditDataRoomDatabase, mExecutor, mAccountName, post.getId(), SavedPost.TYPE_POST,
new SaveThing.SaveThingListener() {
@Override
public void success() {
post.setSaved(true);
if (getBindingAdapterPosition() == position) {
saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
}
Toast.makeText(mActivity, R.string.post_saved_success, Toast.LENGTH_SHORT).show();
EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post));
}

@Override
public void failed() {
post.setSaved(false);
if (getBindingAdapterPosition() == position) {
saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
}
Toast.makeText(mActivity, R.string.post_saved_failed, Toast.LENGTH_SHORT).show();
EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post));
}
});
}
return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_SEARCH_POST, defaultPostLayout);

mAdapter = new PostRecyclerViewAdapter(mActivity, this, mExecutor, mOauthRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
mRedgifsRetrofit, mStreamableApiProvider, mRedditDataRoomDatabase, mCustomThemeWrapper, locale,
mActivity.accessToken, mActivity.accountName, postType, postLayout, true,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
mExoCreator, new PostRecyclerViewAdapter.Callback() {
Expand Down Expand Up @@ -346,7 +346,7 @@ public void delayTransition() {
}

mAdapter = new PostRecyclerViewAdapter(mActivity, this, mExecutor, mOauthRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
mRedgifsRetrofit, mStreamableApiProvider, mRedditDataRoomDatabase, mCustomThemeWrapper, locale,
mActivity.accessToken, mActivity.accountName, postType, postLayout, displaySubredditName,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
mExoCreator, new PostRecyclerViewAdapter.Callback() {
Expand Down Expand Up @@ -418,7 +418,7 @@ public void delayTransition() {
}

mAdapter = new PostRecyclerViewAdapter(mActivity, this, mExecutor, mOauthRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
mRedgifsRetrofit, mStreamableApiProvider, mRedditDataRoomDatabase, mCustomThemeWrapper, locale,
mActivity.accessToken, mActivity.accountName, postType, postLayout, true,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
mExoCreator, new PostRecyclerViewAdapter.Callback() {
Expand Down Expand Up @@ -486,7 +486,7 @@ public void delayTransition() {
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_USER_POST_BASE + username, defaultPostLayout);

mAdapter = new PostRecyclerViewAdapter(mActivity, this, mExecutor, mOauthRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
mRedgifsRetrofit, mStreamableApiProvider, mRedditDataRoomDatabase, mCustomThemeWrapper, locale,
mActivity.accessToken, mActivity.accountName, postType, postLayout, true,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
mExoCreator, new PostRecyclerViewAdapter.Callback() {
Expand Down Expand Up @@ -547,7 +547,7 @@ public void delayTransition() {
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_FRONT_PAGE_POST, defaultPostLayout);

mAdapter = new PostRecyclerViewAdapter(mActivity, this, mExecutor, mOauthRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
mRedgifsRetrofit, mStreamableApiProvider, mRedditDataRoomDatabase, mCustomThemeWrapper, locale,
mActivity.accessToken, mActivity.accountName, postType, postLayout, true,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
mExoCreator, new PostRecyclerViewAdapter.Callback() {
Expand Down Expand Up @@ -607,7 +607,7 @@ public void delayTransition() {
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_MULTI_REDDIT_POST_BASE + multiRedditPath, defaultPostLayout);

mAdapter = new PostRecyclerViewAdapter(mActivity, this, mExecutor, mOauthRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
mRedgifsRetrofit, mStreamableApiProvider, mRedditDataRoomDatabase, mCustomThemeWrapper, locale,
mActivity.accessToken, mActivity.accountName, postType, postLayout, true,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
mExoCreator, new PostRecyclerViewAdapter.Callback() {
Expand Down Expand Up @@ -664,7 +664,7 @@ public void delayTransition() {
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_FRONT_PAGE_POST, defaultPostLayout);

mAdapter = new PostRecyclerViewAdapter(mActivity, this, mExecutor, mOauthRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
mRedgifsRetrofit, mStreamableApiProvider, mRedditDataRoomDatabase, mCustomThemeWrapper, locale,
mActivity.accessToken, mActivity.accountName, postType, postLayout, true,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
mExoCreator, new PostRecyclerViewAdapter.Callback() {
Expand Down
Loading
Loading