Prepare to add a new feature: hide read posts.

This commit is contained in:
Alex Ning 2020-12-07 15:34:51 +08:00
parent e33bc02481
commit ca932090e3
8 changed files with 410 additions and 120 deletions

View File

@ -16,6 +16,8 @@ import ml.docilealligator.infinityforreddit.customtheme.CustomTheme;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeDao; import ml.docilealligator.infinityforreddit.customtheme.CustomThemeDao;
import ml.docilealligator.infinityforreddit.multireddit.MultiReddit; import ml.docilealligator.infinityforreddit.multireddit.MultiReddit;
import ml.docilealligator.infinityforreddit.multireddit.MultiRedditDao; 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.RecentSearchQuery;
import ml.docilealligator.infinityforreddit.recentsearchquery.RecentSearchQueryDao; import ml.docilealligator.infinityforreddit.recentsearchquery.RecentSearchQueryDao;
import ml.docilealligator.infinityforreddit.subreddit.SubredditDao; import ml.docilealligator.infinityforreddit.subreddit.SubredditDao;
@ -30,7 +32,8 @@ import ml.docilealligator.infinityforreddit.user.UserDao;
import ml.docilealligator.infinityforreddit.user.UserData; import ml.docilealligator.infinityforreddit.user.UserData;
@Database(entities = {Account.class, SubredditData.class, SubscribedSubredditData.class, UserData.class, @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 { public abstract class RedditDataRoomDatabase extends RoomDatabase {
private static RedditDataRoomDatabase INSTANCE; private static RedditDataRoomDatabase INSTANCE;
@ -68,6 +71,8 @@ public abstract class RedditDataRoomDatabase extends RoomDatabase {
public abstract SubredditFilterDao subredditFilterDao(); public abstract SubredditFilterDao subredditFilterDao();
public abstract ReadPostDao readPostDao();
private static final Migration MIGRATION_1_2 = new Migration(1, 2) { private static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override @Override
public void migrate(SupportSQLiteDatabase database) { 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"); + " 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");
}
};
} }

View File

@ -37,6 +37,10 @@ public class CustomTheme {
public int postTitleColor; public int postTitleColor;
@ColumnInfo(name = "post_content_color") @ColumnInfo(name = "post_content_color")
public int postContentColor; 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") @ColumnInfo(name = "comment_color")
public int commentColor; public int commentColor;
@ColumnInfo(name = "button_text_color") @ColumnInfo(name = "button_text_color")
@ -45,6 +49,8 @@ public class CustomTheme {
public int backgroundColor; public int backgroundColor;
@ColumnInfo(name = "card_view_background_color") @ColumnInfo(name = "card_view_background_color")
public int cardViewBackgroundColor; public int cardViewBackgroundColor;
@ColumnInfo(name = "read_post_card_view_background_color")
public int readPostCardViewBackgroundColor;
@ColumnInfo(name = "comment_background_color") @ColumnInfo(name = "comment_background_color")
public int commentBackgroundColor; public int commentBackgroundColor;
@ColumnInfo(name = "bottom_app_bar_background_color") @ColumnInfo(name = "bottom_app_bar_background_color")
@ -205,75 +211,78 @@ public class CustomTheme {
customTheme.secondaryTextColor = customThemeSettingsItems.get(8).colorValue; customTheme.secondaryTextColor = customThemeSettingsItems.get(8).colorValue;
customTheme.postTitleColor = customThemeSettingsItems.get(9).colorValue; customTheme.postTitleColor = customThemeSettingsItems.get(9).colorValue;
customTheme.postContentColor = customThemeSettingsItems.get(10).colorValue; customTheme.postContentColor = customThemeSettingsItems.get(10).colorValue;
customTheme.commentColor = customThemeSettingsItems.get(11).colorValue; customTheme.readPostTitleColor = customThemeSettingsItems.get(11).colorValue;
customTheme.buttonTextColor = customThemeSettingsItems.get(12).colorValue; customTheme.readPostContentColor = customThemeSettingsItems.get(12).colorValue;
customTheme.chipTextColor = customThemeSettingsItems.get(13).colorValue; customTheme.commentColor = customThemeSettingsItems.get(13).colorValue;
customTheme.linkColor = customThemeSettingsItems.get(14).colorValue; customTheme.buttonTextColor = customThemeSettingsItems.get(14).colorValue;
customTheme.receivedMessageTextColor = customThemeSettingsItems.get(15).colorValue; customTheme.chipTextColor = customThemeSettingsItems.get(15).colorValue;
customTheme.sentMessageTextColor = customThemeSettingsItems.get(16).colorValue; customTheme.linkColor = customThemeSettingsItems.get(16).colorValue;
customTheme.backgroundColor = customThemeSettingsItems.get(17).colorValue; customTheme.receivedMessageTextColor = customThemeSettingsItems.get(17).colorValue;
customTheme.cardViewBackgroundColor = customThemeSettingsItems.get(18).colorValue; customTheme.sentMessageTextColor = customThemeSettingsItems.get(18).colorValue;
customTheme.commentBackgroundColor = customThemeSettingsItems.get(19).colorValue; customTheme.backgroundColor = customThemeSettingsItems.get(19).colorValue;
customTheme.fullyCollapsedCommentBackgroundColor = customThemeSettingsItems.get(20).colorValue; customTheme.cardViewBackgroundColor = customThemeSettingsItems.get(20).colorValue;
customTheme.awardedCommentBackgroundColor = customThemeSettingsItems.get(21).colorValue; customTheme.readPostCardViewBackgroundColor = customThemeSettingsItems.get(21).colorValue;
customTheme.receivedMessageBackgroundColor = customThemeSettingsItems.get(22).colorValue; customTheme.commentBackgroundColor = customThemeSettingsItems.get(22).colorValue;
customTheme.sentMessageBackgroundColor = customThemeSettingsItems.get(23).colorValue; customTheme.fullyCollapsedCommentBackgroundColor = customThemeSettingsItems.get(23).colorValue;
customTheme.bottomAppBarBackgroundColor = customThemeSettingsItems.get(24).colorValue; customTheme.awardedCommentBackgroundColor = customThemeSettingsItems.get(24).colorValue;
customTheme.primaryIconColor = customThemeSettingsItems.get(25).colorValue; customTheme.receivedMessageBackgroundColor = customThemeSettingsItems.get(25).colorValue;
customTheme.bottomAppBarIconColor = customThemeSettingsItems.get(26).colorValue; customTheme.sentMessageBackgroundColor = customThemeSettingsItems.get(26).colorValue;
customTheme.postIconAndInfoColor = customThemeSettingsItems.get(27).colorValue; customTheme.bottomAppBarBackgroundColor = customThemeSettingsItems.get(27).colorValue;
customTheme.commentIconAndInfoColor = customThemeSettingsItems.get(28).colorValue; customTheme.primaryIconColor = customThemeSettingsItems.get(28).colorValue;
customTheme.fabIconColor = customThemeSettingsItems.get(29).colorValue; customTheme.bottomAppBarIconColor = customThemeSettingsItems.get(29).colorValue;
customTheme.sendMessageIconColor = customThemeSettingsItems.get(30).colorValue; customTheme.postIconAndInfoColor = customThemeSettingsItems.get(30).colorValue;
customTheme.toolbarPrimaryTextAndIconColor = customThemeSettingsItems.get(31).colorValue; customTheme.commentIconAndInfoColor = customThemeSettingsItems.get(31).colorValue;
customTheme.toolbarSecondaryTextColor = customThemeSettingsItems.get(32).colorValue; customTheme.fabIconColor = customThemeSettingsItems.get(32).colorValue;
customTheme.circularProgressBarBackground = customThemeSettingsItems.get(33).colorValue; customTheme.sendMessageIconColor = customThemeSettingsItems.get(33).colorValue;
customTheme.tabLayoutWithExpandedCollapsingToolbarTabBackground = customThemeSettingsItems.get(34).colorValue; customTheme.toolbarPrimaryTextAndIconColor = customThemeSettingsItems.get(34).colorValue;
customTheme.tabLayoutWithExpandedCollapsingToolbarTextColor = customThemeSettingsItems.get(35).colorValue; customTheme.toolbarSecondaryTextColor = customThemeSettingsItems.get(35).colorValue;
customTheme.tabLayoutWithExpandedCollapsingToolbarTabIndicator = customThemeSettingsItems.get(36).colorValue; customTheme.circularProgressBarBackground = customThemeSettingsItems.get(36).colorValue;
customTheme.tabLayoutWithCollapsedCollapsingToolbarTabBackground = customThemeSettingsItems.get(37).colorValue; customTheme.tabLayoutWithExpandedCollapsingToolbarTabBackground = customThemeSettingsItems.get(37).colorValue;
customTheme.tabLayoutWithCollapsedCollapsingToolbarTextColor = customThemeSettingsItems.get(38).colorValue; customTheme.tabLayoutWithExpandedCollapsingToolbarTextColor = customThemeSettingsItems.get(38).colorValue;
customTheme.tabLayoutWithCollapsedCollapsingToolbarTabIndicator = customThemeSettingsItems.get(39).colorValue; customTheme.tabLayoutWithExpandedCollapsingToolbarTabIndicator = customThemeSettingsItems.get(39).colorValue;
customTheme.upvoted = customThemeSettingsItems.get(40).colorValue; customTheme.tabLayoutWithCollapsedCollapsingToolbarTabBackground = customThemeSettingsItems.get(40).colorValue;
customTheme.downvoted = customThemeSettingsItems.get(41).colorValue; customTheme.tabLayoutWithCollapsedCollapsingToolbarTextColor = customThemeSettingsItems.get(41).colorValue;
customTheme.postTypeBackgroundColor = customThemeSettingsItems.get(42).colorValue; customTheme.tabLayoutWithCollapsedCollapsingToolbarTabIndicator = customThemeSettingsItems.get(42).colorValue;
customTheme.postTypeTextColor = customThemeSettingsItems.get(43).colorValue; customTheme.upvoted = customThemeSettingsItems.get(43).colorValue;
customTheme.spoilerBackgroundColor = customThemeSettingsItems.get(44).colorValue; customTheme.downvoted = customThemeSettingsItems.get(44).colorValue;
customTheme.spoilerTextColor = customThemeSettingsItems.get(45).colorValue; customTheme.postTypeBackgroundColor = customThemeSettingsItems.get(45).colorValue;
customTheme.nsfwBackgroundColor = customThemeSettingsItems.get(46).colorValue; customTheme.postTypeTextColor = customThemeSettingsItems.get(46).colorValue;
customTheme.nsfwTextColor = customThemeSettingsItems.get(47).colorValue; customTheme.spoilerBackgroundColor = customThemeSettingsItems.get(47).colorValue;
customTheme.flairBackgroundColor = customThemeSettingsItems.get(48).colorValue; customTheme.spoilerTextColor = customThemeSettingsItems.get(48).colorValue;
customTheme.flairTextColor = customThemeSettingsItems.get(49).colorValue; customTheme.nsfwBackgroundColor = customThemeSettingsItems.get(49).colorValue;
customTheme.awardsBackgroundColor = customThemeSettingsItems.get(50).colorValue; customTheme.nsfwTextColor = customThemeSettingsItems.get(50).colorValue;
customTheme.awardsTextColor = customThemeSettingsItems.get(51).colorValue; customTheme.flairBackgroundColor = customThemeSettingsItems.get(51).colorValue;
customTheme.archivedTint = customThemeSettingsItems.get(52).colorValue; customTheme.flairTextColor = customThemeSettingsItems.get(52).colorValue;
customTheme.lockedIconTint = customThemeSettingsItems.get(53).colorValue; customTheme.awardsBackgroundColor = customThemeSettingsItems.get(53).colorValue;
customTheme.crosspostIconTint = customThemeSettingsItems.get(54).colorValue; customTheme.awardsTextColor = customThemeSettingsItems.get(54).colorValue;
customTheme.stickiedPostIconTint = customThemeSettingsItems.get(55).colorValue; customTheme.archivedTint = customThemeSettingsItems.get(55).colorValue;
customTheme.noPreviewPostTypeIconTint = customThemeSettingsItems.get(56).colorValue; customTheme.lockedIconTint = customThemeSettingsItems.get(56).colorValue;
customTheme.subscribed = customThemeSettingsItems.get(57).colorValue; customTheme.crosspostIconTint = customThemeSettingsItems.get(57).colorValue;
customTheme.unsubscribed = customThemeSettingsItems.get(58).colorValue; customTheme.stickiedPostIconTint = customThemeSettingsItems.get(58).colorValue;
customTheme.username = customThemeSettingsItems.get(59).colorValue; customTheme.noPreviewPostTypeIconTint = customThemeSettingsItems.get(59).colorValue;
customTheme.subreddit = customThemeSettingsItems.get(60).colorValue; customTheme.subscribed = customThemeSettingsItems.get(60).colorValue;
customTheme.authorFlairTextColor = customThemeSettingsItems.get(61).colorValue; customTheme.unsubscribed = customThemeSettingsItems.get(61).colorValue;
customTheme.submitter = customThemeSettingsItems.get(62).colorValue; customTheme.username = customThemeSettingsItems.get(62).colorValue;
customTheme.moderator = customThemeSettingsItems.get(63).colorValue; customTheme.subreddit = customThemeSettingsItems.get(63).colorValue;
customTheme.singleCommentThreadBackgroundColor = customThemeSettingsItems.get(64).colorValue; customTheme.authorFlairTextColor = customThemeSettingsItems.get(64).colorValue;
customTheme.unreadMessageBackgroundColor = customThemeSettingsItems.get(65).colorValue; customTheme.submitter = customThemeSettingsItems.get(65).colorValue;
customTheme.dividerColor = customThemeSettingsItems.get(66).colorValue; customTheme.moderator = customThemeSettingsItems.get(66).colorValue;
customTheme.noPreviewPostTypeBackgroundColor = customThemeSettingsItems.get(67).colorValue; customTheme.singleCommentThreadBackgroundColor = customThemeSettingsItems.get(67).colorValue;
customTheme.voteAndReplyUnavailableButtonColor = customThemeSettingsItems.get(68).colorValue; customTheme.unreadMessageBackgroundColor = customThemeSettingsItems.get(68).colorValue;
customTheme.commentVerticalBarColor1 = customThemeSettingsItems.get(69).colorValue; customTheme.dividerColor = customThemeSettingsItems.get(69).colorValue;
customTheme.commentVerticalBarColor2 = customThemeSettingsItems.get(70).colorValue; customTheme.noPreviewPostTypeBackgroundColor = customThemeSettingsItems.get(70).colorValue;
customTheme.commentVerticalBarColor3 = customThemeSettingsItems.get(71).colorValue; customTheme.voteAndReplyUnavailableButtonColor = customThemeSettingsItems.get(71).colorValue;
customTheme.commentVerticalBarColor4 = customThemeSettingsItems.get(72).colorValue; customTheme.commentVerticalBarColor1 = customThemeSettingsItems.get(72).colorValue;
customTheme.commentVerticalBarColor5 = customThemeSettingsItems.get(73).colorValue; customTheme.commentVerticalBarColor2 = customThemeSettingsItems.get(73).colorValue;
customTheme.commentVerticalBarColor6 = customThemeSettingsItems.get(74).colorValue; customTheme.commentVerticalBarColor3 = customThemeSettingsItems.get(74).colorValue;
customTheme.commentVerticalBarColor7 = customThemeSettingsItems.get(75).colorValue; customTheme.commentVerticalBarColor4 = customThemeSettingsItems.get(75).colorValue;
customTheme.navBarColor = customThemeSettingsItems.get(76).colorValue; customTheme.commentVerticalBarColor5 = customThemeSettingsItems.get(76).colorValue;
customTheme.isLightStatusBar = customThemeSettingsItems.get(77).isEnabled; customTheme.commentVerticalBarColor6 = customThemeSettingsItems.get(77).colorValue;
customTheme.isLightNavBar = customThemeSettingsItems.get(78).isEnabled; customTheme.commentVerticalBarColor7 = customThemeSettingsItems.get(78).colorValue;
customTheme.isChangeStatusBarIconColorAfterToolbarCollapsedInImmersiveInterface = customThemeSettingsItems.get(79).isEnabled; 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; return customTheme;
} }

View File

@ -92,6 +92,16 @@ public class CustomThemeWrapper {
getDefaultColor("#8A000000", "#B3FFFFFF", "#B3FFFFFF")); 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() { public int getCommentColor() {
return getThemeSharedPreferences().getInt(CustomThemeSharedPreferencesUtils.COMMENT_COLOR, return getThemeSharedPreferences().getInt(CustomThemeSharedPreferencesUtils.COMMENT_COLOR,
getDefaultColor("#000000", "#FFFFFF", "#FFFFFF")); getDefaultColor("#000000", "#FFFFFF", "#FFFFFF"));
@ -112,6 +122,11 @@ public class CustomThemeWrapper {
getDefaultColor("#FFFFFF", "#242424", "#000000")); getDefaultColor("#FFFFFF", "#242424", "#000000"));
} }
public int getReadPostCardViewBackgroundColor() {
return getThemeSharedPreferences().getInt(CustomThemeSharedPreferencesUtils.READ_POST_CARD_VIEW_BACKGROUND_COLOR,
getDefaultColor("#F5F5F5", "#101010", "#000000"));
}
public int getCommentBackgroundColor() { public int getCommentBackgroundColor() {
return getThemeSharedPreferences().getInt(CustomThemeSharedPreferencesUtils.COMMENT_BACKGROUND_COLOR, return getThemeSharedPreferences().getInt(CustomThemeSharedPreferencesUtils.COMMENT_BACKGROUND_COLOR,
getDefaultColor("#FFFFFF", "#242424", "#000000")); getDefaultColor("#FFFFFF", "#242424", "#000000"));
@ -492,10 +507,13 @@ public class CustomThemeWrapper {
customTheme.secondaryTextColor = Color.parseColor("#8A000000"); customTheme.secondaryTextColor = Color.parseColor("#8A000000");
customTheme.postTitleColor = Color.parseColor("#000000"); customTheme.postTitleColor = Color.parseColor("#000000");
customTheme.postContentColor = Color.parseColor("#8A000000"); customTheme.postContentColor = Color.parseColor("#8A000000");
customTheme.readPostTitleColor = Color.parseColor("#9D9D9D");
customTheme.readPostContentColor = Color.parseColor("#9D9D9D");
customTheme.commentColor = Color.parseColor("#000000"); customTheme.commentColor = Color.parseColor("#000000");
customTheme.buttonTextColor = Color.parseColor("#FFFFFF"); customTheme.buttonTextColor = Color.parseColor("#FFFFFF");
customTheme.backgroundColor = Color.parseColor("#FFFFFF"); customTheme.backgroundColor = Color.parseColor("#FFFFFF");
customTheme.cardViewBackgroundColor = Color.parseColor("#FFFFFF"); customTheme.cardViewBackgroundColor = Color.parseColor("#FFFFFF");
customTheme.readPostCardViewBackgroundColor = Color.parseColor("#F5F5F5");
customTheme.commentBackgroundColor = Color.parseColor("#FFFFFF"); customTheme.commentBackgroundColor = Color.parseColor("#FFFFFF");
customTheme.bottomAppBarBackgroundColor = Color.parseColor("#FFFFFF"); customTheme.bottomAppBarBackgroundColor = Color.parseColor("#FFFFFF");
customTheme.primaryIconColor = Color.parseColor("#000000"); customTheme.primaryIconColor = Color.parseColor("#000000");
@ -578,10 +596,13 @@ public class CustomThemeWrapper {
customTheme.secondaryTextColor = Color.parseColor("#B3FFFFFF"); customTheme.secondaryTextColor = Color.parseColor("#B3FFFFFF");
customTheme.postTitleColor = Color.parseColor("#FFFFFF"); customTheme.postTitleColor = Color.parseColor("#FFFFFF");
customTheme.postContentColor = Color.parseColor("#B3FFFFFF"); customTheme.postContentColor = Color.parseColor("#B3FFFFFF");
customTheme.readPostTitleColor = Color.parseColor("#979797");
customTheme.readPostContentColor = Color.parseColor("#979797");
customTheme.commentColor = Color.parseColor("#FFFFFF"); customTheme.commentColor = Color.parseColor("#FFFFFF");
customTheme.buttonTextColor = Color.parseColor("#FFFFFF"); customTheme.buttonTextColor = Color.parseColor("#FFFFFF");
customTheme.backgroundColor = Color.parseColor("#121212"); customTheme.backgroundColor = Color.parseColor("#121212");
customTheme.cardViewBackgroundColor = Color.parseColor("#242424"); customTheme.cardViewBackgroundColor = Color.parseColor("#242424");
customTheme.readPostCardViewBackgroundColor = Color.parseColor("#101010");
customTheme.commentBackgroundColor = Color.parseColor("#242424"); customTheme.commentBackgroundColor = Color.parseColor("#242424");
customTheme.bottomAppBarBackgroundColor = Color.parseColor("#121212"); customTheme.bottomAppBarBackgroundColor = Color.parseColor("#121212");
customTheme.primaryIconColor = Color.parseColor("#FFFFFF"); customTheme.primaryIconColor = Color.parseColor("#FFFFFF");
@ -664,10 +685,13 @@ public class CustomThemeWrapper {
customTheme.secondaryTextColor = Color.parseColor("#B3FFFFFF"); customTheme.secondaryTextColor = Color.parseColor("#B3FFFFFF");
customTheme.postTitleColor = Color.parseColor("#FFFFFF"); customTheme.postTitleColor = Color.parseColor("#FFFFFF");
customTheme.postContentColor = Color.parseColor("#B3FFFFFF"); customTheme.postContentColor = Color.parseColor("#B3FFFFFF");
customTheme.readPostTitleColor = Color.parseColor("#979797");
customTheme.readPostContentColor = Color.parseColor("#979797");
customTheme.commentColor = Color.parseColor("#FFFFFF"); customTheme.commentColor = Color.parseColor("#FFFFFF");
customTheme.buttonTextColor = Color.parseColor("#FFFFFF"); customTheme.buttonTextColor = Color.parseColor("#FFFFFF");
customTheme.backgroundColor = Color.parseColor("#000000"); customTheme.backgroundColor = Color.parseColor("#000000");
customTheme.cardViewBackgroundColor = Color.parseColor("#000000"); customTheme.cardViewBackgroundColor = Color.parseColor("#000000");
customTheme.readPostCardViewBackgroundColor = Color.parseColor("#000000");
customTheme.commentBackgroundColor = Color.parseColor("#000000"); customTheme.commentBackgroundColor = Color.parseColor("#000000");
customTheme.bottomAppBarBackgroundColor = Color.parseColor("#000000"); customTheme.bottomAppBarBackgroundColor = Color.parseColor("#000000");
customTheme.primaryIconColor = Color.parseColor("#FFFFFF"); customTheme.primaryIconColor = Color.parseColor("#FFFFFF");
@ -750,10 +774,13 @@ public class CustomThemeWrapper {
customTheme.secondaryTextColor = Color.parseColor("#8A000000"); customTheme.secondaryTextColor = Color.parseColor("#8A000000");
customTheme.postTitleColor = Color.parseColor("#000000"); customTheme.postTitleColor = Color.parseColor("#000000");
customTheme.postContentColor = Color.parseColor("#8A000000"); customTheme.postContentColor = Color.parseColor("#8A000000");
customTheme.readPostTitleColor = Color.parseColor("#9D9D9D");
customTheme.readPostContentColor = Color.parseColor("#9D9D9D");
customTheme.commentColor = Color.parseColor("#000000"); customTheme.commentColor = Color.parseColor("#000000");
customTheme.buttonTextColor = Color.parseColor("#000000"); customTheme.buttonTextColor = Color.parseColor("#000000");
customTheme.backgroundColor = Color.parseColor("#FFFFFF"); customTheme.backgroundColor = Color.parseColor("#FFFFFF");
customTheme.cardViewBackgroundColor = Color.parseColor("#FFFFFF"); customTheme.cardViewBackgroundColor = Color.parseColor("#FFFFFF");
customTheme.readPostCardViewBackgroundColor = Color.parseColor("#F5F5F5");
customTheme.commentBackgroundColor = Color.parseColor("#FFFFFF"); customTheme.commentBackgroundColor = Color.parseColor("#FFFFFF");
customTheme.bottomAppBarBackgroundColor = Color.parseColor("#FFFFFF"); customTheme.bottomAppBarBackgroundColor = Color.parseColor("#FFFFFF");
customTheme.primaryIconColor = Color.parseColor("#000000"); customTheme.primaryIconColor = Color.parseColor("#000000");
@ -836,10 +863,13 @@ public class CustomThemeWrapper {
customTheme.secondaryTextColor = Color.parseColor("#B3FFFFFF"); customTheme.secondaryTextColor = Color.parseColor("#B3FFFFFF");
customTheme.postTitleColor = Color.parseColor("#FFFFFF"); customTheme.postTitleColor = Color.parseColor("#FFFFFF");
customTheme.postContentColor = Color.parseColor("#B3FFFFFF"); customTheme.postContentColor = Color.parseColor("#B3FFFFFF");
customTheme.readPostTitleColor = Color.parseColor("#979797");
customTheme.readPostContentColor = Color.parseColor("#979797");
customTheme.commentColor = Color.parseColor("#FFFFFF"); customTheme.commentColor = Color.parseColor("#FFFFFF");
customTheme.buttonTextColor = Color.parseColor("#FFFFFF"); customTheme.buttonTextColor = Color.parseColor("#FFFFFF");
customTheme.backgroundColor = Color.parseColor("#121212"); customTheme.backgroundColor = Color.parseColor("#121212");
customTheme.cardViewBackgroundColor = Color.parseColor("#242424"); customTheme.cardViewBackgroundColor = Color.parseColor("#242424");
customTheme.readPostCardViewBackgroundColor = Color.parseColor("#101010");
customTheme.commentBackgroundColor = Color.parseColor("#242424"); customTheme.commentBackgroundColor = Color.parseColor("#242424");
customTheme.bottomAppBarBackgroundColor = Color.parseColor("#121212"); customTheme.bottomAppBarBackgroundColor = Color.parseColor("#121212");
customTheme.primaryIconColor = Color.parseColor("#FFFFFF"); customTheme.primaryIconColor = Color.parseColor("#FFFFFF");
@ -922,10 +952,13 @@ public class CustomThemeWrapper {
customTheme.secondaryTextColor = Color.parseColor("#B3FFFFFF"); customTheme.secondaryTextColor = Color.parseColor("#B3FFFFFF");
customTheme.postTitleColor = Color.parseColor("#FFFFFF"); customTheme.postTitleColor = Color.parseColor("#FFFFFF");
customTheme.postContentColor = Color.parseColor("#B3FFFFFF"); customTheme.postContentColor = Color.parseColor("#B3FFFFFF");
customTheme.readPostTitleColor = Color.parseColor("#979797");
customTheme.readPostContentColor = Color.parseColor("#979797");
customTheme.commentColor = Color.parseColor("#FFFFFF"); customTheme.commentColor = Color.parseColor("#FFFFFF");
customTheme.buttonTextColor = Color.parseColor("#FFFFFF"); customTheme.buttonTextColor = Color.parseColor("#FFFFFF");
customTheme.backgroundColor = Color.parseColor("#000000"); customTheme.backgroundColor = Color.parseColor("#000000");
customTheme.cardViewBackgroundColor = Color.parseColor("#000000"); customTheme.cardViewBackgroundColor = Color.parseColor("#000000");
customTheme.readPostCardViewBackgroundColor = Color.parseColor("#000000");
customTheme.commentBackgroundColor = Color.parseColor("#000000"); customTheme.commentBackgroundColor = Color.parseColor("#000000");
customTheme.bottomAppBarBackgroundColor = Color.parseColor("#000000"); customTheme.bottomAppBarBackgroundColor = Color.parseColor("#000000");
customTheme.primaryIconColor = Color.parseColor("#FFFFFF"); customTheme.primaryIconColor = Color.parseColor("#FFFFFF");
@ -1008,10 +1041,13 @@ public class CustomThemeWrapper {
customTheme.secondaryTextColor = Color.parseColor("#8A000000"); customTheme.secondaryTextColor = Color.parseColor("#8A000000");
customTheme.postTitleColor = Color.parseColor("#000000"); customTheme.postTitleColor = Color.parseColor("#000000");
customTheme.postContentColor = Color.parseColor("#8A000000"); customTheme.postContentColor = Color.parseColor("#8A000000");
customTheme.readPostTitleColor = Color.parseColor("#9D9D9D");
customTheme.readPostContentColor = Color.parseColor("#9D9D9D");
customTheme.commentColor = Color.parseColor("#000000"); customTheme.commentColor = Color.parseColor("#000000");
customTheme.buttonTextColor = Color.parseColor("#FFFFFF"); customTheme.buttonTextColor = Color.parseColor("#FFFFFF");
customTheme.backgroundColor = Color.parseColor("#FFFFFF"); customTheme.backgroundColor = Color.parseColor("#FFFFFF");
customTheme.cardViewBackgroundColor = Color.parseColor("#FFFFFF"); customTheme.cardViewBackgroundColor = Color.parseColor("#FFFFFF");
customTheme.readPostCardViewBackgroundColor = Color.parseColor("#F5F5F5");
customTheme.commentBackgroundColor = Color.parseColor("#FFFFFF"); customTheme.commentBackgroundColor = Color.parseColor("#FFFFFF");
customTheme.bottomAppBarBackgroundColor = Color.parseColor("#FFFFFF"); customTheme.bottomAppBarBackgroundColor = Color.parseColor("#FFFFFF");
customTheme.primaryIconColor = Color.parseColor("#000000"); customTheme.primaryIconColor = Color.parseColor("#000000");
@ -1094,10 +1130,13 @@ public class CustomThemeWrapper {
customTheme.secondaryTextColor = Color.parseColor("#B3FFFFFF"); customTheme.secondaryTextColor = Color.parseColor("#B3FFFFFF");
customTheme.postTitleColor = Color.parseColor("#FFFFFF"); customTheme.postTitleColor = Color.parseColor("#FFFFFF");
customTheme.postContentColor = Color.parseColor("#B3FFFFFF"); customTheme.postContentColor = Color.parseColor("#B3FFFFFF");
customTheme.readPostTitleColor = Color.parseColor("#979797");
customTheme.readPostContentColor = Color.parseColor("#979797");
customTheme.commentColor = Color.parseColor("#FFFFFF"); customTheme.commentColor = Color.parseColor("#FFFFFF");
customTheme.buttonTextColor = Color.parseColor("#FFFFFF"); customTheme.buttonTextColor = Color.parseColor("#FFFFFF");
customTheme.backgroundColor = Color.parseColor("#121212"); customTheme.backgroundColor = Color.parseColor("#121212");
customTheme.cardViewBackgroundColor = Color.parseColor("#242424"); customTheme.cardViewBackgroundColor = Color.parseColor("#242424");
customTheme.readPostCardViewBackgroundColor = Color.parseColor("#101010");
customTheme.commentBackgroundColor = Color.parseColor("#242424"); customTheme.commentBackgroundColor = Color.parseColor("#242424");
customTheme.bottomAppBarBackgroundColor = Color.parseColor("#121212"); customTheme.bottomAppBarBackgroundColor = Color.parseColor("#121212");
customTheme.primaryIconColor = Color.parseColor("#FFFFFF"); customTheme.primaryIconColor = Color.parseColor("#FFFFFF");
@ -1180,10 +1219,13 @@ public class CustomThemeWrapper {
customTheme.secondaryTextColor = Color.parseColor("#B3FFFFFF"); customTheme.secondaryTextColor = Color.parseColor("#B3FFFFFF");
customTheme.postTitleColor = Color.parseColor("#FFFFFF"); customTheme.postTitleColor = Color.parseColor("#FFFFFF");
customTheme.postContentColor = Color.parseColor("#B3FFFFFF"); customTheme.postContentColor = Color.parseColor("#B3FFFFFF");
customTheme.readPostTitleColor = Color.parseColor("#979797");
customTheme.readPostContentColor = Color.parseColor("#979797");
customTheme.commentColor = Color.parseColor("#FFFFFF"); customTheme.commentColor = Color.parseColor("#FFFFFF");
customTheme.buttonTextColor = Color.parseColor("#FFFFFF"); customTheme.buttonTextColor = Color.parseColor("#FFFFFF");
customTheme.backgroundColor = Color.parseColor("#000000"); customTheme.backgroundColor = Color.parseColor("#000000");
customTheme.cardViewBackgroundColor = Color.parseColor("#000000"); customTheme.cardViewBackgroundColor = Color.parseColor("#000000");
customTheme.readPostCardViewBackgroundColor = Color.parseColor("#000000");
customTheme.commentBackgroundColor = Color.parseColor("#000000"); customTheme.commentBackgroundColor = Color.parseColor("#000000");
customTheme.bottomAppBarBackgroundColor = Color.parseColor("#000000"); customTheme.bottomAppBarBackgroundColor = Color.parseColor("#000000");
customTheme.primaryIconColor = Color.parseColor("#FFFFFF"); customTheme.primaryIconColor = Color.parseColor("#FFFFFF");
@ -1266,10 +1308,13 @@ public class CustomThemeWrapper {
customTheme.secondaryTextColor = Color.parseColor("#B3FFFFFF"); customTheme.secondaryTextColor = Color.parseColor("#B3FFFFFF");
customTheme.postTitleColor = Color.parseColor("#FFFFFF"); customTheme.postTitleColor = Color.parseColor("#FFFFFF");
customTheme.postContentColor = Color.parseColor("#B3FFFFFF"); customTheme.postContentColor = Color.parseColor("#B3FFFFFF");
customTheme.readPostTitleColor = Color.parseColor("#9D9D9D");
customTheme.readPostContentColor = Color.parseColor("#9D9D9D");
customTheme.commentColor = Color.parseColor("#FFFFFF"); customTheme.commentColor = Color.parseColor("#FFFFFF");
customTheme.buttonTextColor = Color.parseColor("#FFFFFF"); customTheme.buttonTextColor = Color.parseColor("#FFFFFF");
customTheme.backgroundColor = Color.parseColor("#282A36"); customTheme.backgroundColor = Color.parseColor("#282A36");
customTheme.cardViewBackgroundColor = Color.parseColor("#393A59"); customTheme.cardViewBackgroundColor = Color.parseColor("#393A59");
customTheme.readPostCardViewBackgroundColor = Color.parseColor("#1C1F3D");
customTheme.commentBackgroundColor = Color.parseColor("#393A59"); customTheme.commentBackgroundColor = Color.parseColor("#393A59");
customTheme.bottomAppBarBackgroundColor = Color.parseColor("#393A59"); customTheme.bottomAppBarBackgroundColor = Color.parseColor("#393A59");
customTheme.primaryIconColor = Color.parseColor("#FFFFFF"); customTheme.primaryIconColor = Color.parseColor("#FFFFFF");
@ -1352,10 +1397,13 @@ public class CustomThemeWrapper {
customTheme.secondaryTextColor = Color.parseColor("#8A000000"); customTheme.secondaryTextColor = Color.parseColor("#8A000000");
customTheme.postTitleColor = Color.parseColor("#000000"); customTheme.postTitleColor = Color.parseColor("#000000");
customTheme.postContentColor = Color.parseColor("#8A000000"); customTheme.postContentColor = Color.parseColor("#8A000000");
customTheme.readPostTitleColor = Color.parseColor("#979797");
customTheme.readPostContentColor = Color.parseColor("#979797");
customTheme.commentColor = Color.parseColor("#000000"); customTheme.commentColor = Color.parseColor("#000000");
customTheme.buttonTextColor = Color.parseColor("#FFFFFF"); customTheme.buttonTextColor = Color.parseColor("#FFFFFF");
customTheme.backgroundColor = Color.parseColor("#DAD0DE"); customTheme.backgroundColor = Color.parseColor("#DAD0DE");
customTheme.cardViewBackgroundColor = Color.parseColor("#C0F0F4"); customTheme.cardViewBackgroundColor = Color.parseColor("#C0F0F4");
customTheme.readPostCardViewBackgroundColor = Color.parseColor("#D2E7EA");
customTheme.commentBackgroundColor = Color.parseColor("#C0F0F4"); customTheme.commentBackgroundColor = Color.parseColor("#C0F0F4");
customTheme.bottomAppBarBackgroundColor = Color.parseColor("#D48AE0"); customTheme.bottomAppBarBackgroundColor = Color.parseColor("#D48AE0");
customTheme.primaryIconColor = Color.parseColor("#000000"); customTheme.primaryIconColor = Color.parseColor("#000000");

View File

@ -61,11 +61,17 @@ import butterknife.ButterKnife;
import im.ene.toro.exoplayer.ExoCreator; import im.ene.toro.exoplayer.ExoCreator;
import im.ene.toro.media.PlaybackInfo; import im.ene.toro.media.PlaybackInfo;
import im.ene.toro.media.VolumeInfo; 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.BaseActivity;
import ml.docilealligator.infinityforreddit.activities.FilteredThingActivity; import ml.docilealligator.infinityforreddit.activities.FilteredThingActivity;
import ml.docilealligator.infinityforreddit.activities.MainActivity; import ml.docilealligator.infinityforreddit.activities.MainActivity;
import ml.docilealligator.infinityforreddit.activities.ViewSubredditDetailActivity; import ml.docilealligator.infinityforreddit.activities.ViewSubredditDetailActivity;
import ml.docilealligator.infinityforreddit.ActivityToolbarInterface;
import ml.docilealligator.infinityforreddit.adapters.PostRecyclerViewAdapter; import ml.docilealligator.infinityforreddit.adapters.PostRecyclerViewAdapter;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.customviews.CustomToroContainer; 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.PostUpdateEventToPostList;
import ml.docilealligator.infinityforreddit.events.ShowDividerInCompactLayoutPreferenceEvent; import ml.docilealligator.infinityforreddit.events.ShowDividerInCompactLayoutPreferenceEvent;
import ml.docilealligator.infinityforreddit.events.ShowThumbnailOnTheRightInCompactLayoutEvent; 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.Post;
import ml.docilealligator.infinityforreddit.post.PostDataSource; import ml.docilealligator.infinityforreddit.post.PostDataSource;
import ml.docilealligator.infinityforreddit.post.PostViewModel; import ml.docilealligator.infinityforreddit.post.PostViewModel;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.readposts.FetchReadPosts;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.readposts.ReadPost;
import ml.docilealligator.infinityforreddit.SortType;
import ml.docilealligator.infinityforreddit.subredditfilter.FetchSubredditFilters; import ml.docilealligator.infinityforreddit.subredditfilter.FetchSubredditFilters;
import ml.docilealligator.infinityforreddit.subredditfilter.SubredditFilter; import ml.docilealligator.infinityforreddit.subredditfilter.SubredditFilter;
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; 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 IS_IN_LAZY_MODE_STATE = "IILMS";
private static final String RECYCLER_VIEW_POSITION_STATE = "RVPS"; 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"; private static final String SUBREDDIT_FILTER_LIST_STATE = "SFLS";
@BindView(R.id.swipe_refresh_layout_post_fragment) @BindView(R.id.swipe_refresh_layout_post_fragment)
@ -197,6 +200,8 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
private String accountName; private String accountName;
private String subredditName; private String subredditName;
private String username; private String username;
private String query;
private String where;
private String multiRedditPath; private String multiRedditPath;
private int maxPosition = -1; private int maxPosition = -1;
private int postLayout; private int postLayout;
@ -211,6 +216,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
private float swipeActionThreshold; private float swipeActionThreshold;
private ItemTouchHelper touchHelper; private ItemTouchHelper touchHelper;
private ArrayList<SubredditFilter> subredditFilterList; private ArrayList<SubredditFilter> subredditFilterList;
private ArrayList<ReadPost> readPosts;
public PostFragment() { public PostFragment() {
// Required empty public constructor // Required empty public constructor
@ -371,6 +377,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
} }
isInLazyMode = savedInstanceState.getBoolean(IS_IN_LAZY_MODE_STATE); isInLazyMode = savedInstanceState.getBoolean(IS_IN_LAZY_MODE_STATE);
readPosts = savedInstanceState.getParcelableArrayList(READ_POST_LIST_STATE);
subredditFilterList = savedInstanceState.getParcelableArrayList(SUBREDDIT_FILTER_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) { if (postType == PostDataSource.TYPE_SEARCH) {
subredditName = getArguments().getString(EXTRA_NAME); 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 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()); 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()); 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) { } else if (postType == PostDataSource.TYPE_SUBREDDIT) {
subredditName = getArguments().getString(EXTRA_NAME); subredditName = getArguments().getString(EXTRA_NAME);
String sort; String sort;
@ -509,29 +512,6 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
TransitionManager.beginDelayedTransition(mPostRecyclerView, new AutoTransition()); 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) { } else if(postType == PostDataSource.TYPE_MULTI_REDDIT) {
multiRedditPath = getArguments().getString(EXTRA_NAME); multiRedditPath = getArguments().getString(EXTRA_NAME);
String sort; String sort;
@ -582,13 +562,9 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
TransitionManager.beginDelayedTransition(mPostRecyclerView, new AutoTransition()); 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) { } else if (postType == PostDataSource.TYPE_USER) {
username = getArguments().getString(EXTRA_USER_NAME); 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)) { if (where != null && where.equals(PostDataSource.USER_WHERE_SUBMITTED)) {
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mFetchPostInfoLinearLayout.getLayoutParams(); CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mFetchPostInfoLinearLayout.getLayoutParams();
params.height = ViewGroup.LayoutParams.WRAP_CONTENT; params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
@ -635,10 +611,6 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
TransitionManager.beginDelayedTransition(mPostRecyclerView, new AutoTransition()); 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 { } else {
String sort = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TYPE_BEST_POST, SortType.Type.BEST.name()); 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())) { 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()); 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) { if (activity instanceof ActivityToolbarInterface) {
((ActivityToolbarInterface) activity).displaySortType(); ((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); vibrateWhenActionTriggered = mSharedPreferences.getBoolean(SharedPreferencesUtils.VIBRATE_WHEN_ACTION_TRIGGERED, true);
swipeActionThreshold = Float.parseFloat(mSharedPreferences.getString(SharedPreferencesUtils.SWIPE_ACTION_THRESHOLD, "0.3")); swipeActionThreshold = Float.parseFloat(mSharedPreferences.getString(SharedPreferencesUtils.SWIPE_ACTION_THRESHOLD, "0.3"));
swipeRightAction = Integer.parseInt(mSharedPreferences.getString(SharedPreferencesUtils.SWIPE_RIGHT_ACTION, "1")); 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 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) { if (mPostViewModel != null) {
bindPostViewModel(); bindPostViewModel();
} }
return rootView;
} }
private void bindPostViewModel() { private void bindPostViewModel() {
@ -912,6 +974,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
public void onSaveInstanceState(@NonNull Bundle outState) { public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState); super.onSaveInstanceState(outState);
outState.putBoolean(IS_IN_LAZY_MODE_STATE, isInLazyMode); outState.putBoolean(IS_IN_LAZY_MODE_STATE, isInLazyMode);
outState.putParcelableArrayList(READ_POST_LIST_STATE, readPosts);
outState.putParcelableArrayList(SUBREDDIT_FILTER_LIST_STATE, subredditFilterList); outState.putParcelableArrayList(SUBREDDIT_FILTER_LIST_STATE, subredditFilterList);
if (mLinearLayoutManager != null) { if (mLinearLayoutManager != null) {
outState.putInt(RECYCLER_VIEW_POSITION_STATE, mLinearLayoutManager.findFirstVisibleItemPosition()); outState.putInt(RECYCLER_VIEW_POSITION_STATE, mLinearLayoutManager.findFirstVisibleItemPosition());

View File

@ -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);
}
}
}

View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -20,12 +20,15 @@ public class CustomThemeSharedPreferencesUtils {
public static final String COLOR_PRIMARY_LIGHT_THEME = "colorPrimaryLightTheme"; public static final String COLOR_PRIMARY_LIGHT_THEME = "colorPrimaryLightTheme";
public static final String POST_TITLE_COLOR = "postTitleColor"; public static final String POST_TITLE_COLOR = "postTitleColor";
public static final String POST_CONTENT_COLOR = "postContentColor"; 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 COMMENT_COLOR = "commentColor";
public static final String PRIMARY_TEXT_COLOR = "primaryTextColor"; public static final String PRIMARY_TEXT_COLOR = "primaryTextColor";
public static final String SECONDARY_TEXT_COLOR = "secondaryTextColor"; public static final String SECONDARY_TEXT_COLOR = "secondaryTextColor";
public static final String BUTTON_TEXT_COLOR = "buttonTextColor"; public static final String BUTTON_TEXT_COLOR = "buttonTextColor";
public static final String BACKGROUND_COLOR = "backgroundColor"; public static final String BACKGROUND_COLOR = "backgroundColor";
public static final String CARD_VIEW_BACKGROUND_COLOR = "cardViewBackgroundColor"; 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 COMMENT_BACKGROUND_COLOR = "commentBackgroundColor";
public static final String BOTTOM_APP_BAR_BACKGROUND_COLOR = "bottomAppBarBackgroundColor"; public static final String BOTTOM_APP_BAR_BACKGROUND_COLOR = "bottomAppBarBackgroundColor";
public static final String PRIMARY_ICON_COLOR = "primaryIconColor"; public static final String PRIMARY_ICON_COLOR = "primaryIconColor";
@ -99,10 +102,13 @@ public class CustomThemeSharedPreferencesUtils {
editor.putInt(SECONDARY_TEXT_COLOR, customTheme.secondaryTextColor); editor.putInt(SECONDARY_TEXT_COLOR, customTheme.secondaryTextColor);
editor.putInt(POST_TITLE_COLOR, customTheme.postTitleColor); editor.putInt(POST_TITLE_COLOR, customTheme.postTitleColor);
editor.putInt(POST_CONTENT_COLOR, customTheme.postContentColor); 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(COMMENT_COLOR, customTheme.commentColor);
editor.putInt(BUTTON_TEXT_COLOR, customTheme.buttonTextColor); editor.putInt(BUTTON_TEXT_COLOR, customTheme.buttonTextColor);
editor.putInt(BACKGROUND_COLOR, customTheme.backgroundColor); editor.putInt(BACKGROUND_COLOR, customTheme.backgroundColor);
editor.putInt(CARD_VIEW_BACKGROUND_COLOR, customTheme.cardViewBackgroundColor); 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(COMMENT_BACKGROUND_COLOR, customTheme.commentBackgroundColor);
editor.putInt(BOTTOM_APP_BAR_BACKGROUND_COLOR, customTheme.bottomAppBarBackgroundColor); editor.putInt(BOTTOM_APP_BAR_BACKGROUND_COLOR, customTheme.bottomAppBarBackgroundColor);
editor.putInt(PRIMARY_ICON_COLOR, customTheme.primaryIconColor); editor.putInt(PRIMARY_ICON_COLOR, customTheme.primaryIconColor);