Show correct karma in ViewUserDetailActivity. Show a warning if nsfw is enabled while the user is over_18 in ViewUserDetailActivity.

This commit is contained in:
Alex Ning 2020-10-14 12:03:20 +08:00
parent 24ae2d85a2
commit 232ea91d32
5 changed files with 72 additions and 8 deletions

View File

@ -149,6 +149,9 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
@Named("post_layout")
SharedPreferences mPostLayoutSharedPreferences;
@Inject
@Named("nsfw_and_spoiler")
SharedPreferences mNsfwAndSpoilerSharedPreferences;
@Inject
CustomThemeWrapper mCustomThemeWrapper;
public UserViewModel userViewModel;
private FragmentManager fragmentManager;
@ -179,6 +182,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
private String mMessageFullname;
private String mNewAccountName;
private SlidrInterface mSlidrInterface;
private MaterialAlertDialogBuilder nsfwWarningBuilder;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -417,7 +421,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
if (!title.equals(userFullName)) {
getSupportActionBar().setTitle(userFullName);
}
String karma = getString(R.string.karma_info_user_detail, userData.getKarma(), userData.getLinkKarma(), userData.getCommentKarma());
String karma = getString(R.string.karma_info_user_detail, userData.getTotalKarma(), userData.getLinkKarma(), userData.getCommentKarma());
karmaTextView.setText(karma);
cakedayTextView.setText(getString(R.string.cakeday_info, new SimpleDateFormat("MMM d, yyyy",
locale).format(userData.getCakeday())));
@ -428,6 +432,21 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
descriptionTextView.setVisibility(View.VISIBLE);
descriptionTextView.setText(userData.getDescription());
}
if (userData.isNSFW()) {
if (nsfwWarningBuilder == null
&& !mNsfwAndSpoilerSharedPreferences.getBoolean((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.NSFW_BASE, false)) {
nsfwWarningBuilder = new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme)
.setTitle(R.string.warning)
.setMessage(R.string.this_user_has_nsfw_content)
.setPositiveButton(R.string.leave, (dialogInterface, i)
-> {
finish();
})
.setNegativeButton(R.string.dismiss, null);
nsfwWarningBuilder.show();
}
}
}
});

View File

@ -28,7 +28,7 @@ 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}, version = 10)
SubscribedUserData.class, MultiReddit.class, CustomTheme.class, RecentSearchQuery.class}, version = 11)
public abstract class RedditDataRoomDatabase extends RoomDatabase {
private static RedditDataRoomDatabase INSTANCE;
@ -40,7 +40,7 @@ public abstract class RedditDataRoomDatabase extends RoomDatabase {
RedditDataRoomDatabase.class, "reddit_data")
.addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4, MIGRATION_4_5,
MIGRATION_5_6, MIGRATION_6_7, MIGRATION_7_8, MIGRATION_8_9,
MIGRATION_9_10)
MIGRATION_9_10, MIGRATION_10_11)
.build();
}
}
@ -229,4 +229,18 @@ public abstract class RedditDataRoomDatabase extends RoomDatabase {
+ " ADD COLUMN over18 INTEGER DEFAULT 0 NOT NULL");
}
};
private static final Migration MIGRATION_10_11 = new Migration(10, 11) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("ALTER TABLE users"
+ " ADD COLUMN awarder_karma INTEGER DEFAULT 0 NOT NULL");
database.execSQL("ALTER TABLE users"
+ " ADD COLUMN awardee_karma INTEGER DEFAULT 0 NOT NULL");
database.execSQL("ALTER TABLE users"
+ " ADD COLUMN total_karma INTEGER DEFAULT 0 NOT NULL");
database.execSQL("ALTER TABLE users"
+ " ADD COLUMN over_18 INTEGER DEFAULT 0 NOT NULL");
}
};
}

View File

