renamed database constants, bug fix, code cleanup, added status spoiler attribut

This commit is contained in:
nuclearfog 2023-03-17 21:59:50 +01:00
parent 161ced4c7b
commit 4439b3db9c
No known key found for this signature in database
GPG Key ID: 03488A185C476379
10 changed files with 219 additions and 157 deletions

View File

@ -38,6 +38,7 @@ public class MastodonStatus implements Status {
private boolean reposted;
private boolean bookmarked;
private boolean sensitive;
private boolean spoiler;
private boolean muted;
private String text;
@ -77,6 +78,7 @@ public class MastodonStatus implements Status {
favorited = json.optBoolean("favourited", false);
reposted = json.optBoolean("reblogged", false);
sensitive = json.optBoolean("sensitive", false);
spoiler = json.optBoolean("spoiler_text", false);
bookmarked = json.optBoolean("bookmarked", false);
text = json.optString("content", "");
text = Jsoup.parse(text).text();
@ -198,7 +200,7 @@ public class MastodonStatus implements Status {
@Override
public long getRepostId() {
return 0;
return 0L;
}
@ -246,6 +248,12 @@ public class MastodonStatus implements Status {
}
@Override
public boolean isSpoiler() {
return spoiler;
}
@Override
public boolean isReposted() {
return reposted;

View File

@ -112,7 +112,7 @@ public class TweetV1 implements Status {
// get retweet ID
String retweetIdStr = "-1";
if (currentUserJson != null) {
retweetIdStr = currentUserJson.optString("id_str", "-1");
retweetIdStr = currentUserJson.optString("id_str", "0");
}
// add media
if (extEntities != null) {
@ -252,6 +252,12 @@ public class TweetV1 implements Status {
}
@Override
public boolean isSpoiler() {
return false;
}
@Override
public boolean isReposted() {
return isRetweeted;

View File

@ -154,7 +154,7 @@ public class TwitterV2 extends TwitterV1 {
params.add(LocationV2.FIELDS_PLACE);
// add metrics information if the author is the current user and the tweet is not older than 28 days and not a retweet/quote
if (statusCompat.getAuthor().isCurrentUser() && System.currentTimeMillis() - statusCompat.getTimestamp() < 2419200000L
&& (statusCompat.getEmbeddedStatus() == null || statusCompat.getEmbeddedStatus().getRepostId() <= 0L)) {
&& (statusCompat.getEmbeddedStatus() == null || statusCompat.getEmbeddedStatus().getRepostId() == 0L)) {
params.add(TweetV2.FIELDS_TWEET_PRIVATE);
} else {
params.add(TweetV2.FIELDS_TWEET);

View File

@ -333,6 +333,12 @@ public class TweetV2 implements Status {
}
@Override
public boolean isSpoiler() {
return false;
}
@Override
public boolean isReposted() {
return retweeted;

View File

@ -65,72 +65,77 @@ public class AppDatabase {
/**
* flag indicates that a status was favorited by the current user
*/
public static final int FAVORITE_MASK = 1;
public static final int MASK_STATUS_FAVORITED = 1;
/**
* flag indicates that a status was reposted by the current user
*/
public static final int REPOST_MASK = 1 << 1;
public static final int MASK_STATUS_REPOSTED = 1 << 1;
/**
* flag indicates that a status exists in the home timeline of the current user
*/
private static final int HOME_TIMELINE_MASK = 1 << 2;
private static final int MASK_STATUS_HOME_TIMELINE = 1 << 2;
/**
* flag indicates that a status exists in the notification of the current user
*/
private static final int NOTIFICATION_MASK = 1 << 3;
private static final int MASK_STATUS_NOTIFICATION = 1 << 3;
/**
* flag indicates that a status exists in an user timeline
*/
private static final int USER_TIMELINE_MASK = 1 << 4;
private static final int MASK_STATUS_USER_TIMELINE = 1 << 4;
/**
* flag indicates that a status exists in the reply of a status
*/
private static final int STATUS_REPLY_MASK = 1 << 5;
private static final int MASK_STATUS_REPLY = 1 << 5;
/**
* flag indicates that a status contains spoiler
*/
public static final int MASK_STATUS_SPOILER = 1 << 7;
/**
* flag indicates that a status contains sensitive media
*/
public static final int MEDIA_SENS_MASK = 1 << 8;
public static final int MASK_STATUS_SENSITIVE = 1 << 8;
/**
* flag indicates that a status was hidden by the current user
*/
public static final int HIDDEN_MASK = 1 << 9;
public static final int MASK_STATUS_HIDDEN = 1 << 9;
/**
* flag indicated that a status is bookmarked by the current user
*/
public static final int BOOKMARK_MASK = 1 << 10;
public static final int MASK_STATUS_BOOKMARKED = 1 << 10;
/**
* flag indicates that an user is verified
*/
public static final int VERIFIED_MASK = 1;
public static final int MASK_USER_VERIFIED = 1;
/**
* flag indicates that an user is locked/private
*/
public static final int LOCKED_MASK = 1 << 1;
public static final int MASK_USER_PRIVATE = 1 << 1;
/**
* flag indicates that the current user has sent a follow request to an user
*/
public static final int FOLLOW_REQUEST_MASK = 1 << 2;
public static final int MASK_USER_FOLLOW_REQUESTED = 1 << 2;
/**
* flag indicates that the statuses of an user are excluded from timeline
*/
private static final int EXCLUDE_MASK = 1 << 3;
private static final int MASK_USER_FILTERED = 1 << 3;
/**
* flag indicates that the user has a default profile image
*/
public static final int DEFAULT_IMAGE_MASK = 1 << 4;
public static final int MASK_USER_DEFAULT_IMAGE = 1 << 4;
/**
* used if no ID is defined
@ -166,7 +171,7 @@ public class AppDatabase {
* SQL query to get home timeline status
*/
private static final String HOME_QUERY = "SELECT * FROM(" + STATUS_SUBQUERY + ")"
+ " WHERE " + StatusRegisterTable.NAME + "." + StatusRegisterTable.REGISTER + "&" + HOME_TIMELINE_MASK + " IS NOT 0"
+ " WHERE " + StatusRegisterTable.NAME + "." + StatusRegisterTable.REGISTER + "&" + MASK_STATUS_HOME_TIMELINE + " IS NOT 0"
+ " AND " + StatusRegisterTable.NAME + "." + StatusRegisterTable.OWNER + "=?"
+ " AND " + UserRegisterTable.NAME + "." + UserRegisterTable.OWNER + "=?"
+ " ORDER BY " + StatusTable.TIME + " DESC"
@ -176,7 +181,7 @@ public class AppDatabase {
* SQL query to get status of an user
*/
private static final String USER_STATUS_QUERY = "SELECT * FROM(" + STATUS_SUBQUERY + ")"
+ " WHERE " + StatusRegisterTable.NAME + "." + StatusRegisterTable.REGISTER + "&" + USER_TIMELINE_MASK + " IS NOT 0"
+ " WHERE " + StatusRegisterTable.NAME + "." + StatusRegisterTable.REGISTER + "&" + MASK_STATUS_USER_TIMELINE + " IS NOT 0"
+ " AND " + StatusRegisterTable.NAME + "." + StatusRegisterTable.OWNER + "=?"
+ " AND " + UserRegisterTable.NAME + "." + UserRegisterTable.OWNER + "=?"
+ " AND " + StatusTable.NAME + "." + StatusTable.USER + "=?"
@ -230,9 +235,9 @@ public class AppDatabase {
+ " WHERE " + StatusTable.NAME + "." + StatusTable.REPLYSTATUS + "=?"
+ " AND " + StatusRegisterTable.NAME + "." + StatusRegisterTable.OWNER + "=?"
+ " AND " + UserRegisterTable.NAME + "." + UserRegisterTable.OWNER + "=?"
+ " AND " + StatusRegisterTable.NAME + "." + StatusRegisterTable.REGISTER + "&" + STATUS_REPLY_MASK + " IS NOT 0"
+ " AND " + StatusRegisterTable.NAME + "." + StatusRegisterTable.REGISTER + "&" + HIDDEN_MASK + " IS 0"
+ " AND " + UserRegisterTable.NAME + "." + UserRegisterTable.REGISTER + "&" + EXCLUDE_MASK + " IS 0"
+ " AND " + StatusRegisterTable.NAME + "." + StatusRegisterTable.REGISTER + "&" + MASK_STATUS_REPLY + " IS NOT 0"
+ " AND " + StatusRegisterTable.NAME + "." + StatusRegisterTable.REGISTER + "&" + MASK_STATUS_HIDDEN + " IS 0"
+ " AND " + UserRegisterTable.NAME + "." + UserRegisterTable.REGISTER + "&" + MASK_USER_FILTERED + " IS 0"
+ " ORDER BY " + StatusTable.TIME + " DESC"
+ " LIMIT ?;";
@ -423,7 +428,7 @@ public class AppDatabase {
if (!statuses.isEmpty()) {
SQLiteDatabase db = adapter.getDbWrite();
for (Status status : statuses)
saveStatus(status, db, HOME_TIMELINE_MASK);
saveStatus(status, db, MASK_STATUS_HOME_TIMELINE);
adapter.commit();
}
}
@ -439,7 +444,7 @@ public class AppDatabase {
if (!statuses.isEmpty()) {
SQLiteDatabase db = adapter.getDbWrite();
for (Status status : statuses)
saveStatus(status, db, USER_TIMELINE_MASK);
saveStatus(status, db, MASK_STATUS_USER_TIMELINE);
adapter.commit();
}
}
@ -501,7 +506,7 @@ public class AppDatabase {
if (!statuses.isEmpty()) {
SQLiteDatabase db = adapter.getDbWrite();
for (Status status : statuses)
saveStatus(status, db, STATUS_REPLY_MASK);
saveStatus(status, db, MASK_STATUS_REPLY);
adapter.commit();
}
}
@ -524,7 +529,7 @@ public class AppDatabase {
saveUser(notification.getUser(), db, CONFLICT_IGNORE);
// add status
if (notification.getStatus() != null) {
saveStatus(notification.getStatus(), db, NOTIFICATION_MASK);
saveStatus(notification.getStatus(), db, MASK_STATUS_NOTIFICATION);
column.put(NotificationTable.ITEM, notification.getStatus().getId());
}
db.insertWithOnConflict(NotificationTable.NAME, null, column, CONFLICT_REPLACE);
@ -567,7 +572,7 @@ public class AppDatabase {
ContentValues column = new ContentValues(2);
column.put(UserExcludeTable.ID, id);
column.put(UserExcludeTable.OWNER, homeId);
db.insertWithOnConflict(UserExcludeTable.NAME, null, column, SQLiteDatabase.CONFLICT_IGNORE);
db.insert(UserExcludeTable.NAME, null, column);
}
}
adapter.commit();
@ -963,9 +968,9 @@ public class AppDatabase {
SQLiteDatabase db = adapter.getDbWrite();
int flags = getStatusFlags(db, id);
if (hide) {
flags |= HIDDEN_MASK;
flags |= MASK_STATUS_HIDDEN;
} else {
flags &= ~HIDDEN_MASK;
flags &= ~MASK_STATUS_HIDDEN;
}
ContentValues column = new ContentValues(1);
column.put(StatusRegisterTable.REGISTER, flags);
@ -1022,7 +1027,7 @@ public class AppDatabase {
SQLiteDatabase db = adapter.getDbWrite();
// get status flags
int flags = getStatusFlags(db, status.getId());
flags &= ~FAVORITE_MASK; // unset favorite flag
flags &= ~MASK_STATUS_FAVORITED; // unset favorite flag
// update database
saveStatusFlags(db, status, flags);
db.delete(FavoriteTable.NAME, FAVORITE_SELECT, delArgs);
@ -1045,7 +1050,7 @@ public class AppDatabase {
SQLiteDatabase db = adapter.getDbWrite();
// get status flags
int flags = getStatusFlags(db, status.getId());
flags &= ~BOOKMARK_MASK; // unset bookmark flag
flags &= ~MASK_STATUS_BOOKMARKED; // unset bookmark flag
// update database
saveStatusFlags(db, status, flags);
db.delete(BookmarkTable.NAME, BOOKMARK_SELECT, delArgs);
@ -1165,9 +1170,9 @@ public class AppDatabase {
SQLiteDatabase db = adapter.getDbWrite();
int flags = getUserFlags(db, id);
if (mute) {
flags |= EXCLUDE_MASK;
flags |= MASK_USER_FILTERED;
} else {
flags &= ~EXCLUDE_MASK;
flags &= ~MASK_USER_FILTERED;
}
saveUserFlags(db, id, flags);
adapter.commit();
@ -1416,24 +1421,24 @@ public class AppDatabase {
private void saveUser(User user, SQLiteDatabase db, int mode) {
int flags = getUserFlags(db, user.getId());
if (user.isVerified()) {
flags |= VERIFIED_MASK;
flags |= MASK_USER_VERIFIED;
} else {
flags &= ~VERIFIED_MASK;
flags &= ~MASK_USER_VERIFIED;
}
if (user.isProtected()) {
flags |= LOCKED_MASK;
flags |= MASK_USER_PRIVATE;
} else {
flags &= ~LOCKED_MASK;
flags &= ~MASK_USER_PRIVATE;
}
if (user.followRequested()) {
flags |= FOLLOW_REQUEST_MASK;
flags |= MASK_USER_FOLLOW_REQUESTED;
} else {
flags &= ~FOLLOW_REQUEST_MASK;
flags &= ~MASK_USER_FOLLOW_REQUESTED;
}
if (user.hasDefaultProfileImage()) {
flags |= DEFAULT_IMAGE_MASK;
flags |= MASK_USER_DEFAULT_IMAGE;
} else {
flags &= ~DEFAULT_IMAGE_MASK;
flags &= ~MASK_USER_DEFAULT_IMAGE;
}
ContentValues column = new ContentValues(13);
column.put(UserTable.ID, user.getId());
@ -1471,24 +1476,29 @@ public class AppDatabase {
}
flags |= getStatusFlags(db, status.getId());
if (status.isFavorited()) {
flags |= FAVORITE_MASK;
flags |= MASK_STATUS_FAVORITED;
} else {
flags &= ~FAVORITE_MASK;
flags &= ~MASK_STATUS_FAVORITED;
}
if (status.isReposted()) {
flags |= REPOST_MASK;
flags |= MASK_STATUS_REPOSTED;
} else {
flags &= ~REPOST_MASK;
flags &= ~MASK_STATUS_REPOSTED;
}
if (status.isSensitive()) {
flags |= MEDIA_SENS_MASK;
flags |= MASK_STATUS_SENSITIVE;
} else {
flags &= ~MEDIA_SENS_MASK;
flags &= ~MASK_STATUS_SENSITIVE;
}
if (status.isSpoiler()) {
flags |= MASK_STATUS_SPOILER;
} else {
flags &= ~MASK_STATUS_SPOILER;
}
if (status.isBookmarked()) {
flags |= BOOKMARK_MASK;
flags |= MASK_STATUS_BOOKMARKED;
} else {
flags &= ~BOOKMARK_MASK;
flags &= ~MASK_STATUS_BOOKMARKED;
}
ContentValues column = new ContentValues(19);
column.put(StatusTable.ID, status.getId());
@ -1607,7 +1617,7 @@ public class AppDatabase {
column.put(PollTable.LIMIT, poll.getLimit());
column.put(PollTable.EXPIRATION, poll.expirationTime());
column.put(PollTable.OPTIONS, buf.toString());
db.insertWithOnConflict(PollTable.NAME, "", column, CONFLICT_IGNORE);
db.insertWithOnConflict(PollTable.NAME, "", column, CONFLICT_REPLACE);
}
/**

View File

@ -1,10 +1,11 @@
package org.nuclearfog.twidda.database.impl;
import static org.nuclearfog.twidda.database.AppDatabase.BOOKMARK_MASK;
import static org.nuclearfog.twidda.database.AppDatabase.FAVORITE_MASK;
import static org.nuclearfog.twidda.database.AppDatabase.HIDDEN_MASK;
import static org.nuclearfog.twidda.database.AppDatabase.MEDIA_SENS_MASK;
import static org.nuclearfog.twidda.database.AppDatabase.REPOST_MASK;
import static org.nuclearfog.twidda.database.AppDatabase.MASK_STATUS_BOOKMARKED;
import static org.nuclearfog.twidda.database.AppDatabase.MASK_STATUS_FAVORITED;
import static org.nuclearfog.twidda.database.AppDatabase.MASK_STATUS_HIDDEN;
import static org.nuclearfog.twidda.database.AppDatabase.MASK_STATUS_SENSITIVE;
import static org.nuclearfog.twidda.database.AppDatabase.MASK_STATUS_REPOSTED;
import static org.nuclearfog.twidda.database.AppDatabase.MASK_STATUS_SPOILER;
import android.database.Cursor;
@ -67,6 +68,7 @@ public class DatabaseStatus implements Status {
private boolean favorited;
private boolean bookmarked;
private boolean sensitive;
private boolean spoiler;
private boolean isHidden;
/**
@ -96,11 +98,12 @@ public class DatabaseStatus implements Status {
statusUrl = cursor.getString(cursor.getColumnIndexOrThrow(StatusTable.URL));
int register = cursor.getInt(cursor.getColumnIndexOrThrow(StatusRegisterTable.REGISTER));
favorited = (register & FAVORITE_MASK) != 0;
reposted = (register & REPOST_MASK) != 0;
sensitive = (register & MEDIA_SENS_MASK) != 0;
isHidden = (register & HIDDEN_MASK) != 0;
bookmarked = (register & BOOKMARK_MASK) != 0;
favorited = (register & MASK_STATUS_FAVORITED) != 0;
reposted = (register & MASK_STATUS_REPOSTED) != 0;
sensitive = (register & MASK_STATUS_SENSITIVE) != 0;
isHidden = (register & MASK_STATUS_HIDDEN) != 0;
bookmarked = (register & MASK_STATUS_BOOKMARKED) != 0;
spoiler = (register & MASK_STATUS_SPOILER) != 0;
if (mediaKeys != null && !mediaKeys.isEmpty()) {
this.mediaKeys = MEDIA_SEPARATOR.split(mediaKeys);
}
@ -221,6 +224,12 @@ public class DatabaseStatus implements Status {
}
@Override
public boolean isSpoiler() {
return spoiler;
}
@Override
public boolean isReposted() {
return reposted;

View File

@ -1,9 +1,9 @@
package org.nuclearfog.twidda.database.impl;
import static org.nuclearfog.twidda.database.AppDatabase.DEFAULT_IMAGE_MASK;
import static org.nuclearfog.twidda.database.AppDatabase.FOLLOW_REQUEST_MASK;
import static org.nuclearfog.twidda.database.AppDatabase.LOCKED_MASK;
import static org.nuclearfog.twidda.database.AppDatabase.VERIFIED_MASK;
import static org.nuclearfog.twidda.database.AppDatabase.MASK_USER_DEFAULT_IMAGE;
import static org.nuclearfog.twidda.database.AppDatabase.MASK_USER_FOLLOW_REQUESTED;
import static org.nuclearfog.twidda.database.AppDatabase.MASK_USER_PRIVATE;
import static org.nuclearfog.twidda.database.AppDatabase.MASK_USER_VERIFIED;
import android.database.Cursor;
@ -65,10 +65,10 @@ public class DatabaseUser implements User {
statusCount = cursor.getInt(cursor.getColumnIndexOrThrow(UserTable.STATUSES));
favorCount = cursor.getInt(cursor.getColumnIndexOrThrow(UserTable.FAVORITS));
int register = cursor.getInt(cursor.getColumnIndexOrThrow(UserRegisterTable.REGISTER));
isVerified = (register & VERIFIED_MASK) != 0;
isLocked = (register & LOCKED_MASK) != 0;
followReqSent = (register & FOLLOW_REQUEST_MASK) != 0;
defaultImage = (register & DEFAULT_IMAGE_MASK) != 0;
isVerified = (register & MASK_USER_VERIFIED) != 0;
isLocked = (register & MASK_USER_PRIVATE) != 0;
followReqSent = (register & MASK_USER_FOLLOW_REQUESTED) != 0;
defaultImage = (register & MASK_USER_DEFAULT_IMAGE) != 0;
isCurrentUser = account.getId() == id;
switch (account.getConfiguration()) {

View File

@ -93,6 +93,11 @@ public interface Status extends Serializable, Comparable<Status> {
*/
boolean isSensitive();
/**
* @return true if status contains any spoiler
*/
boolean isSpoiler();
/**
* @return true if status is reposted by the current user
*/

View File

@ -238,6 +238,17 @@ public class ProfileActivity extends AppCompatActivity implements ActivityResult
}
if (user != null) {
setUser(user);
if (user instanceof DatabaseUser) {
UserParam param = new UserParam(UserParam.ONLINE, userId);
userLoader.execute(param, userCallback);
}
} else {
UserParam param = new UserParam(UserParam.DATABASE, userId);
userLoader.execute(param, userCallback);
}
if (relation == null && userId != settings.getLogin().getId()) {
RelationParam param = new RelationParam(userId, RelationParam.LOAD);
relationLoader.execute(param, relationCallback);
}
tabLayout.addOnTabSelectedListener(this);
following.setOnClickListener(this);
@ -250,23 +261,6 @@ public class ProfileActivity extends AppCompatActivity implements ActivityResult
}
@Override
protected void onStart() {
super.onStart();
if (user == null) {
UserParam param = new UserParam(UserParam.DATABASE, userId);
userLoader.execute(param, userCallback);
} else if (user instanceof DatabaseUser) {
UserParam param = new UserParam(UserParam.ONLINE, userId);
userLoader.execute(param, userCallback);
}
if (relation == null && userId != settings.getLogin().getId()) {
RelationParam param = new RelationParam(userId, RelationParam.LOAD);
relationLoader.execute(param, relationCallback);
}
}
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
outState.putSerializable(KEY_PROFILE_USER, user);
@ -278,11 +272,14 @@ public class ProfileActivity extends AppCompatActivity implements ActivityResult
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
Object data = savedInstanceState.getSerializable(KEY_PROFILE_USER);
if (data instanceof User)
user = (User) data;
if (data instanceof User) {
setUser((User) data);
}
data = savedInstanceState.getSerializable(KEY_PROFILE_RELATION);
if (data instanceof Relation)
if (data instanceof Relation) {
relation = (Relation) data;
invalidateOptionsMenu();
}
super.onRestoreInstanceState(savedInstanceState);
}

View File

@ -248,45 +248,6 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
settings = GlobalSettings.getInstance(this);
clip = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
adapter = new PreviewAdapter(settings, picasso, this);
// get parameter
long id;
String replyUsername;
Object statusObject = getIntent().getSerializableExtra(KEY_STATUS_DATA);
Object notificationObject = getIntent().getSerializableExtra(KEY_NOTIFICATION_DATA);
if (statusObject instanceof Status) {
status = (Status) statusObject;
setStatus(status);
Status embedded = status.getEmbeddedStatus();
if (embedded != null) {
id = embedded.getId();
replyUsername = embedded.getAuthor().getScreenname();
} else {
id = status.getId();
hidden = status.isHidden();
replyUsername = status.getAuthor().getScreenname();
}
} else if (notificationObject instanceof Notification) {
notification = (Notification) notificationObject;
if (notification.getStatus() != null) {
setStatus(notification.getStatus());
id = notification.getStatus().getId();
replyUsername = notification.getStatus().getAuthor().getScreenname();
} else {
id = getIntent().getLongExtra(KEY_NOTIFICATION_ID, 0L);
replyUsername = getIntent().getStringExtra(KEY_NOTIFICATION_NAME);
}
} else {
id = getIntent().getLongExtra(KEY_STATUS_ID, 0L);
replyUsername = getIntent().getStringExtra(KEY_STATUS_NAME);
}
// initialize status reply list
Bundle param = new Bundle();
param.putInt(KEY_STATUS_FRAGMENT_MODE, STATUS_FRAGMENT_REPLY);
param.putString(KEY_STATUS_FRAGMENT_SEARCH, replyUsername);
param.putLong(KEY_STATUS_FRAGMENT_ID, id);
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.page_status_reply_fragment, StatusFragment.class, param);
fragmentTransaction.commit();
replyButton.setCompoundDrawablesWithIntrinsicBounds(R.drawable.answer, 0, 0, 0);
repostButton.setCompoundDrawablesWithIntrinsicBounds(R.drawable.repost, 0, 0, 0);
@ -307,6 +268,60 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
setSupportActionBar(toolbar);
AppStyles.setTheme(root);
// get parameter, set information and initialize loaders
long statusId = 0L;
String replyUsername = "";
Object statusObject = getIntent().getSerializableExtra(KEY_STATUS_DATA);
Object notificationObject = getIntent().getSerializableExtra(KEY_NOTIFICATION_DATA);
if (statusObject instanceof Status) {
Status status = (Status) statusObject;
setStatus(status);
Status embedded = status.getEmbeddedStatus();
if (embedded != null) {
statusId = embedded.getId();
replyUsername = embedded.getAuthor().getScreenname();
} else {
statusId = status.getId();
hidden = status.isHidden();
replyUsername = status.getAuthor().getScreenname();
}
if (status instanceof DatabaseStatus) {
StatusParam statusParam = new StatusParam(StatusParam.ONLINE, status.getId());
statusAsync.execute(statusParam, statusCallback);
}
} else if (notificationObject instanceof Notification) {
Notification notification = (Notification) notificationObject;
if (notification.getStatus() != null) {
setNotification(notification);
statusId = notification.getStatus().getId();
replyUsername = notification.getStatus().getAuthor().getScreenname();
}
if (notification instanceof DatabaseNotification) {
NotificationActionParam notificationParam = new NotificationActionParam(NotificationActionParam.ONLINE, notification.getId());
notificationAsync.execute(notificationParam, notificationCallback);
}
} else {
statusId = getIntent().getLongExtra(KEY_STATUS_ID, 0L);
long notificationId = getIntent().getLongExtra(KEY_NOTIFICATION_ID, 0L);
if (statusId != 0L) {
replyUsername = getIntent().getStringExtra(KEY_STATUS_NAME);
StatusParam statusParam = new StatusParam(StatusParam.DATABASE, statusId);
statusAsync.execute(statusParam, statusCallback);
} else if (notificationId != 0L) {
replyUsername = getIntent().getStringExtra(KEY_NOTIFICATION_NAME);
NotificationActionParam notificationParam = new NotificationActionParam(NotificationActionParam.ONLINE, notificationId);
notificationAsync.execute(notificationParam, notificationCallback);
}
}
// initialize status reply list
Bundle param = new Bundle();
param.putInt(KEY_STATUS_FRAGMENT_MODE, STATUS_FRAGMENT_REPLY);
param.putString(KEY_STATUS_FRAGMENT_SEARCH, replyUsername);
param.putLong(KEY_STATUS_FRAGMENT_ID, statusId);
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.page_status_reply_fragment, StatusFragment.class, param);
fragmentTransaction.commit();
confirmDialog = new ConfirmDialog(this);
metricsDialog = new MetricsDialog(this);
confirmDialog.setConfirmListener(this);
@ -324,36 +339,6 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
}
@Override
protected void onStart() {
super.onStart();
if (notification != null) {
if (notification instanceof DatabaseNotification) {
NotificationActionParam param = new NotificationActionParam(NotificationActionParam.ONLINE, notification.getId());
notificationAsync.execute(param, notificationCallback);
}
} else if (status != null) {
if (status instanceof DatabaseStatus) {
StatusParam param = new StatusParam(StatusParam.ONLINE, status.getId());
statusAsync.execute(param, statusCallback);
} else if (status.getPoll() != null) {
PollActionParam param = new PollActionParam(PollActionParam.LOAD, status.getPoll(), new int[0]);
voteAsync.execute(param, pollResult);
}
} else {
long statusId = getIntent().getLongExtra(KEY_STATUS_ID, 0L);
long notificationId = getIntent().getLongExtra(KEY_NOTIFICATION_ID, 0L);
if (statusId != 0L) {
StatusParam param = new StatusParam(StatusParam.DATABASE, statusId);
statusAsync.execute(param, statusCallback);
} else if (notificationId != 0L) {
NotificationActionParam param = new NotificationActionParam(NotificationActionParam.ONLINE, notificationId);
notificationAsync.execute(param, notificationCallback);
}
}
}
@Override
protected void onDestroy() {
statusAsync.cancel();
@ -375,6 +360,30 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
}
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
outState.putSerializable(KEY_STATUS_DATA, status);
outState.putSerializable(KEY_NOTIFICATION_DATA, notification);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
Object statusObject = getIntent().getSerializableExtra(KEY_STATUS_DATA);
Object notificationObject = getIntent().getSerializableExtra(KEY_NOTIFICATION_DATA);
if (statusObject instanceof Status) {
setStatus((Status) statusObject);
} else if (notificationObject instanceof Notification) {
notification = (Notification) notificationObject;
if (notification.getStatus() != null) {
setStatus(notification.getStatus());
}
}
super.onRestoreInstanceState(savedInstanceState);
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
@ -952,6 +961,18 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
}
}
/**
* set notification containing a status
*
* @param notification notification with status
*/
private void setNotification(@NonNull Notification notification) {
this.notification = notification;
if (notification.getStatus() != null) {
setStatus(notification.getStatus());
}
}
/**
* update notification
*