moved media preview below text

improved quote displaying
This commit is contained in:
Mariotaku Lee 2015-08-31 23:32:26 +08:00
parent f2fe2c7a5d
commit 63eb236c54
17 changed files with 381 additions and 420 deletions

View File

@ -118,14 +118,14 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
@JsonField(name = "my_retweet_id")
public long my_retweet_id;
@ParcelableThisPlease
@JsonField(name = "quote_id")
public long quote_id;
@JsonField(name = "quoted_id")
public long quoted_id;
@ParcelableThisPlease
@JsonField(name = "quote_timestamp")
public long quote_timestamp;
@JsonField(name = "quoted_timestamp")
public long quoted_timestamp;
@ParcelableThisPlease
@JsonField(name = "quoted_by_user_id")
public long quoted_by_user_id;
@JsonField(name = "quoted_user_id")
public long quoted_user_id;
@ParcelableThisPlease
@JsonField(name = "is_gap")
public boolean is_gap;
@ -151,11 +151,11 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
@JsonField(name = "is_quote")
public boolean is_quote;
@ParcelableThisPlease
@JsonField(name = "quoted_by_user_is_protected")
public boolean quoted_by_user_is_protected;
@JsonField(name = "quoted_user_is_protected")
public boolean quoted_user_is_protected;
@ParcelableThisPlease
@JsonField(name = "quoted_by_user_is_verified")
public boolean quoted_by_user_is_verified;
@JsonField(name = "quoted_user_is_verified")
public boolean quoted_user_is_verified;
@ParcelableThisPlease
@JsonField(name = "retweeted_by_user_name")
public String retweeted_by_user_name;
@ -196,26 +196,26 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
@JsonField(name = "card_name")
public String card_name;
@ParcelableThisPlease
@JsonField(name = "quote_text_html")
public String quote_text_html;
@JsonField(name = "quoted_text_html")
public String quoted_text_html;
@ParcelableThisPlease
@JsonField(name = "quote_text_plain")
public String quote_text_plain;
@JsonField(name = "quoted_text_plain")
public String quoted_text_plain;
@ParcelableThisPlease
@JsonField(name = "quote_text_unescaped")
public String quote_text_unescaped;
@JsonField(name = "quoted_text_unescaped")
public String quoted_text_unescaped;
@ParcelableThisPlease
@JsonField(name = "quote_source")
public String quote_source;
@JsonField(name = "quoted_source")
public String quoted_source;
@ParcelableThisPlease
@JsonField(name = "quoted_by_user_name")
public String quoted_by_user_name;
@JsonField(name = "quoted_user_name")
public String quoted_user_name;
@ParcelableThisPlease
@JsonField(name = "quoted_by_user_screen_name")
public String quoted_by_user_screen_name;
@JsonField(name = "quoted_user_screen_name")
public String quoted_user_screen_name;
@ParcelableThisPlease
@JsonField(name = "quoted_by_user_profile_image")
public String quoted_by_user_profile_image;
@JsonField(name = "quoted_user_profile_image")
public String quoted_user_profile_image;
@ParcelableThisPlease
@JsonField(name = "location")
public ParcelableLocation location;
@ -229,8 +229,8 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
@JsonField(name = "media")
public ParcelableMedia[] media;
@ParcelableThisPlease
@JsonField(name = "quote_media")
public ParcelableMedia[] quote_media;
@JsonField(name = "quoted_media")
public ParcelableMedia[] quoted_media;
@ParcelableThisPlease
@JsonField(name = "card")
public ParcelableCardEntity card;
@ -273,7 +273,7 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
.getString(idx.retweeted_by_user_profile_image) : null;
text_html = idx.text_html != -1 ? c.getString(idx.text_html) : null;
media = idx.media != -1 ? ParcelableMedia.fromSerializedJson(c.getString(idx.media)) : null;
quote_media = idx.quote_media != -1 ? ParcelableMedia.fromSerializedJson(c.getString(idx.quote_media)) : null;
quoted_media = idx.quoted_media != -1 ? ParcelableMedia.fromSerializedJson(c.getString(idx.quoted_media)) : null;
text_plain = idx.text_plain != -1 ? c.getString(idx.text_plain) : null;
user_name = idx.user_name != -1 ? c.getString(idx.user_name) : null;
user_screen_name = idx.user_screen_name != -1 ? c.getString(idx.user_screen_name) : null;
@ -291,18 +291,18 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
card = idx.card != -1 ? ParcelableCardEntity.fromJSONString(c.getString(idx.card)) : null;
place_full_name = idx.place_full_name != -1 ? c.getString(idx.place_full_name) : null;
is_quote = idx.is_quote != -1 && c.getShort(idx.is_quote) == 1;
quote_id = idx.quote_id != -1 ? c.getLong(idx.quote_id) : -1;
quote_timestamp = idx.quote_timestamp != -1 ? c.getLong(idx.quote_timestamp) : -1;
quoted_by_user_id = idx.quoted_by_user_id != -1 ? c.getLong(idx.quoted_by_user_id) : -1;
quote_text_html = idx.quote_text_html != -1 ? c.getString(idx.quote_text_html) : null;
quote_text_plain = idx.quote_text_plain != -1 ? c.getString(idx.quote_text_plain) : null;
quote_text_unescaped = idx.quote_text_unescaped != -1 ? c.getString(idx.quote_text_unescaped) : null;
quoted_by_user_name = idx.quoted_by_user_name != -1 ? c.getString(idx.quoted_by_user_name) : null;
quoted_by_user_screen_name = idx.quoted_by_user_screen_name != -1 ? c.getString(idx.quoted_by_user_screen_name) : null;
quoted_by_user_profile_image = idx.quoted_by_user_profile_image != -1 ? c.getString(idx.quoted_by_user_profile_image) : null;
quoted_by_user_is_protected = idx.quoted_by_user_is_protected != -1 && c.getShort(idx.quoted_by_user_is_protected) == 1;
quoted_by_user_is_verified = idx.quoted_by_user_is_verified != -1 && c.getShort(idx.quoted_by_user_is_verified) == 1;
quote_source = idx.quote_source != -1 ? c.getString(idx.quote_source) : null;
quoted_id = idx.quoted_id != -1 ? c.getLong(idx.quoted_id) : -1;
quoted_timestamp = idx.quoted_timestamp != -1 ? c.getLong(idx.quoted_timestamp) : -1;
quoted_user_id = idx.quoted_user_id != -1 ? c.getLong(idx.quoted_user_id) : -1;
quoted_text_html = idx.quoted_text_html != -1 ? c.getString(idx.quoted_text_html) : null;
quoted_text_plain = idx.quoted_text_plain != -1 ? c.getString(idx.quoted_text_plain) : null;
quoted_text_unescaped = idx.quoted_text_unescaped != -1 ? c.getString(idx.quoted_text_unescaped) : null;
quoted_user_name = idx.quoted_user_name != -1 ? c.getString(idx.quoted_user_name) : null;
quoted_user_screen_name = idx.quoted_user_screen_name != -1 ? c.getString(idx.quoted_user_screen_name) : null;
quoted_user_profile_image = idx.quoted_user_profile_image != -1 ? c.getString(idx.quoted_user_profile_image) : null;
quoted_user_is_protected = idx.quoted_user_is_protected != -1 && c.getShort(idx.quoted_user_is_protected) == 1;
quoted_user_is_verified = idx.quoted_user_is_verified != -1 && c.getShort(idx.quoted_user_is_verified) == 1;
quoted_source = idx.quoted_source != -1 ? c.getString(idx.quoted_source) : null;
card_name = card != null ? card.name : null;
}
@ -338,7 +338,7 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
source = orig.source;
user_profile_image_url = orig.user_profile_image_url;
media = orig.media;
quote_media = orig.quote_media;
quoted_media = orig.quoted_media;
location = orig.location;
my_retweet_id = override_my_retweet_id;
is_possibly_sensitive = orig.is_possibly_sensitive;
@ -350,18 +350,18 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
card = orig.card;
place_full_name = orig.place_full_name;
is_quote = orig.is_quote;
quote_id = orig.quote_id;
quote_timestamp = orig.quote_timestamp;
quoted_by_user_id = orig.quoted_by_user_id;
quoted_by_user_name = orig.quoted_by_user_name;
quoted_by_user_screen_name = orig.quoted_by_user_screen_name;
quoted_by_user_profile_image = orig.quoted_by_user_profile_image;
quote_text_html = orig.quote_text_html;
quote_text_plain = orig.quote_text_plain;
quote_text_unescaped = orig.quote_text_unescaped;
quote_source = orig.quote_source;
quoted_by_user_is_protected = orig.quoted_by_user_is_protected;
quoted_by_user_is_verified = orig.quoted_by_user_is_verified;
quoted_id = orig.quoted_id;
quoted_timestamp = orig.quoted_timestamp;
quoted_user_id = orig.quoted_user_id;
quoted_user_name = orig.quoted_user_name;
quoted_user_screen_name = orig.quoted_user_screen_name;
quoted_user_profile_image = orig.quoted_user_profile_image;
quoted_text_html = orig.quoted_text_html;
quoted_text_plain = orig.quoted_text_plain;
quoted_text_unescaped = orig.quoted_text_unescaped;
quoted_source = orig.quoted_source;
quoted_user_is_protected = orig.quoted_user_is_protected;
quoted_user_is_verified = orig.quoted_user_is_verified;
card_name = card != null ? card.name : null;
}
@ -382,26 +382,27 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
retweeted_by_user_profile_image = TwitterContentUtils.getProfileImageUrl(retweet_user);
final Status quoted = orig.getQuotedStatus();
final User quote_user = quoted != null ? orig.getUser() : null;
is_quote = orig.isQuote();
quote_id = quoted != null ? quoted.getId() : -1;
quote_text_html = TwitterContentUtils.formatStatusText(orig);
quote_text_plain = TwitterContentUtils.unescapeTwitterStatusText(orig.getText());
quote_text_unescaped = HtmlEscapeHelper.toPlainText(quote_text_html);
quote_timestamp = orig.getCreatedAt().getTime();
quote_source = orig.getSource();
if (quoted != null) {
final User quoted_user = quoted.getUser();
quoted_id = quoted.getId();
quoted_text_html = TwitterContentUtils.formatStatusText(quoted);
quoted_text_plain = TwitterContentUtils.unescapeTwitterStatusText(quoted.getText());
quoted_text_unescaped = HtmlEscapeHelper.toPlainText(quoted_text_html);
quoted_timestamp = quoted.getCreatedAt().getTime();
quoted_source = quoted.getSource();
quoted_media = ParcelableMedia.fromStatus(quoted);
quoted_by_user_id = quote_user != null ? quote_user.getId() : -1;
quoted_by_user_name = quote_user != null ? quote_user.getName() : null;
quoted_by_user_screen_name = quote_user != null ? quote_user.getScreenName() : null;
quoted_by_user_profile_image = TwitterContentUtils.getProfileImageUrl(quote_user);
quoted_by_user_is_protected = quote_user != null && quote_user.isProtected();
quoted_by_user_is_verified = quote_user != null && quote_user.isVerified();
quoted_user_id = quoted_user.getId();
quoted_user_name = quoted_user.getName();
quoted_user_screen_name = quoted_user.getScreenName();
quoted_user_profile_image = TwitterContentUtils.getProfileImageUrl(quoted_user);
quoted_user_is_protected = quoted_user.isProtected();
quoted_user_is_verified = quoted_user.isVerified();
}
final Status status;
if (quoted != null) {
status = quoted;
} else if (retweeted != null) {
if (retweeted != null) {
status = retweeted;
} else {
status = orig;
@ -421,7 +422,6 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
user_is_following = user.isFollowing();
text_html = TwitterContentUtils.formatStatusText(status);
media = ParcelableMedia.fromStatus(status);
quote_media = quoted != null ? ParcelableMedia.fromStatus(orig) : null;
text_plain = TwitterContentUtils.unescapeTwitterStatusText(status.getText());
in_reply_to_name = TwitterContentUtils.getInReplyToName(retweeted != null ? retweeted : orig);
in_reply_to_screen_name = (retweeted != null ? retweeted : orig).getInReplyToScreenName();
@ -496,9 +496,9 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
", in_reply_to_status_id=" + in_reply_to_status_id +
", in_reply_to_user_id=" + in_reply_to_user_id +
", my_retweet_id=" + my_retweet_id +
", quote_id=" + quote_id +
", quote_timestamp=" + quote_timestamp +
", quoted_by_user_id=" + quoted_by_user_id +
", quoted_id=" + quoted_id +
", quoted_timestamp=" + quoted_timestamp +
", quoted_user_id=" + quoted_user_id +
", is_gap=" + is_gap +
", is_retweet=" + is_retweet +
", is_favorite=" + is_favorite +
@ -507,8 +507,8 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
", user_is_protected=" + user_is_protected +
", user_is_verified=" + user_is_verified +
", is_quote=" + is_quote +
", quoted_by_user_is_protected=" + quoted_by_user_is_protected +
", quoted_by_user_is_verified=" + quoted_by_user_is_verified +
", quoted_user_is_protected=" + quoted_user_is_protected +
", quoted_user_is_verified=" + quoted_user_is_verified +
", retweeted_by_user_name='" + retweeted_by_user_name + '\'' +
", retweeted_by_user_screen_name='" + retweeted_by_user_screen_name + '\'' +
", retweeted_by_user_profile_image='" + retweeted_by_user_profile_image + '\'' +
@ -522,18 +522,18 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
", user_profile_image_url='" + user_profile_image_url + '\'' +
", text_unescaped='" + text_unescaped + '\'' +
", card_name='" + card_name + '\'' +
", quote_text_html='" + quote_text_html + '\'' +
", quote_text_plain='" + quote_text_plain + '\'' +
", quote_text_unescaped='" + quote_text_unescaped + '\'' +
", quote_source='" + quote_source + '\'' +
", quoted_by_user_name='" + quoted_by_user_name + '\'' +
", quoted_by_user_screen_name='" + quoted_by_user_screen_name + '\'' +
", quoted_by_user_profile_image='" + quoted_by_user_profile_image + '\'' +
", quoted_text_html='" + quoted_text_html + '\'' +
", quoted_text_plain='" + quoted_text_plain + '\'' +
", quoted_text_unescaped='" + quoted_text_unescaped + '\'' +
", quoted_source='" + quoted_source + '\'' +
", quoted_user_name='" + quoted_user_name + '\'' +
", quoted_user_screen_name='" + quoted_user_screen_name + '\'' +
", quoted_user_profile_image='" + quoted_user_profile_image + '\'' +
", location=" + location +
", place_full_name='" + place_full_name + '\'' +
", mentions=" + Arrays.toString(mentions) +
", media=" + Arrays.toString(media) +
", quote_media=" + Arrays.toString(quote_media) +
", quoted_media=" + Arrays.toString(quoted_media) +
", card=" + card +
'}';
}
@ -561,10 +561,10 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
in_reply_to_user_name, in_reply_to_user_screen_name, my_retweet_id, retweeted_by_user_name,
retweeted_by_user_screen_name, retweeted_by_user_profile_image, retweet_id, retweet_timestamp,
retweeted_by_user_id, user_id, source, retweet_count, favorite_count, reply_count,
is_possibly_sensitive, is_following, media, mentions, quote_media, card_name, card,
place_full_name, is_quote, quote_id, quote_text_html, quote_text_plain, quote_text_unescaped,
quote_timestamp, quote_source, quoted_by_user_id, quoted_by_user_name, quoted_by_user_screen_name,
quoted_by_user_profile_image, quoted_by_user_is_protected, quoted_by_user_is_verified;
is_possibly_sensitive, is_following, media, mentions, quoted_media, card_name, card,
place_full_name, is_quote, quoted_id, quoted_text_html, quoted_text_plain, quoted_text_unescaped,
quoted_timestamp, quoted_source, quoted_user_id, quoted_user_name, quoted_user_screen_name,
quoted_user_profile_image, quoted_user_is_protected, quoted_user_is_verified;
public CursorIndices(final Cursor cursor) {
super(cursor);
@ -596,18 +596,18 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
retweeted_by_user_name = cursor.getColumnIndex(Statuses.RETWEETED_BY_USER_NAME);
retweeted_by_user_screen_name = cursor.getColumnIndex(Statuses.RETWEETED_BY_USER_SCREEN_NAME);
retweeted_by_user_profile_image = cursor.getColumnIndex(Statuses.RETWEETED_BY_USER_PROFILE_IMAGE);
quote_id = cursor.getColumnIndex(Statuses.QUOTE_ID);
quote_text_html = cursor.getColumnIndex(Statuses.QUOTE_TEXT_HTML);
quote_text_plain = cursor.getColumnIndex(Statuses.QUOTE_TEXT_PLAIN);
quote_text_unescaped = cursor.getColumnIndex(Statuses.QUOTE_TEXT_UNESCAPED);
quote_timestamp = cursor.getColumnIndex(Statuses.QUOTE_TIMESTAMP);
quote_source = cursor.getColumnIndex(Statuses.QUOTE_SOURCE);
quoted_by_user_id = cursor.getColumnIndex(Statuses.QUOTED_BY_USER_ID);
quoted_by_user_name = cursor.getColumnIndex(Statuses.QUOTED_BY_USER_NAME);
quoted_by_user_screen_name = cursor.getColumnIndex(Statuses.QUOTED_BY_USER_SCREEN_NAME);
quoted_by_user_profile_image = cursor.getColumnIndex(Statuses.QUOTED_BY_USER_PROFILE_IMAGE);
quoted_by_user_is_protected = cursor.getColumnIndex(Statuses.QUOTED_BY_USER_IS_PROTECTED);
quoted_by_user_is_verified = cursor.getColumnIndex(Statuses.QUOTED_BY_USER_IS_VERIFIED);
quoted_id = cursor.getColumnIndex(Statuses.QUOTED_ID);
quoted_text_html = cursor.getColumnIndex(Statuses.QUOTED_TEXT_HTML);
quoted_text_plain = cursor.getColumnIndex(Statuses.QUOTED_TEXT_PLAIN);
quoted_text_unescaped = cursor.getColumnIndex(Statuses.QUOTED_TEXT_UNESCAPED);
quoted_timestamp = cursor.getColumnIndex(Statuses.QUOTED_TIMESTAMP);
quoted_source = cursor.getColumnIndex(Statuses.QUOTED_SOURCE);
quoted_user_id = cursor.getColumnIndex(Statuses.QUOTED_USER_ID);
quoted_user_name = cursor.getColumnIndex(Statuses.QUOTED_USER_NAME);
quoted_user_screen_name = cursor.getColumnIndex(Statuses.QUOTED_USER_SCREEN_NAME);
quoted_user_profile_image = cursor.getColumnIndex(Statuses.QUOTED_USER_PROFILE_IMAGE);
quoted_user_is_protected = cursor.getColumnIndex(Statuses.QUOTED_USER_IS_PROTECTED);
quoted_user_is_verified = cursor.getColumnIndex(Statuses.QUOTED_USER_IS_VERIFIED);
user_id = cursor.getColumnIndex(Statuses.USER_ID);
source = cursor.getColumnIndex(Statuses.SOURCE);
retweet_count = cursor.getColumnIndex(Statuses.RETWEET_COUNT);
@ -617,7 +617,7 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
is_following = cursor.getColumnIndex(Statuses.IS_FOLLOWING);
media = cursor.getColumnIndex(Statuses.MEDIA_JSON);
mentions = cursor.getColumnIndex(Statuses.MENTIONS_JSON);
quote_media = cursor.getColumnIndex(Statuses.QUOTE_MEDIA_JSON);
quoted_media = cursor.getColumnIndex(Statuses.QUOTED_MEDIA_JSON);
card = cursor.getColumnIndex(Statuses.CARD);
card_name = cursor.getColumnIndex(Statuses.CARD_NAME);
place_full_name = cursor.getColumnIndex(Statuses.PLACE_FULL_NAME);
@ -628,7 +628,7 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
final long time = System.currentTimeMillis();
final ParcelableStatus status = new ParcelableStatus(cursor, this);
TwitterContentUtils.checkTime(status.timestamp, time);
TwitterContentUtils.checkTime(status.quote_timestamp, time);
TwitterContentUtils.checkTime(status.quoted_timestamp, time);
TwitterContentUtils.checkTime(status.retweet_timestamp, time);
return status;
}
@ -672,27 +672,25 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
", is_following=" + is_following +
", media=" + media +
", mentions=" + mentions +
", quote_media=" + quote_media +
", quoted_media=" + quoted_media +
", card_name=" + card_name +
", card=" + card +
", place_full_name=" + place_full_name +
", is_quote=" + is_quote +
", quote_id=" + quote_id +
", quote_text_html=" + quote_text_html +
", quote_text_plain=" + quote_text_plain +
", quote_text_unescaped=" + quote_text_unescaped +
", quote_timestamp=" + quote_timestamp +
", quote_source=" + quote_source +
", quoted_by_user_id=" + quoted_by_user_id +
", quoted_by_user_name=" + quoted_by_user_name +
", quoted_by_user_screen_name=" + quoted_by_user_screen_name +
", quoted_by_user_profile_image=" + quoted_by_user_profile_image +
", quoted_by_user_is_protected=" + quoted_by_user_is_protected +
", quoted_by_user_is_verified=" + quoted_by_user_is_verified +
'}';
", quoted_id=" + quoted_id +
", quoted_text_html=" + quoted_text_html +
", quoted_text_plain=" + quoted_text_plain +
", quoted_text_unescaped=" + quoted_text_unescaped +
", quoted_timestamp=" + quoted_timestamp +
", quoted_source=" + quoted_source +
", quoted_user_id=" + quoted_user_id +
", quoted_user_name=" + quoted_user_name +
", quoted_user_screen_name=" + quoted_user_screen_name +
", quoted_user_profile_image=" + quoted_user_profile_image +
", quoted_user_is_protected=" + quoted_user_is_protected +
", quoted_user_is_verified=" + quoted_user_is_verified +
"} " + super.toString();
}
}
@JsonObject