@ -37,13 +37,17 @@ public class ParseUserData {
}
int linkKarma = userDataJson.getInt(JSONUtils.LINK_KARMA_KEY);
int commentKarma = userDataJson.getInt(JSONUtils.COMMENT_KARMA_KEY);
int awarderKarma = userDataJson.getInt(JSONUtils.AWARDER_KARMA_KEY);
int awardeeKarma = userDataJson.getInt(JSONUtils.AWARDEE_KARMA_KEY);
int totalKarma = userDataJson.getInt(JSONUtils.TOTAL_KARMA_KEY);
long cakeday = userDataJson.getLong(JSONUtils.CREATED_UTC_KEY) * 1000;
boolean isGold = userDataJson.getBoolean(JSONUtils.IS_GOLD_KEY);
boolean isFriend = userDataJson.getBoolean(JSONUtils.IS_FRIEND_KEY);
boolean isNsfw = userDataJson.getJSONObject(JSONUtils.SUBREDDIT_KEY).getBoolean(JSONUtils.OVER_18_KEY);
String description = userDataJson.getJSONObject(JSONUtils.SUBREDDIT_KEY).getString(JSONUtils.PUBLIC_DESCRIPTION_KEY);
return new UserData(userName, iconImageUrl, bannerImageUrl, linkKarma, commentKarma, cakeday,
isGold, isFriend, canBeFollowed, description);
return new UserData(userName, iconImageUrl, bannerImageUrl, linkKarma, commentKarma, awarderKarma,
awardeeKarma, totalKarma, cakeday, isGold, isFriend, canBeFollowed, isNsfw, description);
}
interface ParseUserDataListener {

View File

@ -19,6 +19,12 @@ public class UserData {
private int linkKarma;
@ColumnInfo(name = "comment_karma")
private int commentKarma;
@ColumnInfo(name = "awarder_karma")
private int awarderKarma;
@ColumnInfo(name = "awardee_karma")
private int awardeeKarma;
@ColumnInfo(name = "total_karma")
private int totalKarma;
@ColumnInfo(name = "created_utc")
private long cakeday;
@ColumnInfo(name = "is_gold")
@ -27,20 +33,27 @@ public class UserData {
private boolean isFriend;
@ColumnInfo(name = "can_be_followed")
private boolean canBeFollowed;
@ColumnInfo(name = "over_18")
private boolean isNSFW;
@ColumnInfo(name = "description")
private String description;
public UserData(@NonNull String name, String iconUrl, String banner, int linkKarma, int commentKarma,
long cakeday, boolean isGold, boolean isFriend, boolean canBeFollowed, String description) {
int awarderKarma, int awardeeKarma, int totalKarma, long cakeday, boolean isGold,
boolean isFriend, boolean canBeFollowed, boolean isNSFW, String description) {
this.name = name;
this.iconUrl = iconUrl;
this.banner = banner;
this.commentKarma = commentKarma;
this.linkKarma = linkKarma;
this.awarderKarma = awarderKarma;
this.awarderKarma = awardeeKarma;
this.totalKarma = totalKarma;
this.cakeday = cakeday;
this.isGold = isGold;
this.isFriend = isFriend;
this.canBeFollowed = canBeFollowed;
this.isNSFW = isNSFW;
this.description = description;
}
@ -65,8 +78,16 @@ public class UserData {
return commentKarma;
}
public int getKarma() {
return linkKarma + commentKarma;
public int getAwarderKarma() {
return awarderKarma;
}
public int getAwardeeKarma() {
return awardeeKarma;
}
public int getTotalKarma() {
return totalKarma;
}
public long getCakeday() {
@ -85,6 +106,10 @@ public class UserData {
return canBeFollowed;
}
public boolean isNSFW() {
return isNSFW;
}
public String getDescription() {
return description;
}

View File

@ -128,4 +128,6 @@ public class JSONUtils {
public static final String SUGGESTED_COMMENT_SORT_KEY = "suggested_comment_sort";
public static final String OVER18_KEY = "over18";
public static final String TOTAL_KARMA_KEY = "total_karma";
public static final String AWARDER_KARMA_KEY = "awarder_karma";
public static final String AWARDEE_KARMA_KEY = "awardee_karma";
}