aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/RedditDataRoomDatabase.java19
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/customtheme/CustomTheme.java147
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/customtheme/CustomThemeWrapper.java48
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragment.java163
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/readposts/FetchReadPosts.java53
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/readposts/ReadPost.java74
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/readposts/ReadPostDao.java20
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/utils/CustomThemeSharedPreferencesUtils.java6
8 files changed, 410 insertions, 120 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditDataRoomDatabase.java b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditDataRoomDatabase.java
index 6c376569..73138eae 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditDataRoomDatabase.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditDataRoomDatabase.java
@@ -16,6 +16,8 @@ import ml.docilealligator.infinityforreddit.customtheme.CustomTheme;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeDao;
import ml.docilealligator.infinityforreddit.multireddit.MultiReddit;
import ml.docilealligator.infinityforreddit.multireddit.MultiRedditDao;
+import ml.docilealligator.infinityforreddit.readposts.ReadPost;
+import ml.docilealligator.infinityforreddit.readposts.ReadPostDao;
import ml.docilealligator.infinityforreddit.recentsearchquery.RecentSearchQuery;
import ml.docilealligator.infinityforreddit.recentsearchquery.RecentSearchQueryDao;
import ml.docilealligator.infinityforreddit.subreddit.SubredditDao;
@@ -30,7 +32,8 @@ import ml.docilealligator.infinityforreddit.user.UserDao;
import ml.docilealligator.infinityforreddit.user.UserData;
@Database(entities = {Account.class, SubredditData.class, SubscribedSubredditData.class, UserData.class,
- SubscribedUserData.class, MultiReddit.class, CustomTheme.class, RecentSearchQuery.class, SubredditFilter.class}, version = 13)
+ SubscribedUserData.class, MultiReddit.class, CustomTheme.class, RecentSearchQuery.class,
+ SubredditFilter.class, ReadPost.class}, version = 14)
public abstract class RedditDataRoomDatabase extends RoomDatabase {
private static RedditDataRoomDatabase INSTANCE;
@@ -68,6 +71,8 @@ public abstract class RedditDataRoomDatabase extends RoomDatabase {
public abstract SubredditFilterDao subredditFilterDao();
+ public abstract ReadPostDao readPostDao();
+
private static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
@@ -263,4 +268,16 @@ public abstract class RedditDataRoomDatabase extends RoomDatabase {
+ " ADD COLUMN no_preview_post_type_icon_tint INTEGER DEFAULT " + Color.parseColor("#808080") + " NOT NULL");
}
};
+
+ private static final Migration MIGRATION_13_14 = new Migration(13, 14) {
+ @Override
+ public void migrate(@NonNull SupportSQLiteDatabase database) {
+ database.execSQL("CREATE TABLE read_posts"
+ + "(username TEXT NOT NULL, id TEXT NOT NULL, PRIMARY KEY(username, id), "
+ + "FOREIGN KEY(username) REFERENCES accounts(username) ON DELETE CASCADE)");
+ database.execSQL("ALTER TABLE custom_themes ADD COLUMN read_post_title_color INTEGER DEFAULT " + Color.parseColor("#9D9D9D") + " NOT NULL");
+ database.execSQL("ALTER TABLE custom_themes ADD COLUMN read_post_content_color INTEGER DEFAULT " + Color.parseColor("#9D9D9D") + " NOT NULL");
+ database.execSQL("ALTER TABLE custom_themes ADD COLUMN read_post_card_view_background_color INTEGER DEFAULT " + Color.parseColor("#F5F5F5") + " NOT NULL");
+ }
+ };
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/customtheme/CustomTheme.java b/app/src/main/java/ml/docilealligator/infinityforreddit/customtheme/CustomTheme.java
index fb9bda02..c428efb9 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/customtheme/CustomTheme.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/customtheme/CustomTheme.java
@@ -37,6 +37,10 @@ public class CustomTheme {
public int postTitleColor;
@ColumnInfo(name = "post_content_color")
public int postContentColor;
+ @ColumnInfo(name = "read_post_title_color")
+ public int readPostTitleColor;
+ @ColumnInfo(name = "read_post_content_color")
+ public int readPostContentColor;
@ColumnInfo(name = "comment_color")
public int commentColor;
@ColumnInfo(name = "button_text_color")
@@ -45,6 +49,8 @@ public class CustomTheme {
public int backgroundColor;
@ColumnInfo(name = "card_view_background_color")
public int cardViewBackgroundColor;
+ @ColumnInfo(name = "read_post_card_view_background_color")
+ public int readPostCardViewBackgroundColor;
@ColumnInfo(name = "comment_background_color")
public int commentBackgroundColor;
@ColumnInfo(name = "bottom_app_bar_background_color")
@@ -205,75 +211,78 @@ public class CustomTheme {
customTheme.secondaryTextColor = customThemeSettingsItems.get(8).colorValue;
customTheme.postTitleColor = customThemeSettingsItems.get(9).colorValue;
customTheme.postContentColor = customThemeSettingsItems.get(10).colorValue;
- customTheme.commentColor = customThemeSettingsItems.get(11).colorValue;
- customTheme.buttonTextColor = customThemeSettingsItems.get(12).colorValue;
- customTheme.chipTextColor = customThemeSettingsItems.get(13).colorValue;
- customTheme.linkColor = customThemeSettingsItems.get(14).colorValue;
- customTheme.receivedMessageTextColor = customThemeSettingsItems.get(15).colorValue;
- customTheme.sentMessageTextColor = customThemeSettingsItems.get(16).colorValue;
- customTheme.backgroundColor = customThemeSettingsItems.get(17).colorValue;
- customTheme.cardViewBackgroundColor = customThemeSettingsItems.get(18).colorValue;
- customTheme.commentBackgroundColor = customThemeSettingsItems.get(19).colorValue;
- customTheme.fullyCollapsedCommentBackgroundColor = customThemeSettingsItems.get(20).colorValue;
- customTheme.awardedCommentBackgroundColor = customThemeSettingsItems.get(21).colorValue;
- customTheme.receivedMessageBackgroundColor = customThemeSettingsItems.get(22).colorValue;
- customTheme.sentMessageBackgroundColor = customThemeSettingsItems.get(23).colorValue;
- customTheme.bottomAppBarBackgroundColor = customThemeSettingsItems.get(24).colorValue;
- customTheme.primaryIconColor = customThemeSettingsItems.get(25).colorValue;
- customTheme.bottomAppBarIconColor = customThemeSettingsItems.get(26).colorValue;
- customTheme.postIconAndInfoColor = customThemeSettingsItems.get(27).colorValue;
- customTheme.commentIconAndInfoColor = customThemeSettingsItems.get(28).colorValue;
- customTheme.fabIconColor = customThemeSettingsItems.get(29).colorValue;
- customTheme.sendMessageIconColor = customThemeSettingsItems.get(30).colorValue;
- customTheme.toolbarPrimaryTextAndIconColor = customThemeSettingsItems.get(31).colorValue;
- customTheme.toolbarSecondaryTextColor = customThemeSettingsItems.get(32).colorValue;
- customTheme.circularProgressBarBackground = customThemeSettingsItems.get(33).colorValue;
- customTheme.tabLayoutWithExpandedCollapsingToolbarTabBackground = customThemeSettingsItems.get(34).colorValue;
- customTheme.tabLayoutWithExpandedCollapsingToolbarTextColor = customThemeSettingsItems.get(35).colorValue;
- customTheme.tabLayoutWithExpandedCollapsingToolbarTabIndicator = customThemeSettingsItems.get(36).colorValue;
- customTheme.tabLayoutWithCollapsedCollapsingToolbarTabBackground = customThemeSettingsItems.get(37).colorValue;
- customTheme.tabLayoutWithCollapsedCollapsingToolbarTextColor = customThemeSettingsItems.get(38).colorValue;
- customTheme.tabLayoutWithCollapsedCollapsingToolbarTabIndicator = customThemeSettingsItems.get(39).colorValue;
- customTheme.upvoted = customThemeSettingsItems.get(40).colorValue;
- customTheme.downvoted = customThemeSettingsItems.get(41).colorValue;
- customTheme.postTypeBackgroundColor = customThemeSettingsItems.get(42).colorValue;
- customTheme.postTypeTextColor = customThemeSettingsItems.get(43).colorValue;
- customTheme.spoilerBackgroundColor = customThemeSettingsItems.get(44).colorValue;
- customTheme.spoilerTextColor = customThemeSettingsItems.get(45).colorValue;
- customTheme.nsfwBackgroundColor = customThemeSettingsItems.get(46).colorValue;
- customTheme.nsfwTextColor = customThemeSettingsItems.get(47).colorValue;
- customTheme.flairBackgroundColor = customThemeSettingsItems.get(48).colorValue;
- customTheme.flairTextColor = customThemeSettingsItems.get(49).colorValue;
- customTheme.awardsBackgroundColor = customThemeSettingsItems.get(50).colorValue;
- customTheme.awardsTextColor = customThemeSettingsItems.get(51).colorValue;
- customTheme.archivedTint = customThemeSettingsItems.get(52).colorValue;
- customTheme.lockedIconTint = customThemeSettingsItems.get(53).colorValue;
- customTheme.crosspostIconTint = customThemeSettingsItems.get(54).colorValue;
- customTheme.stickiedPostIconTint = customThemeSettingsItems.get(55).colorValue;
- customTheme.noPreviewPostTypeIconTint = customThemeSettingsItems.get(56).colorValue;
- customTheme.subscribed = customThemeSettingsItems.get(57).colorValue;
- customTheme.unsubscribed = customThemeSettingsItems.get(58).colorValue;
- customTheme.username = customThemeSettingsItems.get(59).colorValue;
- customTheme.subreddit = customThemeSettingsItems.get(60).colorValue;
- customTheme.authorFlairTextColor = customThemeSettingsItems.get(61).colorValue;
- customTheme.submitter = customThemeSettingsItems.get(62).colorValue;
- customTheme.moderator = customThemeSettingsItems.get(63).colorValue;
- customTheme.singleCommentThreadBackgroundColor = customThemeSettingsItems.get(64).colorValue;
- customTheme.unreadMessageBackgroundColor = customThemeSettingsItems.get(65).colorValue;
- customTheme.dividerColor = customThemeSettingsItems.get(66).colorValue;
- customTheme.noPreviewPostTypeBackgroundColor = customThemeSettingsItems.get(67).colorValue;
- customTheme.voteAndReplyUnavailableButtonColor = customThemeSettingsItems.get(68).colorValue;
- customTheme.commentVerticalBarColor1 = customThemeSettingsItems.get(69).colorValue;
- customTheme.commentVerticalBarColor2 = customThemeSettingsItems.get(70).colorValue;
- customTheme.commentVerticalBarColor3 = customThemeSettingsItems.get(71).colorValue;
- customTheme.commentVerticalBarColor4 = customThemeSettingsItems.get(72).colorValue;
- customTheme.commentVerticalBarColor5 = customThemeSettingsItems.get(73).colorValue;
- customTheme.commentVerticalBarColor6 = customThemeSettingsItems.get(74).colorValue;
- customTheme.commentVerticalBarColor7 = customThemeSettingsItems.get(75).colorValue;
- customTheme.navBarColor = customThemeSettingsItems.get(76).colorValue;
- customTheme.isLightStatusBar = customThemeSettingsItems.get(77).isEnabled;
- customTheme.isLightNavBar = customThemeSettingsItems.get(78).isEnabled;
- customTheme.isChangeStatusBarIconColorAfterToolbarCollapsedInImmersiveInterface = customThemeSettingsItems.get(79).isEnabled;
+ customTheme.readPostTitleColor = customThemeSettingsItems.get(11).colorValue;
+ customTheme.readPostContentColor = customThemeSettingsItems.get(12).colorValue;
+ customTheme.commentColor = customThemeSettingsItems.get(13).colorValue;
+ customTheme.buttonTextColor = customThemeSettingsItems.get(14).colorValue;
+ customTheme.chipTextColor = customThemeSettingsItems.get(15).colorValue;
+ customTheme.linkColor = customThemeSettingsItems.get(16).colorValue;
+ customTheme.receivedMessageTextColor = customThemeSettingsItems.get(17).colorValue;
+ customTheme.sentMessageTextColor = customThemeSettingsItems.get(18).colorValue;
+ customTheme.backgroundColor = customThemeSettingsItems.get(19).colorValue;
+ customTheme.cardViewBackgroundColor = customThemeSettingsItems.get(20).colorValue;
+ customTheme.readPostCardViewBackgroundColor = customThemeSettingsItems.get(21).colorValue;
+ customTheme.commentBackgroundColor = customThemeSettingsItems.get(22).colorValue;
+ customTheme.fullyCollapsedCommentBackgroundColor = customThemeSettingsItems.get(23).colorValue;
+ customTheme.awardedCommentBackgroundColor = customThemeSettingsItems.get(24).colorValue;
+ customTheme.receivedMessageBackgroundColor = customThemeSettingsItems.get(25).colorValue;
+ customTheme.sentMessageBackgroundColor = customThemeSettingsItems.get(26).colorValue;
+ customTheme.bottomAppBarBackgroundColor = customThemeSettingsItems.get(27).colorValue;
+ customTheme.primaryIconColor = customThemeSettingsItems.get(28).colorValue;
+ customTheme.bottomAppBarIconColor = customThemeSettingsItems.get(29).colorValue;
+ customTheme.postIconAndInfoColor = customThemeSettingsItems.get(30).colorValue;
+ customTheme.commentIconAndInfoColor = customThemeSettingsItems.get(31).colorValue;
+ customTheme.fabIconColor = customThemeSettingsItems.get(32).colorValue;
+ customTheme.sendMessageIconColor = customThemeSettingsItems.get(33).colorValue;
+ customTheme.toolbarPrimaryTextAndIconColor = customThemeSettingsItems.get(34).colorValue;
+ customTheme.toolbarSecondaryTextColor = customThemeSettingsItems.get(35).colorValue;
+ customTheme.circularProgressBarBackground = customThemeSettingsItems.get(36).colorValue;
+ customTheme.tabLayoutWithExpandedCollapsingToolbarTabBackground = customThemeSettingsItems.get(37).colorValue;
+ customTheme.tabLayoutWithExpandedCollapsingToolbarTextColor = customThemeSettingsItems.get(38).colorValue;
+ customTheme.tabLayoutWithExpandedCollapsingToolbarTabIndicator = customThemeSettingsItems.get(39).colorValue;
+ customTheme.tabLayoutWithCollapsedCollapsingToolbarTabBackground = customThemeSettingsItems.get(40).colorValue;
+ customTheme.tabLayoutWithCollapsedCollapsingToolbarTextColor = customThemeSettingsItems.get(41).colorValue;
+ customTheme.tabLayoutWithCollapsedCollapsingToolbarTabIndicator = customThemeSettingsItems.get(42).colorValue;
+ customTheme.upvoted = customThemeSettingsItems.get(43).colorValue;
+ customTheme.downvoted = customThemeSettingsItems.get(44).colorValue;
+ customTheme.postTypeBackgroundColor = customThemeSettingsItems.get(45).colorValue;
+ customTheme.postTypeTextColor = customThemeSettingsItems.get(46).colorValue;
+ customTheme.spoilerBackgroundColor = customThemeSettingsItems.get(47).colorValue;
+ customTheme.spoilerTextColor = customThemeSettingsItems.get(48).colorValue;
+ customTheme.nsfwBackgroundColor = customThemeSettingsItems.get(49).colorValue;
+ customTheme.nsfwTextColor = customThemeSettingsItems.get(50).colorValue;
+ customTheme.flairBackgroundColor = customThemeSettingsItems.get(51).colorValue;
+ customTheme.flairTextColor = customThemeSettingsItems.get(52).colorValue;
+ customTheme.awardsBackgroundColor = customThemeSettingsItems.get(53).colorValue;
+ customTheme.awardsTextColor = customThemeSettingsItems.get(54).colorValue;
+ customTheme.archivedTint = customThemeSettingsItems.get(55).colorValue;
+ customTheme.lockedIconTint = customThemeSettingsItems.get(56).colorValue;
+ customTheme.crosspostIconTint = customThemeSettingsItems.get(57).colorValue;
+ customTheme.stickiedPostIconTint = customThemeSettingsItems.get(58).colorValue;
+ customTheme.noPreviewPostTypeIconTint = customThemeSettingsItems.get(59).colorValue;
+ customTheme.subscribed = customThemeSettingsItems.get(60).colorValue;
+ customTheme.unsubscribed = customThemeSettingsItems.get(61).colorValue;
+ customTheme.username = customThemeSettingsItems.get(62).colorValue;
+ customTheme.subreddit = customThemeSettingsItems.get(63).colorValue;
+ customTheme.authorFlairTextColor = customThemeSettingsItems.get(64).colorValue;
+ customTheme.submitter = customThemeSettingsItems.get(65).colorValue;
+ customTheme.moderator = customThemeSettingsItems.get(66).colorValue;
+ customTheme.singleCommentThreadBackgroundColor = customThemeSettingsItems.get(67).colorValue;
+ customTheme.unreadMessageBackgroundColor = customThemeSettingsItems.get(68).colorValue;
+ customTheme.dividerColor = customThemeSettingsItems.get(69).colorValue;
+ customTheme.noPreviewPostTypeBackgroundColor = customThemeSettingsItems.get(70).colorValue;
+ customTheme.voteAndReplyUnavailableButtonColor = customThemeSettingsItems.get(71).colorValue;
+ customTheme.commentVerticalBarColor1 = customThemeSettingsItems.get(72).colorValue;
+ customTheme.commentVerticalBarColor2 = customThemeSettingsItems.get(73).colorValue;
+ customTheme.commentVerticalBarColor3 = customThemeSettingsItems.get(74).colorValue;
+ customTheme.commentVerticalBarColor4 = customThemeSettingsItems.get(75).colorValue;
+ customTheme.commentVerticalBarColor5 = customThemeSettingsItems.get(76).colorValue;
+ customTheme.commentVerticalBarColor6 = customThemeSettingsItems.get(77).colorValue;
+ customTheme.commentVerticalBarColor7 = customThemeSettingsItems.get(78).colorValue;
+ customTheme.navBarColor = customThemeSettingsItems.get(79).colorValue;
+ customTheme.isLightStatusBar = customThemeSettingsItems.get(80).isEnabled;
+ customTheme.isLightNavBar = customThemeSettingsItems.get(81).isEnabled;
+ customTheme.isChangeStatusBarIconColorAfterToolbarCollapsedInImmersiveInterface = customThemeSettingsItems.get(82).isEnabled;
return customTheme;
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/customtheme/CustomThemeWrapper.java b/app/src/main/java/ml/docilealligator/infinityforreddit/customtheme/CustomThemeWrapper.java
index 8621559f..f0a8c0b7 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/customtheme/CustomThemeWrapper.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/customtheme/CustomThemeWrapper.java
@@ -92,6 +92,16 @@ public class CustomThemeWrapper {
getDefaultColor("#8A000000", "#B3FFFFFF", "#B3FFFFFF"));
}
+ public int getReadPostTitleColor() {
+ return getThemeSharedPreferences().getInt(CustomThemeSharedPreferencesUtils.READ_POST_TITLE_COLOR,
+ getDefaultColor("#9D9D9D", "#979797", "#979797"));
+ }
+
+ public int getReadPostContentColor() {
+ return getThemeSharedPreferences().getInt(CustomThemeSharedPreferencesUtils.READ_POST_CONTENT_COLOR,
+ getDefaultColor("#9D9D9D", "#979797", "#979797"));
+ }
+
public int getCommentColor() {
return getThemeSharedPreferences().getInt(CustomThemeSharedPreferencesUtils.COMMENT_COLOR,
getDefaultColor("#000000", "#FFFFFF", "#FFFFFF"));
@@ -112,6 +122,11 @@ public class CustomThemeWrapper {
getDefaultColor("#FFFFFF", "#242424", "#000000"));
}
+ public int getReadPostCardViewBackgroundColor() {
+ return getThemeSharedPreferences().getInt(CustomThemeSharedPreferencesUtils.READ_POST_CARD_VIEW_BACKGROUND_COLOR,
+ getDefaultColor("#F5F5F5", "#101010", "#000000"));
+ }
+
public int getCommentBackgroundColor() {
return getThemeSharedPreferences().getInt(CustomThemeSharedPreferencesUtils.COMMENT_BACKGROUND_COLOR,
getDefaultColor("#FFFFFF", "#242424", "#000000"));
@@ -492,10 +507,13 @@ public class CustomThemeWrapper {
customTheme.secondaryTextColor = Color.parseColor("#8A000000");
customTheme.postTitleColor = Color.parseColor("#000000");
customTheme.postContentColor = Color.parseColor("#8A000000");
+ customTheme.readPostTitleColor = Color.parseColor("#9D9D9D");
+ customTheme.readPostContentColor = Color.parseColor("#9D9D9D");
customTheme.commentColor = Color.parseColor("#000000");
customTheme.buttonTextColor = Color.parseColor("#FFFFFF");
customTheme.backgroundColor = Color.parseColor("#FFFFFF");
customTheme.cardViewBackgroundColor = Color.parseColor("#FFFFFF");
+ customTheme.readPostCardViewBackgroundColor = Color.parseColor("#F5F5F5");
customTheme.commentBackgroundColor = Color.parseColor("#FFFFFF");
customTheme.bottomAppBarBackgroundColor = Color.parseColor("#FFFFFF");
customTheme.primaryIconColor = Color.parseColor("#000000");
@@ -578,10 +596,13 @@ public class CustomThemeWrapper {
customTheme.secondaryTextColor = Color.parseColor("#B3FFFFFF");
customTheme.postTitleColor = Color.parseColor("#FFFFFF");
customTheme.postContentColor = Color.parseColor("#B3FFFFFF");
+ customTheme.readPostTitleColor = Color.parseColor("#979797");
+ customTheme.readPostContentColor = Color.parseColor("#979797");
customTheme.commentColor = Color.parseColor("#FFFFFF");
customTheme.buttonTextColor = Color.parseColor("#FFFFFF");
customTheme.backgroundColor = Color.parseColor("#121212");
customTheme.cardViewBackgroundColor = Color.parseColor("#242424");
+ customTheme.readPostCardViewBackgroundColor = Color.parseColor("#101010");
customTheme.commentBackgroundColor = Color.parseColor("#242424");
customTheme.bottomAppBarBackgroundColor = Color.parseColor("#121212");
customTheme.primaryIconColor = Color.parseColor("#FFFFFF");
@@ -664,10 +685,13 @@ public class CustomThemeWrapper {
customTheme.secondaryTextColor = Color.parseColor("#B3FFFFFF");
customTheme.postTitleColor = Color.parseColor("#FFFFFF");
customTheme.postContentColor = Color.parseColor("#B3FFFFFF");
+ customTheme.readPostTitleColor = Color.parseColor("#979797");
+ customTheme.readPostContentColor = Color.parseColor("#979797");
customTheme.commentColor = Color.parseColor("#FFFFFF");
customTheme.buttonTextColor = Color.parseColor("#FFFFFF");
customTheme.backgroundColor = Color.parseColor("#000000");
customTheme.cardViewBackgroundColor = Color.parseColor("#000000");
+ customTheme.readPostCardViewBackgroundColor = Color.parseColor("#000000");
customTheme.commentBackgroundColor = Color.parseColor("#000000");
customTheme.bottomAppBarBackgroundColor = Color.parseColor("#000000");
customTheme.primaryIconColor = Color.parseColor("#FFFFFF");
@@ -750,10 +774,13 @@ public class CustomThemeWrapper {
customTheme.secondaryTextColor = Color.parseColor("#8A000000");
customTheme.postTitleColor = Color.parseColor("#000000");
customTheme.postContentColor = Color.parseColor("#8A000000");
+ customTheme.readPostTitleColor = Color.parseColor("#9D9D9D");
+ customTheme.readPostContentColor = Color.parseColor("#9D9D9D");
customTheme.commentColor = Color.parseColor("#000000");
customTheme.buttonTextColor = Color.parseColor("#000000");
customTheme.backgroundColor = Color.parseColor("#FFFFFF");
customTheme.cardViewBackgroundColor = Color.parseColor("#FFFFFF");
+ customTheme.readPostCardViewBackgroundColor = Color.parseColor("#F5F5F5");
customTheme.commentBackgroundColor = Color.parseColor("#FFFFFF");
customTheme.bottomAppBarBackgroundColor = Color.parseColor("#FFFFFF");
customTheme.primaryIconColor = Color.parseColor("#000000");
@@ -836,10 +863,13 @@ public class CustomThemeWrapper {
customTheme.secondaryTextColor = Color.parseColor("#B3FFFFFF");
customTheme.postTitleColor = Color.parseColor("#FFFFFF");
customTheme.postContentColor = Color.parseColor("#B3FFFFFF");
+ customTheme.readPostTitleColor = Color.parseColor("#979797");
+ customTheme.readPostContentColor = Color.parseColor("#979797");
customTheme.commentColor = Color.parseColor("#FFFFFF");
customTheme.buttonTextColor = Color.parseColor("#FFFFFF");
customTheme.backgroundColor = Color.parseColor("#121212");
customTheme.cardViewBackgroundColor = Color.parseColor("#242424");
+ customTheme.readPostCardViewBackgroundColor = Color.parseColor("#101010");
customTheme.commentBackgroundColor = Color.parseColor("#242424");
customTheme.bottomAppBarBackgroundColor = Color.parseColor("#121212");
customTheme.primaryIconColor = Color.parseColor("#FFFFFF");
@@ -922,10 +952,13 @@ public class CustomThemeWrapper {
customTheme.secondaryTextColor = Color.parseColor("#B3FFFFFF");
customTheme.postTitleColor = Color.parseColor("#FFFFFF");
customTheme.postContentColor = Color.parseColor("#B3FFFFFF");
+ customTheme.readPostTitleColor = Color.parseColor("#979797");
+ customTheme.readPostContentColor = Color.parseColor("#979797");
customTheme.commentColor = Color.parseColor("#FFFFFF");
customTheme.buttonTextColor = Color.parseColor("#FFFFFF");
customTheme.backgroundColor = Color.parseColor("#000000");
customTheme.cardViewBackgroundColor = Color.parseColor("#000000");
+ customTheme.readPostCardViewBackgroundColor = Color.parseColor("#000000");
customTheme.commentBackgroundColor = Color.parseColor("#000000");
customTheme.bottomAppBarBackgroundColor = Color.parseColor("#000000");
customTheme.primaryIconColor = Color.parseColor("#FFFFFF");
@@ -1008,10 +1041,13 @@ public class CustomThemeWrapper {
customTheme.secondaryTextColor = Color.parseColor("#8A000000");
customTheme.postTitleColor = Color.parseColor("#000000");
customTheme.postContentColor = Color.parseColor("#8A000000");
+ customTheme.readPostTitleColor = Color.parseColor("#9D9D9D");
+ customTheme.readPostContentColor = Color.parseColor("#9D9D9D");
customTheme.commentColor = Color.parseColor("#000000");
customTheme.buttonTextColor = Color.parseColor("#FFFFFF");
customTheme.backgroundColor = Color.parseColor("#FFFFFF");
customTheme.cardViewBackgroundColor = Color.parseColor("#FFFFFF");
+ customTheme.readPostCardViewBackgroundColor = Color.parseColor("#F5F5F5");
customTheme.commentBackgroundColor = Color.parseColor("#FFFFFF");
customTheme.bottomAppBarBackgroundColor = Color.parseColor("#FFFFFF");
customTheme.primaryIconColor = Color.parseColor("#000000");
@@ -1094,10 +1130,13 @@ public class CustomThemeWrapper {
customTheme.secondaryTextColor = Color.parseColor("#B3FFFFFF");
customTheme.postTitleColor = Color.parseColor("#FFFFFF");
customTheme.postContentColor = Color.parseColor("#B3FFFFFF");
+ customTheme.readPostTitleColor = Color.parseColor("#979797");
+ customTheme.readPostContentColor = Color.parseColor("#979797");
customTheme.commentColor = Color.parseColor("#FFFFFF");
customTheme.buttonTextColor = Color.parseColor("#FFFFFF");
customTheme.backgroundColor = Color.parseColor("#121212");
customTheme.cardViewBackgroundColor = Color.parseColor("#242424");
+ customTheme.readPostCardViewBackgroundColor = Color.parseColor("#101010");
customTheme.commentBackgroundColor = Color.parseColor("#242424");
customTheme.bottomAppBarBackgroundColor = Color.parseColor("#121212");
customTheme.primaryIconColor = Color.parseColor("#FFFFFF");
@@ -1180,10 +1219,13 @@ public class CustomThemeWrapper {
customTheme.secondaryTextColor = Color.parseColor("#B3FFFFFF");
customTheme.postTitleColor = Color.parseColor("#FFFFFF");
customTheme.postContentColor = Color.parseColor("#B3FFFFFF");
+ customTheme.readPostTitleColor = Color.parseColor("#979797");
+ customTheme.readPostContentColor = Color.parseColor("#979797");
customTheme.commentColor = Color.parseColor("#FFFFFF");
customTheme.buttonTextColor = Color.parseColor("#FFFFFF");
customTheme.backgroundColor = Color.parseColor("#000000");
customTheme.cardViewBackgroundColor = Color.parseColor("#000000");
+ customTheme.readPostCardViewBackgroundColor = Color.parseColor("#000000");
customTheme.commentBackgroundColor = Color.parseColor("#000000");
customTheme.bottomAppBarBackgroundColor = Color.parseColor("#000000");
customTheme.primaryIconColor = Color.parseColor("#FFFFFF");
@@ -1266,10 +1308,13 @@ public class CustomThemeWrapper {
customTheme.secondaryTextColor = Color.parseColor("#B3FFFFFF");
customTheme.postTitleColor = Color.parseColor("#FFFFFF");
customTheme.postContentColor = Color.parseColor("#B3FFFFFF");
+ customTheme.readPostTitleColor = Color.parseColor("#9D9D9D");
+ customTheme.readPostContentColor = Color.parseColor("#9D9D9D");
customTheme.commentColor = Color.parseColor("#FFFFFF");
customTheme.buttonTextColor = Color.parseColor("#FFFFFF");
customTheme.backgroundColor = Color.parseColor("#282A36");
customTheme.cardViewBackgroundColor = Color.parseColor("#393A59");
+ customTheme.readPostCardViewBackgroundColor = Color.parseColor("#1C1F3D");
customTheme.commentBackgroundColor = Color.parseColor("#393A59");
customTheme.bottomAppBarBackgroundColor = Color.parseColor("#393A59");
customTheme.primaryIconColor = Color.parseColor("#FFFFFF");
@@ -1352,10 +1397,13 @@ public class CustomThemeWrapper {
customTheme.secondaryTextColor = Color.parseColor("#8A000000");
customTheme.postTitleColor = Color.parseColor("#000000");
customTheme.postContentColor = Color.parseColor("#8A000000");
+ customTheme.readPostTitleColor = Color.parseColor("#979797");
+ customTheme.readPostContentColor = Color.parseColor("#979797");
customTheme.commentColor = Color.parseColor("#000000");
customTheme.buttonTextColor = Color.parseColor("#FFFFFF");
customTheme.backgroundColor = Color.parseColor("#DAD0DE");
customTheme.cardViewBackgroundColor = Color.parseColor("#C0F0F4");
+ customTheme.readPostCardViewBackgroundColor = Color.parseColor("#D2E7EA");
customTheme.commentBackgroundColor = Color.parseColor("#C0F0F4");
customTheme.bottomAppBarBackgroundColor = Color.parseColor("#D48AE0");
customTheme.primaryIconColor = Color.parseColor("#000000");
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 fbc7d0cb..de0d2c0f 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragment.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragment.java
@@ -61,11 +61,17 @@ import butterknife.ButterKnife;
import im.ene.toro.exoplayer.ExoCreator;
import im.ene.toro.media.PlaybackInfo;
import im.ene.toro.media.VolumeInfo;
+import ml.docilealligator.infinityforreddit.ActivityToolbarInterface;
+import ml.docilealligator.infinityforreddit.FragmentCommunicator;
+import ml.docilealligator.infinityforreddit.Infinity;
+import ml.docilealligator.infinityforreddit.NetworkState;
+import ml.docilealligator.infinityforreddit.R;
+import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
+import ml.docilealligator.infinityforreddit.SortType;
import ml.docilealligator.infinityforreddit.activities.BaseActivity;
import ml.docilealligator.infinityforreddit.activities.FilteredThingActivity;
import ml.docilealligator.infinityforreddit.activities.MainActivity;
import ml.docilealligator.infinityforreddit.activities.ViewSubredditDetailActivity;
-import ml.docilealligator.infinityforreddit.ActivityToolbarInterface;
import ml.docilealligator.infinityforreddit.adapters.PostRecyclerViewAdapter;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.customviews.CustomToroContainer;
@@ -95,15 +101,11 @@ import ml.docilealligator.infinityforreddit.events.ChangeVoteButtonsPositionEven
import ml.docilealligator.infinityforreddit.events.PostUpdateEventToPostList;
import ml.docilealligator.infinityforreddit.events.ShowDividerInCompactLayoutPreferenceEvent;
import ml.docilealligator.infinityforreddit.events.ShowThumbnailOnTheRightInCompactLayoutEvent;
-import ml.docilealligator.infinityforreddit.FragmentCommunicator;
-import ml.docilealligator.infinityforreddit.Infinity;
-import ml.docilealligator.infinityforreddit.NetworkState;
import ml.docilealligator.infinityforreddit.post.Post;
import ml.docilealligator.infinityforreddit.post.PostDataSource;
import ml.docilealligator.infinityforreddit.post.PostViewModel;
-import ml.docilealligator.infinityforreddit.R;
-import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
-import ml.docilealligator.infinityforreddit.SortType;
+import ml.docilealligator.infinityforreddit.readposts.FetchReadPosts;
+import ml.docilealligator.infinityforreddit.readposts.ReadPost;
import ml.docilealligator.infinityforreddit.subredditfilter.FetchSubredditFilters;
import ml.docilealligator.infinityforreddit.subredditfilter.SubredditFilter;
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
@@ -131,6 +133,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
private static final String IS_IN_LAZY_MODE_STATE = "IILMS";
private static final String RECYCLER_VIEW_POSITION_STATE = "RVPS";
+ private static final String READ_POST_LIST_STATE = "RPLS";
private static final String SUBREDDIT_FILTER_LIST_STATE = "SFLS";
@BindView(R.id.swipe_refresh_layout_post_fragment)
@@ -197,6 +200,8 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
private String accountName;
private String subredditName;
private String username;
+ private String query;
+ private String where;
private String multiRedditPath;
private int maxPosition = -1;
private int postLayout;
@@ -211,6 +216,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
private float swipeActionThreshold;
private ItemTouchHelper touchHelper;
private ArrayList<SubredditFilter> subredditFilterList;
+ private ArrayList<ReadPost> readPosts;
public PostFragment() {
// Required empty public constructor
@@ -371,6 +377,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
}
isInLazyMode = savedInstanceState.getBoolean(IS_IN_LAZY_MODE_STATE);
+ readPosts = savedInstanceState.getParcelableArrayList(READ_POST_LIST_STATE);
subredditFilterList = savedInstanceState.getParcelableArrayList(SUBREDDIT_FILTER_LIST_STATE);
}
@@ -419,7 +426,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
if (postType == PostDataSource.TYPE_SEARCH) {
subredditName = getArguments().getString(EXTRA_NAME);
- String query = getArguments().getString(EXTRA_QUERY);
+ query = getArguments().getString(EXTRA_QUERY);
String sort = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TYPE_SEARCH_POST, SortType.Type.RELEVANCE.name());
String sortTime = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TIME_SEARCH_POST, SortType.Time.ALL.name());
@@ -457,10 +464,6 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
TransitionManager.beginDelayedTransition(mPostRecyclerView, new AutoTransition());
}
});
-
- mPostViewModel = new ViewModelProvider(this, new PostViewModel.Factory(accessToken == null ? mRetrofit : mOauthRetrofit, accessToken,
- accountName, locale, mSharedPreferences,
- postFeedScrolledPositionSharedPreferences, subredditName, query, postType, sortType, filter, nsfw)).get(PostViewModel.class);
} else if (postType == PostDataSource.TYPE_SUBREDDIT) {
subredditName = getArguments().getString(EXTRA_NAME);
String sort;
@@ -509,29 +512,6 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
TransitionManager.beginDelayedTransition(mPostRecyclerView, new AutoTransition());
}
});
-
- if (subredditName.equals("all") || subredditName.equals("popular")) {
- if (subredditFilterList != null) {
- mPostViewModel = new ViewModelProvider(this, new PostViewModel.Factory(accessToken == null ? mRetrofit : mOauthRetrofit, accessToken,
- accountName, locale, mSharedPreferences,
- postFeedScrolledPositionSharedPreferences, subredditName, postType, sortType, filter, nsfw, subredditFilterList)).get(PostViewModel.class);
- } else {
- FetchSubredditFilters.fetchSubredditFilters(mRedditDataRoomDatabase, subredditFilters -> {
- if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) {
- subredditFilterList = subredditFilters;
- mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(accessToken == null ? mRetrofit : mOauthRetrofit, accessToken,
- accountName, locale, mSharedPreferences,
- postFeedScrolledPositionSharedPreferences, subredditName, postType, sortType, filter, nsfw, subredditFilters)).get(PostViewModel.class);
-
- bindPostViewModel();
- }
- });
- }
- } else {
- mPostViewModel = new ViewModelProvider(this, new PostViewModel.Factory(accessToken == null ? mRetrofit : mOauthRetrofit, accessToken,
- accountName, locale, mSharedPreferences,
- postFeedScrolledPositionSharedPreferences, subredditName, postType, sortType, filter, nsfw)).get(PostViewModel.class);
- }
} else if(postType == PostDataSource.TYPE_MULTI_REDDIT) {
multiRedditPath = getArguments().getString(EXTRA_NAME);
String sort;
@@ -582,13 +562,9 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
TransitionManager.beginDelayedTransition(mPostRecyclerView, new AutoTransition());
}
});
-
- mPostViewModel = new ViewModelProvider(this, new PostViewModel.Factory(accessToken == null ? mRetrofit : mOauthRetrofit, accessToken,
- accountName, locale, mSharedPreferences,
- postFeedScrolledPositionSharedPreferences, multiRedditPath, postType, sortType, filter, nsfw)).get(PostViewModel.class);
} else if (postType == PostDataSource.TYPE_USER) {
username = getArguments().getString(EXTRA_USER_NAME);
- String where = getArguments().getString(EXTRA_USER_WHERE);
+ where = getArguments().getString(EXTRA_USER_WHERE);
if (where != null && where.equals(PostDataSource.USER_WHERE_SUBMITTED)) {
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mFetchPostInfoLinearLayout.getLayoutParams();
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
@@ -635,10 +611,6 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
TransitionManager.beginDelayedTransition(mPostRecyclerView, new AutoTransition());
}
});
-
- mPostViewModel = new ViewModelProvider(this, new PostViewModel.Factory(accessToken == null ? mRetrofit : mOauthRetrofit, accessToken,
- accountName, locale, mSharedPreferences,
- postFeedScrolledPositionSharedPreferences, username, postType, sortType, where, filter, nsfw)).get(PostViewModel.class);
} else {
String sort = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TYPE_BEST_POST, SortType.Type.BEST.name());
if(sort.equals(SortType.Type.CONTROVERSIAL.name()) || sort.equals(SortType.Type.TOP.name())) {
@@ -679,16 +651,30 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
TransitionManager.beginDelayedTransition(mPostRecyclerView, new AutoTransition());
}
});
-
- mPostViewModel = new ViewModelProvider(this, new PostViewModel.Factory(mOauthRetrofit, accessToken,
- accountName, locale, mSharedPreferences, postFeedScrolledPositionSharedPreferences,
- postType, sortType, filter, nsfw)).get(PostViewModel.class);
}
if (activity instanceof ActivityToolbarInterface) {
((ActivityToolbarInterface) activity).displaySortType();
}
+ if (accountName != null && !accountName.equals("")) {
+ if (readPosts == null) {
+ FetchReadPosts.fetchReadPosts(mRedditDataRoomDatabase, accountName,
+ postType == PostDataSource.TYPE_SUBREDDIT && subredditName != null && (subredditName.equals("all") || subredditName.equals("popular")),
+ (readPosts, subredditFilters) -> {
+ if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) {
+ this.readPosts = readPosts;
+ this.subredditFilterList = subredditFilters;
+ initializeAndPostViewModel(accessToken, locale, filter, nsfw);
+ }
+ });
+ } else {
+ initializeAndPostViewModel(accessToken, locale, filter, nsfw);
+ }
+ } else {
+ initializeAndPostViewModelForAnonymous(accessToken, locale, filter, nsfw);
+ }
+
vibrateWhenActionTriggered = mSharedPreferences.getBoolean(SharedPreferencesUtils.VIBRATE_WHEN_ACTION_TRIGGERED, true);
swipeActionThreshold = Float.parseFloat(mSharedPreferences.getString(SharedPreferencesUtils.SWIPE_ACTION_THRESHOLD, "0.3"));
swipeRightAction = Integer.parseInt(mSharedPreferences.getString(SharedPreferencesUtils.SWIPE_RIGHT_ACTION, "1"));
@@ -795,11 +781,87 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
return new PlaybackInfo(INDEX_UNSET, TIME_UNSET, volumeInfo);
});
+ return rootView;
+ }
+
+ private void initializeAndPostViewModel(String accessToken, Locale locale, int filter, boolean nsfw) {
+ if (postType == PostDataSource.TYPE_SEARCH) {
+ mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(accessToken == null ? mRetrofit : mOauthRetrofit, accessToken,
+ accountName, locale, mSharedPreferences,
+ postFeedScrolledPositionSharedPreferences, subredditName, query, postType, sortType, filter, nsfw)).get(PostViewModel.class);
+ } else if (postType == PostDataSource.TYPE_SUBREDDIT) {
+ if (subredditName.equals("all") || subredditName.equals("popular")) {
+ mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(accessToken == null ? mRetrofit : mOauthRetrofit, accessToken,
+ accountName, locale, mSharedPreferences,
+ postFeedScrolledPositionSharedPreferences, subredditName, postType, sortType, filter, nsfw, subredditFilterList)).get(PostViewModel.class);
+ } else {
+ mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(accessToken == null ? mRetrofit : mOauthRetrofit, accessToken,
+ accountName, locale, mSharedPreferences,
+ postFeedScrolledPositionSharedPreferences, subredditName, postType, sortType, filter, nsfw)).get(PostViewModel.class);
+ }
+ } else if (postType == PostDataSource.TYPE_MULTI_REDDIT) {
+ mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(accessToken == null ? mRetrofit : mOauthRetrofit, accessToken,
+ accountName, locale, mSharedPreferences,
+ postFeedScrolledPositionSharedPreferences, multiRedditPath, postType, sortType, filter, nsfw)).get(PostViewModel.class);
+ } else if (postType == PostDataSource.TYPE_USER) {
+ mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(accessToken == null ? mRetrofit : mOauthRetrofit, accessToken,
+ accountName, locale, mSharedPreferences,
+ postFeedScrolledPositionSharedPreferences, username, postType, sortType, where, filter, nsfw)).get(PostViewModel.class);
+ } else {
+ mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mOauthRetrofit, accessToken,
+ accountName, locale, mSharedPreferences, postFeedScrolledPositionSharedPreferences,
+ postType, sortType, filter, nsfw)).get(PostViewModel.class);
+ }
+
+ bindPostViewModel();
+ }
+
+ private void initializeAndPostViewModelForAnonymous(String accessToken, Locale locale, int filter, boolean nsfw) {
+ //For anonymous user
+ if (postType == PostDataSource.TYPE_SEARCH) {
+ mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(accessToken == null ? mRetrofit : mOauthRetrofit, accessToken,
+ accountName, locale, mSharedPreferences,
+ postFeedScrolledPositionSharedPreferences, subredditName, query, postType, sortType, filter, nsfw)).get(PostViewModel.class);
+ } else if (postType == PostDataSource.TYPE_SUBREDDIT) {
+ if (subredditName.equals("all") || subredditName.equals("popular")) {
+ if (subredditFilterList != null) {
+ mPostViewModel = new ViewModelProvider(this, new PostViewModel.Factory(accessToken == null ? mRetrofit : mOauthRetrofit, accessToken,
+ accountName, locale, mSharedPreferences,
+ postFeedScrolledPositionSharedPreferences, subredditName, postType, sortType, filter, nsfw, subredditFilterList)).get(PostViewModel.class);
+ } else {
+ FetchSubredditFilters.fetchSubredditFilters(mRedditDataRoomDatabase, subredditFilters -> {
+ if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) {
+ subredditFilterList = subredditFilters;
+ mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(accessToken == null ? mRetrofit : mOauthRetrofit, accessToken,
+ accountName, locale, mSharedPreferences,
+ postFeedScrolledPositionSharedPreferences, subredditName, postType, sortType, filter, nsfw, subredditFilterList)).get(PostViewModel.class);
+
+ bindPostViewModel();
+ }
+ });
+ }
+ } else {
+ mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(accessToken == null ? mRetrofit : mOauthRetrofit, accessToken,
+ accountName, locale, mSharedPreferences,
+ postFeedScrolledPositionSharedPreferences, subredditName, postType, sortType, filter, nsfw)).get(PostViewModel.class);
+ }
+ } else if (postType == PostDataSource.TYPE_MULTI_REDDIT) {
+ mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(accessToken == null ? mRetrofit : mOauthRetrofit, accessToken,
+ accountName, locale, mSharedPreferences,
+ postFeedScrolledPositionSharedPreferences, multiRedditPath, postType, sortType, filter, nsfw)).get(PostViewModel.class);
+ } else if (postType == PostDataSource.TYPE_USER) {
+ mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(accessToken == null ? mRetrofit : mOauthRetrofit, accessToken,
+ accountName, locale, mSharedPreferences,
+ postFeedScrolledPositionSharedPreferences, username, postType, sortType, where, filter, nsfw)).get(PostViewModel.class);
+ } else {
+ mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mOauthRetrofit, accessToken,
+ accountName, locale, mSharedPreferences, postFeedScrolledPositionSharedPreferences,
+ postType, sortType, filter, nsfw)).get(PostViewModel.class);
+ }
+
if (mPostViewModel != null) {
bindPostViewModel();
}
-
- return rootView;
}
private void bindPostViewModel() {
@@ -912,6 +974,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.putParcelableArrayList(SUBREDDIT_FILTER_LIST_STATE, subredditFilterList);
if (mLinearLayoutManager != null) {
outState.putInt(RECYCLER_VIEW_POSITION_STATE, mLinearLayoutManager.findFirstVisibleItemPosition());
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/readposts/FetchReadPosts.java b/app/src/main/java/ml/docilealligator/infinityforreddit/readposts/FetchReadPosts.java
new file mode 100644
index 00000000..cfb70789
--- /dev/null
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/readposts/FetchReadPosts.java
@@ -0,0 +1,53 @@
+package ml.docilealligator.infinityforreddit.readposts;
+
+import android.os.AsyncTask;
+
+import java.util.ArrayList;
+
+import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
+import ml.docilealligator.infinityforreddit.subredditfilter.SubredditFilter;
+
+public class FetchReadPosts {
+
+ public interface FetchReadPostsListener {
+ void success(ArrayList<ReadPost> readPosts, ArrayList<SubredditFilter> subredditFilters);
+ }
+
+ public static void fetchReadPosts(RedditDataRoomDatabase redditDataRoomDatabase, String username,
+ boolean fetchSubredditFilter, FetchReadPostsListener fetchReadPostsListener) {
+ new FetchAllReadPostsAsyncTask(redditDataRoomDatabase, username, fetchSubredditFilter, fetchReadPostsListener).execute();
+ }
+
+ private static class FetchAllReadPostsAsyncTask extends AsyncTask<Void, Void, Void> {
+
+ private RedditDataRoomDatabase redditDataRoomDatabase;
+ private String username;
+ private boolean fetchSubredditFilter;
+ private FetchReadPostsListener fetchReadPostsListener;
+ private ArrayList<ReadPost> readPosts;
+ private ArrayList<SubredditFilter> subredditFilters;
+
+ private FetchAllReadPostsAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, String username,
+ boolean fetchSubredditFilter, FetchReadPostsListener fetchReadPostsListener) {
+ this.redditDataRoomDatabase = redditDataRoomDatabase;
+ this.username = username;
+ this.fetchSubredditFilter = fetchSubredditFilter;
+ this.fetchReadPostsListener = fetchReadPostsListener;
+ }
+
+ @Override
+ protected Void doInBackground(Void... voids) {
+ readPosts = (ArrayList<ReadPost>) redditDataRoomDatabase.readPostDao().getAllReadPosts(username);
+ if (fetchSubredditFilter) {
+ subredditFilters = (ArrayList<SubredditFilter>) redditDataRoomDatabase.subredditFilterDao().getAllSubredditFilters();
+ }
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(Void aVoid) {
+ super.onPostExecute(aVoid);
+ fetchReadPostsListener.success(readPosts, subredditFilters);
+ }
+ }
+}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/readposts/ReadPost.java b/app/src/main/java/ml/docilealligator/infinityforreddit/readposts/ReadPost.java
new file mode 100644
index 00000000..27a76b85
--- /dev/null
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/readposts/ReadPost.java
@@ -0,0 +1,74 @@
+package ml.docilealligator.infinityforreddit.readposts;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import androidx.annotation.NonNull;
+import androidx.room.ColumnInfo;
+import androidx.room.Entity;
+import androidx.room.ForeignKey;
+
+import ml.docilealligator.infinityforreddit.account.Account;
+
+@Entity(tableName = "read_posts", primaryKeys = {"username", "id"},
+ foreignKeys = @ForeignKey(entity = Account.class, parentColumns = "username",
+ childColumns = "username", onDelete = ForeignKey.CASCADE))
+public class ReadPost implements Parcelable {
+ @NonNull
+ @ColumnInfo(name = "username")
+ private String username;
+ @NonNull
+ @ColumnInfo(name = "id")
+ private String id;
+
+ public ReadPost(@NonNull String username, @NonNull String id) {
+ this.username = username;
+ this.id = id;
+ }
+
+ protected ReadPost(Parcel in) {
+ username = in.readString();
+ id = in.readString();
+ }
+
+ public static final Creator<ReadPost> CREATOR = new Creator<ReadPost>() {
+ @Override
+ public ReadPost createFromParcel(Parcel in) {
+ return new ReadPost(in);
+ }
+
+ @Override
+ public ReadPost[] newArray(int size) {
+ return new ReadPost[size];
+ }
+ };
+
+ @NonNull
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(@NonNull String username) {
+ this.username = username;
+ }
+
+ @NonNull
+ public String getId() {
+ return id;
+ }
+
+ public void setId(@NonNull String id) {
+ this.id = id;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel parcel, int i) {
+ parcel.writeString(username);
+ parcel.writeString(id);
+ }
+}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/readposts/ReadPostDao.java b/app/src/main/java/ml/docilealligator/infinityforreddit/readposts/ReadPostDao.java
new file mode 100644
index 00000000..1363f14b
--- /dev/null
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/readposts/ReadPostDao.java
@@ -0,0 +1,20 @@
+package ml.docilealligator.infinityforreddit.readposts;
+
+import androidx.room.Dao;
+import androidx.room.Insert;
+import androidx.room.OnConflictStrategy;
+import androidx.room.Query;
+
+import java.util.List;
+
+@Dao
+public interface ReadPostDao {
+ @Insert(onConflict = OnConflictStrategy.REPLACE)
+ void insert(ReadPost readPost);
+
+ @Query("SELECT * FROM read_posts WHERE username = :username")
+ List<ReadPost> getAllReadPosts(String username);
+
+ @Query("DELETE FROM read_posts WHERE rowid IN (SELECT rowid FROM read_posts LIMIT 100) AND username = :username")
+ void deleteOldestReadPosts(String username);
+}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/utils/CustomThemeSharedPreferencesUtils.java b/app/src/main/java/ml/docilealligator/infinityforreddit/utils/CustomThemeSharedPreferencesUtils.java
index 0f3e991c..db7520d7 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/utils/CustomThemeSharedPreferencesUtils.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/utils/CustomThemeSharedPreferencesUtils.java
@@ -20,12 +20,15 @@ public class CustomThemeSharedPreferencesUtils {
public static final String COLOR_PRIMARY_LIGHT_THEME = "colorPrimaryLightTheme";
public static final String POST_TITLE_COLOR = "postTitleColor";
public static final String POST_CONTENT_COLOR = "postContentColor";
+ public static final String READ_POST_TITLE_COLOR = "readPostTitleColor";
+ public static final String READ_POST_CONTENT_COLOR = "readPostContentColor";
public static final String COMMENT_COLOR = "commentColor";
public static final String PRIMARY_TEXT_COLOR = "primaryTextColor";
public static final String SECONDARY_TEXT_COLOR = "secondaryTextColor";
public static final String BUTTON_TEXT_COLOR = "buttonTextColor";
public static final String BACKGROUND_COLOR = "backgroundColor";
public static final String CARD_VIEW_BACKGROUND_COLOR = "cardViewBackgroundColor";
+ public static final String READ_POST_CARD_VIEW_BACKGROUND_COLOR = "readPostCardViewBackgroundColor";
public static final String COMMENT_BACKGROUND_COLOR = "commentBackgroundColor";
public static final String BOTTOM_APP_BAR_BACKGROUND_COLOR = "bottomAppBarBackgroundColor";
public static final String PRIMARY_ICON_COLOR = "primaryIconColor";
@@ -99,10 +102,13 @@ public class CustomThemeSharedPreferencesUtils {
editor.putInt(SECONDARY_TEXT_COLOR, customTheme.secondaryTextColor);
editor.putInt(POST_TITLE_COLOR, customTheme.postTitleColor);
editor.putInt(POST_CONTENT_COLOR, customTheme.postContentColor);
+ editor.putInt(READ_POST_TITLE_COLOR, customTheme.readPostTitleColor);
+ editor.putInt(READ_POST_CONTENT_COLOR, customTheme.readPostContentColor);
editor.putInt(COMMENT_COLOR, customTheme.commentColor);
editor.putInt(BUTTON_TEXT_COLOR, customTheme.buttonTextColor);
editor.putInt(BACKGROUND_COLOR, customTheme.backgroundColor);
editor.putInt(CARD_VIEW_BACKGROUND_COLOR, customTheme.cardViewBackgroundColor);
+ editor.putInt(READ_POST_CARD_VIEW_BACKGROUND_COLOR, customTheme.readPostCardViewBackgroundColor);
editor.putInt(COMMENT_BACKGROUND_COLOR, customTheme.commentBackgroundColor);
editor.putInt(BOTTOM_APP_BAR_BACKGROUND_COLOR, customTheme.bottomAppBarBackgroundColor);
editor.putInt(PRIMARY_ICON_COLOR, customTheme.primaryIconColor);