View File

@ -794,31 +794,31 @@ public interface TwidereDataStore {
String DEFAULT_SORT_ORDER = SORT_ORDER_TIMESTAMP_DESC;
String QUOTE_ID = "quote_id";
String QUOTE_TEXT_HTML = "quote_text_html";
String QUOTE_TEXT_PLAIN = "quote_text_plain";
String QUOTE_TEXT_UNESCAPED = "quote_text_unescaped";
String QUOTE_MEDIA_JSON = "quote_media_json";
String QUOTE_TIMESTAMP = "quote_timestamp";
String QUOTE_SOURCE = "quote_source";
String QUOTED_BY_USER_ID = "quoted_by_user_id";
String QUOTED_BY_USER_NAME = "quoted_by_user_name";
String QUOTED_BY_USER_SCREEN_NAME = "quoted_by_user_screen_name";
String QUOTED_BY_USER_PROFILE_IMAGE = "quoted_by_user_profile_image";
String QUOTED_BY_USER_IS_VERIFIED = "quoted_by_user_is_verified";
String QUOTED_BY_USER_IS_PROTECTED = "quoted_by_user_is_protected";
String QUOTED_ID = "quoted_id";
String QUOTED_TEXT_HTML = "quoted_text_html";
String QUOTED_TEXT_PLAIN = "quoted_text_plain";
String QUOTED_TEXT_UNESCAPED = "quoted_text_unescaped";
String QUOTED_MEDIA_JSON = "quoted_media_json";
String QUOTED_TIMESTAMP = "quoted_timestamp";
String QUOTED_SOURCE = "quoted_source";
String QUOTED_USER_ID = "quoted_user_id";
String QUOTED_USER_NAME = "quoted_user_name";
String QUOTED_USER_SCREEN_NAME = "quoted_user_screen_name";
String QUOTED_USER_PROFILE_IMAGE = "quoted_user_profile_image";
String QUOTED_USER_IS_VERIFIED = "quoted_user_is_verified";
String QUOTED_USER_IS_PROTECTED = "quoted_user_is_protected";
String[] COLUMNS = {_ID, ACCOUNT_ID, STATUS_ID, USER_ID,
STATUS_TIMESTAMP, TEXT_HTML, TEXT_PLAIN, TEXT_UNESCAPED, USER_NAME, USER_SCREEN_NAME,
USER_PROFILE_IMAGE_URL, IN_REPLY_TO_STATUS_ID, IN_REPLY_TO_USER_ID, IN_REPLY_TO_USER_NAME,
IN_REPLY_TO_USER_SCREEN_NAME, SOURCE, LOCATION, RETWEET_COUNT, FAVORITE_COUNT, REPLY_COUNT,
RETWEET_ID, RETWEET_TIMESTAMP, RETWEETED_BY_USER_ID, RETWEETED_BY_USER_NAME,
RETWEETED_BY_USER_SCREEN_NAME, RETWEETED_BY_USER_PROFILE_IMAGE, QUOTE_ID, QUOTE_TEXT_HTML,
QUOTE_TEXT_PLAIN, QUOTE_TEXT_UNESCAPED, QUOTE_TIMESTAMP, QUOTE_SOURCE, QUOTED_BY_USER_ID,
QUOTED_BY_USER_NAME, QUOTED_BY_USER_SCREEN_NAME, QUOTED_BY_USER_PROFILE_IMAGE,
QUOTED_BY_USER_IS_VERIFIED, QUOTED_BY_USER_IS_PROTECTED, MY_RETWEET_ID, IS_RETWEET,
RETWEETED_BY_USER_SCREEN_NAME, RETWEETED_BY_USER_PROFILE_IMAGE, QUOTED_ID, QUOTED_TEXT_HTML,
QUOTED_TEXT_PLAIN, QUOTED_TEXT_UNESCAPED, QUOTED_TIMESTAMP, QUOTED_SOURCE, QUOTED_USER_ID,
QUOTED_USER_NAME, QUOTED_USER_SCREEN_NAME, QUOTED_USER_PROFILE_IMAGE,
QUOTED_USER_IS_VERIFIED, QUOTED_USER_IS_PROTECTED, MY_RETWEET_ID, IS_RETWEET,
IS_QUOTE, IS_FAVORITE, IS_PROTECTED, IS_VERIFIED, IS_FOLLOWING, IS_GAP,
IS_POSSIBLY_SENSITIVE, MEDIA_JSON, MENTIONS_JSON, QUOTE_MEDIA_JSON, CARD_NAME, CARD,
IS_POSSIBLY_SENSITIVE, MEDIA_JSON, MENTIONS_JSON, QUOTED_MEDIA_JSON, CARD_NAME, CARD,
PLACE_FULL_NAME};
String[] TYPES = {TYPE_PRIMARY_KEY, TYPE_INT, TYPE_INT,
@ -839,7 +839,7 @@ public interface TwidereDataStore {
String TIMESTAMP = "timestamp";
String STATUS_USER_ID = "status_user_id";
String STATUS_RETWEETED_BY_USER_ID = "status_retweeted_by_user_id";
String STATUS_QUOTED_BY_USER_ID = "status_quoted_by_user_id";
String STATUS_QUOTED_USER_ID = "status_quoted_user_id";
String STATUS_SOURCE = "status_source";
String STATUS_QUOTE_SOURCE = "status_quote_source";
String STATUS_TEXT_PLAIN = "status_text_plain";

View File

@ -346,31 +346,31 @@ public final class ContentValuesCreator implements TwidereConstants {
}
status = retweetedStatus;
} else if (orig.isQuote()) {
final Status quotedStatus = orig.getQuotedStatus();
final User quoteUser = orig.getUser();
final long quotedById = quoteUser.getId();
values.put(Statuses.QUOTE_ID, quotedStatus.getId());
final String textHtml = TwitterContentUtils.formatStatusText(orig);
values.put(Statuses.QUOTE_TEXT_HTML, textHtml);
values.put(Statuses.QUOTE_TEXT_PLAIN, TwitterContentUtils.unescapeTwitterStatusText(orig.getText()));
values.put(Statuses.QUOTE_TEXT_UNESCAPED, toPlainText(textHtml));
values.put(Statuses.QUOTE_TIMESTAMP, orig.getCreatedAt().getTime());
values.put(Statuses.QUOTE_SOURCE, orig.getSource());
final ParcelableMedia[] quoteMedia = ParcelableMedia.fromStatus(orig);
final Status quoted = orig.getQuotedStatus();
final User quotedUser = quoted.getUser();
final long quotedById = quotedUser.getId();
values.put(Statuses.QUOTED_ID, quoted.getId());
final String textHtml = TwitterContentUtils.formatStatusText(quoted);
values.put(Statuses.QUOTED_TEXT_HTML, textHtml);
values.put(Statuses.QUOTED_TEXT_PLAIN, TwitterContentUtils.unescapeTwitterStatusText(quoted.getText()));
values.put(Statuses.QUOTED_TEXT_UNESCAPED, toPlainText(textHtml));
values.put(Statuses.QUOTED_TIMESTAMP, quoted.getCreatedAt().getTime());
values.put(Statuses.QUOTED_SOURCE, quoted.getSource());
final ParcelableMedia[] quoteMedia = ParcelableMedia.fromStatus(quoted);
if (quoteMedia != null && quoteMedia.length > 0) {
try {
values.put(Statuses.QUOTE_MEDIA_JSON, LoganSquare.serialize(Arrays.asList(quoteMedia), ParcelableMedia.class));
values.put(Statuses.QUOTED_MEDIA_JSON, LoganSquare.serialize(Arrays.asList(quoteMedia), ParcelableMedia.class));
} catch (IOException ignored) {
}
}
values.put(Statuses.QUOTED_BY_USER_ID, quotedById);
values.put(Statuses.QUOTED_BY_USER_NAME, quoteUser.getName());
values.put(Statuses.QUOTED_BY_USER_SCREEN_NAME, quoteUser.getScreenName());
values.put(Statuses.QUOTED_BY_USER_PROFILE_IMAGE, TwitterContentUtils.getProfileImageUrl(quoteUser));
values.put(Statuses.QUOTED_BY_USER_IS_VERIFIED, quoteUser.isVerified());
values.put(Statuses.QUOTED_BY_USER_IS_PROTECTED, quoteUser.isProtected());
values.put(Statuses.QUOTED_USER_ID, quotedById);
values.put(Statuses.QUOTED_USER_NAME, quotedUser.getName());
values.put(Statuses.QUOTED_USER_SCREEN_NAME, quotedUser.getScreenName());
values.put(Statuses.QUOTED_USER_PROFILE_IMAGE, TwitterContentUtils.getProfileImageUrl(quotedUser));
values.put(Statuses.QUOTED_USER_IS_VERIFIED, quotedUser.isVerified());
values.put(Statuses.QUOTED_USER_IS_PROTECTED, quotedUser.isProtected());
values.put(Statuses.IS_QUOTE, true);
status = quotedStatus;
status = orig;
} else {
values.put(Statuses.MY_RETWEET_ID, orig.getCurrentUserRetweet());
status = orig;
@ -498,7 +498,7 @@ public final class ContentValuesCreator implements TwidereConstants {
values.put(Activities.STATUS_QUOTE_TEXT_HTML, textHtml);
values.put(Activities.STATUS_QUOTE_TEXT_PLAIN, TwitterContentUtils.unescapeTwitterStatusText(orig.getText()));
values.put(Activities.STATUS_QUOTE_SOURCE, orig.getSource());
values.put(Activities.STATUS_QUOTED_BY_USER_ID, quotedById);
values.put(Activities.STATUS_QUOTED_USER_ID, quotedById);
status = quotedStatus;
} else {
status = orig;

View File

@ -33,7 +33,7 @@ import static org.mariotaku.twidere.annotation.Preference.Type.STRING;
public interface Constants extends TwidereConstants {
String DATABASES_NAME = "twidere.sqlite";
int DATABASES_VERSION = 107;
int DATABASES_VERSION = 109;
int MENU_GROUP_STATUS_EXTENSION = 10;
int MENU_GROUP_COMPOSE_EXTENSION = 11;

View File

@ -19,6 +19,7 @@
package org.mariotaku.twidere.activity.support;
import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
@ -29,6 +30,7 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.PorterDuff.Mode;
@ -46,6 +48,7 @@ import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.content.ContextCompat;
import android.support.v4.util.LongSparseArray;
import android.support.v7.internal.view.SupportMenuInflater;
import android.support.v7.widget.ActionMenuView;
@ -300,7 +303,10 @@ public class ComposeActivity extends ThemedFragmentActivity implements LocationL
@Override
protected void onStop() {
saveAccountSelection();
mLocationManager.removeUpdates(this);
if (ContextCompat.checkSelfPermission(this, Manifest.permission_group.LOCATION)
== PackageManager.PERMISSION_GRANTED) {
mLocationManager.removeUpdates(this);
}
super.onStop();
}
@ -944,12 +950,7 @@ public class ComposeActivity extends ThemedFragmentActivity implements LocationL
private boolean handleQuoteIntent(final ParcelableStatus status) {
if (status == null || status.id <= 0) return false;
if (status.is_quote) {
mEditText.setText(Utils.getQuoteStatus(this, status.quote_id, status.quoted_by_user_screen_name,
status.quote_text_plain));
} else {
mEditText.setText(Utils.getQuoteStatus(this, status.id, status.user_screen_name, status.text_plain));
}
mEditText.setText(Utils.getQuoteStatus(this, status.id, status.user_screen_name, status.text_plain));
mEditText.setSelection(0);
mAccountsAdapter.setSelectedAccountIds(status.account_id);
return true;
@ -960,14 +961,8 @@ public class ComposeActivity extends ThemedFragmentActivity implements LocationL
final String myScreenName = Utils.getAccountScreenName(this, status.account_id);
if (TextUtils.isEmpty(myScreenName)) return false;
int selectionStart = 0;
if (status.is_quote) {
mEditText.append("@" + status.quoted_by_user_screen_name + " ");
selectionStart = mEditText.length();
}
mEditText.append("@" + status.user_screen_name + " ");
if (!status.is_quote) {
selectionStart = mEditText.length();
}
selectionStart = mEditText.length();
if (status.is_retweet) {
mEditText.append("@" + status.retweeted_by_user_screen_name + " ");
}

View File

@ -400,12 +400,7 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentRecyclerViewFr
final Bundle options = Utils.makeSceneTransitionOption(activity,
new Pair<>(profileImageView, UserFragment.TRANSITION_NAME_PROFILE_IMAGE),
new Pair<>(profileTypeView, UserFragment.TRANSITION_NAME_PROFILE_TYPE));
if (status.is_quote) {
Utils.openUserProfile(activity, status.account_id, status.quoted_by_user_id,
status.quoted_by_user_screen_name, options);
} else {
Utils.openUserProfile(activity, status.account_id, status.user_id, status.user_screen_name, options);
}
Utils.openUserProfile(activity, status.account_id, status.user_id, status.user_screen_name, options);
}
@Override

View File

@ -19,7 +19,6 @@
package org.mariotaku.twidere.fragment.support;
import android.support.v7.app.AlertDialog;
import android.app.Dialog;
import android.content.ContentResolver;
import android.content.ContentValues;
@ -30,6 +29,7 @@ import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AlertDialog;
import com.twitter.Extractor;
@ -157,8 +157,8 @@ public class AddStatusFilterDialogFragment extends BaseSupportDialogFragment imp
status.retweeted_by_user_name, status.retweeted_by_user_screen_name)));
}
if (status.is_quote) {
list.add(new FilterItemInfo(FilterItemInfo.FILTER_TYPE_USER, new UserItem(status.quoted_by_user_id,
status.quoted_by_user_name, status.quoted_by_user_screen_name)));
list.add(new FilterItemInfo(FilterItemInfo.FILTER_TYPE_USER, new UserItem(status.quoted_user_id,
status.quoted_user_name, status.quoted_user_screen_name)));
}
list.add(new FilterItemInfo(FilterItemInfo.FILTER_TYPE_USER, new UserItem(status.user_id,
status.user_name, status.user_screen_name)));

View File

@ -180,7 +180,7 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem
mPopupMenu.inflate(R.menu.menu_dialog_comment);
final Menu menu = mPopupMenu.getMenu();
MenuUtils.setMenuItemAvailability(menu, R.id.quote_original_status,
status.retweet_id > 0 || status.quote_id > 0);
status.retweet_id > 0 || status.quoted_id > 0);
mPopupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
@ -208,15 +208,12 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem
final MenuItem linkToQuotedStatus = menu.findItem(R.id.link_to_quoted_status);
final Uri statusLink;
final long inReplyToStatusId;
if (!status.is_quote) {
if (!status.is_quote || !quoteOriginalStatus.isChecked()) {
inReplyToStatusId = status.id;
statusLink = LinkCreator.getTwitterStatusLink(status.user_screen_name, status.id);
} else if (quoteOriginalStatus.isChecked()) {
inReplyToStatusId = status.quote_id;
statusLink = LinkCreator.getTwitterStatusLink(status.user_screen_name, status.quote_id);
} else {
inReplyToStatusId = status.id;
statusLink = LinkCreator.getTwitterStatusLink(status.quoted_by_user_screen_name, status.id);
inReplyToStatusId = status.quoted_id;
statusLink = LinkCreator.getTwitterStatusLink(status.quoted_user_screen_name, status.quoted_id);
}
final String commentText = mEditComment.getText() + " " + statusLink;
twitter.updateStatusAsync(new long[]{status.account_id}, commentText, null, null,

View File

@ -70,6 +70,7 @@ import android.widget.ImageView;
import android.widget.Space;
import android.widget.TextView;
import org.apache.commons.lang3.ArrayUtils;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.activity.support.ColorPickerDialogActivity;
import org.mariotaku.twidere.adapter.AbsStatusesAdapter.StatusAdapterListener;
@ -573,7 +574,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
private final ActionMenuView menuBar;
private final TextView nameView, screenNameView;
private final StatusTextView textView;
private final TextView quoteTextView;
private final TextView quotedTextView;
private final TextView quotedNameView, quotedScreenNameView;
private final ImageView profileImageView;
private final ImageView profileTypeView;
@ -623,7 +624,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
profileContainer = (ColorLabelRelativeLayout) itemView.findViewById(R.id.profile_container);
twitterCard = (TwitterCardContainer) itemView.findViewById(R.id.twitter_card);
quoteTextView = (TextView) itemView.findViewById(R.id.quote_text);
quotedTextView = (TextView) itemView.findViewById(R.id.quoted_text);
quotedNameView = (TextView) itemView.findViewById(R.id.quoted_name);
quotedScreenNameView = (TextView) itemView.findViewById(R.id.quoted_screen_name);
quotedNameContainer = itemView.findViewById(R.id.quoted_name_container);
@ -655,63 +656,48 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
profileContainer.drawEnd(Utils.getAccountColor(context, status.account_id));
final int typeIconRes, typeDescriptionRes;
final long timestamp;
final String source;
final int layoutPosition = getLayoutPosition();
if (status.is_quote) {
quotedNameView.setText(manager.getUserNickname(status.user_id, status.user_name, false));
quotedScreenNameView.setText("@" + status.user_screen_name);
nameView.setText(manager.getUserNickname(status.quoted_by_user_id, status.quoted_by_user_name, false));
screenNameView.setText("@" + status.quoted_by_user_screen_name);
quoteTextView.setText(Html.fromHtml(status.quote_text_html));
linkify.applyAllLinks(quoteTextView, status.account_id, layoutPosition, status.is_possibly_sensitive);
ThemeUtils.applyParagraphSpacing(quoteTextView, 1.1f);
loader.displayProfileImage(profileImageView, status.quoted_by_user_profile_image);
if (status.is_quote && ArrayUtils.isEmpty(status.media)) {
quoteOriginalLink.setVisibility(View.VISIBLE);
quotedNameContainer.setVisibility(View.VISIBLE);
quoteTextView.setVisibility(View.VISIBLE);
quotedTextView.setVisibility(View.VISIBLE);
quoteIndicator.setVisibility(View.VISIBLE);
quotedNameView.setText(manager.getUserNickname(status.quoted_user_id, status.quoted_user_name, false));
quotedScreenNameView.setText("@" + status.quoted_user_screen_name);
quotedTextView.setText(Html.fromHtml(status.quoted_text_html));
linkify.applyAllLinks(quotedTextView, status.account_id, layoutPosition, status.is_possibly_sensitive);
ThemeUtils.applyParagraphSpacing(quotedTextView, 1.1f);
quoteIndicator.setColor(manager.getUserColor(status.user_id, false));
profileContainer.drawStart(manager.getUserColor(status.quoted_by_user_id, false));
typeIconRes = Utils.getUserTypeIconRes(status.quoted_by_user_is_verified, status.quoted_by_user_is_protected);
typeDescriptionRes = Utils.getUserTypeDescriptionRes(status.quoted_by_user_is_verified,
status.quoted_by_user_is_protected);
timestamp = status.quote_timestamp;
source = status.quote_source;
profileContainer.drawStart(manager.getUserColor(status.quoted_user_id, false));
} else {
nameView.setText(manager.getUserNickname(status.user_id, status.user_name, false));
screenNameView.setText("@" + status.user_screen_name);
loader.displayProfileImage(profileImageView, status.user_profile_image_url);
quoteOriginalLink.setVisibility(View.GONE);
quotedNameContainer.setVisibility(View.GONE);
quoteTextView.setVisibility(View.GONE);
quotedTextView.setVisibility(View.GONE);
quoteIndicator.setVisibility(View.GONE);
profileContainer.drawStart(manager.getUserColor(status.user_id, false));
typeIconRes = Utils.getUserTypeIconRes(status.user_is_verified, status.user_is_protected);
typeDescriptionRes = Utils.getUserTypeDescriptionRes(status.user_is_verified, status.user_is_protected);
if (status.is_retweet) {
timestamp = status.retweet_timestamp;
} else {
timestamp = status.timestamp;
}
source = status.source;
}
final long timestamp;
if (status.is_retweet) {
timestamp = status.retweet_timestamp;
} else {
timestamp = status.timestamp;
}
nameView.setText(manager.getUserNickname(status.user_id, status.user_name, false));
screenNameView.setText("@" + status.user_screen_name);
loader.displayProfileImage(profileImageView, status.user_profile_image_url);
final int typeIconRes = Utils.getUserTypeIconRes(status.user_is_verified, status.user_is_protected);
final int typeDescriptionRes = Utils.getUserTypeDescriptionRes(status.user_is_verified, status.user_is_protected);
if (typeIconRes != 0 && typeDescriptionRes != 0) {
profileTypeView.setImageResource(typeIconRes);
profileTypeView.setContentDescription(context.getString(typeDescriptionRes));
@ -723,11 +709,11 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
}
final String timeString = Utils.formatToLongTimeString(context, timestamp);
if (!TextUtils.isEmpty(timeString) && !TextUtils.isEmpty(source)) {
timeSourceView.setText(Html.fromHtml(context.getString(R.string.time_source, timeString, source)));
} else if (TextUtils.isEmpty(timeString) && !TextUtils.isEmpty(source)) {
timeSourceView.setText(Html.fromHtml(context.getString(R.string.source, source)));
} else if (!TextUtils.isEmpty(timeString) && TextUtils.isEmpty(source)) {
if (!TextUtils.isEmpty(timeString) && !TextUtils.isEmpty(status.source)) {
timeSourceView.setText(Html.fromHtml(context.getString(R.string.time_source, timeString, status.source)));
} else if (TextUtils.isEmpty(timeString) && !TextUtils.isEmpty(status.source)) {
timeSourceView.setText(Html.fromHtml(context.getString(R.string.source, status.source)));
} else if (!TextUtils.isEmpty(timeString) && TextUtils.isEmpty(status.source)) {
timeSourceView.setText(timeString);
}
timeSourceView.setMovementMethod(LinkMovementMethod.getInstance());
@ -800,10 +786,10 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
Utils.setMenuForStatus(context, menuBar.getMenu(), status, adapter.getStatusAccount());
textView.setTextIsSelectable(true);
quoteTextView.setTextIsSelectable(true);
quotedTextView.setTextIsSelectable(true);
textView.setMovementMethod(ArrowKeyMovementMethod.getInstance());
quoteTextView.setMovementMethod(ArrowKeyMovementMethod.getInstance());
quotedTextView.setMovementMethod(ArrowKeyMovementMethod.getInstance());
}
@Override
@ -826,13 +812,8 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
final Bundle activityOption = Utils.makeSceneTransitionOption(activity,
new Pair<View, String>(profileImageView, UserFragment.TRANSITION_NAME_PROFILE_IMAGE),
new Pair<View, String>(profileTypeView, UserFragment.TRANSITION_NAME_PROFILE_TYPE));
if (status.is_quote) {
Utils.openUserProfile(adapter.getContext(), status.account_id, status.quoted_by_user_id,
status.quoted_by_user_screen_name, activityOption);
} else {
Utils.openUserProfile(activity, status.account_id, status.user_id, status.user_screen_name,
activityOption);
}
Utils.openUserProfile(activity, status.account_id, status.user_id, status.user_screen_name,
activityOption);
break;
}
case R.id.retweets_container: {
@ -864,12 +845,12 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
break;
}
case R.id.quoted_name_container: {
Utils.openUserProfile(adapter.getContext(), status.account_id, status.user_id,
status.user_screen_name, null);
Utils.openUserProfile(adapter.getContext(), status.account_id, status.quoted_user_id,
status.quoted_user_screen_name, null);
break;
}
case R.id.quote_original_link: {
Utils.openStatus(adapter.getContext(), status.account_id, status.quote_id);
Utils.openStatus(adapter.getContext(), status.account_id, status.quoted_id);
}
}
}
@ -912,7 +893,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
nameView.setTextSize(defaultTextSize * 1.25f);
quotedNameView.setTextSize(defaultTextSize * 1.25f);
textView.setTextSize(defaultTextSize * 1.25f);
quoteTextView.setTextSize(defaultTextSize * 1.25f);
quotedTextView.setTextSize(defaultTextSize * 1.25f);
screenNameView.setTextSize(defaultTextSize * 0.85f);
quotedScreenNameView.setTextSize(defaultTextSize * 0.85f);
locationView.setTextSize(defaultTextSize * 0.85f);
@ -920,7 +901,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
mediaPreview.setStyle(adapter.getMediaPreviewStyle());
quoteTextView.setCustomSelectionActionModeCallback(new StatusActionModeCallback(quoteTextView, activity));
quotedTextView.setCustomSelectionActionModeCallback(new StatusActionModeCallback(quotedTextView, activity));
textView.setCustomSelectionActionModeCallback(new StatusActionModeCallback(textView, activity));
}

View File

@ -547,7 +547,7 @@ public final class Utils implements Constants {
final Expression filteredUsersWhere = Expression.or(
Expression.in(new Column(new Table(table), Statuses.USER_ID), filteredUsersQuery),
Expression.in(new Column(new Table(table), Statuses.RETWEETED_BY_USER_ID), filteredUsersQuery),
Expression.in(new Column(new Table(table), Statuses.QUOTED_BY_USER_ID), filteredUsersQuery)
Expression.in(new Column(new Table(table), Statuses.QUOTED_USER_ID), filteredUsersQuery)
);
final SQLSelectQuery.Builder filteredIdsQueryBuilder = SQLQueryBuilder
.select(true, new Column(new Table(table), Statuses._ID))
@ -559,7 +559,7 @@ public final class Utils implements Constants {
.where(Expression.or(
Expression.likeRaw(new Column(new Table(table), Statuses.SOURCE),
"'%>'||" + Filters.Sources.TABLE_NAME + "." + Filters.Sources.VALUE + "||'</a>%'"),
Expression.likeRaw(new Column(new Table(table), Statuses.QUOTE_SOURCE),
Expression.likeRaw(new Column(new Table(table), Statuses.QUOTED_SOURCE),
"'%>'||" + Filters.Sources.TABLE_NAME + "." + Filters.Sources.VALUE + "||'</a>%'")
))
.union()
@ -568,7 +568,7 @@ public final class Utils implements Constants {
.where(Expression.or(
Expression.likeRaw(new Column(new Table(table), Statuses.TEXT_PLAIN),
"'%'||" + Filters.Keywords.TABLE_NAME + "." + Filters.Keywords.VALUE + "||'%'"),
Expression.likeRaw(new Column(new Table(table), Statuses.QUOTE_TEXT_PLAIN),
Expression.likeRaw(new Column(new Table(table), Statuses.QUOTED_TEXT_PLAIN),
"'%'||" + Filters.Keywords.TABLE_NAME + "." + Filters.Keywords.VALUE + "||'%'")
))
.union()
@ -577,7 +577,7 @@ public final class Utils implements Constants {
.where(Expression.or(
Expression.likeRaw(new Column(new Table(table), Statuses.TEXT_HTML),
"'%>%'||" + Filters.Links.TABLE_NAME + "." + Filters.Links.VALUE + "||'%</a>%'"),
Expression.likeRaw(new Column(new Table(table), Statuses.QUOTE_TEXT_HTML),
Expression.likeRaw(new Column(new Table(table), Statuses.QUOTED_TEXT_HTML),
"'%>%'||" + Filters.Links.TABLE_NAME + "." + Filters.Links.VALUE + "||'%</a>%'")
));
final Expression filterExpression = Expression.or(
@ -599,7 +599,7 @@ public final class Utils implements Constants {
final Expression filteredUsersWhere = Expression.or(
Expression.in(new Column(new Table(table), Activities.STATUS_USER_ID), filteredUsersQuery),
Expression.in(new Column(new Table(table), Activities.STATUS_RETWEETED_BY_USER_ID), filteredUsersQuery),
Expression.in(new Column(new Table(table), Activities.STATUS_QUOTED_BY_USER_ID), filteredUsersQuery)
Expression.in(new Column(new Table(table), Activities.STATUS_QUOTED_USER_ID), filteredUsersQuery)
);
final SQLSelectQuery.Builder filteredIdsQueryBuilder = SQLQueryBuilder
.select(true, new Column(new Table(table), Activities._ID))
@ -3356,7 +3356,7 @@ public final class Utils implements Constants {
private static boolean isMyStatus(ParcelableStatus status) {
if (isMyRetweet(status)) return true;
if (status.is_quote) {
return status.account_id == status.quoted_by_user_id;
return status.account_id == status.quoted_user_id;
}
return status.account_id == status.user_id;
}

View File

@ -13,6 +13,7 @@ import android.view.View.OnLongClickListener;
import android.widget.ImageView;
import android.widget.TextView;
import org.apache.commons.lang3.ArrayUtils;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.adapter.iface.ContentCardClickListener;
@ -58,7 +59,7 @@ public class StatusViewHolder extends ViewHolder implements Constants, OnClickLi
private final ImageView profileTypeView;
private final ImageView extraTypeView;
private final TextView textView;
private final TextView quoteTextView;
private final TextView quotedTextView;
private final NameView nameView;
private final NameView quotedNameView;
private final TextView replyRetweetView;
@ -80,7 +81,7 @@ public class StatusViewHolder extends ViewHolder implements Constants, OnClickLi
profileTypeView = (ImageView) itemView.findViewById(R.id.profile_type);
extraTypeView = (ImageView) itemView.findViewById(R.id.extra_type);
textView = (TextView) itemView.findViewById(R.id.text);
quoteTextView = (TextView) itemView.findViewById(R.id.quote_text);
quotedTextView = (TextView) itemView.findViewById(R.id.quoted_text);
nameView = (NameView) itemView.findViewById(R.id.name);
quotedNameView = (NameView) itemView.findViewById(R.id.quoted_name);
replyRetweetIcon = (ImageView) itemView.findViewById(R.id.reply_retweet_icon);
@ -160,76 +161,36 @@ public class StatusViewHolder extends ViewHolder implements Constants, OnClickLi
replyRetweetIcon.setVisibility(View.GONE);
}
final int typeIconRes;
if (status.is_quote) {
quotedNameView.setName(manager.getUserNickname(status.user_id, status.user_name, false));
quotedNameView.setScreenName("@" + status.user_screen_name);
timeView.setTime(status.quote_timestamp);
nameView.setName(manager.getUserNickname(status.quoted_by_user_id, status.quoted_by_user_name, false));
nameView.setScreenName("@" + status.quoted_by_user_screen_name);
if (translation != null) {
quoteTextView.setText(translation.getText());
} else if (adapter.getLinkHighlightingStyle() == VALUE_LINK_HIGHLIGHT_OPTION_CODE_NONE) {
final String text = status.quote_text_unescaped;
quoteTextView.setText(text);
} else {
final Spanned text = Html.fromHtml(status.quote_text_html);
quoteTextView.setText(text);
linkify.applyAllLinks(quoteTextView, status.account_id, getLayoutPosition(),
status.is_possibly_sensitive, adapter.getLinkHighlightingStyle());
quoteTextView.setMovementMethod(null);
}
if (status.is_quote && ArrayUtils.isEmpty(status.media)) {
quotedNameView.setVisibility(View.VISIBLE);
quoteTextView.setVisibility(View.VISIBLE);
quotedTextView.setVisibility(View.VISIBLE);
quoteIndicator.setVisibility(View.VISIBLE);
quoteIndicator.setColor(manager.getUserColor(status.user_id, false));
quotedNameView.setName(manager.getUserNickname(status.quoted_user_id, status.quoted_user_name, false));
quotedNameView.setScreenName("@" + status.quoted_user_screen_name);
if (adapter.isProfileImageEnabled()) {
profileTypeView.setVisibility(View.VISIBLE);
profileImageView.setVisibility(View.VISIBLE);
loader.displayProfileImage(profileImageView, status.quoted_by_user_profile_image);
typeIconRes = getUserTypeIconRes(status.quoted_by_user_is_verified, status.quoted_by_user_is_protected);
if (adapter.getLinkHighlightingStyle() == VALUE_LINK_HIGHLIGHT_OPTION_CODE_NONE) {
final String text = status.quoted_text_unescaped;
quotedTextView.setText(text);
} else {
profileTypeView.setVisibility(View.GONE);
profileImageView.setVisibility(View.GONE);
loader.cancelDisplayTask(profileImageView);
typeIconRes = 0;
final Spanned text = Html.fromHtml(status.quoted_text_html);
quotedTextView.setText(text);
linkify.applyAllLinks(quotedTextView, status.account_id, getLayoutPosition(),
status.is_possibly_sensitive, adapter.getLinkHighlightingStyle());
quotedTextView.setMovementMethod(null);
}
itemContent.drawStart(manager.getUserColor(status.quoted_by_user_id, false),
quoteIndicator.setColor(manager.getUserColor(status.user_id, false));
itemContent.drawStart(manager.getUserColor(status.quoted_user_id, false),
manager.getUserColor(status.user_id, false));
} else {
nameView.setName(manager.getUserNickname(status.user_id, status.user_name, false));
nameView.setScreenName("@" + status.user_screen_name);
if (status.is_retweet) {
timeView.setTime(status.retweet_timestamp);
} else {
timeView.setTime(status.timestamp);
}
quotedNameView.setVisibility(View.GONE);
quoteTextView.setVisibility(View.GONE);
quotedTextView.setVisibility(View.GONE);
quoteIndicator.setVisibility(View.GONE);
if (adapter.isProfileImageEnabled()) {
profileImageView.setVisibility(View.VISIBLE);
final String user_profile_image_url = status.user_profile_image_url;
loader.displayProfileImage(profileImageView, user_profile_image_url);
typeIconRes = getUserTypeIconRes(status.user_is_verified, status.user_is_protected);
} else {
profileTypeView.setVisibility(View.GONE);
profileImageView.setVisibility(View.GONE);
loader.cancelDisplayTask(profileImageView);
typeIconRes = 0;
}
if (status.is_retweet) {
itemContent.drawStart(manager.getUserColor(status.retweeted_by_user_id, false),
manager.getUserColor(status.user_id, false));
@ -238,28 +199,47 @@ public class StatusViewHolder extends ViewHolder implements Constants, OnClickLi
}
}
if (typeIconRes != 0) {
profileTypeView.setImageResource(typeIconRes);
if (status.is_retweet) {
timeView.setTime(status.retweet_timestamp);
} else {
timeView.setTime(status.timestamp);
}
nameView.setName(manager.getUserNickname(status.user_id, status.user_name, false));
nameView.setScreenName("@" + status.user_screen_name);
if (adapter.isProfileImageEnabled()) {
profileImageView.setVisibility(View.VISIBLE);
final String user_profile_image_url = status.user_profile_image_url;
loader.displayProfileImage(profileImageView, user_profile_image_url);
profileTypeView.setImageResource(getUserTypeIconRes(status.user_is_verified, status.user_is_protected));
profileTypeView.setVisibility(View.VISIBLE);
} else {
profileTypeView.setVisibility(View.GONE);
profileImageView.setVisibility(View.GONE);
loader.cancelDisplayTask(profileImageView);
profileTypeView.setImageDrawable(null);
profileTypeView.setVisibility(View.GONE);
}
if (adapter.shouldShowAccountsColor()) {
itemContent.drawEnd(Utils.getAccountColor(context, status.account_id));
} else {
itemContent.drawEnd();
}
final ParcelableMedia[] media = status.is_quote && ArrayUtils.isEmpty(status.media) ? status.quoted_media : status.media;
if (adapter.isMediaPreviewEnabled()) {
mediaPreview.setStyle(adapter.getMediaPreviewStyle());
final boolean hasMedia = status.media != null && status.media.length > 0;
final boolean hasMedia = media != null && media.length > 0;
if (hasMedia && (adapter.isSensitiveContentEnabled() || !status.is_possibly_sensitive)) {
mediaPreview.setVisibility(View.VISIBLE);
mediaPreview.displayMedia(status.media, loader, status.account_id, this,
mediaPreview.displayMedia(media, loader, status.account_id, this,
adapter.getMediaLoadingHandler());
} else {
mediaPreview.setVisibility(View.GONE);
@ -267,7 +247,7 @@ public class StatusViewHolder extends ViewHolder implements Constants, OnClickLi
} else {
mediaPreview.setVisibility(View.GONE);
}
if (!status.is_quote && translation != null) {
if (translation != null) {
textView.setText(translation.getText());
} else if (adapter.getLinkHighlightingStyle() == VALUE_LINK_HIGHLIGHT_OPTION_CODE_NONE) {
textView.setText(status.text_unescaped);
@ -314,7 +294,7 @@ public class StatusViewHolder extends ViewHolder implements Constants, OnClickLi
favoriteCountView.setText(null);
}
if (shouldDisplayExtraType) {
displayExtraTypeIcon(status.card_name, status.media, status.location, status.place_full_name,
displayExtraTypeIcon(status.card_name, media, status.location, status.place_full_name,
status.is_possibly_sensitive);
} else {
extraTypeView.setVisibility(View.GONE);
@ -322,7 +302,6 @@ public class StatusViewHolder extends ViewHolder implements Constants, OnClickLi
nameView.updateText();
quotedNameView.updateText();
}
public ImageView getProfileImageView() {
@ -398,7 +377,7 @@ public class StatusViewHolder extends ViewHolder implements Constants, OnClickLi
nameView.setPrimaryTextSize(textSize);
quotedNameView.setPrimaryTextSize(textSize);
textView.setTextSize(textSize);
quoteTextView.setTextSize(textSize);
quotedTextView.setTextSize(textSize);
nameView.setSecondaryTextSize(textSize * 0.85f);
quotedNameView.setSecondaryTextSize(textSize * 0.85f);
timeView.setTextSize(textSize * 0.85f);

View File

@ -18,10 +18,10 @@
-->
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<org.mariotaku.twidere.view.ColorLabelRelativeLayout
android:id="@+id/item_content"
@ -42,7 +42,7 @@
android:layout_marginEnd="@dimen/element_spacing_small"
android:layout_marginLeft="@dimen/element_spacing_normal"
android:layout_marginRight="@dimen/element_spacing_small"
android:layout_marginStart="@dimen/element_spacing_normal"/>
android:layout_marginStart="@dimen/element_spacing_normal" />
<org.mariotaku.twidere.view.ActionIconView
android:id="@+id/reply_retweet_icon"
@ -59,7 +59,7 @@
android:scaleType="centerInside"
android:visibility="gone"
tools:src="@drawable/ic_activity_action_retweet"
tools:visibility="visible"/>
tools:visibility="visible" />
<org.mariotaku.twidere.view.themed.ThemedTextView
android:id="@+id/reply_retweet_status"
@ -76,7 +76,7 @@
android:textAppearance="?android:attr/textAppearanceSmall"
android:visibility="gone"
tools:text="Mariotaku and 10 others retweeted"
tools:visibility="visible"/>
tools:visibility="visible" />
<RelativeLayout
android:id="@+id/profile_container"
@ -101,7 +101,7 @@
android:layout_marginRight="@dimen/element_spacing_small"
android:layout_marginTop="@dimen/element_spacing_small"
android:contentDescription="@string/profile_image"
android:scaleType="centerCrop"/>
android:scaleType="centerCrop" />
<org.mariotaku.twidere.view.BoundsImageView
android:id="@+id/profile_type"
@ -110,7 +110,7 @@
android:layout_alignBottom="@id/profile_image"
android:layout_alignEnd="@id/profile_image"
android:layout_alignRight="@id/profile_image"
android:scaleType="fitCenter"/>
android:scaleType="fitCenter" />
<LinearLayout
android:layout_width="match_parent"
@ -133,7 +133,7 @@
android:orientation="horizontal"
app:nv_primaryTextColor="?android:textColorPrimary"
app:nv_primaryTextStyle="bold"
app:nv_secondaryTextColor="?android:textColorSecondary"/>
app:nv_secondaryTextColor="?android:textColorSecondary" />
<org.mariotaku.twidere.view.ShortTimeView
android:id="@+id/time"
@ -144,7 +144,7 @@
android:singleLine="true"
android:textAppearance="?android:textAppearanceSmall"
tools:text="10 mins ago"
tools:textSize="@dimen/text_size_extra_small"/>
tools:textSize="@dimen/text_size_extra_small" />
</LinearLayout>
@ -160,12 +160,12 @@
android:layout_marginRight="@dimen/element_spacing_mlarge"
android:layout_marginTop="@dimen/element_spacing_normal"
android:color="?android:textColorSecondary"
tools:src="@drawable/ic_action_gallery"/>
tools:src="@drawable/ic_action_gallery" />
</RelativeLayout>
<org.mariotaku.twidere.view.HandleSpanClickTextView
android:id="@+id/quote_text"
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/profile_container"
@ -177,27 +177,27 @@
android:paddingRight="@dimen/element_spacing_normal"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorPrimary"
android:visibility="gone"
android:visibility="visible"
tools:text="@string/sample_status_text"
tools:visibility="visible"/>
tools:visibility="visible" />
<org.mariotaku.twidere.view.ForegroundColorView
android:id="@+id/quote_indicator"
android:layout_width="@dimen/element_spacing_small"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/text"
android:layout_alignBottom="@+id/quoted_text"
android:layout_alignTop="@+id/quoted_name"
android:layout_marginLeft="@dimen/element_spacing_normal"
android:layout_marginStart="@dimen/element_spacing_normal"
android:background="?android:dividerHorizontal"
android:background="?quoteIndicatorBackgroundColor"
android:visibility="gone"
tools:visibility="visible"/>
tools:visibility="visible" />
<org.mariotaku.twidere.view.NameView
android:id="@+id/quoted_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/quote_text"
android:layout_below="@+id/text"
android:layout_toEndOf="@+id/quote_indicator"
android:layout_toRightOf="@+id/quote_indicator"
android:orientation="horizontal"
@ -207,13 +207,30 @@
app:nv_primaryTextColor="?android:textColorPrimary"
app:nv_primaryTextStyle="bold"
app:nv_secondaryTextColor="?android:textColorSecondary"
tools:visibility="visible"/>
tools:visibility="visible" />
<org.mariotaku.twidere.view.HandleSpanClickTextView
android:id="@+id/quoted_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/quoted_name"
android:layout_marginBottom="@dimen/element_spacing_normal"
android:layout_marginTop="@dimen/element_spacing_normal"
android:layout_toEndOf="@+id/quote_indicator"
android:layout_toRightOf="@+id/quote_indicator"
android:paddingLeft="@dimen/element_spacing_normal"
android:paddingRight="@dimen/element_spacing_normal"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorPrimary"
android:visibility="gone"
tools:text="@string/sample_status_text"
tools:visibility="visible" />
<org.mariotaku.twidere.view.CardMediaContainer
android:id="@+id/media_preview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/quoted_name"
android:layout_below="@+id/quoted_text"
android:layout_marginTop="@dimen/element_spacing_normal"
android:layout_toEndOf="@+id/quote_indicator"
android:layout_toRightOf="@+id/quote_indicator"
@ -224,28 +241,13 @@
</org.mariotaku.twidere.view.CardMediaContainer>
<org.mariotaku.twidere.view.HandleSpanClickTextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/media_preview"
android:layout_marginBottom="@dimen/element_spacing_normal"
android:layout_marginTop="@dimen/element_spacing_normal"
android:layout_toEndOf="@+id/quote_indicator"
android:layout_toRightOf="@+id/quote_indicator"
android:paddingLeft="@dimen/element_spacing_normal"
android:paddingRight="@dimen/element_spacing_normal"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorPrimary"
tools:text="@string/sample_status_text"/>
<LinearLayout
android:id="@+id/action_buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/profile_container"
android:layout_alignStart="@+id/profile_container"
android:layout_below="@+id/text"
android:layout_below="@+id/media_preview"
android:layout_marginTop="@dimen/element_spacing_minus_small"
android:gravity="center_vertical|start"
android:orientation="horizontal">
@ -263,7 +265,7 @@
android:paddingRight="@dimen/element_spacing_normal"
android:textAppearance="?android:textAppearanceSmall"
app:iabActivatedColor="@color/highlight_reply"
app:iabColor="?android:textColorTertiary"/>
app:iabColor="?android:textColorTertiary" />
<org.mariotaku.twidere.view.ActionIconThemedTextView
android:id="@+id/retweet_count"
@ -278,7 +280,7 @@
android:paddingRight="@dimen/element_spacing_normal"
android:textAppearance="?android:textAppearanceSmall"
app:iabActivatedColor="@color/highlight_retweet"
app:iabColor="?android:textColorTertiary"/>
app:iabColor="?android:textColorTertiary" />
<org.mariotaku.twidere.view.ActionIconThemedTextView
android:id="@+id/favorite_count"
@ -293,7 +295,7 @@
android:paddingRight="@dimen/element_spacing_normal"
android:textAppearance="?android:textAppearanceSmall"
app:iabActivatedColor="@color/highlight_favorite"
app:iabColor="?android:textColorTertiary"/>
app:iabColor="?android:textColorTertiary" />
</LinearLayout>
@ -310,7 +312,7 @@
android:layout_marginRight="@dimen/element_spacing_normal"
android:color="?android:textColorTertiary"
android:focusable="false"
android:src="@drawable/ic_action_more_vertical"/>
android:src="@drawable/ic_action_more_vertical" />
</org.mariotaku.twidere.view.ColorLabelRelativeLayout>
</merge>

View File

@ -16,11 +16,10 @@
~ You should have received a copy of the GNU General Public License
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<org.mariotaku.twidere.view.ColorLabelFrameLayout
android:id="@+id/item_content"
xmlns:android="http://schemas.android.com/apk/res/android"
<org.mariotaku.twidere.view.ColorLabelFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/item_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:background="?cardItemBackgroundColor">
@ -48,7 +47,7 @@
android:scaleType="centerInside"
android:visibility="gone"
tools:src="@drawable/ic_activity_action_retweet"
tools:visibility="visible"/>
tools:visibility="visible" />
<org.mariotaku.twidere.view.ActionIconThemedTextView
android:id="@+id/reply_retweet_status"
@ -67,7 +66,7 @@
android:visibility="gone"
tools:text="Retweeted by Mariotaku"
tools:textSize="@dimen/text_size_extra_small"
tools:visibility="visible"/>
tools:visibility="visible" />
<org.mariotaku.twidere.view.ProfileImageView
android:id="@+id/profile_image"
@ -84,7 +83,7 @@
android:layout_marginRight="@dimen/element_spacing_small"
android:contentDescription="@string/profile_image"
android:scaleType="centerCrop"
tools:visibility="visible"/>
tools:visibility="visible" />
<org.mariotaku.twidere.view.BoundsImageView
android:id="@+id/profile_type"
@ -97,7 +96,7 @@
android:layout_marginEnd="@dimen/element_spacing_minus_small"
android:layout_marginRight="@dimen/element_spacing_minus_small"
android:scaleType="fitCenter"
tools:visibility="gone"/>
tools:visibility="gone" />
<RelativeLayout
android:id="@+id/status_content"
@ -124,7 +123,7 @@
android:layout_weight="1"
app:nv_primaryTextColor="?android:textColorPrimary"
app:nv_primaryTextStyle="bold"
app:nv_secondaryTextColor="?android:textColorSecondary"/>
app:nv_secondaryTextColor="?android:textColorSecondary" />
<org.mariotaku.twidere.view.ShortTimeView
android:id="@+id/time"
@ -133,7 +132,7 @@
android:layout_weight="0"
android:textAppearance="?android:textAppearanceSmall"
tools:text="42 mins ago"
tools:textSize="@dimen/text_size_extra_small"/>
tools:textSize="@dimen/text_size_extra_small" />
<org.mariotaku.twidere.view.ActionIconView
android:id="@+id/extra_type"
@ -141,12 +140,12 @@
android:layout_height="@dimen/element_size_small"
android:layout_weight="0"
android:color="?android:textColorSecondary"
tools:src="@drawable/ic_action_gallery"/>
tools:src="@drawable/ic_action_gallery" />
</LinearLayout>
<org.mariotaku.twidere.view.HandleSpanClickTextView
android:id="@+id/quote_text"
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/profile_container"
@ -156,29 +155,29 @@
android:paddingTop="@dimen/element_spacing_small"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorPrimary"
android:visibility="gone"
android:visibility="visible"
app:nv_primaryTextStyle="bold"
tools:text="@string/sample_status_text"
tools:visibility="visible"/>
tools:visibility="visible" />
<org.mariotaku.twidere.view.ForegroundColorView
android:id="@+id/quote_indicator"
android:layout_width="@dimen/element_spacing_small"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/text"
android:layout_alignBottom="@+id/quoted_text"
android:layout_alignTop="@+id/quoted_name"
android:layout_marginBottom="@dimen/element_spacing_normal"
android:layout_marginEnd="@dimen/element_spacing_normal"
android:layout_marginRight="@dimen/element_spacing_normal"
android:background="?android:dividerHorizontal"
android:background="?quoteIndicatorBackgroundColor"
android:visibility="gone"
tools:visibility="visible"/>
tools:visibility="visible" />
<org.mariotaku.twidere.view.NameView
android:id="@+id/quoted_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/quote_text"
android:layout_below="@id/text"
android:layout_toEndOf="@+id/quote_indicator"
android:layout_toRightOf="@+id/quote_indicator"
android:gravity="center_vertical|start"
@ -186,13 +185,28 @@
android:visibility="gone"
app:nv_primaryTextColor="?android:textColorPrimary"
app:nv_secondaryTextColor="?android:textColorSecondary"
tools:visibility="visible"/>
tools:visibility="visible" />
<org.mariotaku.twidere.view.HandleSpanClickTextView
android:id="@+id/quoted_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/quoted_name"
android:layout_toEndOf="@+id/quote_indicator"
android:layout_toRightOf="@+id/quote_indicator"
android:paddingBottom="@dimen/element_spacing_normal"
android:paddingTop="@dimen/element_spacing_small"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorPrimary"
android:visibility="gone"
tools:text="@string/sample_status_text"
tools:visibility="visible" />
<org.mariotaku.twidere.view.CardMediaContainer
android:id="@+id/media_preview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/quoted_name"
android:layout_below="@+id/quoted_text"
android:layout_marginTop="@dimen/element_spacing_small"
android:layout_toEndOf="@+id/quote_indicator"
android:layout_toRightOf="@+id/quote_indicator"
@ -203,22 +217,8 @@
</org.mariotaku.twidere.view.CardMediaContainer>
<org.mariotaku.twidere.view.HandleSpanClickTextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/media_preview"
android:layout_toEndOf="@+id/quote_indicator"
android:layout_toRightOf="@+id/quote_indicator"
android:paddingBottom="@dimen/element_spacing_normal"
android:paddingTop="@dimen/element_spacing_small"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorPrimary"
tools:text="@string/sample_status_text"/>
</RelativeLayout>
<LinearLayout
android:id="@+id/action_buttons"
android:layout_width="wrap_content"
@ -247,7 +247,7 @@
android:paddingRight="@dimen/element_spacing_normal"
android:textAppearance="?android:textAppearanceSmall"
app:iabActivatedColor="@color/highlight_reply"
app:iabColor="?android:textColorTertiary"/>
app:iabColor="?android:textColorTertiary" />
<org.mariotaku.twidere.view.ActionIconThemedTextView
android:id="@+id/retweet_count"
@ -263,7 +263,7 @@
android:paddingRight="@dimen/element_spacing_normal"
android:textAppearance="?android:textAppearanceSmall"
app:iabActivatedColor="@color/highlight_retweet"
app:iabColor="?android:textColorTertiary"/>
app:iabColor="?android:textColorTertiary" />
<org.mariotaku.twidere.view.ActionIconThemedTextView
android:id="@+id/favorite_count"
@ -279,7 +279,7 @@
android:paddingRight="@dimen/element_spacing_normal"
android:textAppearance="?android:textAppearanceSmall"
app:iabActivatedColor="@color/highlight_favorite"
app:iabColor="?android:textColorTertiary"/>
app:iabColor="?android:textColorTertiary" />
</LinearLayout>
@ -295,7 +295,7 @@
android:color="?android:textColorTertiary"
android:focusable="false"
android:src="@drawable/ic_action_more_horizontal"
tools:visibility="visible"/>
tools:visibility="visible" />
</RelativeLayout>
</org.mariotaku.twidere.view.ColorLabelFrameLayout>

View File

@ -162,7 +162,7 @@
<org.mariotaku.twidere.view.StatusTextView
android:id="@+id/quote_text"
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/profile_container"
@ -174,11 +174,10 @@
android:paddingRight="@dimen/element_spacing_normal"
android:textAppearance="?android:textAppearanceMedium"
android:textColor="?android:textColorPrimary"
android:visibility="gone"
android:visibility="visible"
tools:text="@string/sample_status_text"
tools:visibility="visible" />
<org.mariotaku.twidere.view.ForegroundColorView
android:id="@+id/quote_indicator"
android:layout_width="@dimen/element_spacing_small"
@ -187,7 +186,7 @@
android:layout_alignTop="@+id/quoted_name_container"
android:layout_marginLeft="@dimen/element_spacing_normal"
android:layout_marginStart="@dimen/element_spacing_normal"
android:background="?android:dividerHorizontal"
android:background="?quoteIndicatorBackgroundColor"
android:visibility="gone"
tools:visibility="visible" />
@ -195,7 +194,7 @@
android:id="@+id/quoted_name_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/quote_text"
android:layout_below="@+id/text"
android:layout_toEndOf="@+id/quote_indicator"
android:layout_toRightOf="@+id/quote_indicator"
android:background="?selectableItemBackground"
@ -228,11 +227,26 @@
tools:text="\@username" />
</LinearLayout>
<org.mariotaku.twidere.view.StatusTextView
android:id="@+id/quoted_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/quoted_name_container"
android:layout_margin="@dimen/element_spacing_normal"
android:layout_toEndOf="@+id/quote_indicator"
android:layout_toRightOf="@+id/quote_indicator"
android:singleLine="false"
android:textAppearance="?android:textAppearanceMedium"
android:textColor="?android:textColorPrimary"
android:visibility="gone"
tools:text="@string/sample_status_text"
tools:visibility="visible" />
<FrameLayout
android:id="@+id/media_preview_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/quoted_name_container"
android:layout_below="@+id/quoted_text"
android:layout_toEndOf="@+id/quote_indicator"
android:layout_toRightOf="@+id/quote_indicator"
tools:visibility="visible">
@ -277,24 +291,11 @@
</FrameLayout>
<org.mariotaku.twidere.view.StatusTextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/media_preview_container"
android:layout_margin="@dimen/element_spacing_normal"
android:layout_toEndOf="@+id/quote_indicator"
android:layout_toRightOf="@+id/quote_indicator"
android:singleLine="false"
android:textAppearance="?android:textAppearanceMedium"
android:textColor="?android:textColorPrimary"
tools:text="@string/sample_status_text" />
<org.mariotaku.twidere.view.TwitterCardContainer
android:id="@+id/twitter_card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/text"
android:layout_below="@+id/media_preview_container"
android:layout_toEndOf="@+id/quote_indicator"
android:layout_toRightOf="@+id/quote_indicator"
android:visibility="gone" />

View File

@ -10,6 +10,7 @@
<attr name="menuIconColorActionBar" format="color"/>
<attr name="messageBubbleColor" format="color"/>
<attr name="cardItemBackgroundColor" format="color"/>
<attr name="quoteIndicatorBackgroundColor" format="color"/>
<attr name="linePageIndicatorStyle" format="reference"/>
<attr name="textColorDrawerNamePrimary" format="color"/>
<attr name="textColorDrawerNameSecondary" format="color"/>

View File

@ -37,5 +37,7 @@
<color name="background_color_action_bar_dark">#212121</color>
<color name="bg_color_video_playback_progress">#A0000000</color>
<color name="drawer_banner_foreground">#80000000</color>
<color name="quote_indicator_background_dark">#40aaaaaa</color>
<color name="quote_indicator_background_light">#40333333</color>
</resources>

View File

@ -21,6 +21,7 @@
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_light</item>
<item name="messageBubbleColor">@color/message_bubble_color_dark</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_dark</item>
<item name="asb_switchPreferenceStyle">@style/asb_Preference.SwitchPreference</item>
</style>
@ -39,6 +40,7 @@
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_dark</item>
<item name="messageBubbleColor">@color/message_bubble_color_light</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_light</item>
<item name="asb_switchPreferenceStyle">@style/asb_Preference.SwitchPreference</item>
</style>
@ -57,6 +59,7 @@
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_light</item>
<item name="messageBubbleColor">@color/message_bubble_color_dark</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_dark</item>
<item name="asb_switchPreferenceStyle">@style/asb_Preference.SwitchPreference</item>
</style>
@ -75,6 +78,7 @@
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_dark</item>
<item name="messageBubbleColor">@color/message_bubble_color_light</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_light</item>
<item name="asb_switchPreferenceStyle">@style/asb_Preference.SwitchPreference</item>
</style>
@ -93,6 +97,7 @@
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_light</item>
<item name="messageBubbleColor">@color/message_bubble_color_dark</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_dark</item>
<item name="asb_switchPreferenceStyle">@style/asb_Preference.SwitchPreference</item>
</style>
@ -111,6 +116,7 @@
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_dark</item>
<item name="messageBubbleColor">@color/message_bubble_color_light</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_light</item>
<item name="asb_switchPreferenceStyle">@style/asb_Preference.SwitchPreference</item>
</style>
@ -129,6 +135,7 @@
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_light</item>
<item name="messageBubbleColor">@color/message_bubble_color_dark</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_dark</item>
<item name="asb_switchPreferenceStyle">@style/asb_Preference.SwitchPreference</item>
</style>
@ -147,6 +154,7 @@
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_dark</item>
<item name="messageBubbleColor">@color/message_bubble_color_light</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_light</item>
<item name="asb_switchPreferenceStyle">@style/asb_Preference.SwitchPreference</item>
</style>
@ -172,10 +180,10 @@
<item name="profileImageStyleLarge">@style/Widget.ProfileImage.Large</item>
<item name="cardItemBackgroundColor">@color/background_color_card_item_dark</item>
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_light</item>
<item name="messageBubbleColor">@color/message_bubble_color_dark</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_dark</item>
<item name="asb_switchPreferenceStyle">@style/asb_Preference.SwitchPreference</item>
</style>
@ -205,6 +213,7 @@
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_dark</item>
<item name="messageBubbleColor">@color/message_bubble_color_light</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_light</item>
<item name="asb_switchPreferenceStyle">@style/asb_Preference.SwitchPreference</item>
</style>
@ -247,6 +256,7 @@
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_light</item>
<item name="messageBubbleColor">@color/message_bubble_color_dark</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_dark</item>
<item name="asb_switchPreferenceStyle">@style/asb_Preference.SwitchPreference</item>
</style>