parent
d04d8576a8
commit
05f215b8b2
17
build.gradle
17
build.gradle
|
@ -35,7 +35,7 @@ allprojects {
|
||||||
subprojects {
|
subprojects {
|
||||||
buildscript {
|
buildscript {
|
||||||
ext {
|
ext {
|
||||||
kotlinVersion = '1.2.30'
|
kotlinVersion = '1.2.31'
|
||||||
pluginVersions = [
|
pluginVersions = [
|
||||||
AndroidSvgDrawable: '3.0.0',
|
AndroidSvgDrawable: '3.0.0',
|
||||||
PlayServices : '3.1.1',
|
PlayServices : '3.1.1',
|
||||||
|
@ -53,7 +53,7 @@ subprojects {
|
||||||
MapsUtils : '0.5',
|
MapsUtils : '0.5',
|
||||||
DropboxCoreSdk : '3.0.3',
|
DropboxCoreSdk : '3.0.3',
|
||||||
GoogleDriveApi : 'v3-rev81-1.22.0',
|
GoogleDriveApi : 'v3-rev81-1.22.0',
|
||||||
Exoplayer : 'r2.5.4',
|
Exoplayer : '2.6.0',
|
||||||
Toro : '2.1.0',
|
Toro : '2.1.0',
|
||||||
LoganSquare : '1.3.7',
|
LoganSquare : '1.3.7',
|
||||||
Mime4J : '0.7.2',
|
Mime4J : '0.7.2',
|
||||||
|
@ -66,24 +66,23 @@ subprojects {
|
||||||
MultiValueSwitch : '0.9.8',
|
MultiValueSwitch : '0.9.8',
|
||||||
PickNCrop : '0.9.27',
|
PickNCrop : '0.9.27',
|
||||||
AndroidGIFDrawable : '1.2.6',
|
AndroidGIFDrawable : '1.2.6',
|
||||||
KPreferences : '0.9.7',
|
KPreferences : '0.9.8',
|
||||||
Kovenant : '3.3.0',
|
Kovenant : '3.3.0',
|
||||||
ParcelablePlease : '1.0.2',
|
ParcelablePlease : '1.0.2',
|
||||||
Chameleon : '0.9.26',
|
Chameleon : '0.9.26',
|
||||||
UniqR : '0.9.6',
|
UniqR : '0.9.10',
|
||||||
SQLiteQB : '0.9.18',
|
SQLiteQB : '0.9.18',
|
||||||
Glide : '3.7.0',
|
Glide : '4.6.1',
|
||||||
GlideOkHttp3 : '1.4.0',
|
GlideOkHttp3 : '4.6.1',
|
||||||
GlideTransformations : '2.0.2',
|
|
||||||
AndroidImageCropper : '2.4.6',
|
AndroidImageCropper : '2.4.6',
|
||||||
ExportablePreferences : '0.9.7',
|
ExportablePreferences : '0.9.7',
|
||||||
ACRA : '4.9.2',
|
ACRA : '4.9.2',
|
||||||
AbstractTask : '0.9.8',
|
AbstractTask : '0.9.8',
|
||||||
Dagger : '2.11',
|
Dagger : '2.11',
|
||||||
StethoBeanShellREPL : '0.3',
|
StethoBeanShellREPL : '0.3',
|
||||||
ArchLifecycleExtensions: '1.1.0',
|
ArchLifecycleExtensions: '1.1.1',
|
||||||
ArchPaging : '1.0.0-alpha6',
|
ArchPaging : '1.0.0-alpha6',
|
||||||
ConstraintLayout : '1.1.0-beta5',
|
ConstraintLayout : '1.1.0-beta6',
|
||||||
MessageBubbleView : '2.1',
|
MessageBubbleView : '2.1',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,8 @@
|
||||||
|
|
||||||
package org.mariotaku.microblog.library.model.mastodon;
|
package org.mariotaku.microblog.library.model.mastodon;
|
||||||
|
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
|
|
||||||
import com.bluelinelabs.logansquare.annotation.JsonField;
|
import com.bluelinelabs.logansquare.annotation.JsonField;
|
||||||
import com.bluelinelabs.logansquare.annotation.JsonObject;
|
import com.bluelinelabs.logansquare.annotation.JsonObject;
|
||||||
import com.bluelinelabs.logansquare.annotation.OnJsonParseComplete;
|
import com.bluelinelabs.logansquare.annotation.OnJsonParseComplete;
|
||||||
|
@ -27,7 +29,7 @@ import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@see https://github.com/tootsuite/documentation/blob/master/Using-the-API/API.md#account}
|
* {@see https://github.com/tootsuite/documentation/blob/master/Using-the-API/API.md#account}
|
||||||
*
|
* <p>
|
||||||
* Created by mariotaku on 2017/4/17.
|
* Created by mariotaku on 2017/4/17.
|
||||||
*/
|
*/
|
||||||
@JsonObject
|
@JsonObject
|
||||||
|
@ -107,6 +109,12 @@ public class Account {
|
||||||
*/
|
*/
|
||||||
@JsonField(name = "header_static")
|
@JsonField(name = "header_static")
|
||||||
String headerStatic;
|
String headerStatic;
|
||||||
|
/**
|
||||||
|
* If the owner decided to switch accounts, new account is in this attribute
|
||||||
|
*/
|
||||||
|
@JsonField(name = "moved")
|
||||||
|
@Nullable
|
||||||
|
Account moved;
|
||||||
|
|
||||||
public String getId() {
|
public String getId() {
|
||||||
return id;
|
return id;
|
||||||
|
@ -168,6 +176,11 @@ public class Account {
|
||||||
return headerStatic;
|
return headerStatic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public Account getMoved() {
|
||||||
|
return moved;
|
||||||
|
}
|
||||||
|
|
||||||
@OnJsonParseComplete
|
@OnJsonParseComplete
|
||||||
void onJsonParseComplete() throws IOException {
|
void onJsonParseComplete() throws IOException {
|
||||||
if (id == null) {
|
if (id == null) {
|
||||||
|
@ -196,6 +209,7 @@ public class Account {
|
||||||
", avatarStatic='" + avatarStatic + '\'' +
|
", avatarStatic='" + avatarStatic + '\'' +
|
||||||
", header='" + header + '\'' +
|
", header='" + header + '\'' +
|
||||||
", headerStatic='" + headerStatic + '\'' +
|
", headerStatic='" + headerStatic + '\'' +
|
||||||
|
", moved=" + moved +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -147,20 +147,20 @@ public class ParcelableActivity extends ParcelableStatus implements Parcelable {
|
||||||
", max_position='" + max_position + '\'' +
|
", max_position='" + max_position + '\'' +
|
||||||
", min_position='" + min_position + '\'' +
|
", min_position='" + min_position + '\'' +
|
||||||
", source_keys=" + Arrays.toString(source_keys) +
|
", source_keys=" + Arrays.toString(source_keys) +
|
||||||
", _id=" + _id +
|
|
||||||
", sources=" + Arrays.toString(sources) +
|
", sources=" + Arrays.toString(sources) +
|
||||||
", id='" + id + '\'' +
|
", _id=" + _id +
|
||||||
", targets=" + targets +
|
", targets=" + targets +
|
||||||
", account_key=" + account_key +
|
", id='" + id + '\'' +
|
||||||
", target_objects=" + target_objects +
|
", target_objects=" + target_objects +
|
||||||
|
", account_key=" + account_key +
|
||||||
|
", sources_lite=" + Arrays.toString(sources_lite) +
|
||||||
", sort_id=" + sort_id +
|
", sort_id=" + sort_id +
|
||||||
", position_key=" + position_key +
|
", position_key=" + position_key +
|
||||||
", sources_lite=" + Arrays.toString(sources_lite) +
|
|
||||||
", timestamp=" + timestamp +
|
|
||||||
", summary_line=" + Arrays.toString(summary_line) +
|
", summary_line=" + Arrays.toString(summary_line) +
|
||||||
|
", timestamp=" + timestamp +
|
||||||
", has_following_source=" + has_following_source +
|
", has_following_source=" + has_following_source +
|
||||||
", user_key=" + user_key +
|
|
||||||
", after_filtered_sources=" + Arrays.toString(after_filtered_sources) +
|
", after_filtered_sources=" + Arrays.toString(after_filtered_sources) +
|
||||||
|
", user_key=" + user_key +
|
||||||
", retweet_id='" + retweet_id + '\'' +
|
", retweet_id='" + retweet_id + '\'' +
|
||||||
", retweeted_by_user_key=" + retweeted_by_user_key +
|
", retweeted_by_user_key=" + retweeted_by_user_key +
|
||||||
", retweet_timestamp=" + retweet_timestamp +
|
", retweet_timestamp=" + retweet_timestamp +
|
||||||
|
@ -170,9 +170,6 @@ public class ParcelableActivity extends ParcelableStatus implements Parcelable {
|
||||||
", in_reply_to_status_id='" + in_reply_to_status_id + '\'' +
|
", in_reply_to_status_id='" + in_reply_to_status_id + '\'' +
|
||||||
", in_reply_to_user_key=" + in_reply_to_user_key +
|
", in_reply_to_user_key=" + in_reply_to_user_key +
|
||||||
", my_retweet_id='" + my_retweet_id + '\'' +
|
", my_retweet_id='" + my_retweet_id + '\'' +
|
||||||
", quoted_id='" + quoted_id + '\'' +
|
|
||||||
", quoted_timestamp=" + quoted_timestamp +
|
|
||||||
", quoted_user_key=" + quoted_user_key +
|
|
||||||
", is_gap=" + is_gap +
|
", is_gap=" + is_gap +
|
||||||
", is_retweet=" + is_retweet +
|
", is_retweet=" + is_retweet +
|
||||||
", retweeted=" + retweeted +
|
", retweeted=" + retweeted +
|
||||||
|
@ -182,8 +179,6 @@ public class ParcelableActivity extends ParcelableStatus implements Parcelable {
|
||||||
", user_is_protected=" + user_is_protected +
|
", user_is_protected=" + user_is_protected +
|
||||||
", user_is_verified=" + user_is_verified +
|
", user_is_verified=" + user_is_verified +
|
||||||
", is_quote=" + is_quote +
|
", is_quote=" + is_quote +
|
||||||
", 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_name='" + retweeted_by_user_name + '\'' +
|
||||||
", retweeted_by_user_screen_name='" + retweeted_by_user_screen_name + '\'' +
|
", retweeted_by_user_screen_name='" + retweeted_by_user_screen_name + '\'' +
|
||||||
", retweeted_by_user_profile_image='" + retweeted_by_user_profile_image + '\'' +
|
", retweeted_by_user_profile_image='" + retweeted_by_user_profile_image + '\'' +
|
||||||
|
@ -197,21 +192,12 @@ public class ParcelableActivity extends ParcelableStatus implements Parcelable {
|
||||||
", user_profile_image_url='" + user_profile_image_url + '\'' +
|
", user_profile_image_url='" + user_profile_image_url + '\'' +
|
||||||
", text_unescaped='" + text_unescaped + '\'' +
|
", text_unescaped='" + text_unescaped + '\'' +
|
||||||
", card_name='" + card_name + '\'' +
|
", card_name='" + card_name + '\'' +
|
||||||
", 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 +
|
", location=" + location +
|
||||||
", place_full_name='" + place_full_name + '\'' +
|
", place_full_name='" + place_full_name + '\'' +
|
||||||
", mentions=" + Arrays.toString(mentions) +
|
", mentions=" + Arrays.toString(mentions) +
|
||||||
", media=" + Arrays.toString(media) +
|
", attachment=" + attachment +
|
||||||
", quoted_media=" + Arrays.toString(quoted_media) +
|
|
||||||
", card=" + card +
|
|
||||||
", extras=" + extras +
|
", extras=" + extras +
|
||||||
", spans=" + Arrays.toString(spans) +
|
", spans=" + Arrays.toString(spans) +
|
||||||
", quoted_spans=" + Arrays.toString(quoted_spans) +
|
|
||||||
", account_color=" + account_color +
|
", account_color=" + account_color +
|
||||||
", filter_flags=" + filter_flags +
|
", filter_flags=" + filter_flags +
|
||||||
", filter_users=" + Arrays.toString(filter_users) +
|
", filter_users=" + Arrays.toString(filter_users) +
|
||||||
|
|
|
@ -145,19 +145,6 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
||||||
@CursorField(Statuses.MY_RETWEET_ID)
|
@CursorField(Statuses.MY_RETWEET_ID)
|
||||||
public String my_retweet_id;
|
public String my_retweet_id;
|
||||||
|
|
||||||
@JsonField(name = "quoted_id")
|
|
||||||
@CursorField(Statuses.QUOTED_ID)
|
|
||||||
public String quoted_id;
|
|
||||||
|
|
||||||
@JsonField(name = "quoted_timestamp")
|
|
||||||
@CursorField(Statuses.QUOTED_TIMESTAMP)
|
|
||||||
public long quoted_timestamp;
|
|
||||||
|
|
||||||
@JsonField(name = "quoted_user_id", typeConverter = UserKeyConverter.class)
|
|
||||||
@CursorField(value = Statuses.QUOTED_USER_KEY, converter = UserKeyCursorFieldConverter.class)
|
|
||||||
@Nullable
|
|
||||||
public UserKey quoted_user_key;
|
|
||||||
|
|
||||||
@JsonField(name = "is_gap")
|
@JsonField(name = "is_gap")
|
||||||
@CursorField(Statuses.IS_GAP)
|
@CursorField(Statuses.IS_GAP)
|
||||||
public boolean is_gap;
|
public boolean is_gap;
|
||||||
|
@ -194,14 +181,6 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
||||||
@CursorField(Statuses.IS_QUOTE)
|
@CursorField(Statuses.IS_QUOTE)
|
||||||
public boolean is_quote;
|
public boolean is_quote;
|
||||||
|
|
||||||
@JsonField(name = "quoted_user_is_protected")
|
|
||||||
@CursorField(Statuses.QUOTED_USER_IS_PROTECTED)
|
|
||||||
public boolean quoted_user_is_protected;
|
|
||||||
|
|
||||||
@JsonField(name = "quoted_user_is_verified")
|
|
||||||
@CursorField(Statuses.QUOTED_USER_IS_VERIFIED)
|
|
||||||
public boolean quoted_user_is_verified;
|
|
||||||
|
|
||||||
@JsonField(name = "retweeted_by_user_name")
|
@JsonField(name = "retweeted_by_user_name")
|
||||||
@CursorField(Statuses.RETWEETED_BY_USER_NAME)
|
@CursorField(Statuses.RETWEETED_BY_USER_NAME)
|
||||||
public String retweeted_by_user_name;
|
public String retweeted_by_user_name;
|
||||||
|
@ -251,36 +230,12 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
||||||
@JsonField(name = "text_unescaped")
|
@JsonField(name = "text_unescaped")
|
||||||
@CursorField(Statuses.TEXT_UNESCAPED)
|
@CursorField(Statuses.TEXT_UNESCAPED)
|
||||||
public String text_unescaped;
|
public String text_unescaped;
|
||||||
@Nullable
|
|
||||||
|
|
||||||
|
@Nullable
|
||||||
@JsonField(name = "card_name")
|
@JsonField(name = "card_name")
|
||||||
@CursorField(Statuses.CARD_NAME)
|
@CursorField(Statuses.CARD_NAME)
|
||||||
public String card_name;
|
public String card_name;
|
||||||
|
|
||||||
@JsonField(name = "quoted_text_plain")
|
|
||||||
@CursorField(Statuses.QUOTED_TEXT_PLAIN)
|
|
||||||
public String quoted_text_plain;
|
|
||||||
|
|
||||||
@JsonField(name = "quoted_text_unescaped")
|
|
||||||
@CursorField(Statuses.QUOTED_TEXT_UNESCAPED)
|
|
||||||
public String quoted_text_unescaped;
|
|
||||||
|
|
||||||
@JsonField(name = "quoted_source")
|
|
||||||
@CursorField(Statuses.QUOTED_SOURCE)
|
|
||||||
public String quoted_source;
|
|
||||||
|
|
||||||
@JsonField(name = "quoted_user_name")
|
|
||||||
@CursorField(Statuses.QUOTED_USER_NAME)
|
|
||||||
public String quoted_user_name;
|
|
||||||
|
|
||||||
@JsonField(name = "quoted_user_screen_name")
|
|
||||||
@CursorField(Statuses.QUOTED_USER_SCREEN_NAME)
|
|
||||||
public String quoted_user_screen_name;
|
|
||||||
|
|
||||||
@JsonField(name = "quoted_user_profile_image")
|
|
||||||
@CursorField(Statuses.QUOTED_USER_PROFILE_IMAGE)
|
|
||||||
public String quoted_user_profile_image;
|
|
||||||
|
|
||||||
@JsonField(name = "location")
|
@JsonField(name = "location")
|
||||||
@CursorField(value = Statuses.LOCATION, converter = ParcelableLocation.Converter.class)
|
@CursorField(value = Statuses.LOCATION, converter = ParcelableLocation.Converter.class)
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@ -295,22 +250,9 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
||||||
@CursorField(value = Statuses.MENTIONS_JSON, converter = LoganSquareCursorFieldConverter.class)
|
@CursorField(value = Statuses.MENTIONS_JSON, converter = LoganSquareCursorFieldConverter.class)
|
||||||
public ParcelableUserMention[] mentions;
|
public ParcelableUserMention[] mentions;
|
||||||
|
|
||||||
// TODO: Simplify for list loader
|
|
||||||
@JsonField(name = "media")
|
|
||||||
@CursorField(value = Statuses.MEDIA_JSON, converter = LoganSquareCursorFieldConverter.class)
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public ParcelableMedia[] media;
|
@CursorField(value = Statuses.ATTACHMENT, converter = LoganSquareCursorFieldConverter.class)
|
||||||
|
public ParcelableStatusAttachment attachment;
|
||||||
// TODO: Simplify for list loader
|
|
||||||
@JsonField(name = "quoted_media")
|
|
||||||
@CursorField(value = Statuses.QUOTED_MEDIA_JSON, converter = LoganSquareCursorFieldConverter.class)
|
|
||||||
@Nullable
|
|
||||||
public ParcelableMedia[] quoted_media;
|
|
||||||
|
|
||||||
@JsonField(name = "card")
|
|
||||||
@CursorField(value = Statuses.CARD, converter = LoganSquareCursorFieldConverter.class)
|
|
||||||
@Nullable
|
|
||||||
public ParcelableCardEntity card;
|
|
||||||
|
|
||||||
@JsonField(name = "extras")
|
@JsonField(name = "extras")
|
||||||
@CursorField(value = Statuses.EXTRAS, converter = LoganSquareCursorFieldConverter.class)
|
@CursorField(value = Statuses.EXTRAS, converter = LoganSquareCursorFieldConverter.class)
|
||||||
|
@ -321,10 +263,6 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
||||||
@CursorField(value = Statuses.SPANS, converter = LoganSquareCursorFieldConverter.class)
|
@CursorField(value = Statuses.SPANS, converter = LoganSquareCursorFieldConverter.class)
|
||||||
public SpanItem[] spans;
|
public SpanItem[] spans;
|
||||||
|
|
||||||
@JsonField(name = "quoted_spans")
|
|
||||||
@CursorField(value = Statuses.QUOTED_SPANS, converter = LoganSquareCursorFieldConverter.class)
|
|
||||||
public SpanItem[] quoted_spans;
|
|
||||||
|
|
||||||
@JsonField(name = "account_color")
|
@JsonField(name = "account_color")
|
||||||
@CursorField(Statuses.ACCOUNT_COLOR)
|
@CursorField(Statuses.ACCOUNT_COLOR)
|
||||||
public int account_color;
|
public int account_color;
|
||||||
|
@ -420,9 +358,6 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
||||||
", in_reply_to_status_id='" + in_reply_to_status_id + '\'' +
|
", in_reply_to_status_id='" + in_reply_to_status_id + '\'' +
|
||||||
", in_reply_to_user_key=" + in_reply_to_user_key +
|
", in_reply_to_user_key=" + in_reply_to_user_key +
|
||||||
", my_retweet_id='" + my_retweet_id + '\'' +
|
", my_retweet_id='" + my_retweet_id + '\'' +
|
||||||
", quoted_id='" + quoted_id + '\'' +
|
|
||||||
", quoted_timestamp=" + quoted_timestamp +
|
|
||||||
", quoted_user_key=" + quoted_user_key +
|
|
||||||
", is_gap=" + is_gap +
|
", is_gap=" + is_gap +
|
||||||
", is_retweet=" + is_retweet +
|
", is_retweet=" + is_retweet +
|
||||||
", retweeted=" + retweeted +
|
", retweeted=" + retweeted +
|
||||||
|
@ -432,8 +367,6 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
||||||
", user_is_protected=" + user_is_protected +
|
", user_is_protected=" + user_is_protected +
|
||||||
", user_is_verified=" + user_is_verified +
|
", user_is_verified=" + user_is_verified +
|
||||||
", is_quote=" + is_quote +
|
", is_quote=" + is_quote +
|
||||||
", 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_name='" + retweeted_by_user_name + '\'' +
|
||||||
", retweeted_by_user_screen_name='" + retweeted_by_user_screen_name + '\'' +
|
", retweeted_by_user_screen_name='" + retweeted_by_user_screen_name + '\'' +
|
||||||
", retweeted_by_user_profile_image='" + retweeted_by_user_profile_image + '\'' +
|
", retweeted_by_user_profile_image='" + retweeted_by_user_profile_image + '\'' +
|
||||||
|
@ -447,21 +380,12 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
||||||
", user_profile_image_url='" + user_profile_image_url + '\'' +
|
", user_profile_image_url='" + user_profile_image_url + '\'' +
|
||||||
", text_unescaped='" + text_unescaped + '\'' +
|
", text_unescaped='" + text_unescaped + '\'' +
|
||||||
", card_name='" + card_name + '\'' +
|
", card_name='" + card_name + '\'' +
|
||||||
", 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 +
|
", location=" + location +
|
||||||
", place_full_name='" + place_full_name + '\'' +
|
", place_full_name='" + place_full_name + '\'' +
|
||||||
", mentions=" + Arrays.toString(mentions) +
|
", mentions=" + Arrays.toString(mentions) +
|
||||||
", media=" + Arrays.toString(media) +
|
", attachment=" + attachment +
|
||||||
", quoted_media=" + Arrays.toString(quoted_media) +
|
|
||||||
", card=" + card +
|
|
||||||
", extras=" + extras +
|
", extras=" + extras +
|
||||||
", spans=" + Arrays.toString(spans) +
|
", spans=" + Arrays.toString(spans) +
|
||||||
", quoted_spans=" + Arrays.toString(quoted_spans) +
|
|
||||||
", account_color=" + account_color +
|
", account_color=" + account_color +
|
||||||
", filter_flags=" + filter_flags +
|
", filter_flags=" + filter_flags +
|
||||||
", filter_users=" + Arrays.toString(filter_users) +
|
", filter_users=" + Arrays.toString(filter_users) +
|
||||||
|
@ -478,7 +402,7 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
||||||
|
|
||||||
@AfterCursorObjectCreated
|
@AfterCursorObjectCreated
|
||||||
void finishCursorObjectCreation() {
|
void finishCursorObjectCreation() {
|
||||||
card_name = card != null ? card.name : null;
|
card_name = (attachment != null && attachment.card != null) ? attachment.card.name : null;
|
||||||
fixSortId();
|
fixSortId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -532,9 +456,6 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
||||||
@JsonField(name = "external_url")
|
@JsonField(name = "external_url")
|
||||||
public String external_url;
|
public String external_url;
|
||||||
|
|
||||||
@JsonField(name = "quoted_external_url")
|
|
||||||
public String quoted_external_url;
|
|
||||||
|
|
||||||
@JsonField(name = "retweeted_external_url")
|
@JsonField(name = "retweeted_external_url")
|
||||||
public String retweeted_external_url;
|
public String retweeted_external_url;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,142 @@
|
||||||
|
/*
|
||||||
|
* Twidere - Twitter client for Android
|
||||||
|
*
|
||||||
|
* Copyright 2012-2018 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.mariotaku.twidere.model;
|
||||||
|
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.os.Parcelable;
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
|
|
||||||
|
import com.bluelinelabs.logansquare.annotation.JsonField;
|
||||||
|
import com.bluelinelabs.logansquare.annotation.JsonObject;
|
||||||
|
import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease;
|
||||||
|
|
||||||
|
import org.mariotaku.twidere.model.util.UserKeyConverter;
|
||||||
|
|
||||||
|
@ParcelablePlease
|
||||||
|
@JsonObject
|
||||||
|
public class ParcelableStatusAttachment implements Parcelable {
|
||||||
|
|
||||||
|
@JsonField(name = "media")
|
||||||
|
@Nullable
|
||||||
|
public ParcelableMedia[] media;
|
||||||
|
|
||||||
|
@JsonField(name = "card")
|
||||||
|
@Nullable
|
||||||
|
public ParcelableCardEntity card;
|
||||||
|
|
||||||
|
@JsonField(name = "quoted")
|
||||||
|
@Nullable
|
||||||
|
public QuotedStatus quoted;
|
||||||
|
|
||||||
|
@ParcelablePlease
|
||||||
|
@JsonObject
|
||||||
|
public static class QuotedStatus implements Parcelable {
|
||||||
|
|
||||||
|
@JsonField(name = "id")
|
||||||
|
public String id;
|
||||||
|
|
||||||
|
@JsonField(name = "timestamp")
|
||||||
|
public long timestamp;
|
||||||
|
|
||||||
|
@JsonField(name = "account_id", typeConverter = UserKeyConverter.class)
|
||||||
|
public UserKey account_key;
|
||||||
|
|
||||||
|
@JsonField(name = "user_id", typeConverter = UserKeyConverter.class)
|
||||||
|
@Nullable
|
||||||
|
public UserKey user_key;
|
||||||
|
|
||||||
|
@JsonField(name = "user_is_protected")
|
||||||
|
public boolean user_is_protected;
|
||||||
|
|
||||||
|
@JsonField(name = "user_is_verified")
|
||||||
|
public boolean user_is_verified;
|
||||||
|
|
||||||
|
@JsonField(name = "text_plain")
|
||||||
|
public String text_plain;
|
||||||
|
|
||||||
|
@JsonField(name = "text_unescaped")
|
||||||
|
public String text_unescaped;
|
||||||
|
|
||||||
|
@JsonField(name = "source")
|
||||||
|
public String source;
|
||||||
|
|
||||||
|
@JsonField(name = "user_name")
|
||||||
|
public String user_name;
|
||||||
|
|
||||||
|
@JsonField(name = "user_screen_name")
|
||||||
|
public String user_screen_name;
|
||||||
|
|
||||||
|
@JsonField(name = "user_profile_image")
|
||||||
|
public String user_profile_image;
|
||||||
|
|
||||||
|
@JsonField(name = "media")
|
||||||
|
@Nullable
|
||||||
|
public ParcelableMedia[] media;
|
||||||
|
|
||||||
|
@JsonField(name = "spans")
|
||||||
|
public SpanItem[] spans;
|
||||||
|
|
||||||
|
@JsonField(name = "external_url")
|
||||||
|
public String external_url;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int describeContents() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(Parcel dest, int flags) {
|
||||||
|
ParcelableStatusAttachment$QuotedStatusParcelablePlease.writeToParcel(this, dest, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final Creator<QuotedStatus> CREATOR = new Creator<QuotedStatus>() {
|
||||||
|
public QuotedStatus createFromParcel(Parcel source) {
|
||||||
|
QuotedStatus target = new QuotedStatus();
|
||||||
|
ParcelableStatusAttachment$QuotedStatusParcelablePlease.readFromParcel(target, source);
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
|
public QuotedStatus[] newArray(int size) {
|
||||||
|
return new QuotedStatus[size];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int describeContents() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(Parcel dest, int flags) {
|
||||||
|
ParcelableStatusAttachmentParcelablePlease.writeToParcel(this, dest, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final Creator<ParcelableStatusAttachment> CREATOR = new Creator<ParcelableStatusAttachment>() {
|
||||||
|
public ParcelableStatusAttachment createFromParcel(Parcel source) {
|
||||||
|
ParcelableStatusAttachment target = new ParcelableStatusAttachment();
|
||||||
|
ParcelableStatusAttachmentParcelablePlease.readFromParcel(target, source);
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ParcelableStatusAttachment[] newArray(int size) {
|
||||||
|
return new ParcelableStatusAttachment[size];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
|
@ -368,6 +368,9 @@ public class ParcelableUser implements Parcelable, Comparable<ParcelableUser> {
|
||||||
@JsonField(name = "url_display")
|
@JsonField(name = "url_display")
|
||||||
@ParcelableThisPlease
|
@ParcelableThisPlease
|
||||||
public String url_display;
|
public String url_display;
|
||||||
|
@JsonField(name = "moved")
|
||||||
|
@Nullable
|
||||||
|
public ParcelableLiteUser moved;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
package org.mariotaku.twidere.model.tab.argument;
|
package org.mariotaku.twidere.model.tab.argument;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.os.Parcelable;
|
||||||
import android.support.annotation.CallSuper;
|
import android.support.annotation.CallSuper;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
@ -26,6 +28,7 @@ import android.support.annotation.Nullable;
|
||||||
import com.bluelinelabs.logansquare.LoganSquare;
|
import com.bluelinelabs.logansquare.LoganSquare;
|
||||||
import com.bluelinelabs.logansquare.annotation.JsonField;
|
import com.bluelinelabs.logansquare.annotation.JsonField;
|
||||||
import com.bluelinelabs.logansquare.annotation.JsonObject;
|
import com.bluelinelabs.logansquare.annotation.JsonObject;
|
||||||
|
import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease;
|
||||||
|
|
||||||
import org.mariotaku.twidere.TwidereConstants;
|
import org.mariotaku.twidere.TwidereConstants;
|
||||||
import org.mariotaku.twidere.annotation.CustomTabType;
|
import org.mariotaku.twidere.annotation.CustomTabType;
|
||||||
|
@ -34,8 +37,9 @@ import org.mariotaku.twidere.model.UserKey;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
@ParcelablePlease
|
||||||
@JsonObject
|
@JsonObject
|
||||||
public class TabArguments implements TwidereConstants {
|
public class TabArguments implements Parcelable {
|
||||||
@JsonField(name = "account_id")
|
@JsonField(name = "account_id")
|
||||||
String accountId;
|
String accountId;
|
||||||
|
|
||||||
|
@ -63,7 +67,7 @@ public class TabArguments implements TwidereConstants {
|
||||||
for (UserKey key : accountKeys) {
|
for (UserKey key : accountKeys) {
|
||||||
if (key == null) return;
|
if (key == null) return;
|
||||||
}
|
}
|
||||||
bundle.putParcelableArray(EXTRA_ACCOUNT_KEYS, accountKeys);
|
bundle.putParcelableArray(TwidereConstants.EXTRA_ACCOUNT_KEYS, accountKeys);
|
||||||
} else if (accountId != null) {
|
} else if (accountId != null) {
|
||||||
long id = Long.MIN_VALUE;
|
long id = Long.MIN_VALUE;
|
||||||
try {
|
try {
|
||||||
|
@ -73,10 +77,10 @@ public class TabArguments implements TwidereConstants {
|
||||||
}
|
}
|
||||||
if (id != Long.MIN_VALUE && id <= 0) {
|
if (id != Long.MIN_VALUE && id <= 0) {
|
||||||
// account_id = -1, means no account selected
|
// account_id = -1, means no account selected
|
||||||
bundle.putParcelableArray(EXTRA_ACCOUNT_KEYS, null);
|
bundle.putParcelableArray(TwidereConstants.EXTRA_ACCOUNT_KEYS, null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
bundle.putParcelableArray(EXTRA_ACCOUNT_KEYS, new UserKey[]{UserKey.valueOf(accountId)});
|
bundle.putParcelableArray(TwidereConstants.EXTRA_ACCOUNT_KEYS, new UserKey[]{UserKey.valueOf(accountId)});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,4 +121,26 @@ public class TabArguments implements TwidereConstants {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int describeContents() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(Parcel dest, int flags) {
|
||||||
|
TabArgumentsParcelablePlease.writeToParcel(this, dest, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final Creator<TabArguments> CREATOR = new Creator<TabArguments>() {
|
||||||
|
public TabArguments createFromParcel(Parcel source) {
|
||||||
|
TabArguments target = new TabArguments();
|
||||||
|
TabArgumentsParcelablePlease.readFromParcel(target, source);
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TabArguments[] newArray(int size) {
|
||||||
|
return new TabArguments[size];
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,8 @@ import com.bluelinelabs.logansquare.annotation.JsonField;
|
||||||
import com.bluelinelabs.logansquare.annotation.JsonObject;
|
import com.bluelinelabs.logansquare.annotation.JsonObject;
|
||||||
import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease;
|
import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease;
|
||||||
|
|
||||||
|
import org.mariotaku.twidere.TwidereConstants;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by mariotaku on 16/3/6.
|
* Created by mariotaku on 16/3/6.
|
||||||
*/
|
*/
|
||||||
|
@ -47,7 +49,7 @@ public class TextQueryArguments extends TabArguments implements Parcelable {
|
||||||
@Override
|
@Override
|
||||||
public void copyToBundle(@NonNull Bundle bundle) {
|
public void copyToBundle(@NonNull Bundle bundle) {
|
||||||
super.copyToBundle(bundle);
|
super.copyToBundle(bundle);
|
||||||
bundle.putString(EXTRA_QUERY, query);
|
bundle.putString(TwidereConstants.EXTRA_QUERY, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -27,6 +27,7 @@ import com.bluelinelabs.logansquare.annotation.JsonField;
|
||||||
import com.bluelinelabs.logansquare.annotation.JsonObject;
|
import com.bluelinelabs.logansquare.annotation.JsonObject;
|
||||||
import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease;
|
import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease;
|
||||||
|
|
||||||
|
import org.mariotaku.twidere.TwidereConstants;
|
||||||
import org.mariotaku.twidere.model.UserKey;
|
import org.mariotaku.twidere.model.UserKey;
|
||||||
|
|
||||||
@ParcelablePlease
|
@ParcelablePlease
|
||||||
|
@ -37,6 +38,14 @@ public class UserArguments extends TabArguments implements Parcelable {
|
||||||
@JsonField(name = "user_key")
|
@JsonField(name = "user_key")
|
||||||
UserKey userKey;
|
UserKey userKey;
|
||||||
|
|
||||||
|
public String getUserId() {
|
||||||
|
return userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserKey getUserKey() {
|
||||||
|
return userKey;
|
||||||
|
}
|
||||||
|
|
||||||
public void setUserKey(UserKey userKey) {
|
public void setUserKey(UserKey userKey) {
|
||||||
this.userKey = userKey;
|
this.userKey = userKey;
|
||||||
}
|
}
|
||||||
|
@ -45,9 +54,9 @@ public class UserArguments extends TabArguments implements Parcelable {
|
||||||
public void copyToBundle(@NonNull Bundle bundle) {
|
public void copyToBundle(@NonNull Bundle bundle) {
|
||||||
super.copyToBundle(bundle);
|
super.copyToBundle(bundle);
|
||||||
if (userKey == null) {
|
if (userKey == null) {
|
||||||
bundle.putParcelable(EXTRA_USER_KEY, UserKey.valueOf(userId));
|
bundle.putParcelable(TwidereConstants.EXTRA_USER_KEY, UserKey.valueOf(userId));
|
||||||
} else {
|
} else {
|
||||||
bundle.putParcelable(EXTRA_USER_KEY, userKey);
|
bundle.putParcelable(TwidereConstants.EXTRA_USER_KEY, userKey);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,8 @@ import com.bluelinelabs.logansquare.annotation.JsonField;
|
||||||
import com.bluelinelabs.logansquare.annotation.JsonObject;
|
import com.bluelinelabs.logansquare.annotation.JsonObject;
|
||||||
import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease;
|
import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease;
|
||||||
|
|
||||||
|
import org.mariotaku.twidere.TwidereConstants;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by mariotaku on 16/3/6.
|
* Created by mariotaku on 16/3/6.
|
||||||
*/
|
*/
|
||||||
|
@ -47,7 +49,7 @@ public class UserListArguments extends TabArguments implements Parcelable {
|
||||||
@Override
|
@Override
|
||||||
public void copyToBundle(@NonNull Bundle bundle) {
|
public void copyToBundle(@NonNull Bundle bundle) {
|
||||||
super.copyToBundle(bundle);
|
super.copyToBundle(bundle);
|
||||||
bundle.putString(EXTRA_LIST_ID, listId);
|
bundle.putString(TwidereConstants.EXTRA_LIST_ID, listId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -26,12 +26,15 @@ import com.bluelinelabs.logansquare.annotation.JsonField;
|
||||||
import com.bluelinelabs.logansquare.annotation.JsonObject;
|
import com.bluelinelabs.logansquare.annotation.JsonObject;
|
||||||
import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease;
|
import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease;
|
||||||
|
|
||||||
|
import org.mariotaku.twidere.annotation.TimelineStyle;
|
||||||
|
|
||||||
import static org.mariotaku.twidere.constant.IntentConstants.EXTRA_TIMELINE_STYLE;
|
import static org.mariotaku.twidere.constant.IntentConstants.EXTRA_TIMELINE_STYLE;
|
||||||
|
|
||||||
@JsonObject
|
@JsonObject
|
||||||
@ParcelablePlease
|
@ParcelablePlease
|
||||||
public class TimelineTabExtras extends TabExtras implements Parcelable {
|
public class TimelineTabExtras extends TabExtras implements Parcelable {
|
||||||
@JsonField(name = "timeline_style")
|
@JsonField(name = "timeline_style")
|
||||||
|
@TimelineStyle
|
||||||
int timelineStyle;
|
int timelineStyle;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -40,11 +43,12 @@ public class TimelineTabExtras extends TabExtras implements Parcelable {
|
||||||
bundle.putInt(EXTRA_TIMELINE_STYLE, timelineStyle);
|
bundle.putInt(EXTRA_TIMELINE_STYLE, timelineStyle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TimelineStyle
|
||||||
public int getTimelineStyle() {
|
public int getTimelineStyle() {
|
||||||
return timelineStyle;
|
return timelineStyle;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTimelineStyle(int timelineStyle) {
|
public void setTimelineStyle(@TimelineStyle int timelineStyle) {
|
||||||
this.timelineStyle = timelineStyle;
|
this.timelineStyle = timelineStyle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -687,10 +687,10 @@ public interface TwidereDataStore {
|
||||||
|
|
||||||
String MY_RETWEET_ID = "my_retweet_id";
|
String MY_RETWEET_ID = "my_retweet_id";
|
||||||
|
|
||||||
String MEDIA_JSON = "media_json";
|
|
||||||
|
|
||||||
String MENTIONS_JSON = "mentions_json";
|
String MENTIONS_JSON = "mentions_json";
|
||||||
|
|
||||||
|
String ATTACHMENT = "attachments";
|
||||||
|
|
||||||
String CARD = "card";
|
String CARD = "card";
|
||||||
|
|
||||||
String CARD_NAME = "card_type";
|
String CARD_NAME = "card_type";
|
||||||
|
|
|
@ -148,6 +148,10 @@ android {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
androidExtensions {
|
||||||
|
experimental = true
|
||||||
|
}
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenLocal()
|
mavenLocal()
|
||||||
maven { url 'https://s3.amazonaws.com/repo.commonsware.com' }
|
maven { url 'https://s3.amazonaws.com/repo.commonsware.com' }
|
||||||
|
@ -160,6 +164,7 @@ dependencies {
|
||||||
kapt "com.hannesdorfmann.parcelableplease:processor:${libVersions['ParcelablePlease']}"
|
kapt "com.hannesdorfmann.parcelableplease:processor:${libVersions['ParcelablePlease']}"
|
||||||
kapt "com.google.dagger:dagger-compiler:${libVersions['Dagger']}"
|
kapt "com.google.dagger:dagger-compiler:${libVersions['Dagger']}"
|
||||||
kapt "com.github.mariotaku.ObjectCursor:processor:${libVersions['ObjectCursor']}"
|
kapt "com.github.mariotaku.ObjectCursor:processor:${libVersions['ObjectCursor']}"
|
||||||
|
kapt "com.github.bumptech.glide:compiler:${libVersions['Glide']}"
|
||||||
|
|
||||||
implementation project(':twidere.component.common')
|
implementation project(':twidere.component.common')
|
||||||
implementation project(':twidere.component.nyan')
|
implementation project(':twidere.component.nyan')
|
||||||
|
@ -250,7 +255,6 @@ dependencies {
|
||||||
implementation "com.google.android.exoplayer:extension-okhttp:${libVersions['Exoplayer']}"
|
implementation "com.google.android.exoplayer:extension-okhttp:${libVersions['Exoplayer']}"
|
||||||
implementation "com.github.bumptech.glide:glide:${libVersions['Glide']}"
|
implementation "com.github.bumptech.glide:glide:${libVersions['Glide']}"
|
||||||
implementation "com.github.bumptech.glide:okhttp3-integration:${libVersions['GlideOkHttp3']}@aar"
|
implementation "com.github.bumptech.glide:okhttp3-integration:${libVersions['GlideOkHttp3']}@aar"
|
||||||
implementation "jp.wasabeef:glide-transformations:${libVersions['GlideTransformations']}"
|
|
||||||
implementation "com.theartofdev.edmodo:android-image-cropper:${libVersions['AndroidImageCropper']}"
|
implementation "com.theartofdev.edmodo:android-image-cropper:${libVersions['AndroidImageCropper']}"
|
||||||
|
|
||||||
implementation "com.github.mariotaku.MediaViewerLibrary:base:${libVersions['MediaViewerLibrary']}"
|
implementation "com.github.mariotaku.MediaViewerLibrary:base:${libVersions['MediaViewerLibrary']}"
|
||||||
|
|
|
@ -65,8 +65,6 @@ class DraftExtensionsTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun InputStream.contentEquals(that: InputStream): Boolean {
|
private fun InputStream.contentEquals(that: InputStream): Boolean {
|
||||||
var len1 = 0
|
var len1 = 0
|
||||||
var len2 = 0
|
var len2 = 0
|
||||||
|
@ -81,3 +79,5 @@ private fun InputStream.contentEquals(that: InputStream): Boolean {
|
||||||
}
|
}
|
||||||
return len1 == len2
|
return len1 == len2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
/*
|
||||||
|
* Twidere - Twitter client for Android
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012-2018 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.mariotaku.twidere.extension.model
|
||||||
|
|
||||||
|
import android.support.test.InstrumentationRegistry
|
||||||
|
import android.support.test.runner.AndroidJUnit4
|
||||||
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
import org.mariotaku.twidere.extension.queryAll
|
||||||
|
import org.mariotaku.twidere.model.Tab
|
||||||
|
import org.mariotaku.twidere.provider.TwidereDataStore.Tabs
|
||||||
|
import org.xmlpull.v1.XmlPullParserFactory
|
||||||
|
import java.io.File
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
@RunWith(AndroidJUnit4::class)
|
||||||
|
class HomeTabExtensionsTest {
|
||||||
|
@Test
|
||||||
|
fun testSerialize() {
|
||||||
|
val context = InstrumentationRegistry.getTargetContext()
|
||||||
|
val legacyTabs = context.contentResolver.queryAll(Tabs.CONTENT_URI, Tabs.COLUMNS,
|
||||||
|
null, null, Tabs.POSITION, cls = Tab::class.java)!!
|
||||||
|
val tabs = legacyTabs.map { it.toHomeTab() }
|
||||||
|
|
||||||
|
File(context.cacheDir, "${UUID.randomUUID()}.xml").writer(Charsets.UTF_8).use {
|
||||||
|
val serializer = XmlPullParserFactory.newInstance().newSerializer()
|
||||||
|
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true)
|
||||||
|
serializer.setOutput(it)
|
||||||
|
serializer.startDocument("UTF-8", true)
|
||||||
|
serializer.startTag(null, "tabs")
|
||||||
|
tabs.forEach { it.serialize(serializer) }
|
||||||
|
serializer.endTag(null, "tabs")
|
||||||
|
serializer.endDocument()
|
||||||
|
it.flush()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -146,14 +146,6 @@
|
||||||
android:name="override_tinted_status_bar_defaults"
|
android:name="override_tinted_status_bar_defaults"
|
||||||
android:value="true"/>
|
android:value="true"/>
|
||||||
|
|
||||||
<meta-data
|
|
||||||
android:name="com.bumptech.glide.integration.okhttp3.OkHttpGlideModule"
|
|
||||||
tools:node="remove"/>
|
|
||||||
|
|
||||||
<meta-data
|
|
||||||
android:name="org.mariotaku.twidere.util.glide.TwidereGlideModule"
|
|
||||||
android:value="GlideModule"/>
|
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".activity.MainActivity"
|
android:name=".activity.MainActivity"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
|
|
|
@ -30,7 +30,7 @@ import org.mariotaku.twidere.model.UserKey;
|
||||||
public interface Constants extends TwidereConstants {
|
public interface Constants extends TwidereConstants {
|
||||||
|
|
||||||
String DATABASES_NAME = "twidere.sqlite";
|
String DATABASES_NAME = "twidere.sqlite";
|
||||||
int DATABASES_VERSION = 192;
|
int DATABASES_VERSION = 194;
|
||||||
|
|
||||||
int EXTRA_FEATURES_NOTICE_VERSION = 2;
|
int EXTRA_FEATURES_NOTICE_VERSION = 2;
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,6 @@ import android.graphics.drawable.Drawable;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.FrameLayout;
|
import android.widget.FrameLayout;
|
||||||
|
|
||||||
import org.mariotaku.twidere.util.support.view.ViewOutlineProviderCompat;
|
import org.mariotaku.twidere.util.support.view.ViewOutlineProviderCompat;
|
||||||
|
@ -46,18 +45,6 @@ public final class ViewSupport {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public static <T extends View> T findViewByType(View view, Class<T> cls) {
|
|
||||||
if (cls.isAssignableFrom(view.getClass())) return (T) view;
|
|
||||||
if (view instanceof ViewGroup) {
|
|
||||||
for (int i = 0, j = ((ViewGroup) view).getChildCount(); i < j; i++) {
|
|
||||||
final View found = findViewByType(((ViewGroup) view).getChildAt(i), cls);
|
|
||||||
if (found != null) return (T) found;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setForeground(View view, Drawable foreground) {
|
public static void setForeground(View view, Drawable foreground) {
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
||||||
ViewAccessorICS.setForeground(view, foreground);
|
ViewAccessorICS.setForeground(view, foreground);
|
||||||
|
|
|
@ -1,14 +1,17 @@
|
||||||
package org.mariotaku.ktextension
|
package org.mariotaku.ktextension
|
||||||
|
|
||||||
|
import android.app.Application
|
||||||
import android.content.BroadcastReceiver
|
import android.content.BroadcastReceiver
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.support.v4.content.ContextCompat
|
import android.support.v4.content.ContextCompat
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
/**
|
val Context.hasApplication: Boolean
|
||||||
* Created by mariotaku on 2016/12/13.
|
get() = applicationContext is Application
|
||||||
*/
|
|
||||||
|
val Context.preferExternalCacheDir: File
|
||||||
|
get() = externalCacheDir ?: cacheDir
|
||||||
|
|
||||||
fun Context.checkAllSelfPermissionsGranted(vararg permissions: String): Boolean {
|
fun Context.checkAllSelfPermissionsGranted(vararg permissions: String): Boolean {
|
||||||
return permissions.none { ContextCompat.checkSelfPermission(this, it) != PackageManager.PERMISSION_GRANTED }
|
return permissions.none { ContextCompat.checkSelfPermission(this, it) != PackageManager.PERMISSION_GRANTED }
|
||||||
|
@ -27,6 +30,3 @@ fun Context.unregisterReceiverSafe(receiver: BroadcastReceiver?): Boolean {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val Context.preferExternalCacheDir: File
|
|
||||||
get() = externalCacheDir ?: cacheDir
|
|
|
@ -24,7 +24,7 @@ import android.text.Spanned
|
||||||
import org.mariotaku.twidere.text.ZeroWidthSpan
|
import org.mariotaku.twidere.text.ZeroWidthSpan
|
||||||
import java.text.Normalizer
|
import java.text.Normalizer
|
||||||
|
|
||||||
fun CharSequence.appendTo(sb: StringBuilder) {
|
fun CharSequence.appendTo(sb: Appendable) {
|
||||||
sb.append(this)
|
sb.append(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ import android.widget.AdapterView
|
||||||
import android.widget.AdapterView.OnItemClickListener
|
import android.widget.AdapterView.OnItemClickListener
|
||||||
import android.widget.ListView
|
import android.widget.ListView
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import kotlinx.android.synthetic.main.activity_account_selector.*
|
import kotlinx.android.synthetic.main.activity_account_selector.*
|
||||||
import org.mariotaku.ktextension.getNullableTypedArrayExtra
|
import org.mariotaku.ktextension.getNullableTypedArrayExtra
|
||||||
import org.mariotaku.twidere.R
|
import org.mariotaku.twidere.R
|
||||||
|
@ -96,7 +97,7 @@ class AccountSelectorActivity : BaseActivity(), OnItemClickListener {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.activity_account_selector)
|
setContentView(R.layout.activity_account_selector)
|
||||||
DataStoreUtils.prepareDatabase(this)
|
DataStoreUtils.prepareDatabase(this)
|
||||||
adapter = AccountDetailsAdapter(this, requestManager).apply {
|
adapter = AccountDetailsAdapter(this, Glide.with(this)).apply {
|
||||||
switchEnabled = !isSingleSelection
|
switchEnabled = !isSingleSelection
|
||||||
sortEnabled = false
|
sortEnabled = false
|
||||||
val am = AccountManager.get(context)
|
val am = AccountManager.get(context)
|
||||||
|
|
|
@ -45,7 +45,6 @@ import android.view.View
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.RequestManager
|
import com.bumptech.glide.RequestManager
|
||||||
import com.squareup.otto.Bus
|
|
||||||
import nl.komponents.kovenant.Promise
|
import nl.komponents.kovenant.Promise
|
||||||
import org.mariotaku.chameleon.Chameleon
|
import org.mariotaku.chameleon.Chameleon
|
||||||
import org.mariotaku.chameleon.ChameleonActivity
|
import org.mariotaku.chameleon.ChameleonActivity
|
||||||
|
@ -66,7 +65,6 @@ import org.mariotaku.twidere.constant.*
|
||||||
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
||||||
import org.mariotaku.twidere.extension.defaultSharedPreferences
|
import org.mariotaku.twidere.extension.defaultSharedPreferences
|
||||||
import org.mariotaku.twidere.extension.firstLanguage
|
import org.mariotaku.twidere.extension.firstLanguage
|
||||||
import org.mariotaku.twidere.extension.get
|
|
||||||
import org.mariotaku.twidere.extension.overriding
|
import org.mariotaku.twidere.extension.overriding
|
||||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowInsetsCallback
|
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowInsetsCallback
|
||||||
import org.mariotaku.twidere.model.DefaultFeatures
|
import org.mariotaku.twidere.model.DefaultFeatures
|
||||||
|
@ -98,14 +96,10 @@ open class BaseActivity : ChameleonActivity(), IBaseActivity<BaseActivity>, IThe
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var readStateManager: ReadStateManager
|
lateinit var readStateManager: ReadStateManager
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var bus: Bus
|
|
||||||
@Inject
|
|
||||||
lateinit var preferences: SharedPreferences
|
lateinit var preferences: SharedPreferences
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var notificationManager: NotificationManagerWrapper
|
lateinit var notificationManager: NotificationManagerWrapper
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var userColorNameManager: UserColorNameManager
|
|
||||||
@Inject
|
|
||||||
lateinit var permissionsManager: PermissionsManager
|
lateinit var permissionsManager: PermissionsManager
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var extraFeaturesService: ExtraFeaturesService
|
lateinit var extraFeaturesService: ExtraFeaturesService
|
||||||
|
@ -128,9 +122,6 @@ open class BaseActivity : ChameleonActivity(), IBaseActivity<BaseActivity>, IThe
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var dataSyncProvider: DataSyncProvider
|
lateinit var dataSyncProvider: DataSyncProvider
|
||||||
|
|
||||||
lateinit var requestManager: RequestManager
|
|
||||||
private set
|
|
||||||
|
|
||||||
protected val isDialogTheme: Boolean
|
protected val isDialogTheme: Boolean
|
||||||
get() = ThemeUtils.getBooleanFromAttribute(this, R.attr.isDialogTheme)
|
get() = ThemeUtils.getBooleanFromAttribute(this, R.attr.isDialogTheme)
|
||||||
|
|
||||||
|
@ -241,8 +232,8 @@ open class BaseActivity : ChameleonActivity(), IBaseActivity<BaseActivity>, IThe
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
if (BuildConfig.DEBUG) {
|
if (BuildConfig.DEBUG) {
|
||||||
StrictModeUtils.detectAllVmPolicy()
|
StrictModeUtils.detectVmPolicies()
|
||||||
StrictModeUtils.detectAllThreadPolicy()
|
StrictModeUtils.detectThreadPolicies()
|
||||||
}
|
}
|
||||||
val themeColor = themePreferences[themeColorKey]
|
val themeColor = themePreferences[themeColorKey]
|
||||||
val themeResource = getThemeResource(themePreferences, themePreferences[themeKey], themeColor)
|
val themeResource = getThemeResource(themePreferences, themePreferences[themeKey], themeColor)
|
||||||
|
@ -252,27 +243,11 @@ open class BaseActivity : ChameleonActivity(), IBaseActivity<BaseActivity>, IThe
|
||||||
onApplyNavigationStyle(themeNavigationStyle, themeColor)
|
onApplyNavigationStyle(themeNavigationStyle, themeColor)
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
title = activityLabel
|
title = activityLabel
|
||||||
requestManager = Glide.with(this)
|
|
||||||
ActivitySupport.setTaskDescription(this, TaskDescriptionCompat(title.toString(), null,
|
ActivitySupport.setTaskDescription(this, TaskDescriptionCompat(title.toString(), null,
|
||||||
ColorUtils.setAlphaComponent(overrideTheme.colorToolbar, 0xFF)))
|
ColorUtils.setAlphaComponent(overrideTheme.colorToolbar, 0xFF)))
|
||||||
GeneralComponent.get(this).inject(this)
|
GeneralComponent.get(this).inject(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStart() {
|
|
||||||
super.onStart()
|
|
||||||
requestManager.onStart()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onStop() {
|
|
||||||
requestManager.onStop()
|
|
||||||
super.onStop()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDestroy() {
|
|
||||||
requestManager.onDestroy()
|
|
||||||
super.onDestroy()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
val adapter = NfcAdapter.getDefaultAdapter(this)
|
val adapter = NfcAdapter.getDefaultAdapter(this)
|
||||||
|
|
|
@ -212,7 +212,7 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener
|
||||||
bottomMenuAnimator = ViewAnimator()
|
bottomMenuAnimator = ViewAnimator()
|
||||||
bottomMenuAnimator.setupViews()
|
bottomMenuAnimator.setupViews()
|
||||||
|
|
||||||
mediaPreviewAdapter = MediaPreviewAdapter(this, requestManager)
|
mediaPreviewAdapter = MediaPreviewAdapter(this, Glide.with(this))
|
||||||
mediaPreviewAdapter.listener = object : MediaPreviewAdapter.Listener {
|
mediaPreviewAdapter.listener = object : MediaPreviewAdapter.Listener {
|
||||||
override fun onEditClick(position: Int, holder: MediaPreviewViewHolder) {
|
override fun onEditClick(position: Int, holder: MediaPreviewViewHolder) {
|
||||||
attachedMediaPreview.showContextMenuForChild(holder.itemView)
|
attachedMediaPreview.showContextMenuForChild(holder.itemView)
|
||||||
|
@ -832,11 +832,12 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener
|
||||||
|
|
||||||
val displayDoneIcon = isAccountSelectorVisible
|
val displayDoneIcon = isAccountSelectorVisible
|
||||||
|
|
||||||
|
val requestManager = Glide.with(this)
|
||||||
if (single != null) {
|
if (single != null) {
|
||||||
accountsCount.text = null
|
accountsCount.text = null
|
||||||
|
|
||||||
if (displayDoneIcon) {
|
if (displayDoneIcon) {
|
||||||
Glide.clear(accountProfileImage)
|
requestManager.clear(accountProfileImage)
|
||||||
accountProfileImage.setColorFilter(ThemeUtils.getColorFromAttribute(this,
|
accountProfileImage.setColorFilter(ThemeUtils.getColorFromAttribute(this,
|
||||||
android.R.attr.colorForeground))
|
android.R.attr.colorForeground))
|
||||||
accountProfileImage.scaleType = ImageView.ScaleType.CENTER_INSIDE
|
accountProfileImage.scaleType = ImageView.ScaleType.CENTER_INSIDE
|
||||||
|
@ -852,7 +853,7 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener
|
||||||
} else {
|
} else {
|
||||||
accountsCount.text = accounts.size.toString()
|
accountsCount.text = accounts.size.toString()
|
||||||
|
|
||||||
Glide.clear(accountProfileImage)
|
requestManager.clear(accountProfileImage)
|
||||||
if (displayDoneIcon) {
|
if (displayDoneIcon) {
|
||||||
accountProfileImage.setColorFilter(ThemeUtils.getColorFromAttribute(this,
|
accountProfileImage.setColorFilter(ThemeUtils.getColorFromAttribute(this,
|
||||||
android.R.attr.colorForeground))
|
android.R.attr.colorForeground))
|
||||||
|
@ -965,14 +966,15 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener
|
||||||
if (status.is_retweet && !TextUtils.isEmpty(status.retweeted_by_user_screen_name)) {
|
if (status.is_retweet && !TextUtils.isEmpty(status.retweeted_by_user_screen_name)) {
|
||||||
status.retweeted_by_user_acct?.addTo(mentions)
|
status.retweeted_by_user_acct?.addTo(mentions)
|
||||||
}
|
}
|
||||||
if (status.is_quote && !TextUtils.isEmpty(status.quoted_user_screen_name)) {
|
if (status.is_quote && !TextUtils.isEmpty(status.quoted?.user_screen_name)) {
|
||||||
status.quoted_user_acct?.addTo(mentions)
|
status.quoted?.user_acct?.addTo(mentions)
|
||||||
}
|
}
|
||||||
when (statusAccount.type) {
|
when (statusAccount.type) {
|
||||||
AccountType.FANFOU -> {
|
AccountType.FANFOU -> {
|
||||||
addFanfouHtmlToMentions(status.text_unescaped, status.spans, mentions)
|
addFanfouHtmlToMentions(status.text_unescaped, status.spans, mentions)
|
||||||
if (status.is_quote) {
|
val quoted = status.quoted
|
||||||
addFanfouHtmlToMentions(status.quoted_text_unescaped, status.quoted_spans, mentions)
|
if (status.is_quote && quoted!= null) {
|
||||||
|
addFanfouHtmlToMentions(quoted.text_unescaped, quoted.spans, mentions)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AccountType.MASTODON -> {
|
AccountType.MASTODON -> {
|
||||||
|
@ -982,11 +984,11 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener
|
||||||
status.mentions.filterNot {
|
status.mentions.filterNot {
|
||||||
it.key == status.account_key || it.screen_name.isNullOrEmpty()
|
it.key == status.account_key || it.screen_name.isNullOrEmpty()
|
||||||
}.mapTo(mentions) { it.getAcct(statusAccount.key) }
|
}.mapTo(mentions) { it.getAcct(statusAccount.key) }
|
||||||
mentions.addAll(extractor.extractMentionedScreennames(status.quoted_text_plain))
|
mentions.addAll(extractor.extractMentionedScreennames(status.quoted?.text_plain))
|
||||||
} else {
|
} else {
|
||||||
mentions.addAll(extractor.extractMentionedScreennames(status.text_plain))
|
mentions.addAll(extractor.extractMentionedScreennames(status.text_plain))
|
||||||
if (status.is_quote) {
|
if (status.is_quote) {
|
||||||
mentions.addAll(extractor.extractMentionedScreennames(status.quoted_text_plain))
|
mentions.addAll(extractor.extractMentionedScreennames(status.quoted?.text_plain))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1146,7 +1148,7 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener
|
||||||
showDefaultLabelAndHint()
|
showDefaultLabelAndHint()
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
val replyToName = userColorNameManager.getDisplayName(status)
|
val replyToName = UserColorNameManager.get(this).getDisplayName(status)
|
||||||
replyLabel.spannable = getString(R.string.label_quote_name_text, replyToName, status.text_unescaped)
|
replyLabel.spannable = getString(R.string.label_quote_name_text, replyToName, status.text_unescaped)
|
||||||
replyLabel.visibility = View.VISIBLE
|
replyLabel.visibility = View.VISIBLE
|
||||||
editText.hint = getString(R.string.label_quote_name, replyToName)
|
editText.hint = getString(R.string.label_quote_name, replyToName)
|
||||||
|
@ -1158,7 +1160,7 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener
|
||||||
showDefaultLabelAndHint()
|
showDefaultLabelAndHint()
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
val replyToName = userColorNameManager.getDisplayName(status)
|
val replyToName = UserColorNameManager.get(this).getDisplayName(status)
|
||||||
replyLabel.spannable = getString(R.string.label_reply_name_text, replyToName, status.text_unescaped)
|
replyLabel.spannable = getString(R.string.label_reply_name_text, replyToName, status.text_unescaped)
|
||||||
replyLabel.visibility = View.VISIBLE
|
replyLabel.visibility = View.VISIBLE
|
||||||
editText.hint = getString(R.string.label_reply_name, replyToName)
|
editText.hint = getString(R.string.label_reply_name, replyToName)
|
||||||
|
@ -2024,7 +2026,7 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener
|
||||||
|
|
||||||
private class AccountIconsAdapter(
|
private class AccountIconsAdapter(
|
||||||
private val activity: ComposeActivity
|
private val activity: ComposeActivity
|
||||||
) : BaseRecyclerViewAdapter<AccountIconViewHolder>(activity, activity.requestManager) {
|
) : BaseRecyclerViewAdapter<AccountIconViewHolder>(activity, Glide.with(activity)) {
|
||||||
private val inflater: LayoutInflater = activity.layoutInflater
|
private val inflater: LayoutInflater = activity.layoutInflater
|
||||||
private val selection: MutableMap<UserKey, Boolean> = HashMap()
|
private val selection: MutableMap<UserKey, Boolean> = HashMap()
|
||||||
|
|
||||||
|
|
|
@ -99,6 +99,7 @@ import org.mariotaku.twidere.provider.TwidereDataStore.Messages.Conversations
|
||||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
||||||
import org.mariotaku.twidere.receiver.NotificationReceiver
|
import org.mariotaku.twidere.receiver.NotificationReceiver
|
||||||
import org.mariotaku.twidere.service.StreamingService
|
import org.mariotaku.twidere.service.StreamingService
|
||||||
|
import org.mariotaku.twidere.singleton.BusSingleton
|
||||||
import org.mariotaku.twidere.util.*
|
import org.mariotaku.twidere.util.*
|
||||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback
|
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback
|
||||||
import org.mariotaku.twidere.util.premium.ExtraFeaturesService
|
import org.mariotaku.twidere.util.premium.ExtraFeaturesService
|
||||||
|
@ -334,7 +335,7 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||||
super.onStart()
|
super.onStart()
|
||||||
multiSelectHandler.dispatchOnStart()
|
multiSelectHandler.dispatchOnStart()
|
||||||
AccountManager.get(this).addOnAccountsUpdatedListenerSafe(accountUpdatedListener, updateImmediately = false)
|
AccountManager.get(this).addOnAccountsUpdatedListenerSafe(accountUpdatedListener, updateImmediately = false)
|
||||||
bus.register(this)
|
BusSingleton.register(this)
|
||||||
|
|
||||||
readStateManager.registerOnSharedPreferenceChangeListener(readStateChangeListener)
|
readStateManager.registerOnSharedPreferenceChangeListener(readStateChangeListener)
|
||||||
updateUnreadCount()
|
updateUnreadCount()
|
||||||
|
@ -349,7 +350,7 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
multiSelectHandler.dispatchOnStop()
|
multiSelectHandler.dispatchOnStop()
|
||||||
readStateManager.unregisterOnSharedPreferenceChangeListener(readStateChangeListener)
|
readStateManager.unregisterOnSharedPreferenceChangeListener(readStateChangeListener)
|
||||||
bus.unregister(this)
|
BusSingleton.unregister(this)
|
||||||
AccountManager.get(this).removeOnAccountsUpdatedListenerSafe(accountUpdatedListener)
|
AccountManager.get(this).removeOnAccountsUpdatedListenerSafe(accountUpdatedListener)
|
||||||
preferences.edit().putInt(KEY_SAVED_TAB_POSITION, mainPager.currentItem).apply()
|
preferences.edit().putInt(KEY_SAVED_TAB_POSITION, mainPager.currentItem).apply()
|
||||||
dataSyncProvider.newTimelineSyncManager()?.commit()
|
dataSyncProvider.newTimelineSyncManager()?.commit()
|
||||||
|
|
|
@ -37,6 +37,7 @@ import android.widget.Toast
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.Priority
|
import com.bumptech.glide.Priority
|
||||||
import com.bumptech.glide.RequestManager
|
import com.bumptech.glide.RequestManager
|
||||||
|
import com.bumptech.glide.request.RequestOptions
|
||||||
import kotlinx.android.synthetic.main.activity_main.*
|
import kotlinx.android.synthetic.main.activity_main.*
|
||||||
import nl.komponents.kovenant.Promise
|
import nl.komponents.kovenant.Promise
|
||||||
import org.mariotaku.chameleon.Chameleon
|
import org.mariotaku.chameleon.Chameleon
|
||||||
|
@ -100,12 +101,10 @@ open class MainActivity : ChameleonActivity(), IBaseActivity<MainActivity> {
|
||||||
return@lazy UserTheme.get(this, themePreferences)
|
return@lazy UserTheme.get(this, themePreferences)
|
||||||
}
|
}
|
||||||
|
|
||||||
private lateinit var requestManager: RequestManager
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
if (BuildConfig.DEBUG) {
|
if (BuildConfig.DEBUG) {
|
||||||
StrictModeUtils.detectAllVmPolicy()
|
StrictModeUtils.detectVmPolicies()
|
||||||
StrictModeUtils.detectAllThreadPolicy()
|
StrictModeUtils.detectThreadPolicies()
|
||||||
}
|
}
|
||||||
val themeColor = themePreferences[themeColorKey]
|
val themeColor = themePreferences[themeColorKey]
|
||||||
val themeResource = getThemeResource(themePreferences, themePreferences[themeKey], themeColor)
|
val themeResource = getThemeResource(themePreferences, themePreferences[themeKey], themeColor)
|
||||||
|
@ -114,7 +113,6 @@ open class MainActivity : ChameleonActivity(), IBaseActivity<MainActivity> {
|
||||||
}
|
}
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
GeneralComponent.get(this).inject(this)
|
GeneralComponent.get(this).inject(this)
|
||||||
requestManager = Glide.with(this)
|
|
||||||
setContentView(R.layout.activity_main)
|
setContentView(R.layout.activity_main)
|
||||||
|
|
||||||
if (!preferences[promotionsEnabledKey]) {
|
if (!preferences[promotionsEnabledKey]) {
|
||||||
|
@ -175,21 +173,6 @@ open class MainActivity : ChameleonActivity(), IBaseActivity<MainActivity> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStart() {
|
|
||||||
super.onStart()
|
|
||||||
requestManager.onStart()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onStop() {
|
|
||||||
requestManager.onStop()
|
|
||||||
super.onStop()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDestroy() {
|
|
||||||
requestManager.onDestroy()
|
|
||||||
super.onDestroy()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPause() {
|
override fun onPause() {
|
||||||
actionHelper.dispatchOnPause(this)
|
actionHelper.dispatchOnPause(this)
|
||||||
super.onPause()
|
super.onPause()
|
||||||
|
@ -246,7 +229,7 @@ open class MainActivity : ChameleonActivity(), IBaseActivity<MainActivity> {
|
||||||
val image = images.firstOrNull() ?: return false
|
val image = images.firstOrNull() ?: return false
|
||||||
|
|
||||||
Glide.with(this).load(image.url)
|
Glide.with(this).load(image.url)
|
||||||
.priority(Priority.HIGH)
|
.apply(RequestOptions.priorityOf(Priority.HIGH))
|
||||||
.into(presentationView)
|
.into(presentationView)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
|
@ -516,7 +516,7 @@ class MediaViewerActivity : BaseActivity(), IMediaViewerActivity, MediaSwipeClos
|
||||||
intent.addCategory(Intent.CATEGORY_OPENABLE)
|
intent.addCategory(Intent.CATEGORY_OPENABLE)
|
||||||
val extension = fileInfo.extension
|
val extension = fileInfo.extension
|
||||||
val saveFileName = if (extension != null) {
|
val saveFileName = if (extension != null) {
|
||||||
"${fileInfo.name?.removeSuffix("_$extension")}.$extension"
|
"${fileInfo.name.removeSuffix("_$extension")}.$extension"
|
||||||
} else {
|
} else {
|
||||||
fileInfo.name
|
fileInfo.name
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ import android.view.*
|
||||||
import android.widget.Button
|
import android.widget.Button
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.RequestManager
|
import com.bumptech.glide.RequestManager
|
||||||
import kotlinx.android.synthetic.main.activity_premium_dashboard.*
|
import kotlinx.android.synthetic.main.activity_premium_dashboard.*
|
||||||
import kotlinx.android.synthetic.main.adapter_item_extra_feature_normal.view.*
|
import kotlinx.android.synthetic.main.adapter_item_extra_feature_normal.view.*
|
||||||
|
@ -48,7 +49,7 @@ class PremiumDashboardActivity : BaseActivity() {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.activity_premium_dashboard)
|
setContentView(R.layout.activity_premium_dashboard)
|
||||||
|
|
||||||
adapter = ControllersAdapter(this, requestManager)
|
adapter = ControllersAdapter(this, Glide.with(this))
|
||||||
recyclerView.adapter = adapter
|
recyclerView.adapter = adapter
|
||||||
recyclerView.layoutManager = LinearLayoutManager(this)
|
recyclerView.layoutManager = LinearLayoutManager(this)
|
||||||
if (extraFeaturesService.isSupported()) {
|
if (extraFeaturesService.isSupported()) {
|
||||||
|
|
|
@ -25,7 +25,6 @@ import android.content.ActivityNotFoundException
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.graphics.PorterDuff.Mode
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.support.v4.app.LoaderManager.LoaderCallbacks
|
import android.support.v4.app.LoaderManager.LoaderCallbacks
|
||||||
|
@ -43,6 +42,7 @@ import android.view.inputmethod.InputMethodManager
|
||||||
import android.widget.*
|
import android.widget.*
|
||||||
import android.widget.AdapterView.OnItemClickListener
|
import android.widget.AdapterView.OnItemClickListener
|
||||||
import android.widget.AdapterView.OnItemSelectedListener
|
import android.widget.AdapterView.OnItemSelectedListener
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import kotlinx.android.synthetic.main.activity_quick_search_bar.*
|
import kotlinx.android.synthetic.main.activity_quick_search_bar.*
|
||||||
import org.mariotaku.kpreferences.get
|
import org.mariotaku.kpreferences.get
|
||||||
import org.mariotaku.ktextension.empty
|
import org.mariotaku.ktextension.empty
|
||||||
|
@ -66,11 +66,8 @@ import org.mariotaku.twidere.model.SuggestionItem
|
||||||
import org.mariotaku.twidere.model.UserKey
|
import org.mariotaku.twidere.model.UserKey
|
||||||
import org.mariotaku.twidere.provider.TwidereDataStore.SearchHistory
|
import org.mariotaku.twidere.provider.TwidereDataStore.SearchHistory
|
||||||
import org.mariotaku.twidere.provider.TwidereDataStore.Suggestions
|
import org.mariotaku.twidere.provider.TwidereDataStore.Suggestions
|
||||||
import org.mariotaku.twidere.util.EditTextEnterHandler
|
import org.mariotaku.twidere.util.*
|
||||||
import org.mariotaku.twidere.util.EditTextEnterHandler.EnterListener
|
import org.mariotaku.twidere.util.EditTextEnterHandler.EnterListener
|
||||||
import org.mariotaku.twidere.util.IntentUtils
|
|
||||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler
|
|
||||||
import org.mariotaku.twidere.util.SwipeDismissListViewTouchListener
|
|
||||||
import org.mariotaku.twidere.util.promotion.PromotionService
|
import org.mariotaku.twidere.util.promotion.PromotionService
|
||||||
import org.mariotaku.twidere.view.ProfileImageView
|
import org.mariotaku.twidere.view.ProfileImageView
|
||||||
|
|
||||||
|
@ -100,7 +97,7 @@ class QuickSearchBarActivity : BaseActivity(), OnClickListener, LoaderCallbacks<
|
||||||
val am = AccountManager.get(this)
|
val am = AccountManager.get(this)
|
||||||
val accounts = am.getAllDetails(am.ownedAccounts, true)
|
val accounts = am.getAllDetails(am.ownedAccounts, true)
|
||||||
val accountsSpinnerAdapter = AccountsSpinnerAdapter(this, R.layout.spinner_item_account_icon,
|
val accountsSpinnerAdapter = AccountsSpinnerAdapter(this, R.layout.spinner_item_account_icon,
|
||||||
R.layout.list_item_simple_user, requestManager = requestManager)
|
R.layout.list_item_simple_user, requestManager = Glide.with(this))
|
||||||
accountsSpinnerAdapter.accounts = accounts.toList()
|
accountsSpinnerAdapter.accounts = accounts.toList()
|
||||||
accountSpinner.adapter = accountsSpinnerAdapter
|
accountSpinner.adapter = accountsSpinnerAdapter
|
||||||
accountSpinner.onItemSelectedListener = this
|
accountSpinner.onItemSelectedListener = this
|
||||||
|
@ -361,9 +358,9 @@ class QuickSearchBarActivity : BaseActivity(), OnClickListener, LoaderCallbacks<
|
||||||
|
|
||||||
private val profileImageStyle = activity.preferences[profileImageStyleKey]
|
private val profileImageStyle = activity.preferences[profileImageStyleKey]
|
||||||
private val profileImageSize = activity.getString(R.string.profile_image_size)
|
private val profileImageSize = activity.getString(R.string.profile_image_size)
|
||||||
private val requestManager = activity.requestManager
|
private val requestManager = Glide.with(activity)
|
||||||
private val inflater = LayoutInflater.from(activity)
|
private val inflater = LayoutInflater.from(activity)
|
||||||
private val userColorNameManager = activity.userColorNameManager
|
private val userColorNameManager = UserColorNameManager.get(activity)
|
||||||
private val removedPositions = ArrayList<Int>()
|
private val removedPositions = ArrayList<Int>()
|
||||||
|
|
||||||
private var indices: SuggestionItem.Indices? = null
|
private var indices: SuggestionItem.Indices? = null
|
||||||
|
|
|
@ -426,24 +426,13 @@ class SignInActivity : BaseActivity(), OnClickListener, TextWatcher,
|
||||||
|
|
||||||
internal fun onSignInError(exception: Exception) {
|
internal fun onSignInError(exception: Exception) {
|
||||||
DebugLog.w(LOGTAG, "Sign in error", exception)
|
DebugLog.w(LOGTAG, "Sign in error", exception)
|
||||||
var errorReason: String? = null
|
when (exception) {
|
||||||
if (exception is AuthenticityTokenException) {
|
is AuthenticityTokenException -> Toast.makeText(this, R.string.message_toast_wrong_api_key, Toast.LENGTH_SHORT).show()
|
||||||
Toast.makeText(this, R.string.message_toast_wrong_api_key, Toast.LENGTH_SHORT).show()
|
is WrongUserPassException -> Toast.makeText(this, R.string.message_toast_wrong_username_password, Toast.LENGTH_SHORT).show()
|
||||||
errorReason = "wrong_api_key"
|
is SignInTask.WrongBasicCredentialException -> Toast.makeText(this, R.string.message_toast_wrong_username_password, Toast.LENGTH_SHORT).show()
|
||||||
} else if (exception is WrongUserPassException) {
|
is SignInTask.WrongAPIURLFormatException -> Toast.makeText(this, R.string.message_toast_wrong_api_key, Toast.LENGTH_SHORT).show()
|
||||||
Toast.makeText(this, R.string.message_toast_wrong_username_password, Toast.LENGTH_SHORT).show()
|
is LoginVerificationException -> Toast.makeText(this, R.string.message_toast_login_verification_failed, Toast.LENGTH_SHORT).show()
|
||||||
errorReason = "wrong_username_password"
|
else -> Toast.makeText(this, exception.getErrorMessage(this), Toast.LENGTH_SHORT).show()
|
||||||
} else if (exception is SignInTask.WrongBasicCredentialException) {
|
|
||||||
Toast.makeText(this, R.string.message_toast_wrong_username_password, Toast.LENGTH_SHORT).show()
|
|
||||||
errorReason = "wrong_username_password"
|
|
||||||
} else if (exception is SignInTask.WrongAPIURLFormatException) {
|
|
||||||
Toast.makeText(this, R.string.message_toast_wrong_api_key, Toast.LENGTH_SHORT).show()
|
|
||||||
errorReason = "wrong_api_key"
|
|
||||||
} else if (exception is LoginVerificationException) {
|
|
||||||
Toast.makeText(this, R.string.message_toast_login_verification_failed, Toast.LENGTH_SHORT).show()
|
|
||||||
errorReason = "login_verification_failed"
|
|
||||||
} else {
|
|
||||||
Toast.makeText(this, exception.getErrorMessage(this), Toast.LENGTH_SHORT).show()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ import android.support.v4.content.Loader
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.AdapterView.OnItemClickListener
|
import android.widget.AdapterView.OnItemClickListener
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import kotlinx.android.synthetic.main.layout_list_with_empty_view.*
|
import kotlinx.android.synthetic.main.layout_list_with_empty_view.*
|
||||||
import org.mariotaku.ktextension.Bundle
|
import org.mariotaku.ktextension.Bundle
|
||||||
import org.mariotaku.ktextension.contains
|
import org.mariotaku.ktextension.contains
|
||||||
|
@ -39,6 +40,7 @@ import org.mariotaku.twidere.annotation.LoadMorePosition
|
||||||
import org.mariotaku.twidere.constant.IntentConstants.*
|
import org.mariotaku.twidere.constant.IntentConstants.*
|
||||||
import org.mariotaku.twidere.extension.accountKey
|
import org.mariotaku.twidere.extension.accountKey
|
||||||
import org.mariotaku.twidere.extension.adapter.all
|
import org.mariotaku.twidere.extension.adapter.all
|
||||||
|
import org.mariotaku.twidere.extension.get
|
||||||
import org.mariotaku.twidere.extension.userKey
|
import org.mariotaku.twidere.extension.userKey
|
||||||
import org.mariotaku.twidere.loader.iface.IPaginationLoader
|
import org.mariotaku.twidere.loader.iface.IPaginationLoader
|
||||||
import org.mariotaku.twidere.loader.userlists.UserListOwnershipsLoader
|
import org.mariotaku.twidere.loader.userlists.UserListOwnershipsLoader
|
||||||
|
@ -46,6 +48,7 @@ import org.mariotaku.twidere.model.ParcelableUser
|
||||||
import org.mariotaku.twidere.model.ParcelableUserList
|
import org.mariotaku.twidere.model.ParcelableUserList
|
||||||
import org.mariotaku.twidere.model.UserKey
|
import org.mariotaku.twidere.model.UserKey
|
||||||
import org.mariotaku.twidere.model.pagination.Pagination
|
import org.mariotaku.twidere.model.pagination.Pagination
|
||||||
|
import org.mariotaku.twidere.singleton.BusSingleton
|
||||||
import org.mariotaku.twidere.util.ContentScrollHandler
|
import org.mariotaku.twidere.util.ContentScrollHandler
|
||||||
import org.mariotaku.twidere.util.ListViewScrollHandler
|
import org.mariotaku.twidere.util.ListViewScrollHandler
|
||||||
|
|
||||||
|
@ -86,7 +89,7 @@ class UserListSelectorActivity : BaseActivity(),
|
||||||
}
|
}
|
||||||
setContentView(R.layout.activity_user_list_selector)
|
setContentView(R.layout.activity_user_list_selector)
|
||||||
|
|
||||||
adapter = SimpleParcelableUserListsAdapter(this, requestManager)
|
adapter = SimpleParcelableUserListsAdapter(this, Glide.with(this))
|
||||||
adapter.loadMoreSupportedPosition = LoadMorePosition.END
|
adapter.loadMoreSupportedPosition = LoadMorePosition.END
|
||||||
listView.addFooterView(layoutInflater.inflate(R.layout.simple_list_item_activated_1,
|
listView.addFooterView(layoutInflater.inflate(R.layout.simple_list_item_activated_1,
|
||||||
listView, false).apply {
|
listView, false).apply {
|
||||||
|
@ -127,11 +130,11 @@ class UserListSelectorActivity : BaseActivity(),
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
bus.register(this)
|
BusSingleton.register(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
bus.unregister(this)
|
BusSingleton.unregister(this)
|
||||||
super.onStop()
|
super.onStop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@ import android.view.View
|
||||||
import android.widget.AdapterView
|
import android.widget.AdapterView
|
||||||
import android.widget.AdapterView.OnItemClickListener
|
import android.widget.AdapterView.OnItemClickListener
|
||||||
import android.widget.ListView
|
import android.widget.ListView
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import kotlinx.android.synthetic.main.activity_user_selector.*
|
import kotlinx.android.synthetic.main.activity_user_selector.*
|
||||||
import kotlinx.android.synthetic.main.layout_list_with_empty_view.*
|
import kotlinx.android.synthetic.main.layout_list_with_empty_view.*
|
||||||
import kotlinx.android.synthetic.main.layout_toolbar_search.*
|
import kotlinx.android.synthetic.main.layout_toolbar_search.*
|
||||||
|
@ -86,7 +87,7 @@ class UserSelectorActivity : BaseActivity(), OnItemClickListener {
|
||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
editScreenName.setText(intent.getStringExtra(EXTRA_SCREEN_NAME))
|
editScreenName.setText(intent.getStringExtra(EXTRA_SCREEN_NAME))
|
||||||
}
|
}
|
||||||
adapter = SimpleParcelableUsersAdapter(this, requestManager = requestManager)
|
adapter = SimpleParcelableUsersAdapter(this, requestManager = Glide.with(this))
|
||||||
listView.adapter = adapter
|
listView.adapter = adapter
|
||||||
listView.onItemClickListener = this
|
listView.onItemClickListener = this
|
||||||
|
|
||||||
|
|
|
@ -32,9 +32,11 @@ import org.mariotaku.twidere.adapter.iface.ILoadMoreSupportAdapter
|
||||||
import org.mariotaku.twidere.annotation.LoadMorePosition
|
import org.mariotaku.twidere.annotation.LoadMorePosition
|
||||||
import org.mariotaku.twidere.constant.*
|
import org.mariotaku.twidere.constant.*
|
||||||
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
||||||
import org.mariotaku.twidere.extension.get
|
|
||||||
import org.mariotaku.twidere.model.ItemCounts
|
import org.mariotaku.twidere.model.ItemCounts
|
||||||
import org.mariotaku.twidere.util.*
|
import org.mariotaku.twidere.util.MultiSelectManager
|
||||||
|
import org.mariotaku.twidere.util.OnLinkClickHandler
|
||||||
|
import org.mariotaku.twidere.util.PermissionsManager
|
||||||
|
import org.mariotaku.twidere.util.TwidereLinkify
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
open class BaseArrayAdapter<T>(
|
open class BaseArrayAdapter<T>(
|
||||||
|
@ -46,8 +48,6 @@ open class BaseArrayAdapter<T>(
|
||||||
IItemCountsAdapter {
|
IItemCountsAdapter {
|
||||||
val linkify: TwidereLinkify
|
val linkify: TwidereLinkify
|
||||||
|
|
||||||
@Inject
|
|
||||||
override lateinit var userColorNameManager: UserColorNameManager
|
|
||||||
@Inject
|
@Inject
|
||||||
override lateinit var bidiFormatter: BidiFormatter
|
override lateinit var bidiFormatter: BidiFormatter
|
||||||
@Inject
|
@Inject
|
||||||
|
|
|
@ -32,25 +32,18 @@ import org.mariotaku.twidere.constant.profileImageStyleKey
|
||||||
import org.mariotaku.twidere.constant.showAbsoluteTimeKey
|
import org.mariotaku.twidere.constant.showAbsoluteTimeKey
|
||||||
import org.mariotaku.twidere.constant.textSizeKey
|
import org.mariotaku.twidere.constant.textSizeKey
|
||||||
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
||||||
import org.mariotaku.twidere.extension.get
|
|
||||||
import org.mariotaku.twidere.model.DefaultFeatures
|
import org.mariotaku.twidere.model.DefaultFeatures
|
||||||
import org.mariotaku.twidere.util.MultiSelectManager
|
import org.mariotaku.twidere.util.MultiSelectManager
|
||||||
import org.mariotaku.twidere.util.ReadStateManager
|
import org.mariotaku.twidere.util.ReadStateManager
|
||||||
import org.mariotaku.twidere.util.UserColorNameManager
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by mariotaku on 15/10/5.
|
|
||||||
*/
|
|
||||||
abstract class BaseRecyclerViewAdapter<VH : RecyclerView.ViewHolder>(
|
abstract class BaseRecyclerViewAdapter<VH : RecyclerView.ViewHolder>(
|
||||||
val context: Context,
|
val context: Context,
|
||||||
override val requestManager: RequestManager
|
override val requestManager: RequestManager
|
||||||
) : RecyclerView.Adapter<VH>(), IContentAdapter {
|
) : RecyclerView.Adapter<VH>(), IContentAdapter {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
override final lateinit var userColorNameManager: UserColorNameManager
|
override lateinit var bidiFormatter: BidiFormatter
|
||||||
@Inject
|
|
||||||
override final lateinit var bidiFormatter: BidiFormatter
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var preferences: SharedPreferences
|
lateinit var preferences: SharedPreferences
|
||||||
@Inject
|
@Inject
|
||||||
|
@ -60,11 +53,11 @@ abstract class BaseRecyclerViewAdapter<VH : RecyclerView.ViewHolder>(
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var defaultFeatures: DefaultFeatures
|
lateinit var defaultFeatures: DefaultFeatures
|
||||||
|
|
||||||
override final val profileImageSize: String = context.getString(R.string.profile_image_size)
|
final override val profileImageSize: String = context.getString(R.string.profile_image_size)
|
||||||
override final val profileImageStyle: Int
|
final override val profileImageStyle: Int
|
||||||
override final val textSize: Float
|
final override val textSize: Float
|
||||||
override final val profileImageEnabled: Boolean
|
final override val profileImageEnabled: Boolean
|
||||||
override final val showAbsoluteTime: Boolean
|
final override val showAbsoluteTime: Boolean
|
||||||
|
|
||||||
init {
|
init {
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
|
|
@ -36,7 +36,6 @@ import org.mariotaku.twidere.constant.displayProfileImageKey
|
||||||
import org.mariotaku.twidere.constant.profileImageStyleKey
|
import org.mariotaku.twidere.constant.profileImageStyleKey
|
||||||
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
||||||
import org.mariotaku.twidere.extension.appendQueryParameterIgnoreNull
|
import org.mariotaku.twidere.extension.appendQueryParameterIgnoreNull
|
||||||
import org.mariotaku.twidere.extension.get
|
|
||||||
import org.mariotaku.twidere.extension.loadProfileImage
|
import org.mariotaku.twidere.extension.loadProfileImage
|
||||||
import org.mariotaku.twidere.model.AccountDetails
|
import org.mariotaku.twidere.model.AccountDetails
|
||||||
import org.mariotaku.twidere.model.SuggestionItem
|
import org.mariotaku.twidere.model.SuggestionItem
|
||||||
|
@ -52,6 +51,7 @@ class ComposeAutoCompleteAdapter(context: Context, val requestManager: RequestMa
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var preferences: SharedPreferences
|
lateinit var preferences: SharedPreferences
|
||||||
@Inject
|
@Inject
|
||||||
|
@Deprecated(message = "Deprecated", replaceWith = ReplaceWith("UserColorNameManager.get(context!!)", imports = ["org.mariotaku.twidere.util.UserColorNameManager"]))
|
||||||
lateinit var userColorNameManager: UserColorNameManager
|
lateinit var userColorNameManager: UserColorNameManager
|
||||||
|
|
||||||
var account: AccountDetails? = null
|
var account: AccountDetails? = null
|
||||||
|
@ -78,7 +78,7 @@ class ComposeAutoCompleteAdapter(context: Context, val requestManager: RequestMa
|
||||||
|
|
||||||
if (Suggestions.AutoComplete.TYPE_USERS == cursor.getString(indices.type)) {
|
if (Suggestions.AutoComplete.TYPE_USERS == cursor.getString(indices.type)) {
|
||||||
val userKey = UserKey.valueOf(cursor.getString(indices.extra_id))
|
val userKey = UserKey.valueOf(cursor.getString(indices.extra_id))
|
||||||
text1.spannable = userColorNameManager.getUserNickname(userKey,
|
text1.spannable = UserColorNameManager.get(context).getUserNickname(userKey,
|
||||||
cursor.getString(indices.title))
|
cursor.getString(indices.title))
|
||||||
val screenName = cursor.getString(indices.summary)
|
val screenName = cursor.getString(indices.summary)
|
||||||
text2.spannable = "@${getScreenNameOrAcct(screenName, userKey)}"
|
text2.spannable = "@${getScreenNameOrAcct(screenName, userKey)}"
|
||||||
|
|
|
@ -14,11 +14,9 @@ import org.mariotaku.twidere.adapter.iface.IUserListsAdapter
|
||||||
import org.mariotaku.twidere.adapter.iface.IUsersAdapter
|
import org.mariotaku.twidere.adapter.iface.IUsersAdapter
|
||||||
import org.mariotaku.twidere.constant.*
|
import org.mariotaku.twidere.constant.*
|
||||||
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
||||||
import org.mariotaku.twidere.extension.get
|
|
||||||
import org.mariotaku.twidere.extension.model.activityStatus
|
import org.mariotaku.twidere.extension.model.activityStatus
|
||||||
import org.mariotaku.twidere.model.*
|
import org.mariotaku.twidere.model.*
|
||||||
import org.mariotaku.twidere.util.TwidereLinkify
|
import org.mariotaku.twidere.util.TwidereLinkify
|
||||||
import org.mariotaku.twidere.util.UserColorNameManager
|
|
||||||
import org.mariotaku.twidere.view.holder.iface.IStatusViewHolder
|
import org.mariotaku.twidere.view.holder.iface.IStatusViewHolder
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@ -35,8 +33,6 @@ class DummyItemAdapter(
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var preferences: SharedPreferences
|
lateinit var preferences: SharedPreferences
|
||||||
@Inject
|
@Inject
|
||||||
override lateinit var userColorNameManager: UserColorNameManager
|
|
||||||
@Inject
|
|
||||||
override lateinit var bidiFormatter: BidiFormatter
|
override lateinit var bidiFormatter: BidiFormatter
|
||||||
|
|
||||||
override var profileImageSize: String = context.getString(R.string.profile_image_size)
|
override var profileImageSize: String = context.getString(R.string.profile_image_size)
|
||||||
|
|
|
@ -31,7 +31,7 @@ import org.mariotaku.twidere.util.content.TwidereSQLiteOpenHelper
|
||||||
class SourceAutoCompleteAdapter(context: Context) : SimpleCursorAdapter(context,
|
class SourceAutoCompleteAdapter(context: Context) : SimpleCursorAdapter(context,
|
||||||
android.R.layout.simple_list_item_1, null, emptyArray<String>(), IntArray(0), 0) {
|
android.R.layout.simple_list_item_1, null, emptyArray<String>(), IntArray(0), 0) {
|
||||||
|
|
||||||
private val database = TwidereSQLiteOpenHelper.getInstance(context).singletonWritableDatabase
|
private val database = TwidereSQLiteOpenHelper.get(context).singletonWritableDatabase
|
||||||
|
|
||||||
private var sourceIdx: Int = 0
|
private var sourceIdx: Int = 0
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.Space
|
import android.widget.Space
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import org.mariotaku.kpreferences.get
|
import org.mariotaku.kpreferences.get
|
||||||
import org.mariotaku.ktextension.contains
|
import org.mariotaku.ktextension.contains
|
||||||
import org.mariotaku.microblog.library.model.twitter.TranslationResult
|
import org.mariotaku.microblog.library.model.twitter.TranslationResult
|
||||||
|
@ -53,7 +54,7 @@ import org.mariotaku.twidere.view.holder.status.DetailStatusViewHolder
|
||||||
|
|
||||||
class StatusDetailsAdapter(
|
class StatusDetailsAdapter(
|
||||||
val fragment: StatusFragment
|
val fragment: StatusFragment
|
||||||
) : LoadMoreSupportAdapter<RecyclerView.ViewHolder>(fragment.context!!, fragment.requestManager),
|
) : LoadMoreSupportAdapter<RecyclerView.ViewHolder>(fragment.context!!, Glide.with(fragment)),
|
||||||
IStatusesAdapter, IItemCountsAdapter {
|
IStatusesAdapter, IItemCountsAdapter {
|
||||||
|
|
||||||
override val twidereLinkify: TwidereLinkify
|
override val twidereLinkify: TwidereLinkify
|
||||||
|
|
|
@ -26,8 +26,6 @@ import org.mariotaku.twidere.util.UserColorNameManager
|
||||||
|
|
||||||
interface IContentAdapter {
|
interface IContentAdapter {
|
||||||
|
|
||||||
val userColorNameManager: UserColorNameManager
|
|
||||||
|
|
||||||
fun getItemCount(): Int
|
fun getItemCount(): Int
|
||||||
|
|
||||||
@ImageShapeStyle
|
@ImageShapeStyle
|
||||||
|
|
|
@ -28,7 +28,6 @@ import android.content.res.Resources
|
||||||
import android.net.ConnectivityManager
|
import android.net.ConnectivityManager
|
||||||
import android.os.AsyncTask
|
import android.os.AsyncTask
|
||||||
import android.support.multidex.MultiDex
|
import android.support.multidex.MultiDex
|
||||||
import com.bumptech.glide.Glide
|
|
||||||
import nl.komponents.kovenant.android.startKovenant
|
import nl.komponents.kovenant.android.startKovenant
|
||||||
import nl.komponents.kovenant.android.stopKovenant
|
import nl.komponents.kovenant.android.stopKovenant
|
||||||
import org.mariotaku.kpreferences.get
|
import org.mariotaku.kpreferences.get
|
||||||
|
@ -41,7 +40,6 @@ import org.mariotaku.twidere.activity.MainHondaJOJOActivity
|
||||||
import org.mariotaku.twidere.constant.*
|
import org.mariotaku.twidere.constant.*
|
||||||
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
||||||
import org.mariotaku.twidere.extension.firstLanguage
|
import org.mariotaku.twidere.extension.firstLanguage
|
||||||
import org.mariotaku.twidere.extension.get
|
|
||||||
import org.mariotaku.twidere.extension.setLocale
|
import org.mariotaku.twidere.extension.setLocale
|
||||||
import org.mariotaku.twidere.promise.DefaultFeaturesPromises
|
import org.mariotaku.twidere.promise.DefaultFeaturesPromises
|
||||||
import org.mariotaku.twidere.receiver.ConnectivityStateReceiver
|
import org.mariotaku.twidere.receiver.ConnectivityStateReceiver
|
||||||
|
@ -82,7 +80,7 @@ class TwidereApplication : Application(), OnSharedPreferenceChangeListener {
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
instance = this
|
instance = this
|
||||||
if (BuildConfig.DEBUG) {
|
if (BuildConfig.DEBUG) {
|
||||||
StrictModeUtils.detectAllVmPolicy()
|
StrictModeUtils.detectVmPolicies()
|
||||||
}
|
}
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
applyLanguageSettings()
|
applyLanguageSettings()
|
||||||
|
@ -115,16 +113,6 @@ class TwidereApplication : Application(), OnSharedPreferenceChangeListener {
|
||||||
super.onConfigurationChanged(newConfig)
|
super.onConfigurationChanged(newConfig)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onTrimMemory(level: Int) {
|
|
||||||
Glide.with(this).onTrimMemory(level)
|
|
||||||
super.onTrimMemory(level)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onLowMemory() {
|
|
||||||
Glide.with(this).onLowMemory()
|
|
||||||
super.onLowMemory()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onSharedPreferenceChanged(preferences: SharedPreferences, key: String) {
|
override fun onSharedPreferenceChanged(preferences: SharedPreferences, key: String) {
|
||||||
when (key) {
|
when (key) {
|
||||||
KEY_CREDENTIALS_TYPE, KEY_API_URL_FORMAT, KEY_CONSUMER_KEY, KEY_CONSUMER_SECRET,
|
KEY_CREDENTIALS_TYPE, KEY_API_URL_FORMAT, KEY_CONSUMER_KEY, KEY_CONSUMER_SECRET,
|
||||||
|
@ -153,8 +141,8 @@ class TwidereApplication : Application(), OnSharedPreferenceChangeListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun applyLanguageSettings() {
|
private fun applyLanguageSettings() {
|
||||||
val locale = sharedPreferences[overrideLanguageKey] ?: Resources.getSystem().
|
val locale = sharedPreferences[overrideLanguageKey] ?: Resources.getSystem().firstLanguage
|
||||||
firstLanguage ?: return
|
?: return
|
||||||
resources.setLocale(locale)
|
resources.setLocale(locale)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,6 @@ import okhttp3.ConnectionPool
|
||||||
import okhttp3.Dns
|
import okhttp3.Dns
|
||||||
import org.mariotaku.restfu.http.RestHttpClient
|
import org.mariotaku.restfu.http.RestHttpClient
|
||||||
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
||||||
import org.mariotaku.twidere.extension.get
|
|
||||||
import org.mariotaku.twidere.model.DefaultFeatures
|
import org.mariotaku.twidere.model.DefaultFeatures
|
||||||
import org.mariotaku.twidere.util.*
|
import org.mariotaku.twidere.util.*
|
||||||
import org.mariotaku.twidere.util.media.MediaPreloader
|
import org.mariotaku.twidere.util.media.MediaPreloader
|
||||||
|
@ -69,6 +68,7 @@ class DependencyHolder internal constructor(context: Context) {
|
||||||
lateinit var mediaPreloader: MediaPreloader
|
lateinit var mediaPreloader: MediaPreloader
|
||||||
internal set
|
internal set
|
||||||
@Inject
|
@Inject
|
||||||
|
@Deprecated(message = "Deprecated", replaceWith = ReplaceWith("UserColorNameManager.get(context", imports = ["org.mariotaku.twidere.util.UserColorNameManager"]))
|
||||||
lateinit var userColorNameManager: UserColorNameManager
|
lateinit var userColorNameManager: UserColorNameManager
|
||||||
internal set
|
internal set
|
||||||
@Inject
|
@Inject
|
||||||
|
|
|
@ -28,7 +28,6 @@ import org.mariotaku.twidere.dagger.DependencyHolder
|
||||||
import org.mariotaku.twidere.dagger.module.ApplicationModule
|
import org.mariotaku.twidere.dagger.module.ApplicationModule
|
||||||
import org.mariotaku.twidere.dagger.module.ChannelModule
|
import org.mariotaku.twidere.dagger.module.ChannelModule
|
||||||
import org.mariotaku.twidere.data.user.UserLiveData
|
import org.mariotaku.twidere.data.user.UserLiveData
|
||||||
import org.mariotaku.twidere.extension.get
|
|
||||||
import org.mariotaku.twidere.fragment.BaseDialogFragment
|
import org.mariotaku.twidere.fragment.BaseDialogFragment
|
||||||
import org.mariotaku.twidere.fragment.BaseFragment
|
import org.mariotaku.twidere.fragment.BaseFragment
|
||||||
import org.mariotaku.twidere.fragment.BasePreferenceFragment
|
import org.mariotaku.twidere.fragment.BasePreferenceFragment
|
||||||
|
@ -132,10 +131,6 @@ interface GeneralComponent {
|
||||||
|
|
||||||
fun inject(activity: MainActivity)
|
fun inject(activity: MainActivity)
|
||||||
|
|
||||||
fun inject(promises: MessagePromises)
|
|
||||||
|
|
||||||
fun inject(promises: StatusPromises)
|
|
||||||
|
|
||||||
fun inject(promises: FriendshipPromises)
|
fun inject(promises: FriendshipPromises)
|
||||||
|
|
||||||
fun inject(promises: BlockPromises)
|
fun inject(promises: BlockPromises)
|
||||||
|
@ -172,8 +167,6 @@ interface GeneralComponent {
|
||||||
|
|
||||||
fun inject(promises: UserListPromises)
|
fun inject(promises: UserListPromises)
|
||||||
|
|
||||||
fun inject(promises: SavedSearchPromises)
|
|
||||||
|
|
||||||
fun inject(promises: RefreshPromises)
|
fun inject(promises: RefreshPromises)
|
||||||
|
|
||||||
fun inject(liveData: UserLiveData)
|
fun inject(liveData: UserLiveData)
|
||||||
|
|
|
@ -31,8 +31,6 @@ import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSourceFactory
|
||||||
import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory
|
import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory
|
||||||
import com.google.android.exoplayer2.extractor.ExtractorsFactory
|
import com.google.android.exoplayer2.extractor.ExtractorsFactory
|
||||||
import com.google.android.exoplayer2.upstream.DataSource
|
import com.google.android.exoplayer2.upstream.DataSource
|
||||||
import com.squareup.otto.Bus
|
|
||||||
import com.squareup.otto.ThreadEnforcer
|
|
||||||
import com.twitter.Extractor
|
import com.twitter.Extractor
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
|
@ -49,8 +47,10 @@ import org.mariotaku.twidere.Constants.*
|
||||||
import org.mariotaku.twidere.constant.SharedPreferenceConstants.KEY_CACHE_SIZE_LIMIT
|
import org.mariotaku.twidere.constant.SharedPreferenceConstants.KEY_CACHE_SIZE_LIMIT
|
||||||
import org.mariotaku.twidere.constant.autoRefreshCompatibilityModeKey
|
import org.mariotaku.twidere.constant.autoRefreshCompatibilityModeKey
|
||||||
import org.mariotaku.twidere.constant.nameFirstKey
|
import org.mariotaku.twidere.constant.nameFirstKey
|
||||||
|
import org.mariotaku.twidere.extension.get
|
||||||
import org.mariotaku.twidere.extension.model.load
|
import org.mariotaku.twidere.extension.model.load
|
||||||
import org.mariotaku.twidere.model.DefaultFeatures
|
import org.mariotaku.twidere.model.DefaultFeatures
|
||||||
|
import org.mariotaku.twidere.singleton.BusSingleton
|
||||||
import org.mariotaku.twidere.taskcontroller.refresh.JobSchedulerRefreshTaskController
|
import org.mariotaku.twidere.taskcontroller.refresh.JobSchedulerRefreshTaskController
|
||||||
import org.mariotaku.twidere.taskcontroller.refresh.LegacyRefreshTaskController
|
import org.mariotaku.twidere.taskcontroller.refresh.LegacyRefreshTaskController
|
||||||
import org.mariotaku.twidere.taskcontroller.refresh.RefreshTaskController
|
import org.mariotaku.twidere.taskcontroller.refresh.RefreshTaskController
|
||||||
|
@ -81,10 +81,6 @@ class ApplicationModule(private val application: Application) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
|
||||||
@Singleton
|
|
||||||
fun bus(): Bus = Bus(ThreadEnforcer.MAIN)
|
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun keyboardShortcutsHandler(): KeyboardShortcutsHandler {
|
fun keyboardShortcutsHandler(): KeyboardShortcutsHandler {
|
||||||
|
@ -297,8 +293,8 @@ class ApplicationModule(private val application: Application) {
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun taskCreator(preferences: SharedPreferences, activityTracker: ActivityTracker,
|
fun taskCreator(preferences: SharedPreferences, activityTracker: ActivityTracker,
|
||||||
dataSyncProvider: DataSyncProvider, bus: Bus): TaskServiceRunner {
|
dataSyncProvider: DataSyncProvider): TaskServiceRunner {
|
||||||
return TaskServiceRunner(application, preferences, activityTracker, dataSyncProvider, bus)
|
return TaskServiceRunner(application, preferences, activityTracker, dataSyncProvider, BusSingleton)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
|
|
|
@ -20,11 +20,12 @@
|
||||||
package org.mariotaku.twidere.extension
|
package org.mariotaku.twidere.extension
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.bumptech.glide.DrawableRequestBuilder
|
import android.graphics.drawable.Drawable
|
||||||
import com.bumptech.glide.DrawableTypeRequest
|
import com.bumptech.glide.RequestBuilder
|
||||||
import com.bumptech.glide.RequestManager
|
import com.bumptech.glide.RequestManager
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||||
import jp.wasabeef.glide.transformations.CropCircleTransformation
|
import com.bumptech.glide.load.resource.bitmap.CircleCrop
|
||||||
|
import com.bumptech.glide.request.RequestOptions
|
||||||
import org.mariotaku.twidere.R
|
import org.mariotaku.twidere.R
|
||||||
import org.mariotaku.twidere.annotation.ImageShapeStyle
|
import org.mariotaku.twidere.annotation.ImageShapeStyle
|
||||||
import org.mariotaku.twidere.extension.model.getBestProfileBanner
|
import org.mariotaku.twidere.extension.model.getBestProfileBanner
|
||||||
|
@ -35,8 +36,8 @@ import org.mariotaku.twidere.util.Utils
|
||||||
import org.mariotaku.twidere.util.glide.RoundedRectTransformation
|
import org.mariotaku.twidere.util.glide.RoundedRectTransformation
|
||||||
|
|
||||||
fun RequestManager.loadProfileImage(context: Context, url: String?, @ImageShapeStyle style: Int,
|
fun RequestManager.loadProfileImage(context: Context, url: String?, @ImageShapeStyle style: Int,
|
||||||
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f, size: String? = null): DrawableRequestBuilder<String?> {
|
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f, size: String? = null): RequestBuilder<Drawable> {
|
||||||
return configureLoadProfileImage(context, style, cornerRadius, cornerRadiusRatio) {
|
return configureLoadProfileImage(style, cornerRadius, cornerRadiusRatio) {
|
||||||
if (url == null || size == null) {
|
if (url == null || size == null) {
|
||||||
return@configureLoadProfileImage load(url)
|
return@configureLoadProfileImage load(url)
|
||||||
} else {
|
} else {
|
||||||
|
@ -46,23 +47,25 @@ fun RequestManager.loadProfileImage(context: Context, url: String?, @ImageShapeS
|
||||||
}
|
}
|
||||||
|
|
||||||
fun RequestManager.loadProfileImage(context: Context, resourceId: Int, @ImageShapeStyle shapeStyle: Int,
|
fun RequestManager.loadProfileImage(context: Context, resourceId: Int, @ImageShapeStyle shapeStyle: Int,
|
||||||
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f): DrawableRequestBuilder<Int> {
|
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f): RequestBuilder<Drawable> {
|
||||||
return configureLoadProfileImage(context, shapeStyle, cornerRadius, cornerRadiusRatio) { load(resourceId) }
|
return configureLoadProfileImage(shapeStyle, cornerRadius, cornerRadiusRatio) {
|
||||||
|
return@configureLoadProfileImage load(resourceId)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun RequestManager.loadProfileImage(context: Context, account: AccountDetails, @ImageShapeStyle shapeStyle: Int,
|
fun RequestManager.loadProfileImage(context: Context, account: AccountDetails, @ImageShapeStyle shapeStyle: Int,
|
||||||
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f, size: String? = null): DrawableRequestBuilder<String?> {
|
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f, size: String? = null): RequestBuilder<Drawable> {
|
||||||
return loadProfileImage(context, account.user, shapeStyle, cornerRadius, cornerRadiusRatio, size)
|
return loadProfileImage(context, account.user, shapeStyle, cornerRadius, cornerRadiusRatio, size)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun RequestManager.loadProfileImage(context: Context, user: ParcelableUser, @ImageShapeStyle shapeStyle: Int,
|
fun RequestManager.loadProfileImage(context: Context, user: ParcelableUser, @ImageShapeStyle shapeStyle: Int,
|
||||||
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f, size: String? = null): DrawableRequestBuilder<String?> {
|
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f, size: String? = null): RequestBuilder<Drawable> {
|
||||||
if (user.extras != null && user.extras?.profile_image_url_fallback == null) {
|
if (user.extras != null && user.extras?.profile_image_url_fallback == null) {
|
||||||
// No fallback image, use compatible logic
|
// No fallback image, use compatible logic
|
||||||
return loadProfileImage(context, user.profile_image_url, shapeStyle, cornerRadius,
|
return loadProfileImage(context, user.profile_image_url, shapeStyle, cornerRadius,
|
||||||
cornerRadiusRatio, size)
|
cornerRadiusRatio, size)
|
||||||
}
|
}
|
||||||
return configureLoadProfileImage(context, shapeStyle, cornerRadius, cornerRadiusRatio) {
|
return configureLoadProfileImage(shapeStyle, cornerRadius, cornerRadiusRatio) {
|
||||||
if (size != null) {
|
if (size != null) {
|
||||||
return@configureLoadProfileImage load(Utils.getTwitterProfileImageOfSize(user.profile_image_url, size))
|
return@configureLoadProfileImage load(Utils.getTwitterProfileImageOfSize(user.profile_image_url, size))
|
||||||
} else {
|
} else {
|
||||||
|
@ -72,8 +75,8 @@ fun RequestManager.loadProfileImage(context: Context, user: ParcelableUser, @Ima
|
||||||
}
|
}
|
||||||
|
|
||||||
fun RequestManager.loadProfileImage(context: Context, user: ParcelableLiteUser, @ImageShapeStyle shapeStyle: Int,
|
fun RequestManager.loadProfileImage(context: Context, user: ParcelableLiteUser, @ImageShapeStyle shapeStyle: Int,
|
||||||
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f, size: String? = null): DrawableRequestBuilder<String?> {
|
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f, size: String? = null): RequestBuilder<Drawable> {
|
||||||
return configureLoadProfileImage(context, shapeStyle, cornerRadius, cornerRadiusRatio) {
|
return configureLoadProfileImage(shapeStyle, cornerRadius, cornerRadiusRatio) {
|
||||||
if (size != null) {
|
if (size != null) {
|
||||||
return@configureLoadProfileImage load(Utils.getTwitterProfileImageOfSize(user.profile_image_url, size))
|
return@configureLoadProfileImage load(Utils.getTwitterProfileImageOfSize(user.profile_image_url, size))
|
||||||
} else {
|
} else {
|
||||||
|
@ -84,35 +87,35 @@ fun RequestManager.loadProfileImage(context: Context, user: ParcelableLiteUser,
|
||||||
|
|
||||||
fun RequestManager.loadProfileImage(context: Context, userList: ParcelableUserList,
|
fun RequestManager.loadProfileImage(context: Context, userList: ParcelableUserList,
|
||||||
@ImageShapeStyle shapeStyle: Int,
|
@ImageShapeStyle shapeStyle: Int,
|
||||||
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f): DrawableRequestBuilder<String?> {
|
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f): RequestBuilder<Drawable> {
|
||||||
return configureLoadProfileImage(context, shapeStyle, cornerRadius, cornerRadiusRatio) {
|
return configureLoadProfileImage(shapeStyle, cornerRadius, cornerRadiusRatio) {
|
||||||
load(userList.user_profile_image_url)
|
return@configureLoadProfileImage load(userList.user_profile_image_url)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun RequestManager.loadProfileImage(context: Context, group: ParcelableGroup,
|
fun RequestManager.loadProfileImage(context: Context, group: ParcelableGroup,
|
||||||
@ImageShapeStyle shapeStyle: Int,
|
@ImageShapeStyle shapeStyle: Int,
|
||||||
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f): DrawableRequestBuilder<String?> {
|
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f): RequestBuilder<Drawable> {
|
||||||
return configureLoadProfileImage(context, shapeStyle, cornerRadius, cornerRadiusRatio) {
|
return configureLoadProfileImage(shapeStyle, cornerRadius, cornerRadiusRatio) {
|
||||||
load(group.homepage_logo)
|
return@configureLoadProfileImage load(group.homepage_logo)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun RequestManager.loadProfileImage(context: Context, status: ParcelableStatus, @ImageShapeStyle shapeStyle: Int,
|
fun RequestManager.loadProfileImage(context: Context, status: ParcelableStatus, @ImageShapeStyle shapeStyle: Int,
|
||||||
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f, size: String? = null): DrawableRequestBuilder<String?> {
|
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f, size: String? = null): RequestBuilder<Drawable> {
|
||||||
if (status.extras?.user_profile_image_url_fallback == null) {
|
if (status.extras?.user_profile_image_url_fallback == null) {
|
||||||
// No fallback image, use compatible logic
|
// No fallback image, use compatible logic
|
||||||
return loadProfileImage(context, status.user_profile_image_url, shapeStyle, cornerRadius,
|
return loadProfileImage(context, status.user_profile_image_url, shapeStyle, cornerRadius,
|
||||||
cornerRadiusRatio, size)
|
cornerRadiusRatio, size)
|
||||||
}
|
}
|
||||||
return configureLoadProfileImage(context, shapeStyle, cornerRadius, cornerRadiusRatio) {
|
return configureLoadProfileImage(shapeStyle, cornerRadius, cornerRadiusRatio) {
|
||||||
load(status.user_profile_image_url)
|
return@configureLoadProfileImage load(status.user_profile_image_url)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun RequestManager.loadProfileImage(context: Context, conversation: ParcelableMessageConversation,
|
fun RequestManager.loadProfileImage(context: Context, conversation: ParcelableMessageConversation,
|
||||||
@ImageShapeStyle shapeStyle: Int, cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f,
|
@ImageShapeStyle shapeStyle: Int, cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f,
|
||||||
size: String? = null): DrawableRequestBuilder<*> {
|
size: String? = null): RequestBuilder<*> {
|
||||||
if (conversation.conversation_type == ParcelableMessageConversation.ConversationType.ONE_TO_ONE) {
|
if (conversation.conversation_type == ParcelableMessageConversation.ConversationType.ONE_TO_ONE) {
|
||||||
val user = conversation.user
|
val user = conversation.user
|
||||||
if (user != null) {
|
if (user != null) {
|
||||||
|
@ -135,35 +138,32 @@ fun RequestManager.loadProfileImage(context: Context, conversation: ParcelableMe
|
||||||
|
|
||||||
fun RequestManager.loadOriginalProfileImage(context: Context, user: ParcelableUser,
|
fun RequestManager.loadOriginalProfileImage(context: Context, user: ParcelableUser,
|
||||||
@ImageShapeStyle shapeStyle: Int, cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f
|
@ImageShapeStyle shapeStyle: Int, cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f
|
||||||
): DrawableRequestBuilder<String> {
|
): RequestBuilder<Drawable> {
|
||||||
return configureLoadProfileImage(context, shapeStyle, cornerRadius, cornerRadiusRatio) {
|
return configureLoadProfileImage(shapeStyle, cornerRadius, cornerRadiusRatio) {
|
||||||
load(user.originalProfileImage)
|
return@configureLoadProfileImage load(user.originalProfileImage)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun RequestManager.loadProfileBanner(context: Context, user: ParcelableUser, width: Int): DrawableTypeRequest<String?> {
|
fun RequestManager.loadProfileBanner(context: Context, user: ParcelableUser, width: Int): RequestBuilder<Drawable> {
|
||||||
val ratio = context.resources.getFraction(R.fraction.aspect_ratio_profile_banner, 1, 1)
|
val ratio = context.resources.getFraction(R.fraction.aspect_ratio_profile_banner, 1, 1)
|
||||||
return load(user.getBestProfileBanner(width, (width / ratio).toInt()))
|
return load(user.getBestProfileBanner(width, (width / ratio).toInt()))
|
||||||
}
|
}
|
||||||
|
|
||||||
internal inline fun <T> configureLoadProfileImage(context: Context, @ImageShapeStyle shapeStyle: Int,
|
internal inline fun <T> configureLoadProfileImage(@ImageShapeStyle shapeStyle: Int, cornerRadius: Float = 0f,
|
||||||
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f, create: () -> DrawableTypeRequest<T>
|
cornerRadiusRatio: Float = 0f, create: () -> RequestBuilder<T>
|
||||||
): DrawableRequestBuilder<T> {
|
): RequestBuilder<T> {
|
||||||
val builder = create()
|
val builder = create()
|
||||||
builder.diskCacheStrategy(DiskCacheStrategy.RESULT)
|
val requestOptions = RequestOptions.diskCacheStrategyOf(DiskCacheStrategy.DATA).dontAnimate().centerCrop()
|
||||||
builder.centerCrop()
|
|
||||||
builder.dontAnimate()
|
|
||||||
when (shapeStyle) {
|
when (shapeStyle) {
|
||||||
ImageShapeStyle.SHAPE_CIRCLE -> {
|
ImageShapeStyle.SHAPE_CIRCLE -> {
|
||||||
builder.bitmapTransform(CropCircleTransformation(context))
|
requestOptions.transform(CircleCrop())
|
||||||
}
|
}
|
||||||
ImageShapeStyle.SHAPE_RECTANGLE -> {
|
ImageShapeStyle.SHAPE_RECTANGLE -> {
|
||||||
builder.bitmapTransform(RoundedRectTransformation(context, cornerRadius,
|
requestOptions.transform(RoundedRectTransformation(cornerRadius, cornerRadiusRatio))
|
||||||
cornerRadiusRatio))
|
|
||||||
}
|
}
|
||||||
ImageShapeStyle.SHAPE_NONE -> {
|
ImageShapeStyle.SHAPE_NONE -> {
|
||||||
// No-op
|
// No-op
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return builder
|
return builder.apply(requestOptions)
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,4 +21,4 @@ package org.mariotaku.twidere.extension
|
||||||
|
|
||||||
import org.mariotaku.twidere.util.lang.SingletonHolder
|
import org.mariotaku.twidere.util.lang.SingletonHolder
|
||||||
|
|
||||||
fun <T, A> SingletonHolder<T, A>.get(arg: A): T = getInstance(arg)
|
fun <T> SingletonHolder<T, Unit>.get(): T = get(Unit)
|
|
@ -50,17 +50,17 @@ fun View.getFrame(rect: Rect) {
|
||||||
@UiThread
|
@UiThread
|
||||||
fun View.getFrameRelatedTo(rect: Rect, other: View? = null) {
|
fun View.getFrameRelatedTo(rect: Rect, other: View? = null) {
|
||||||
this.getFrame(rect)
|
this.getFrame(rect)
|
||||||
if (other == null) {
|
when {
|
||||||
offsetToRoot(this, rect)
|
other == null -> offsetToRoot(this, rect)
|
||||||
} else if (other === this) {
|
other === this -> rect.offsetTo(0, 0)
|
||||||
rect.offsetTo(0, 0)
|
other !== parent -> {
|
||||||
} else if (other !== parent) {
|
|
||||||
offsetToRoot(this, rect)
|
offsetToRoot(this, rect)
|
||||||
other.getFrame(tempRect)
|
other.getFrame(tempRect)
|
||||||
offsetToRoot(other, tempRect)
|
offsetToRoot(other, tempRect)
|
||||||
rect.offset(-tempRect.left, -tempRect.top)
|
rect.offset(-tempRect.left, -tempRect.top)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun View.getLocationOnScreen(rect: Rect) {
|
fun View.getLocationOnScreen(rect: Rect) {
|
||||||
getLocationOnScreen(tempLocation)
|
getLocationOnScreen(tempLocation)
|
||||||
|
@ -158,6 +158,18 @@ fun View.findViewByText(text: CharSequence?): TextView? {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun <T : View> View.findViewByType(cls: Class<T>): T? {
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
if (cls.isAssignableFrom(javaClass)) return this as T?
|
||||||
|
if (this is ViewGroup) {
|
||||||
|
for (i in 0 until childCount) {
|
||||||
|
val found = getChildAt(i).findViewByType(cls)
|
||||||
|
if (found != null) return found
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
private fun offsetToRoot(view: View, rect: Rect) {
|
private fun offsetToRoot(view: View, rect: Rect) {
|
||||||
var parent = view.parent as? View
|
var parent = view.parent as? View
|
||||||
while (parent != null) {
|
while (parent != null) {
|
||||||
|
|
|
@ -0,0 +1,141 @@
|
||||||
|
/*
|
||||||
|
* Twidere - Twitter client for Android
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012-2018 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.mariotaku.twidere.extension.model
|
||||||
|
|
||||||
|
import org.mariotaku.twidere.model.HomeTab
|
||||||
|
import org.mariotaku.twidere.model.tab.argument.TabArguments
|
||||||
|
import org.mariotaku.twidere.model.tab.argument.TextQueryArguments
|
||||||
|
import org.mariotaku.twidere.model.tab.argument.UserArguments
|
||||||
|
import org.mariotaku.twidere.model.tab.argument.UserListArguments
|
||||||
|
import org.mariotaku.twidere.model.tab.extra.InteractionsTabExtras
|
||||||
|
import org.mariotaku.twidere.model.tab.extra.TimelineTabExtras
|
||||||
|
import org.mariotaku.twidere.model.tab.extra.TrendsTabExtras
|
||||||
|
import org.xmlpull.v1.XmlPullParser
|
||||||
|
import org.xmlpull.v1.XmlSerializer
|
||||||
|
|
||||||
|
fun HomeTab.serialize(serializer: XmlSerializer) {
|
||||||
|
serializer.startTag(null, "tab")
|
||||||
|
serializer.attribute(null, "type", type)
|
||||||
|
|
||||||
|
serializer.writeNonEmptyStringTag("name", name)
|
||||||
|
serializer.writeNonEmptyStringTag("icon", icon)
|
||||||
|
|
||||||
|
val arguments = this.arguments
|
||||||
|
val extras = this.extras
|
||||||
|
|
||||||
|
when (arguments) {
|
||||||
|
is UserArguments -> serializer.serializeUserArguments(arguments)
|
||||||
|
is UserListArguments -> serializer.serializeUserListArguments(arguments)
|
||||||
|
is TextQueryArguments -> serializer.serializeTextQueryArguments(arguments)
|
||||||
|
is TabArguments -> serializer.serializeBaseArguments(arguments)
|
||||||
|
}
|
||||||
|
|
||||||
|
when (extras) {
|
||||||
|
is TimelineTabExtras -> serializer.serializeTimelineTabExtras(extras)
|
||||||
|
is InteractionsTabExtras -> serializer.serializeInteractionsTabExtras(extras)
|
||||||
|
is TrendsTabExtras -> serializer.serializeTrendsTabExtras(extras)
|
||||||
|
}
|
||||||
|
|
||||||
|
serializer.endTag(null, "tab")
|
||||||
|
}
|
||||||
|
|
||||||
|
fun HomeTab.parse(parser: XmlPullParser) {
|
||||||
|
for (i in 0 until parser.attributeCount) {
|
||||||
|
when (parser.getAttributeName(i)) {
|
||||||
|
"type" -> type = parser.getAttributeValue(i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun XmlSerializer.writeNonEmptyStringTag(name: String, value: String?) {
|
||||||
|
if (value.isNullOrEmpty()) return
|
||||||
|
startTag(null, name)
|
||||||
|
text(value)
|
||||||
|
endTag(null, name)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun XmlSerializer.writeBaseArgumentsFields(arguments: TabArguments) {
|
||||||
|
val keys = arguments.accountKeys
|
||||||
|
val id = arguments.accountId
|
||||||
|
if (keys != null) {
|
||||||
|
startTag(null, "accountKeys")
|
||||||
|
keys.forEach {
|
||||||
|
writeNonEmptyStringTag("item", it.toString())
|
||||||
|
}
|
||||||
|
endTag(null, "accountKeys")
|
||||||
|
} else if (id != null) {
|
||||||
|
startTag(null, "accountKeys")
|
||||||
|
writeNonEmptyStringTag("item", id)
|
||||||
|
endTag(null, "accountKeys")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun XmlSerializer.serializeUserArguments(arguments: UserArguments) {
|
||||||
|
startTag(null, "arguments")
|
||||||
|
attribute(null, "type", "user")
|
||||||
|
writeBaseArgumentsFields(arguments)
|
||||||
|
writeNonEmptyStringTag("userKey", arguments.userKey?.toString() ?: arguments.userId)
|
||||||
|
endTag(null, "arguments")
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun XmlSerializer.serializeBaseArguments(arguments: TabArguments) {
|
||||||
|
startTag(null, "arguments")
|
||||||
|
writeBaseArgumentsFields(arguments)
|
||||||
|
endTag(null, "arguments")
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun XmlSerializer.serializeUserListArguments(arguments: UserListArguments) {
|
||||||
|
startTag(null, "arguments")
|
||||||
|
attribute(null, "type", "userList")
|
||||||
|
writeBaseArgumentsFields(arguments)
|
||||||
|
writeNonEmptyStringTag("listId", arguments.listId)
|
||||||
|
endTag(null, "arguments")
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun XmlSerializer.serializeTextQueryArguments(arguments: TextQueryArguments) {
|
||||||
|
startTag(null, "arguments")
|
||||||
|
attribute(null, "type", "textQuery")
|
||||||
|
writeBaseArgumentsFields(arguments)
|
||||||
|
writeNonEmptyStringTag("query", arguments.query)
|
||||||
|
endTag(null, "arguments")
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun XmlSerializer.serializeTimelineTabExtras(extras: TimelineTabExtras) {
|
||||||
|
startTag(null, "extras")
|
||||||
|
attribute(null, "type", "timeline")
|
||||||
|
writeNonEmptyStringTag("style", extras.timelineStyle.toString())
|
||||||
|
endTag(null, "extras")
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun XmlSerializer.serializeInteractionsTabExtras(extras: InteractionsTabExtras) {
|
||||||
|
startTag(null, "extras")
|
||||||
|
attribute(null, "type", "interactions")
|
||||||
|
writeNonEmptyStringTag("mentionsOnly", extras.isMentionsOnly.toString())
|
||||||
|
writeNonEmptyStringTag("myFollowingOnly", extras.isMyFollowingOnly.toString())
|
||||||
|
endTag(null, "extras")
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun XmlSerializer.serializeTrendsTabExtras(extras: TrendsTabExtras) {
|
||||||
|
startTag(null, "extras")
|
||||||
|
attribute(null, "type", "trends")
|
||||||
|
writeNonEmptyStringTag("placeName", extras.placeName)
|
||||||
|
writeNonEmptyStringTag("woeId", extras.woeId.toString())
|
||||||
|
endTag(null, "extras")
|
||||||
|
}
|
|
@ -6,9 +6,6 @@ import org.mariotaku.twidere.model.ParcelableMedia
|
||||||
import org.mariotaku.twidere.model.util.ParcelableMediaUtils
|
import org.mariotaku.twidere.model.util.ParcelableMediaUtils
|
||||||
import org.mariotaku.twidere.util.promotion.PromotionService
|
import org.mariotaku.twidere.util.promotion.PromotionService
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by mariotaku on 2017/1/7.
|
|
||||||
*/
|
|
||||||
|
|
||||||
fun parcelableMediaTypeString(@ParcelableMedia.Type type: Int): String? = when (type) {
|
fun parcelableMediaTypeString(@ParcelableMedia.Type type: Int): String? = when (type) {
|
||||||
ParcelableMedia.Type.IMAGE -> "image"
|
ParcelableMedia.Type.IMAGE -> "image"
|
||||||
|
@ -29,7 +26,8 @@ fun ParcelableMedia.getBestVideoUrlAndType(supportedTypes: Array<String>): Pair<
|
||||||
val videoInfo = video_info ?: return Pair(mediaUrl, null)
|
val videoInfo = video_info ?: return Pair(mediaUrl, null)
|
||||||
val firstMatch = videoInfo.variants.filter { variant ->
|
val firstMatch = videoInfo.variants.filter { variant ->
|
||||||
supportedTypes.any { it.equals(variant.content_type, ignoreCase = true) }
|
supportedTypes.any { it.equals(variant.content_type, ignoreCase = true) }
|
||||||
}.sortedByDescending(ParcelableMedia.VideoInfo.Variant::bitrate).firstOrNull() ?: return null
|
}.sortedByDescending(ParcelableMedia.VideoInfo.Variant::bitrate).firstOrNull()
|
||||||
|
?: return null
|
||||||
return Pair(firstMatch.url, firstMatch.content_type)
|
return Pair(firstMatch.url, firstMatch.content_type)
|
||||||
}
|
}
|
||||||
ParcelableMedia.Type.CARD_ANIMATED_GIF -> {
|
ParcelableMedia.Type.CARD_ANIMATED_GIF -> {
|
||||||
|
@ -47,12 +45,19 @@ val ParcelableMedia.aspect_ratio: Double
|
||||||
return this.width / this.height.toDouble()
|
return this.width / this.height.toDouble()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
val ParcelableMedia.bannerExtras: PromotionService.BannerExtras?
|
val ParcelableMedia.bannerExtras: PromotionService.BannerExtras?
|
||||||
get() {
|
get() {
|
||||||
val contentUrl = this.page_url ?: this.url ?: return null
|
val contentUrl = this.page_url ?: this.url ?: return null
|
||||||
return PromotionService.BannerExtras(contentUrl)
|
return PromotionService.BannerExtras(contentUrl)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val Array<ParcelableMedia?>.type: Int
|
||||||
|
get() {
|
||||||
|
forEach { if (it != null) return it.type }
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
@ParcelableMedia.Type
|
@ParcelableMedia.Type
|
||||||
val InputContentInfoCompat.inferredMediaType: Int
|
val InputContentInfoCompat.inferredMediaType: Int
|
||||||
get() = if (description.mimeTypeCount > 0) {
|
get() = if (description.mimeTypeCount > 0) {
|
||||||
|
|
|
@ -83,8 +83,7 @@ var ParcelableMessageConversation.notificationDisabled: Boolean
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun ParcelableMessageConversation.getTitle(context: Context, manager: UserColorNameManager,
|
fun ParcelableMessageConversation.getTitle(context: Context, manager: UserColorNameManager): Pair<String, String?> {
|
||||||
nameFirst: Boolean): Pair<String, String?> {
|
|
||||||
if (conversation_type == ConversationType.ONE_TO_ONE) {
|
if (conversation_type == ConversationType.ONE_TO_ONE) {
|
||||||
val user = this.user ?: return Pair(context.getString(R.string.title_direct_messages), null)
|
val user = this.user ?: return Pair(context.getString(R.string.title_direct_messages), null)
|
||||||
return Pair(user.name, "@${user.screen_name}")
|
return Pair(user.name, "@${user.screen_name}")
|
||||||
|
|
|
@ -17,7 +17,7 @@ inline val ParcelableStatus.originalId: String
|
||||||
get() = if (is_retweet) (retweet_id ?: id) else id
|
get() = if (is_retweet) (retweet_id ?: id) else id
|
||||||
|
|
||||||
val ParcelableStatus.media_type: Int
|
val ParcelableStatus.media_type: Int
|
||||||
get() = media?.firstOrNull()?.type ?: 0
|
get() = attachment?.media?.firstOrNull()?.type ?: 0
|
||||||
|
|
||||||
val ParcelableStatus.user: ParcelableUser
|
val ParcelableStatus.user: ParcelableUser
|
||||||
get() = ParcelableUser(account_key, user_key, user_name, user_screen_name, user_profile_image_url)
|
get() = ParcelableUser(account_key, user_key, user_name, user_screen_name, user_profile_image_url)
|
||||||
|
@ -25,9 +25,10 @@ val ParcelableStatus.user: ParcelableUser
|
||||||
val ParcelableStatus.referencedUsers: Array<ParcelableUser>
|
val ParcelableStatus.referencedUsers: Array<ParcelableUser>
|
||||||
get() {
|
get() {
|
||||||
val resultList = mutableSetOf(user)
|
val resultList = mutableSetOf(user)
|
||||||
if (quoted_user_key != null) {
|
val quoted = attachment?.quoted
|
||||||
resultList.add(ParcelableUser(account_key, quoted_user_key, quoted_user_name,
|
if (quoted != null) {
|
||||||
quoted_user_screen_name, quoted_user_profile_image))
|
resultList.add(ParcelableUser(account_key, quoted.user_key, quoted.user_name,
|
||||||
|
quoted.user_screen_name, quoted.user_profile_image))
|
||||||
}
|
}
|
||||||
if (retweeted_by_user_key != null) {
|
if (retweeted_by_user_key != null) {
|
||||||
resultList.add(ParcelableUser(account_key, retweeted_by_user_key, retweeted_by_user_name,
|
resultList.add(ParcelableUser(account_key, retweeted_by_user_key, retweeted_by_user_name,
|
||||||
|
@ -66,11 +67,11 @@ inline val ParcelableStatus.retweeted_by_user_acct: String?
|
||||||
"$retweeted_by_user_screen_name@${retweeted_by_user_key?.host}"
|
"$retweeted_by_user_screen_name@${retweeted_by_user_key?.host}"
|
||||||
}
|
}
|
||||||
|
|
||||||
inline val ParcelableStatus.quoted_user_acct: String?
|
inline val ParcelableStatusAttachment.QuotedStatus.user_acct: String?
|
||||||
get() = if (account_key.host == quoted_user_key?.host) {
|
get() = if (account_key?.host == user_key?.host) {
|
||||||
quoted_user_screen_name
|
user_screen_name
|
||||||
} else {
|
} else {
|
||||||
"$quoted_user_screen_name@${quoted_user_key?.host}"
|
"$user_screen_name@${user_key?.host}"
|
||||||
}
|
}
|
||||||
|
|
||||||
inline val ParcelableStatus.isAccountRetweet: Boolean
|
inline val ParcelableStatus.isAccountRetweet: Boolean
|
||||||
|
@ -90,25 +91,8 @@ inline val ParcelableStatus.canRetweet: Boolean
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val ParcelableStatus.quoted: ParcelableStatus?
|
inline val ParcelableStatus.quoted: ParcelableStatusAttachment.QuotedStatus?
|
||||||
get() {
|
get() = attachment?.quoted
|
||||||
val obj = ParcelableStatus()
|
|
||||||
obj.account_key = account_key
|
|
||||||
obj.id = quoted_id ?: return null
|
|
||||||
obj.timestamp = quoted_timestamp
|
|
||||||
obj.user_key = quoted_user_key ?: return null
|
|
||||||
obj.user_name = quoted_user_name ?: return null
|
|
||||||
obj.user_screen_name = quoted_user_screen_name ?: return null
|
|
||||||
obj.user_profile_image_url = quoted_user_profile_image ?: return null
|
|
||||||
obj.user_is_protected = quoted_user_is_protected
|
|
||||||
obj.user_is_verified = quoted_user_is_verified
|
|
||||||
obj.text_plain = quoted_text_plain
|
|
||||||
obj.text_unescaped = quoted_text_unescaped
|
|
||||||
obj.source = quoted_source
|
|
||||||
obj.spans = quoted_spans
|
|
||||||
obj.media = quoted_media
|
|
||||||
return obj
|
|
||||||
}
|
|
||||||
|
|
||||||
val ParcelableStatus.retweet_sort_id: Long
|
val ParcelableStatus.retweet_sort_id: Long
|
||||||
get() {
|
get() {
|
||||||
|
@ -162,8 +146,8 @@ fun ParcelableStatus.addFilterFlag(@ParcelableStatus.FilterFlags flags: Long) {
|
||||||
|
|
||||||
fun ParcelableStatus.updateFilterInfo(descriptions: Collection<String?>?) {
|
fun ParcelableStatus.updateFilterInfo(descriptions: Collection<String?>?) {
|
||||||
updateContentFilterInfo()
|
updateContentFilterInfo()
|
||||||
filter_users = setOf(user_key, quoted_user_key, retweeted_by_user_key).filterNotNull().toTypedArray()
|
filter_users = setOf(user_key, quoted?.user_key, retweeted_by_user_key).filterNotNull().toTypedArray()
|
||||||
filter_names = setOf(user_name, quoted_user_name, retweeted_by_user_name).filterNotNull().toTypedArray()
|
filter_names = setOf(user_name, quoted?.user_name, retweeted_by_user_name).filterNotNull().toTypedArray()
|
||||||
filter_descriptions = descriptions?.filterNotNull()?.joinToString("\n")
|
filter_descriptions = descriptions?.filterNotNull()?.joinToString("\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,17 +155,17 @@ fun ParcelableStatus.updateContentFilterInfo() {
|
||||||
filter_links = generateFilterLinks()
|
filter_links = generateFilterLinks()
|
||||||
filter_texts = generateFilterTexts()
|
filter_texts = generateFilterTexts()
|
||||||
|
|
||||||
filter_sources = setOf(source?.plainText, quoted_source?.plainText).filterNotNull().toTypedArray()
|
filter_sources = setOf(source?.plainText, quoted?.source?.plainText).filterNotNull().toTypedArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun ParcelableStatus.generateFilterTexts(): String {
|
fun ParcelableStatus.generateFilterTexts(): String {
|
||||||
val texts = StringBuilder()
|
val texts = StringBuilder()
|
||||||
texts.appendNonEmptyLine(text_unescaped)
|
texts.appendNonEmptyLine(text_unescaped)
|
||||||
texts.appendNonEmptyLine(quoted_text_unescaped)
|
texts.appendNonEmptyLine(quoted?.text_unescaped)
|
||||||
media?.forEach { item ->
|
attachment?.media?.forEach { item ->
|
||||||
texts.appendNonEmptyLine(item.alt_text)
|
texts.appendNonEmptyLine(item.alt_text)
|
||||||
}
|
}
|
||||||
quoted_media?.forEach { item ->
|
quoted?.media?.forEach { item ->
|
||||||
texts.appendNonEmptyLine(item.alt_text)
|
texts.appendNonEmptyLine(item.alt_text)
|
||||||
}
|
}
|
||||||
return texts.toString()
|
return texts.toString()
|
||||||
|
@ -193,7 +177,7 @@ fun ParcelableStatus.generateFilterLinks(): Array<String> {
|
||||||
if (span.type != SpanItem.SpanType.LINK) return@mapNotNullTo null
|
if (span.type != SpanItem.SpanType.LINK) return@mapNotNullTo null
|
||||||
return@mapNotNullTo span.link
|
return@mapNotNullTo span.link
|
||||||
}
|
}
|
||||||
quoted_spans?.mapNotNullTo(links) { span ->
|
quoted?.spans?.mapNotNullTo(links) { span ->
|
||||||
if (span.type != SpanItem.SpanType.LINK) return@mapNotNullTo null
|
if (span.type != SpanItem.SpanType.LINK) return@mapNotNullTo null
|
||||||
return@mapNotNullTo span.link
|
return@mapNotNullTo span.link
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* Twidere - Twitter client for Android
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012-2018 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.mariotaku.twidere.extension.model
|
||||||
|
|
||||||
|
import org.mariotaku.twidere.model.HomeTab
|
||||||
|
import org.mariotaku.twidere.model.Tab
|
||||||
|
|
||||||
|
fun Tab.toHomeTab(): HomeTab {
|
||||||
|
return HomeTab(name, icon, type, position, arguments, extras)
|
||||||
|
}
|
|
@ -30,10 +30,7 @@ import org.mariotaku.microblog.library.model.microblog.ExtendedEntitySupport
|
||||||
import org.mariotaku.microblog.library.model.microblog.MediaEntity
|
import org.mariotaku.microblog.library.model.microblog.MediaEntity
|
||||||
import org.mariotaku.microblog.library.model.microblog.Status
|
import org.mariotaku.microblog.library.model.microblog.Status
|
||||||
import org.mariotaku.twidere.exception.MalformedResponseException
|
import org.mariotaku.twidere.exception.MalformedResponseException
|
||||||
import org.mariotaku.twidere.extension.model.addFilterFlag
|
import org.mariotaku.twidere.extension.model.*
|
||||||
import org.mariotaku.twidere.extension.model.toParcelable
|
|
||||||
import org.mariotaku.twidere.extension.model.updateContentFilterInfo
|
|
||||||
import org.mariotaku.twidere.extension.model.updateFilterInfo
|
|
||||||
import org.mariotaku.twidere.extension.toSpanItem
|
import org.mariotaku.twidere.extension.toSpanItem
|
||||||
import org.mariotaku.twidere.model.*
|
import org.mariotaku.twidere.model.*
|
||||||
import org.mariotaku.twidere.model.util.ParcelableMediaUtils
|
import org.mariotaku.twidere.model.util.ParcelableMediaUtils
|
||||||
|
@ -60,6 +57,7 @@ fun Status.applyTo(accountKey: UserKey, accountType: String, profileImageSize: S
|
||||||
result: ParcelableStatus,
|
result: ParcelableStatus,
|
||||||
updateFilterInfoAction: (Status, ParcelableStatus) -> Unit = ::updateFilterInfoDefault) {
|
updateFilterInfoAction: (Status, ParcelableStatus) -> Unit = ::updateFilterInfoDefault) {
|
||||||
val extras = ParcelableStatus.Extras()
|
val extras = ParcelableStatus.Extras()
|
||||||
|
val attachment = ParcelableStatusAttachment()
|
||||||
result.account_key = accountKey
|
result.account_key = accountKey
|
||||||
result.id = id
|
result.id = id
|
||||||
result.sort_id = sortId
|
result.sort_id = sortId
|
||||||
|
@ -101,44 +99,47 @@ fun Status.applyTo(accountKey: UserKey, accountType: String, profileImageSize: S
|
||||||
result.addFilterFlag(ParcelableStatus.FilterFlags.POSSIBLY_SENSITIVE)
|
result.addFilterFlag(ParcelableStatus.FilterFlags.POSSIBLY_SENSITIVE)
|
||||||
}
|
}
|
||||||
|
|
||||||
val quoted = status.quotedStatus
|
val quotedStatus = status.quotedStatus
|
||||||
result.is_quote = status.isQuoteStatus
|
result.is_quote = status.isQuoteStatus
|
||||||
result.quoted_id = status.quotedStatusId
|
if (quotedStatus != null) {
|
||||||
if (quoted != null) {
|
val quoted = ParcelableStatusAttachment.QuotedStatus()
|
||||||
val quotedUser = quoted.user ?: throw MalformedResponseException()
|
val quotedUser = quotedStatus.user ?: throw MalformedResponseException()
|
||||||
result.quoted_id = quoted.id
|
quoted.id = quotedStatus.id
|
||||||
extras.quoted_external_url = quoted.inferredExternalUrl
|
quoted.account_key = accountKey
|
||||||
|
quoted.external_url = quotedStatus.inferredExternalUrl
|
||||||
|
|
||||||
val quotedText = quoted.htmlText
|
val quotedText = quotedStatus.htmlText
|
||||||
// Twitter will escape <> to <>, so if a status contains those symbols unescaped
|
// Twitter will escape <> to <>, so if a status contains those symbols unescaped
|
||||||
// We should treat this as an html
|
// We should treat this as an html
|
||||||
if (quotedText.isHtml) {
|
if (quotedText.isHtml) {
|
||||||
val html = HtmlSpanBuilder.fromHtml(quotedText, quoted.extendedText)
|
val html = HtmlSpanBuilder.fromHtml(quotedText, quotedStatus.extendedText)
|
||||||
result.quoted_text_unescaped = html?.toString()
|
quoted.text_unescaped = html?.toString()
|
||||||
result.quoted_text_plain = result.quoted_text_unescaped
|
quoted.text_plain = quoted.text_unescaped
|
||||||
result.quoted_spans = html?.spanItems
|
quoted.spans = html?.spanItems
|
||||||
} else {
|
} else {
|
||||||
val textWithIndices = quoted.formattedTextWithIndices()
|
val textWithIndices = quotedStatus.formattedTextWithIndices()
|
||||||
result.quoted_text_plain = quotedText.twitterUnescaped()
|
quoted.text_plain = quotedText.twitterUnescaped()
|
||||||
result.quoted_text_unescaped = textWithIndices.text
|
quoted.text_unescaped = textWithIndices.text
|
||||||
result.quoted_spans = textWithIndices.spans
|
quoted.spans = textWithIndices.spans
|
||||||
extras.quoted_display_text_range = textWithIndices.range
|
extras.quoted_display_text_range = textWithIndices.range
|
||||||
}
|
}
|
||||||
|
|
||||||
result.quoted_timestamp = quoted.createdAt.time
|
quoted.timestamp = quotedStatus.createdAt.time
|
||||||
result.quoted_source = quoted.source
|
quoted.source = quotedStatus.source
|
||||||
result.quoted_media = ParcelableMediaUtils.fromStatus(quoted, accountKey, accountType)
|
quoted.media = ParcelableMediaUtils.fromStatus(quotedStatus, accountKey, accountType)
|
||||||
|
|
||||||
result.quoted_user_key = quotedUser.key
|
quoted.user_key = quotedUser.key
|
||||||
result.quoted_user_name = quotedUser.name
|
quoted.user_name = quotedUser.name
|
||||||
result.quoted_user_screen_name = quotedUser.screenName
|
quoted.user_screen_name = quotedUser.screenName
|
||||||
result.quoted_user_profile_image = quotedUser.getProfileImageOfSize(profileImageSize)
|
quoted.user_profile_image = quotedUser.getProfileImageOfSize(profileImageSize)
|
||||||
result.quoted_user_is_protected = quotedUser.isProtected
|
quoted.user_is_protected = quotedUser.isProtected
|
||||||
result.quoted_user_is_verified = quotedUser.isVerified
|
quoted.user_is_verified = quotedUser.isVerified
|
||||||
|
|
||||||
if (quoted.isPossiblySensitive) {
|
if (quotedStatus.isPossiblySensitive) {
|
||||||
result.addFilterFlag(ParcelableStatus.FilterFlags.POSSIBLY_SENSITIVE)
|
result.addFilterFlag(ParcelableStatus.FilterFlags.POSSIBLY_SENSITIVE)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
attachment.quoted = quoted
|
||||||
} else if (status.isQuoteStatus) {
|
} else if (status.isQuoteStatus) {
|
||||||
result.addFilterFlag(ParcelableStatus.FilterFlags.QUOTE_NOT_AVAILABLE)
|
result.addFilterFlag(ParcelableStatus.FilterFlags.QUOTE_NOT_AVAILABLE)
|
||||||
}
|
}
|
||||||
|
@ -177,7 +178,9 @@ fun Status.applyTo(accountKey: UserKey, accountType: String, profileImageSize: S
|
||||||
extras.display_text_range = textWithIndices.range
|
extras.display_text_range = textWithIndices.range
|
||||||
}
|
}
|
||||||
|
|
||||||
result.media = ParcelableMediaUtils.fromStatus(status, accountKey, accountType)
|
attachment.media = ParcelableMediaUtils.fromStatus(status, accountKey, accountType)
|
||||||
|
attachment.card = status.card?.toParcelable(accountKey, accountType)
|
||||||
|
|
||||||
result.source = status.source
|
result.source = status.source
|
||||||
result.location = status.parcelableLocation
|
result.location = status.parcelableLocation
|
||||||
result.is_favorite = status.isFavorited
|
result.is_favorite = status.isFavorited
|
||||||
|
@ -188,13 +191,15 @@ fun Status.applyTo(accountKey: UserKey, accountType: String, profileImageSize: S
|
||||||
}
|
}
|
||||||
result.is_possibly_sensitive = status.isPossiblySensitive
|
result.is_possibly_sensitive = status.isPossiblySensitive
|
||||||
result.mentions = status.userMentionEntities?.mapToArray { it.toParcelable(user.host) }
|
result.mentions = status.userMentionEntities?.mapToArray { it.toParcelable(user.host) }
|
||||||
result.card = status.card?.toParcelable(accountKey, accountType)
|
|
||||||
result.card_name = result.card?.name
|
result.card_name = result.attachment?.card?.name
|
||||||
result.place_full_name = status.placeFullName
|
result.place_full_name = status.placeFullName
|
||||||
result.lang = status.lang
|
result.lang = status.lang
|
||||||
result.extras = extras
|
result.extras = extras
|
||||||
|
|
||||||
if (result.media.isNotNullOrEmpty() || result.quoted_media.isNotNullOrEmpty()) {
|
result.attachment = attachment
|
||||||
|
|
||||||
|
if (result.attachment?.media.isNotNullOrEmpty() || result.quoted?.media.isNotNullOrEmpty()) {
|
||||||
result.addFilterFlag(ParcelableStatus.FilterFlags.HAS_MEDIA)
|
result.addFilterFlag(ParcelableStatus.FilterFlags.HAS_MEDIA)
|
||||||
}
|
}
|
||||||
if (user.isFollowing == false) {
|
if (user.isFollowing == false) {
|
||||||
|
@ -291,8 +296,8 @@ fun updateFilterInfoForUserTimeline(status: Status, result: ParcelableStatus) {
|
||||||
result.updateContentFilterInfo()
|
result.updateContentFilterInfo()
|
||||||
|
|
||||||
if (result.is_retweet) {
|
if (result.is_retweet) {
|
||||||
result.filter_users = setOf(result.user_key, result.quoted_user_key).filterNotNull().toTypedArray()
|
result.filter_users = setOf(result.user_key, result.quoted?.user_key).filterNotNull().toTypedArray()
|
||||||
result.filter_names = setOf(result.user_name, result.quoted_user_name).filterNotNull().toTypedArray()
|
result.filter_names = setOf(result.user_name, result.quoted?.user_name).filterNotNull().toTypedArray()
|
||||||
result.filter_descriptions = setOf(
|
result.filter_descriptions = setOf(
|
||||||
status.retweetedStatus?.userDescriptionUnescaped,
|
status.retweetedStatus?.userDescriptionUnescaped,
|
||||||
status.retweetedStatus?.userUrlExpanded,
|
status.retweetedStatus?.userUrlExpanded,
|
||||||
|
@ -302,8 +307,8 @@ fun updateFilterInfoForUserTimeline(status: Status, result: ParcelableStatus) {
|
||||||
status.quotedStatus?.userUrlExpanded
|
status.quotedStatus?.userUrlExpanded
|
||||||
).filterNotNull().joinToString("\n")
|
).filterNotNull().joinToString("\n")
|
||||||
} else {
|
} else {
|
||||||
result.filter_users = setOf(result.quoted_user_key).filterNotNull().toTypedArray()
|
result.filter_users = setOf(result.quoted?.user_key).filterNotNull().toTypedArray()
|
||||||
result.filter_names = setOf(result.quoted_user_name).filterNotNull().toTypedArray()
|
result.filter_names = setOf(result.quoted?.user_name).filterNotNull().toTypedArray()
|
||||||
result.filter_descriptions = setOf(
|
result.filter_descriptions = setOf(
|
||||||
status.quotedStatus?.userDescriptionUnescaped,
|
status.quotedStatus?.userDescriptionUnescaped,
|
||||||
status.quotedStatus?.userLocation,
|
status.quotedStatus?.userLocation,
|
||||||
|
|
|
@ -25,6 +25,7 @@ import org.mariotaku.twidere.annotation.AccountType
|
||||||
import org.mariotaku.twidere.extension.model.api.isHtml
|
import org.mariotaku.twidere.extension.model.api.isHtml
|
||||||
import org.mariotaku.twidere.extension.model.api.spanItems
|
import org.mariotaku.twidere.extension.model.api.spanItems
|
||||||
import org.mariotaku.twidere.model.AccountDetails
|
import org.mariotaku.twidere.model.AccountDetails
|
||||||
|
import org.mariotaku.twidere.model.ParcelableLiteUser
|
||||||
import org.mariotaku.twidere.model.ParcelableUser
|
import org.mariotaku.twidere.model.ParcelableUser
|
||||||
import org.mariotaku.twidere.model.UserKey
|
import org.mariotaku.twidere.model.UserKey
|
||||||
import org.mariotaku.twidere.util.HtmlEscapeHelper
|
import org.mariotaku.twidere.util.HtmlEscapeHelper
|
||||||
|
@ -42,6 +43,24 @@ fun Account.toParcelable(details: AccountDetails, position: Long = 0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun Account.toLiteParcelable(accountKey: UserKey): ParcelableLiteUser {
|
||||||
|
val obj = ParcelableLiteUser()
|
||||||
|
obj.account_key = accountKey
|
||||||
|
obj.key = getKey(accountKey.host)
|
||||||
|
obj.name = name
|
||||||
|
obj.screen_name = username
|
||||||
|
obj.profile_image_url = avatar
|
||||||
|
|
||||||
|
if (note?.isHtml == true) {
|
||||||
|
val descriptionHtml = HtmlSpanBuilder.fromHtml(note, note, MastodonSpanProcessor())
|
||||||
|
obj.description_unescaped = descriptionHtml?.toString()
|
||||||
|
} else {
|
||||||
|
obj.description_unescaped = note?.let(HtmlEscapeHelper::unescape)
|
||||||
|
}
|
||||||
|
obj.url_expanded = url
|
||||||
|
return obj
|
||||||
|
}
|
||||||
|
|
||||||
fun Account.toParcelable(accountKey: UserKey, position: Long = 0,
|
fun Account.toParcelable(accountKey: UserKey, position: Long = 0,
|
||||||
relationship: Relationship? = null): ParcelableUser {
|
relationship: Relationship? = null): ParcelableUser {
|
||||||
val obj = ParcelableUser()
|
val obj = ParcelableUser()
|
||||||
|
@ -81,13 +100,15 @@ fun Account.toParcelable(accountKey: UserKey, position: Long = 0,
|
||||||
extras.muting = relationship.isMuting
|
extras.muting = relationship.isMuting
|
||||||
extras.blocking = relationship.isBlocking
|
extras.blocking = relationship.isBlocking
|
||||||
}
|
}
|
||||||
|
extras.moved = moved?.toLiteParcelable(accountKey)
|
||||||
|
|
||||||
return obj
|
return obj
|
||||||
}
|
}
|
||||||
|
|
||||||
inline val Account.host: String? get() = acct?.let(UserKey::valueOf)?.host
|
inline val Account.host: String? get() = acct?.let(UserKey::valueOf)?.host
|
||||||
|
|
||||||
inline val Account.name: String? get() = displayName?.takeIf(String::isNotEmpty)
|
inline val Account.name: String?
|
||||||
|
get() = displayName?.takeIf(String::isNotEmpty)
|
||||||
?.let(EmojioneTranslator::translate) ?: username
|
?.let(EmojioneTranslator::translate) ?: username
|
||||||
|
|
||||||
fun Account.getKey(host: String?) = UserKey(id, acct?.let(UserKey::valueOf)?.host ?: host)
|
fun Account.getKey(host: String?) = UserKey(id, acct?.let(UserKey::valueOf)?.host ?: host)
|
||||||
|
|
|
@ -54,6 +54,7 @@ fun Status.toParcelable(accountKey: UserKey): ParcelableStatus {
|
||||||
|
|
||||||
fun Status.applyTo(accountKey: UserKey, result: ParcelableStatus) {
|
fun Status.applyTo(accountKey: UserKey, result: ParcelableStatus) {
|
||||||
val extras = ParcelableStatus.Extras()
|
val extras = ParcelableStatus.Extras()
|
||||||
|
val attachment = ParcelableStatusAttachment()
|
||||||
result.account_key = accountKey
|
result.account_key = accountKey
|
||||||
result.id = id
|
result.id = id
|
||||||
result.sort_id = sortId
|
result.sort_id = sortId
|
||||||
|
@ -104,14 +105,14 @@ fun Status.applyTo(accountKey: UserKey, result: ParcelableStatus) {
|
||||||
result.text_unescaped = html?.toString()
|
result.text_unescaped = html?.toString()
|
||||||
result.text_plain = result.text_unescaped
|
result.text_plain = result.text_unescaped
|
||||||
result.spans = html?.spanItems
|
result.spans = html?.spanItems
|
||||||
result.media = status.mediaAttachments?.mapToArray { it.toParcelable() }
|
attachment.media = status.mediaAttachments?.mapToArray { it.toParcelable() }
|
||||||
result.source = status.application?.sourceHtml
|
result.source = status.application?.sourceHtml
|
||||||
result.is_favorite = status.isFavourited
|
result.is_favorite = status.isFavourited
|
||||||
result.is_possibly_sensitive = status.isSensitive
|
result.is_possibly_sensitive = status.isSensitive
|
||||||
result.mentions = status.mentions?.mapToArray { it.toParcelable(accountKey) }
|
result.mentions = status.mentions?.mapToArray { it.toParcelable(accountKey) }
|
||||||
|
|
||||||
extras.display_text_range = calculateDisplayTextRange(result.text_unescaped, result.spans,
|
extras.display_text_range = calculateDisplayTextRange(result.text_unescaped, result.spans,
|
||||||
result.media)
|
result.attachment?.media)
|
||||||
extras.summary_text = status.spoilerText?.let(EmojioneTranslator::translate)
|
extras.summary_text = status.spoilerText?.let(EmojioneTranslator::translate)
|
||||||
extras.visibility = status.visibility
|
extras.visibility = status.visibility
|
||||||
extras.external_url = status.url
|
extras.external_url = status.url
|
||||||
|
@ -129,11 +130,12 @@ fun Status.applyTo(accountKey: UserKey, result: ParcelableStatus) {
|
||||||
result.in_reply_to_name = inReplyToMention.name
|
result.in_reply_to_name = inReplyToMention.name
|
||||||
result.in_reply_to_screen_name = inReplyToMention.screen_name
|
result.in_reply_to_screen_name = inReplyToMention.screen_name
|
||||||
}
|
}
|
||||||
if (result.media.isNotNullOrEmpty()) {
|
if (result.attachment?.media.isNotNullOrEmpty()) {
|
||||||
result.addFilterFlag(ParcelableStatus.FilterFlags.HAS_MEDIA)
|
result.addFilterFlag(ParcelableStatus.FilterFlags.HAS_MEDIA)
|
||||||
}
|
}
|
||||||
|
|
||||||
result.extras = extras
|
result.extras = extras
|
||||||
|
result.attachment = attachment
|
||||||
|
|
||||||
result.updateFilterInfo(setOf(accountDescriptionUnescaped, reblog?.accountDescriptionUnescaped,
|
result.updateFilterInfo(setOf(accountDescriptionUnescaped, reblog?.accountDescriptionUnescaped,
|
||||||
accountUrl, reblog?.accountUrl))
|
accountUrl, reblog?.accountUrl))
|
||||||
|
|
|
@ -27,6 +27,7 @@ import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener
|
||||||
import android.view.*
|
import android.view.*
|
||||||
import android.widget.AbsListView
|
import android.widget.AbsListView
|
||||||
import android.widget.ListAdapter
|
import android.widget.ListAdapter
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.RequestManager
|
import com.bumptech.glide.RequestManager
|
||||||
import kotlinx.android.synthetic.main.fragment_content_listview.*
|
import kotlinx.android.synthetic.main.fragment_content_listview.*
|
||||||
import kotlinx.android.synthetic.main.layout_content_fragment_common.*
|
import kotlinx.android.synthetic.main.layout_content_fragment_common.*
|
||||||
|
@ -132,7 +133,7 @@ abstract class AbsContentListViewFragment<A : ListAdapter> : BaseFragment(),
|
||||||
R.color.bg_refresh_progress_color_light, R.color.bg_refresh_progress_color_dark)
|
R.color.bg_refresh_progress_color_light, R.color.bg_refresh_progress_color_dark)
|
||||||
swipeLayout.setOnRefreshListener(this)
|
swipeLayout.setOnRefreshListener(this)
|
||||||
swipeLayout.setProgressBackgroundColorSchemeResource(colorRes)
|
swipeLayout.setProgressBackgroundColorSchemeResource(colorRes)
|
||||||
adapter = onCreateAdapter(context!!, requestManager)
|
adapter = onCreateAdapter(context!!, Glide.with(this))
|
||||||
listView.setOnTouchListener { _, event ->
|
listView.setOnTouchListener { _, event ->
|
||||||
if (event.actionMasked == MotionEvent.ACTION_DOWN) {
|
if (event.actionMasked == MotionEvent.ACTION_DOWN) {
|
||||||
updateRefreshProgressOffset()
|
updateRefreshProgressOffset()
|
||||||
|
|
|
@ -26,6 +26,7 @@ import android.support.v4.widget.SwipeRefreshLayout
|
||||||
import android.support.v7.widget.RecyclerView
|
import android.support.v7.widget.RecyclerView
|
||||||
import android.support.v7.widget.RecyclerView.ItemDecoration
|
import android.support.v7.widget.RecyclerView.ItemDecoration
|
||||||
import android.view.*
|
import android.view.*
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.RequestManager
|
import com.bumptech.glide.RequestManager
|
||||||
import kotlinx.android.synthetic.main.fragment_content_recyclerview.*
|
import kotlinx.android.synthetic.main.fragment_content_recyclerview.*
|
||||||
import kotlinx.android.synthetic.main.layout_content_fragment_common.*
|
import kotlinx.android.synthetic.main.layout_content_fragment_common.*
|
||||||
|
@ -155,7 +156,7 @@ abstract class AbsContentRecyclerViewFragment<A : LoadMoreSupportAdapter<Recycle
|
||||||
R.color.bg_refresh_progress_color_light, R.color.bg_refresh_progress_color_dark)
|
R.color.bg_refresh_progress_color_light, R.color.bg_refresh_progress_color_dark)
|
||||||
swipeLayout.setOnRefreshListener(this)
|
swipeLayout.setOnRefreshListener(this)
|
||||||
swipeLayout.setProgressBackgroundColorSchemeResource(colorRes)
|
swipeLayout.setProgressBackgroundColorSchemeResource(colorRes)
|
||||||
adapter = onCreateAdapter(context!!, requestManager)
|
adapter = onCreateAdapter(context!!, Glide.with(this))
|
||||||
layoutManager = onCreateLayoutManager(context!!)
|
layoutManager = onCreateLayoutManager(context!!)
|
||||||
scrollListener = RecyclerViewScrollHandler(this, RecyclerViewScrollHandler.RecyclerViewCallback(recyclerView))
|
scrollListener = RecyclerViewScrollHandler(this, RecyclerViewScrollHandler.RecyclerViewCallback(recyclerView))
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ import android.os.Bundle
|
||||||
import android.support.v7.widget.LinearLayoutManager
|
import android.support.v7.widget.LinearLayoutManager
|
||||||
import android.support.v7.widget.RecyclerView
|
import android.support.v7.widget.RecyclerView
|
||||||
import android.view.KeyEvent
|
import android.view.KeyEvent
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.RequestManager
|
import com.bumptech.glide.RequestManager
|
||||||
import com.squareup.otto.Subscribe
|
import com.squareup.otto.Subscribe
|
||||||
import kotlinx.android.synthetic.main.fragment_content_recyclerview.*
|
import kotlinx.android.synthetic.main.fragment_content_recyclerview.*
|
||||||
|
@ -57,6 +58,7 @@ import org.mariotaku.twidere.model.event.FriendshipTaskEvent
|
||||||
import org.mariotaku.twidere.promise.BlockPromises
|
import org.mariotaku.twidere.promise.BlockPromises
|
||||||
import org.mariotaku.twidere.promise.FriendshipPromises
|
import org.mariotaku.twidere.promise.FriendshipPromises
|
||||||
import org.mariotaku.twidere.promise.MutePromises
|
import org.mariotaku.twidere.promise.MutePromises
|
||||||
|
import org.mariotaku.twidere.singleton.BusSingleton
|
||||||
import org.mariotaku.twidere.util.IntentUtils
|
import org.mariotaku.twidere.util.IntentUtils
|
||||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler
|
import org.mariotaku.twidere.util.KeyboardShortcutsHandler
|
||||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback
|
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback
|
||||||
|
@ -93,11 +95,11 @@ abstract class AbsUsersFragment : AbsContentListRecyclerViewFragment<ParcelableU
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
bus.register(usersBusCallback)
|
BusSingleton.register(usersBusCallback)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
bus.unregister(usersBusCallback)
|
BusSingleton.unregister(usersBusCallback)
|
||||||
super.onStop()
|
super.onStop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,7 +108,7 @@ abstract class AbsUsersFragment : AbsContentListRecyclerViewFragment<ParcelableU
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateAdapter(context: Context, requestManager: RequestManager): ParcelableUsersAdapter {
|
override fun onCreateAdapter(context: Context, requestManager: RequestManager): ParcelableUsersAdapter {
|
||||||
val adapter = ParcelableUsersAdapter(context, this.requestManager)
|
val adapter = ParcelableUsersAdapter(context, Glide.with(this))
|
||||||
adapter.simpleLayout = simpleLayout
|
adapter.simpleLayout = simpleLayout
|
||||||
adapter.showFollow = showFollow
|
adapter.showFollow = showFollow
|
||||||
val accountType = arguments?.accountKey?.let { key ->
|
val accountType = arguments?.accountKey?.let { key ->
|
||||||
|
@ -152,7 +154,7 @@ abstract class AbsUsersFragment : AbsContentListRecyclerViewFragment<ParcelableU
|
||||||
if (user.is_following) {
|
if (user.is_following) {
|
||||||
DestroyFriendshipDialogFragment.show(fragmentManager!!, user)
|
DestroyFriendshipDialogFragment.show(fragmentManager!!, user)
|
||||||
} else {
|
} else {
|
||||||
FriendshipPromises.getInstance(context!!).create(accountKey, user.key, user.screen_name)
|
FriendshipPromises.get(context!!).create(accountKey, user.key, user.screen_name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,7 +162,7 @@ abstract class AbsUsersFragment : AbsContentListRecyclerViewFragment<ParcelableU
|
||||||
val user = adapter.getUser(position) ?: return
|
val user = adapter.getUser(position) ?: return
|
||||||
val accountKey = user.account_key ?: return
|
val accountKey = user.account_key ?: return
|
||||||
if (FriendshipPromises.isRunning(accountKey, user.key)) return
|
if (FriendshipPromises.isRunning(accountKey, user.key)) return
|
||||||
BlockPromises.getInstance(context!!).unblock(accountKey, user.key)
|
BlockPromises.get(context!!).unblock(accountKey, user.key)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onUnmuteClicked(holder: UserViewHolder, position: Int) {
|
override fun onUnmuteClicked(holder: UserViewHolder, position: Int) {
|
||||||
|
|
|
@ -51,6 +51,8 @@ import android.view.*
|
||||||
import android.view.View.OnClickListener
|
import android.view.View.OnClickListener
|
||||||
import android.view.animation.DecelerateInterpolator
|
import android.view.animation.DecelerateInterpolator
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
|
import com.bumptech.glide.request.RequestOptions
|
||||||
import kotlinx.android.synthetic.main.header_drawer_account_selector.view.*
|
import kotlinx.android.synthetic.main.header_drawer_account_selector.view.*
|
||||||
import org.mariotaku.chameleon.Chameleon
|
import org.mariotaku.chameleon.Chameleon
|
||||||
import org.mariotaku.kpreferences.get
|
import org.mariotaku.kpreferences.get
|
||||||
|
@ -83,6 +85,7 @@ import org.mariotaku.twidere.model.UserKey
|
||||||
import org.mariotaku.twidere.provider.TwidereDataStore.Drafts
|
import org.mariotaku.twidere.provider.TwidereDataStore.Drafts
|
||||||
import org.mariotaku.twidere.util.*
|
import org.mariotaku.twidere.util.*
|
||||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback
|
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager.Companion
|
||||||
import org.mariotaku.twidere.view.holder.AccountProfileImageViewHolder
|
import org.mariotaku.twidere.view.holder.AccountProfileImageViewHolder
|
||||||
import org.mariotaku.twidere.view.transformer.AccountsSelectorTransformer
|
import org.mariotaku.twidere.view.transformer.AccountsSelectorTransformer
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
|
@ -117,7 +120,7 @@ class AccountsDashboardFragment : BaseFragment(), LoaderCallbacks<AccountsInfo>,
|
||||||
@SuppressLint("RestrictedApi")
|
@SuppressLint("RestrictedApi")
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||||
super.onActivityCreated(savedInstanceState)
|
super.onActivityCreated(savedInstanceState)
|
||||||
accountsAdapter = AccountSelectorAdapter(context!!, preferences, requestManager).also {
|
accountsAdapter = AccountSelectorAdapter(context!!, preferences, Glide.with(this)).also {
|
||||||
it.listener = this
|
it.listener = this
|
||||||
}
|
}
|
||||||
accountsSelector.adapter = accountsAdapter
|
accountsSelector.adapter = accountsAdapter
|
||||||
|
@ -161,7 +164,8 @@ class AccountsDashboardFragment : BaseFragment(), LoaderCallbacks<AccountsInfo>,
|
||||||
} else {
|
} else {
|
||||||
when (item.itemId) {
|
when (item.itemId) {
|
||||||
R.id.compose -> {
|
R.id.compose -> {
|
||||||
val account = accountsAdapter.selectedAccount ?: return@OnMenuItemClickListener true
|
val account = accountsAdapter.selectedAccount
|
||||||
|
?: return@OnMenuItemClickListener true
|
||||||
val composeIntent = Intent(INTENT_ACTION_COMPOSE)
|
val composeIntent = Intent(INTENT_ACTION_COMPOSE)
|
||||||
composeIntent.setClass(activity, ComposeActivity::class.java)
|
composeIntent.setClass(activity, ComposeActivity::class.java)
|
||||||
composeIntent.putExtra(EXTRA_ACCOUNT_KEY, account.key)
|
composeIntent.putExtra(EXTRA_ACCOUNT_KEY, account.key)
|
||||||
|
@ -273,8 +277,7 @@ class AccountsDashboardFragment : BaseFragment(), LoaderCallbacks<AccountsInfo>,
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onApplySystemWindowInsets(insets: Rect) {
|
override fun onApplySystemWindowInsets(insets: Rect) {
|
||||||
view?.findViewById<View?>(android.support.design.R.id.design_navigation_view)?.
|
view?.findViewById<View?>(android.support.design.R.id.design_navigation_view)?.setPadding(0, 0, 0, insets.bottom)
|
||||||
setPadding(0, 0, 0, insets.bottom)
|
|
||||||
systemWindowsInsets.set(insets)
|
systemWindowsInsets.set(insets)
|
||||||
updateSystemWindowsInsets()
|
updateSystemWindowsInsets()
|
||||||
}
|
}
|
||||||
|
@ -473,7 +476,7 @@ class AccountsDashboardFragment : BaseFragment(), LoaderCallbacks<AccountsInfo>,
|
||||||
clickedColors = clickedImageView.borderColors
|
clickedColors = clickedImageView.borderColors
|
||||||
val oldSelectedAccount = accountsAdapter.selectedAccount ?: return
|
val oldSelectedAccount = accountsAdapter.selectedAccount ?: return
|
||||||
val profileImageStyle = preferences[profileImageStyleKey]
|
val profileImageStyle = preferences[profileImageStyleKey]
|
||||||
requestManager.loadProfileImage(activity, oldSelectedAccount,
|
Glide.with(this@AccountsDashboardFragment).loadProfileImage(activity, oldSelectedAccount,
|
||||||
profileImageStyle, clickedImageView.cornerRadius, clickedImageView.cornerRadiusRatio)
|
profileImageStyle, clickedImageView.cornerRadius, clickedImageView.cornerRadiusRatio)
|
||||||
.into(clickedImageView).onLoadStarted(profileDrawable)
|
.into(clickedImageView).onLoadStarted(profileDrawable)
|
||||||
//TODO complete border color
|
//TODO complete border color
|
||||||
|
@ -536,7 +539,7 @@ class AccountsDashboardFragment : BaseFragment(), LoaderCallbacks<AccountsInfo>,
|
||||||
ColorDrawable(Chameleon.getOverrideTheme(activity, activity).colorPrimary)
|
ColorDrawable(Chameleon.getOverrideTheme(activity, activity).colorPrimary)
|
||||||
}
|
}
|
||||||
|
|
||||||
requestManager.loadProfileBanner(activity, account.user, width).fallback(fallbackBanner)
|
Glide.with(this).loadProfileBanner(activity, account.user, width).apply(RequestOptions().fallback(fallbackBanner))
|
||||||
.into(bannerView)
|
.into(bannerView)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -551,11 +554,11 @@ class AccountsDashboardFragment : BaseFragment(), LoaderCallbacks<AccountsInfo>,
|
||||||
accountProfileNameView.updateText(bidiFormatter)
|
accountProfileNameView.updateText(bidiFormatter)
|
||||||
|
|
||||||
profileContainer.contentDescription = getString(R.string.content_description_accounts_selector_current,
|
profileContainer.contentDescription = getString(R.string.content_description_accounts_selector_current,
|
||||||
userColorNameManager.getDisplayName(user))
|
UserColorNameManager.get(context!!).getDisplayName(user))
|
||||||
|
|
||||||
requestManager.loadProfileImage(activity, account, preferences[profileImageStyleKey],
|
Glide.with(this).loadProfileImage(activity, account, preferences[profileImageStyleKey],
|
||||||
accountProfileImageView.cornerRadius, accountProfileImageView.cornerRadiusRatio,
|
accountProfileImageView.cornerRadius, accountProfileImageView.cornerRadiusRatio,
|
||||||
ProfileImageSize.REASONABLY_SMALL).placeholder(profileImageSnapshot).into(accountProfileImageView)
|
ProfileImageSize.REASONABLY_SMALL).apply(RequestOptions.placeholderOf(profileImageSnapshot)).into(accountProfileImageView)
|
||||||
//TODO complete border color
|
//TODO complete border color
|
||||||
accountProfileImageView.setBorderColors(account.color)
|
accountProfileImageView.setBorderColors(account.color)
|
||||||
accountProfileBanner.showNext()
|
accountProfileBanner.showNext()
|
||||||
|
|
|
@ -18,6 +18,7 @@ import android.view.ContextMenu.ContextMenuInfo
|
||||||
import android.widget.AdapterView
|
import android.widget.AdapterView
|
||||||
import android.widget.AdapterView.AdapterContextMenuInfo
|
import android.widget.AdapterView.AdapterContextMenuInfo
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import kotlinx.android.synthetic.main.layout_draggable_list_with_empty_view.*
|
import kotlinx.android.synthetic.main.layout_draggable_list_with_empty_view.*
|
||||||
import nl.komponents.kovenant.combine.and
|
import nl.komponents.kovenant.combine.and
|
||||||
import nl.komponents.kovenant.task
|
import nl.komponents.kovenant.task
|
||||||
|
@ -68,7 +69,7 @@ class AccountsManagerFragment : BaseFragment(), LoaderManager.LoaderCallbacks<Li
|
||||||
linkHandlerTitle = getString(R.string.title_accounts)
|
linkHandlerTitle = getString(R.string.title_accounts)
|
||||||
val context = context!!
|
val context = context!!
|
||||||
val am = AccountManager.get(context)
|
val am = AccountManager.get(context)
|
||||||
adapter = AccountDetailsAdapter(context, requestManager).apply {
|
adapter = AccountDetailsAdapter(context, Glide.with(this)).apply {
|
||||||
sortEnabled = true
|
sortEnabled = true
|
||||||
switchEnabled = true
|
switchEnabled = true
|
||||||
accountToggleListener = { pos, checked ->
|
accountToggleListener = { pos, checked ->
|
||||||
|
|
|
@ -33,6 +33,7 @@ import org.mariotaku.twidere.constant.nameFirstKey
|
||||||
import org.mariotaku.twidere.extension.applyTheme
|
import org.mariotaku.twidere.extension.applyTheme
|
||||||
import org.mariotaku.twidere.extension.blockBulkInsert
|
import org.mariotaku.twidere.extension.blockBulkInsert
|
||||||
import org.mariotaku.twidere.extension.bulkDelete
|
import org.mariotaku.twidere.extension.bulkDelete
|
||||||
|
import org.mariotaku.twidere.extension.model.quoted
|
||||||
import org.mariotaku.twidere.extension.onShow
|
import org.mariotaku.twidere.extension.onShow
|
||||||
import org.mariotaku.twidere.model.ParcelableStatus
|
import org.mariotaku.twidere.model.ParcelableStatus
|
||||||
import org.mariotaku.twidere.model.ParcelableUserMention
|
import org.mariotaku.twidere.model.ParcelableUserMention
|
||||||
|
@ -41,6 +42,7 @@ import org.mariotaku.twidere.provider.TwidereDataStore.Filters
|
||||||
import org.mariotaku.twidere.util.ContentValuesCreator
|
import org.mariotaku.twidere.util.ContentValuesCreator
|
||||||
import org.mariotaku.twidere.util.HtmlEscapeHelper
|
import org.mariotaku.twidere.util.HtmlEscapeHelper
|
||||||
import org.mariotaku.twidere.util.UserColorNameManager
|
import org.mariotaku.twidere.util.UserColorNameManager
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager.Companion
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class AddStatusFilterDialogFragment : BaseDialogFragment() {
|
class AddStatusFilterDialogFragment : BaseDialogFragment() {
|
||||||
|
@ -55,10 +57,10 @@ class AddStatusFilterDialogFragment : BaseDialogFragment() {
|
||||||
UserItem(status.retweeted_by_user_key!!, status.retweeted_by_user_name,
|
UserItem(status.retweeted_by_user_key!!, status.retweeted_by_user_name,
|
||||||
status.retweeted_by_user_screen_name)))
|
status.retweeted_by_user_screen_name)))
|
||||||
}
|
}
|
||||||
if (status.is_quote && status.quoted_user_key != null) {
|
if (status.is_quote && status.quoted?.user_key != null) {
|
||||||
list.add(FilterItemInfo(FilterItemInfo.FILTER_TYPE_USER,
|
list.add(FilterItemInfo(FilterItemInfo.FILTER_TYPE_USER,
|
||||||
UserItem(status.quoted_user_key!!, status.quoted_user_name,
|
UserItem(status.quoted?.user_key!!, status.quoted?.user_name!!,
|
||||||
status.quoted_user_screen_name)))
|
status.quoted?.user_screen_name!!)))
|
||||||
}
|
}
|
||||||
list.add(FilterItemInfo(FilterItemInfo.FILTER_TYPE_USER, UserItem(status.user_key,
|
list.add(FilterItemInfo(FilterItemInfo.FILTER_TYPE_USER, UserItem(status.user_key,
|
||||||
status.user_name, status.user_screen_name)))
|
status.user_name, status.user_screen_name)))
|
||||||
|
@ -81,6 +83,7 @@ class AddStatusFilterDialogFragment : BaseDialogFragment() {
|
||||||
private var filterItems: Array<FilterItemInfo>? = null
|
private var filterItems: Array<FilterItemInfo>? = null
|
||||||
|
|
||||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||||
|
val manager = UserColorNameManager.get(context!!)
|
||||||
val builder = AlertDialog.Builder(context!!)
|
val builder = AlertDialog.Builder(context!!)
|
||||||
filterItems = filterItemsInfo
|
filterItems = filterItemsInfo
|
||||||
val entries = arrayOfNulls<String>(filterItems!!.size)
|
val entries = arrayOfNulls<String>(filterItems!!.size)
|
||||||
|
@ -89,15 +92,15 @@ class AddStatusFilterDialogFragment : BaseDialogFragment() {
|
||||||
val info = filterItems!![i]
|
val info = filterItems!![i]
|
||||||
when (info.type) {
|
when (info.type) {
|
||||||
FilterItemInfo.FILTER_TYPE_USER -> {
|
FilterItemInfo.FILTER_TYPE_USER -> {
|
||||||
entries[i] = getString(R.string.user_filter_name, getName(userColorNameManager,
|
entries[i] = getString(R.string.user_filter_name, getName(manager,
|
||||||
info.value, nameFirst))
|
info.value, nameFirst))
|
||||||
}
|
}
|
||||||
FilterItemInfo.FILTER_TYPE_KEYWORD -> {
|
FilterItemInfo.FILTER_TYPE_KEYWORD -> {
|
||||||
entries[i] = getString(R.string.keyword_filter_name, getName(userColorNameManager,
|
entries[i] = getString(R.string.keyword_filter_name, getName(manager,
|
||||||
info.value, nameFirst))
|
info.value, nameFirst))
|
||||||
}
|
}
|
||||||
FilterItemInfo.FILTER_TYPE_SOURCE -> {
|
FilterItemInfo.FILTER_TYPE_SOURCE -> {
|
||||||
entries[i] = getString(R.string.source_filter_name, getName(userColorNameManager,
|
entries[i] = getString(R.string.source_filter_name, getName(manager,
|
||||||
info.value, nameFirst))
|
info.value, nameFirst))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,11 +26,13 @@ import org.mariotaku.twidere.R
|
||||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_USER
|
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_USER
|
||||||
import org.mariotaku.twidere.model.ParcelableUser
|
import org.mariotaku.twidere.model.ParcelableUser
|
||||||
import org.mariotaku.twidere.model.event.FriendshipTaskEvent
|
import org.mariotaku.twidere.model.event.FriendshipTaskEvent
|
||||||
|
import org.mariotaku.twidere.singleton.BusSingleton
|
||||||
import org.mariotaku.twidere.util.DataStoreUtils
|
import org.mariotaku.twidere.util.DataStoreUtils
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager
|
||||||
|
|
||||||
class AddUserFilterDialogFragment : AbsUserMuteBlockDialogFragment() {
|
class AddUserFilterDialogFragment : AbsUserMuteBlockDialogFragment() {
|
||||||
override fun getMessage(user: ParcelableUser): String {
|
override fun getMessage(user: ParcelableUser): String {
|
||||||
return getString(R.string.filter_user_confirm_message, userColorNameManager.getDisplayName(user))
|
return getString(R.string.filter_user_confirm_message, UserColorNameManager.get(context!!).getDisplayName(user))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getTitle(user: ParcelableUser): String {
|
override fun getTitle(user: ParcelableUser): String {
|
||||||
|
@ -40,7 +42,7 @@ class AddUserFilterDialogFragment : AbsUserMuteBlockDialogFragment() {
|
||||||
override fun performUserAction(user: ParcelableUser, filterEverywhere: Boolean) {
|
override fun performUserAction(user: ParcelableUser, filterEverywhere: Boolean) {
|
||||||
DataStoreUtils.addToFilter(context!!, listOf(user), filterEverywhere)
|
DataStoreUtils.addToFilter(context!!, listOf(user), filterEverywhere)
|
||||||
val accountKey = user.account_key ?: return
|
val accountKey = user.account_key ?: return
|
||||||
bus.post(FriendshipTaskEvent(FriendshipTaskEvent.Action.FILTER, accountKey, user.key).apply {
|
BusSingleton.post(FriendshipTaskEvent(FriendshipTaskEvent.Action.FILTER, accountKey, user.key).apply {
|
||||||
isFinished = true
|
isFinished = true
|
||||||
isSucceeded = true
|
isSucceeded = true
|
||||||
})
|
})
|
||||||
|
|
|
@ -29,8 +29,8 @@ import android.widget.CompoundButton
|
||||||
import org.mariotaku.twidere.R
|
import org.mariotaku.twidere.R
|
||||||
import org.mariotaku.twidere.TwidereConstants.ACCOUNT_PREFERENCES_NAME_PREFIX
|
import org.mariotaku.twidere.TwidereConstants.ACCOUNT_PREFERENCES_NAME_PREFIX
|
||||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT
|
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT
|
||||||
import org.mariotaku.twidere.constant.SharedPreferenceConstants.KEY_NAME_FIRST
|
|
||||||
import org.mariotaku.twidere.model.AccountDetails
|
import org.mariotaku.twidere.model.AccountDetails
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager
|
||||||
|
|
||||||
abstract class BaseAccountPreferenceFragment : BasePreferenceFragment() {
|
abstract class BaseAccountPreferenceFragment : BasePreferenceFragment() {
|
||||||
|
|
||||||
|
@ -67,8 +67,7 @@ abstract class BaseAccountPreferenceFragment : BasePreferenceFragment() {
|
||||||
val activity = activity!!
|
val activity = activity!!
|
||||||
val intent = activity.intent
|
val intent = activity.intent
|
||||||
if (intent.hasExtra(EXTRA_SHOW_FRAGMENT)) {
|
if (intent.hasExtra(EXTRA_SHOW_FRAGMENT)) {
|
||||||
val nameFirst = prefs.getBoolean(KEY_NAME_FIRST, true)
|
val name = UserColorNameManager.get(activity).getDisplayName(account.key,
|
||||||
val name = userColorNameManager.getDisplayName(account.key,
|
|
||||||
account.user.name, account.user.screen_name)
|
account.user.name, account.user.screen_name)
|
||||||
activity.title = name
|
activity.title = name
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,35 +21,25 @@ package org.mariotaku.twidere.fragment
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.os.Bundle
|
|
||||||
import android.support.v4.app.DialogFragment
|
import android.support.v4.app.DialogFragment
|
||||||
import com.bumptech.glide.Glide
|
|
||||||
import com.bumptech.glide.RequestManager
|
|
||||||
import com.squareup.otto.Bus
|
|
||||||
import nl.komponents.kovenant.Promise
|
import nl.komponents.kovenant.Promise
|
||||||
import okhttp3.Dns
|
import okhttp3.Dns
|
||||||
import org.mariotaku.restfu.http.RestHttpClient
|
import org.mariotaku.restfu.http.RestHttpClient
|
||||||
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
||||||
import org.mariotaku.twidere.extension.get
|
|
||||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment
|
import org.mariotaku.twidere.fragment.iface.IBaseFragment
|
||||||
import org.mariotaku.twidere.util.DebugModeUtils
|
import org.mariotaku.twidere.util.DebugModeUtils
|
||||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler
|
import org.mariotaku.twidere.util.KeyboardShortcutsHandler
|
||||||
import org.mariotaku.twidere.util.UserColorNameManager
|
|
||||||
import org.mariotaku.twidere.util.premium.ExtraFeaturesService
|
import org.mariotaku.twidere.util.premium.ExtraFeaturesService
|
||||||
import org.mariotaku.twidere.util.sync.DataSyncProvider
|
import org.mariotaku.twidere.util.sync.DataSyncProvider
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
open class BaseDialogFragment : DialogFragment(), IBaseFragment<BaseDialogFragment> {
|
open class BaseDialogFragment : DialogFragment(), IBaseFragment<BaseDialogFragment> {
|
||||||
|
|
||||||
@Inject
|
|
||||||
lateinit var userColorNameManager: UserColorNameManager
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var preferences: SharedPreferences
|
lateinit var preferences: SharedPreferences
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var keyboardShortcutsHandler: KeyboardShortcutsHandler
|
lateinit var keyboardShortcutsHandler: KeyboardShortcutsHandler
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var bus: Bus
|
|
||||||
@Inject
|
|
||||||
lateinit var dns: Dns
|
lateinit var dns: Dns
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var extraFeaturesService: ExtraFeaturesService
|
lateinit var extraFeaturesService: ExtraFeaturesService
|
||||||
|
@ -58,26 +48,8 @@ open class BaseDialogFragment : DialogFragment(), IBaseFragment<BaseDialogFragme
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var dataSyncProvider: DataSyncProvider
|
lateinit var dataSyncProvider: DataSyncProvider
|
||||||
|
|
||||||
lateinit var requestManager: RequestManager
|
|
||||||
private set
|
|
||||||
|
|
||||||
private val actionHelper = IBaseFragment.ActionHelper<BaseDialogFragment>()
|
private val actionHelper = IBaseFragment.ActionHelper<BaseDialogFragment>()
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
requestManager = Glide.with(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onStart() {
|
|
||||||
super.onStart()
|
|
||||||
requestManager.onStart()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onStop() {
|
|
||||||
requestManager.onStop()
|
|
||||||
super.onStop()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
actionHelper.dispatchOnResumeFragments(this)
|
actionHelper.dispatchOnResumeFragments(this)
|
||||||
|
@ -89,7 +61,6 @@ open class BaseDialogFragment : DialogFragment(), IBaseFragment<BaseDialogFragme
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
requestManager.onDestroy()
|
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
DebugModeUtils.watchReferenceLeak(this)
|
DebugModeUtils.watchReferenceLeak(this)
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,14 +25,10 @@ import android.os.Bundle
|
||||||
import android.support.v4.app.Fragment
|
import android.support.v4.app.Fragment
|
||||||
import android.support.v4.text.BidiFormatter
|
import android.support.v4.text.BidiFormatter
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.bumptech.glide.Glide
|
|
||||||
import com.bumptech.glide.RequestManager
|
|
||||||
import com.squareup.otto.Bus
|
|
||||||
import nl.komponents.kovenant.Promise
|
import nl.komponents.kovenant.Promise
|
||||||
import okhttp3.Dns
|
import okhttp3.Dns
|
||||||
import org.mariotaku.restfu.http.RestHttpClient
|
import org.mariotaku.restfu.http.RestHttpClient
|
||||||
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
||||||
import org.mariotaku.twidere.extension.get
|
|
||||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment
|
import org.mariotaku.twidere.fragment.iface.IBaseFragment
|
||||||
import org.mariotaku.twidere.model.DefaultFeatures
|
import org.mariotaku.twidere.model.DefaultFeatures
|
||||||
import org.mariotaku.twidere.util.*
|
import org.mariotaku.twidere.util.*
|
||||||
|
@ -49,10 +45,9 @@ open class BaseFragment : Fragment(), IBaseFragment<BaseFragment> {
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var readStateManager: ReadStateManager
|
lateinit var readStateManager: ReadStateManager
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var bus: Bus
|
|
||||||
@Inject
|
|
||||||
lateinit var multiSelectManager: MultiSelectManager
|
lateinit var multiSelectManager: MultiSelectManager
|
||||||
@Inject
|
@Inject
|
||||||
|
@Deprecated(message = "Deprecated", replaceWith = ReplaceWith("UserColorNameManager.get(context!!)", imports = ["org.mariotaku.twidere.util.UserColorNameManager"]))
|
||||||
lateinit var userColorNameManager: UserColorNameManager
|
lateinit var userColorNameManager: UserColorNameManager
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var preferences: SharedPreferences
|
lateinit var preferences: SharedPreferences
|
||||||
|
@ -83,26 +78,8 @@ open class BaseFragment : Fragment(), IBaseFragment<BaseFragment> {
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var promotionService: PromotionService
|
lateinit var promotionService: PromotionService
|
||||||
|
|
||||||
lateinit var requestManager: RequestManager
|
|
||||||
private set
|
|
||||||
|
|
||||||
private val actionHelper = IBaseFragment.ActionHelper<BaseFragment>()
|
private val actionHelper = IBaseFragment.ActionHelper<BaseFragment>()
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
requestManager = Glide.with(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onStart() {
|
|
||||||
super.onStart()
|
|
||||||
requestManager.onStart()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onStop() {
|
|
||||||
requestManager.onStop()
|
|
||||||
super.onStop()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
actionHelper.dispatchOnResumeFragments(this)
|
actionHelper.dispatchOnResumeFragments(this)
|
||||||
|
@ -114,7 +91,6 @@ open class BaseFragment : Fragment(), IBaseFragment<BaseFragment> {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
requestManager.onDestroy()
|
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
DebugModeUtils.watchReferenceLeak(this)
|
DebugModeUtils.watchReferenceLeak(this)
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,10 +30,8 @@ import android.os.Bundle
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
import android.support.v7.preference.Preference
|
import android.support.v7.preference.Preference
|
||||||
import android.support.v7.preference.PreferenceFragmentCompat
|
import android.support.v7.preference.PreferenceFragmentCompat
|
||||||
import com.squareup.otto.Bus
|
|
||||||
import nl.komponents.kovenant.Promise
|
import nl.komponents.kovenant.Promise
|
||||||
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
||||||
import org.mariotaku.twidere.extension.get
|
|
||||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment
|
import org.mariotaku.twidere.fragment.iface.IBaseFragment
|
||||||
import org.mariotaku.twidere.preference.RingtonePreference
|
import org.mariotaku.twidere.preference.RingtonePreference
|
||||||
import org.mariotaku.twidere.taskcontroller.sync.SyncTaskController
|
import org.mariotaku.twidere.taskcontroller.sync.SyncTaskController
|
||||||
|
@ -49,14 +47,13 @@ abstract class BasePreferenceFragment : PreferenceFragmentCompat(), IBaseFragmen
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var keyboardShortcutHandler: KeyboardShortcutsHandler
|
lateinit var keyboardShortcutHandler: KeyboardShortcutsHandler
|
||||||
@Inject
|
@Inject
|
||||||
|
@Deprecated(message = "Deprecated", replaceWith = ReplaceWith("UserColorNameManager.get(context!!)", imports = ["org.mariotaku.twidere.util.UserColorNameManager"]))
|
||||||
lateinit var userColorNameManager: UserColorNameManager
|
lateinit var userColorNameManager: UserColorNameManager
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var preferences: SharedPreferences
|
lateinit var preferences: SharedPreferences
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var syncController: SyncTaskController
|
lateinit var syncController: SyncTaskController
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var bus: Bus
|
|
||||||
@Inject
|
|
||||||
lateinit var dataSyncProvider: DataSyncProvider
|
lateinit var dataSyncProvider: DataSyncProvider
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var preferenceChangeNotifier: PreferenceChangeNotifier
|
lateinit var preferenceChangeNotifier: PreferenceChangeNotifier
|
||||||
|
|
|
@ -25,15 +25,16 @@ import org.mariotaku.twidere.R
|
||||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_USER
|
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_USER
|
||||||
import org.mariotaku.twidere.model.ParcelableUser
|
import org.mariotaku.twidere.model.ParcelableUser
|
||||||
import org.mariotaku.twidere.promise.BlockPromises
|
import org.mariotaku.twidere.promise.BlockPromises
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager
|
||||||
|
|
||||||
class CreateUserBlockDialogFragment : AbsUserMuteBlockDialogFragment() {
|
class CreateUserBlockDialogFragment : AbsUserMuteBlockDialogFragment() {
|
||||||
override fun getMessage(user: ParcelableUser): String {
|
override fun getMessage(user: ParcelableUser): String {
|
||||||
val displayName = userColorNameManager.getDisplayName(user)
|
val displayName = UserColorNameManager.get(context!!).getDisplayName(user)
|
||||||
return getString(R.string.block_user_confirm_message, displayName)
|
return getString(R.string.block_user_confirm_message, displayName)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getTitle(user: ParcelableUser): String {
|
override fun getTitle(user: ParcelableUser): String {
|
||||||
val displayName = userColorNameManager.getDisplayName(user)
|
val displayName = UserColorNameManager.get(context!!).getDisplayName(user)
|
||||||
return getString(R.string.title_block_user, displayName)
|
return getString(R.string.title_block_user, displayName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,7 +44,7 @@ class CreateUserBlockDialogFragment : AbsUserMuteBlockDialogFragment() {
|
||||||
|
|
||||||
override fun performUserAction(user: ParcelableUser, filterEverywhere: Boolean) {
|
override fun performUserAction(user: ParcelableUser, filterEverywhere: Boolean) {
|
||||||
val accountKey = user.account_key ?: return
|
val accountKey = user.account_key ?: return
|
||||||
BlockPromises.getInstance(context!!).block(accountKey, user.key, filterEverywhere)
|
BlockPromises.get(context!!).block(accountKey, user.key, filterEverywhere)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
|
@ -23,19 +23,19 @@ import android.os.Bundle
|
||||||
import android.support.v4.app.FragmentManager
|
import android.support.v4.app.FragmentManager
|
||||||
import org.mariotaku.twidere.R
|
import org.mariotaku.twidere.R
|
||||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_USER
|
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_USER
|
||||||
import org.mariotaku.twidere.extension.get
|
|
||||||
import org.mariotaku.twidere.model.ParcelableUser
|
import org.mariotaku.twidere.model.ParcelableUser
|
||||||
import org.mariotaku.twidere.promise.MutePromises
|
import org.mariotaku.twidere.promise.MutePromises
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager
|
||||||
|
|
||||||
class CreateUserMuteDialogFragment : AbsUserMuteBlockDialogFragment() {
|
class CreateUserMuteDialogFragment : AbsUserMuteBlockDialogFragment() {
|
||||||
|
|
||||||
override fun getMessage(user: ParcelableUser): String {
|
override fun getMessage(user: ParcelableUser): String {
|
||||||
val displayName = userColorNameManager.getDisplayName(user)
|
val displayName = UserColorNameManager.get(context!!).getDisplayName(user)
|
||||||
return getString(R.string.mute_user_confirm_message, displayName)
|
return getString(R.string.mute_user_confirm_message, displayName)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getTitle(user: ParcelableUser): String {
|
override fun getTitle(user: ParcelableUser): String {
|
||||||
val displayName = userColorNameManager.getDisplayName(user)
|
val displayName = UserColorNameManager.get(context!!).getDisplayName(user)
|
||||||
return getString(R.string.mute_user, displayName)
|
return getString(R.string.mute_user, displayName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@ import android.view.*
|
||||||
import android.widget.*
|
import android.widget.*
|
||||||
import android.widget.AbsListView.MultiChoiceModeListener
|
import android.widget.AbsListView.MultiChoiceModeListener
|
||||||
import android.widget.AdapterView.OnItemClickListener
|
import android.widget.AdapterView.OnItemClickListener
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import com.mobeta.android.dslv.SimpleDragSortCursorAdapter
|
import com.mobeta.android.dslv.SimpleDragSortCursorAdapter
|
||||||
import kotlinx.android.synthetic.main.dialog_custom_tab_editor.*
|
import kotlinx.android.synthetic.main.dialog_custom_tab_editor.*
|
||||||
import kotlinx.android.synthetic.main.layout_draggable_list_with_empty_view.*
|
import kotlinx.android.synthetic.main.layout_draggable_list_with_empty_view.*
|
||||||
|
@ -275,7 +276,7 @@ class CustomTabsFragment : BaseFragment(), LoaderCallbacks<Cursor?>, MultiChoice
|
||||||
val positiveButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE)
|
val positiveButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE)
|
||||||
|
|
||||||
val iconsAdapter = TabIconsAdapter(context!!)
|
val iconsAdapter = TabIconsAdapter(context!!)
|
||||||
val accountsAdapter = AccountsSpinnerAdapter(context!!, requestManager = requestManager)
|
val accountsAdapter = AccountsSpinnerAdapter(context!!, requestManager = Glide.with(this))
|
||||||
iconSpinner.adapter = iconsAdapter
|
iconSpinner.adapter = iconsAdapter
|
||||||
accountSpinner.adapter = accountsAdapter
|
accountSpinner.adapter = accountsAdapter
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,8 @@ import org.mariotaku.twidere.extension.get
|
||||||
import org.mariotaku.twidere.model.ParcelableUser
|
import org.mariotaku.twidere.model.ParcelableUser
|
||||||
import org.mariotaku.twidere.model.ParcelableUserList
|
import org.mariotaku.twidere.model.ParcelableUserList
|
||||||
import org.mariotaku.twidere.promise.UserListPromises
|
import org.mariotaku.twidere.promise.UserListPromises
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager.Companion
|
||||||
|
|
||||||
class DeleteUserListMembersDialogFragment : BaseDialogFragment(), DialogInterface.OnClickListener {
|
class DeleteUserListMembersDialogFragment : BaseDialogFragment(), DialogInterface.OnClickListener {
|
||||||
|
|
||||||
|
@ -61,8 +63,7 @@ class DeleteUserListMembersDialogFragment : BaseDialogFragment(), DialogInterfac
|
||||||
val userList = userList!!
|
val userList = userList!!
|
||||||
if (users.size == 1) {
|
if (users.size == 1) {
|
||||||
val user = users[0]
|
val user = users[0]
|
||||||
val nameFirst = preferences[nameFirstKey]
|
val displayName = UserColorNameManager.get(context!!).getDisplayName(user)
|
||||||
val displayName = userColorNameManager.getDisplayName(user)
|
|
||||||
builder.setTitle(getString(R.string.delete_user, displayName))
|
builder.setTitle(getString(R.string.delete_user, displayName))
|
||||||
builder.setMessage(getString(R.string.delete_user_from_list_confirm, displayName, userList.name))
|
builder.setMessage(getString(R.string.delete_user_from_list_confirm, displayName, userList.name))
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -33,6 +33,8 @@ import org.mariotaku.twidere.extension.applyTheme
|
||||||
import org.mariotaku.twidere.extension.user
|
import org.mariotaku.twidere.extension.user
|
||||||
import org.mariotaku.twidere.model.ParcelableUser
|
import org.mariotaku.twidere.model.ParcelableUser
|
||||||
import org.mariotaku.twidere.promise.FriendshipPromises
|
import org.mariotaku.twidere.promise.FriendshipPromises
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager.Companion
|
||||||
|
|
||||||
class DestroyFriendshipDialogFragment : BaseDialogFragment(), DialogInterface.OnClickListener {
|
class DestroyFriendshipDialogFragment : BaseDialogFragment(), DialogInterface.OnClickListener {
|
||||||
|
|
||||||
|
@ -41,7 +43,7 @@ class DestroyFriendshipDialogFragment : BaseDialogFragment(), DialogInterface.On
|
||||||
DialogInterface.BUTTON_POSITIVE -> {
|
DialogInterface.BUTTON_POSITIVE -> {
|
||||||
val user = arguments!!.user!!
|
val user = arguments!!.user!!
|
||||||
val accountKey = user.account_key ?: return
|
val accountKey = user.account_key ?: return
|
||||||
FriendshipPromises.getInstance(context!!).destroy(accountKey, user.key)
|
FriendshipPromises.get(context!!).destroy(accountKey, user.key)
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
}
|
}
|
||||||
|
@ -50,9 +52,8 @@ class DestroyFriendshipDialogFragment : BaseDialogFragment(), DialogInterface.On
|
||||||
|
|
||||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||||
val builder = AlertDialog.Builder(context!!)
|
val builder = AlertDialog.Builder(context!!)
|
||||||
val nameFirst = preferences[nameFirstKey]
|
|
||||||
val user = arguments!!.user!!
|
val user = arguments!!.user!!
|
||||||
val displayName = userColorNameManager.getDisplayName(user)
|
val displayName = UserColorNameManager.get(context!!).getDisplayName(user)
|
||||||
builder.setTitle(getString(R.string.unfollow_user, displayName))
|
builder.setTitle(getString(R.string.unfollow_user, displayName))
|
||||||
builder.setMessage(getString(R.string.unfollow_user_confirm_message, displayName))
|
builder.setMessage(getString(R.string.unfollow_user_confirm_message, displayName))
|
||||||
builder.setPositiveButton(android.R.string.ok, this)
|
builder.setPositiveButton(android.R.string.ok, this)
|
||||||
|
|
|
@ -22,12 +22,14 @@ import org.mariotaku.twidere.constant.displaySensitiveContentsKey
|
||||||
import org.mariotaku.twidere.constant.newDocumentApiKey
|
import org.mariotaku.twidere.constant.newDocumentApiKey
|
||||||
import org.mariotaku.twidere.extension.accountKey
|
import org.mariotaku.twidere.extension.accountKey
|
||||||
import org.mariotaku.twidere.extension.model.prefixedHashtag
|
import org.mariotaku.twidere.extension.model.prefixedHashtag
|
||||||
|
import org.mariotaku.twidere.extension.model.quoted
|
||||||
import org.mariotaku.twidere.fragment.timeline.AbsTimelineFragment
|
import org.mariotaku.twidere.fragment.timeline.AbsTimelineFragment
|
||||||
import org.mariotaku.twidere.model.ParcelableHashtag
|
import org.mariotaku.twidere.model.ParcelableHashtag
|
||||||
import org.mariotaku.twidere.model.ParcelableMedia
|
import org.mariotaku.twidere.model.ParcelableMedia
|
||||||
import org.mariotaku.twidere.model.UserKey
|
import org.mariotaku.twidere.model.UserKey
|
||||||
import org.mariotaku.twidere.util.IntentUtils
|
import org.mariotaku.twidere.util.IntentUtils
|
||||||
import org.mariotaku.twidere.util.MenuUtils
|
import org.mariotaku.twidere.util.MenuUtils
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager
|
||||||
import org.mariotaku.twidere.util.Utils
|
import org.mariotaku.twidere.util.Utils
|
||||||
import org.mariotaku.twidere.view.ExtendedRecyclerView
|
import org.mariotaku.twidere.view.ExtendedRecyclerView
|
||||||
import org.mariotaku.twidere.view.holder.UserViewHolder
|
import org.mariotaku.twidere.view.holder.UserViewHolder
|
||||||
|
@ -71,7 +73,7 @@ open class ItemsListFragment : AbsContentListRecyclerViewFragment<VariousItemsAd
|
||||||
|
|
||||||
override fun onQuotedStatusClick(holder: IStatusViewHolder, position: Int) {
|
override fun onQuotedStatusClick(holder: IStatusViewHolder, position: Int) {
|
||||||
val status = dummyItemAdapter.getStatus(position)
|
val status = dummyItemAdapter.getStatus(position)
|
||||||
IntentUtils.openStatus(context, status.account_key, status.quoted_id)
|
IntentUtils.openStatus(context, status.account_key, status.quoted?.id!!)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onItemActionClick(holder: RecyclerView.ViewHolder, id: Int, position: Int) {
|
override fun onItemActionClick(holder: RecyclerView.ViewHolder, id: Int, position: Int) {
|
||||||
|
@ -147,7 +149,7 @@ open class ItemsListFragment : AbsContentListRecyclerViewFragment<VariousItemsAd
|
||||||
val dummyAdapter = adapter.dummyAdapter
|
val dummyAdapter = adapter.dummyAdapter
|
||||||
val status = dummyAdapter.getStatus(contextMenuInfo.position)
|
val status = dummyAdapter.getStatus(contextMenuInfo.position)
|
||||||
inflater.inflate(R.menu.action_status, menu)
|
inflater.inflate(R.menu.action_status, menu)
|
||||||
MenuUtils.setupForStatus(context, menu, preferences, userColorNameManager,
|
MenuUtils.setupForStatus(context, menu, preferences, UserColorNameManager.get(context),
|
||||||
status)
|
status)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -169,7 +171,7 @@ open class ItemsListFragment : AbsContentListRecyclerViewFragment<VariousItemsAd
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return MenuUtils.handleStatusClick(context, this, fragmentManager!!,
|
return MenuUtils.handleStatusClick(context, this, fragmentManager!!,
|
||||||
preferences, userColorNameManager, status, item)
|
preferences, UserColorNameManager.get(context), status, item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
|
|
@ -26,6 +26,7 @@ import android.support.v4.app.hasRunningLoadersSafe
|
||||||
import android.support.v4.content.Loader
|
import android.support.v4.content.Loader
|
||||||
import android.support.v7.widget.RecyclerView
|
import android.support.v7.widget.RecyclerView
|
||||||
import android.view.KeyEvent
|
import android.view.KeyEvent
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.RequestManager
|
import com.bumptech.glide.RequestManager
|
||||||
import kotlinx.android.synthetic.main.fragment_content_recyclerview.*
|
import kotlinx.android.synthetic.main.fragment_content_recyclerview.*
|
||||||
import org.mariotaku.twidere.adapter.ParcelableGroupsAdapter
|
import org.mariotaku.twidere.adapter.ParcelableGroupsAdapter
|
||||||
|
@ -66,7 +67,7 @@ abstract class ParcelableGroupsFragment : AbsContentListRecyclerViewFragment<Par
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateAdapter(context: Context, requestManager: RequestManager): ParcelableGroupsAdapter {
|
override fun onCreateAdapter(context: Context, requestManager: RequestManager): ParcelableGroupsAdapter {
|
||||||
return ParcelableGroupsAdapter(context, this.requestManager)
|
return ParcelableGroupsAdapter(context, Glide.with(this))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setupRecyclerView(context: Context, recyclerView: RecyclerView) {
|
override fun setupRecyclerView(context: Context, recyclerView: RecyclerView) {
|
||||||
|
|
|
@ -26,6 +26,7 @@ import android.support.v4.app.hasRunningLoadersSafe
|
||||||
import android.support.v4.content.Loader
|
import android.support.v4.content.Loader
|
||||||
import android.support.v7.widget.RecyclerView
|
import android.support.v7.widget.RecyclerView
|
||||||
import android.view.KeyEvent
|
import android.view.KeyEvent
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.RequestManager
|
import com.bumptech.glide.RequestManager
|
||||||
import kotlinx.android.synthetic.main.fragment_content_recyclerview.*
|
import kotlinx.android.synthetic.main.fragment_content_recyclerview.*
|
||||||
import org.mariotaku.ktextension.set
|
import org.mariotaku.ktextension.set
|
||||||
|
@ -71,7 +72,7 @@ abstract class ParcelableUserListsFragment : AbsContentListRecyclerViewFragment<
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateAdapter(context: Context, requestManager: RequestManager): ParcelableUserListsAdapter {
|
override fun onCreateAdapter(context: Context, requestManager: RequestManager): ParcelableUserListsAdapter {
|
||||||
return ParcelableUserListsAdapter(context, this.requestManager)
|
return ParcelableUserListsAdapter(context, Glide.with(this))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setupRecyclerView(context: Context, recyclerView: RecyclerView) {
|
override fun setupRecyclerView(context: Context, recyclerView: RecyclerView) {
|
||||||
|
|
|
@ -26,15 +26,16 @@ import org.mariotaku.twidere.R
|
||||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_USER
|
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_USER
|
||||||
import org.mariotaku.twidere.model.ParcelableUser
|
import org.mariotaku.twidere.model.ParcelableUser
|
||||||
import org.mariotaku.twidere.promise.BlockPromises
|
import org.mariotaku.twidere.promise.BlockPromises
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager
|
||||||
|
|
||||||
class ReportUserSpamDialogFragment : AbsUserMuteBlockDialogFragment() {
|
class ReportUserSpamDialogFragment : AbsUserMuteBlockDialogFragment() {
|
||||||
override fun getMessage(user: ParcelableUser): String {
|
override fun getMessage(user: ParcelableUser): String {
|
||||||
val displayName = userColorNameManager.getDisplayName(user)
|
val displayName = UserColorNameManager.get(context!!).getDisplayName(user)
|
||||||
return getString(R.string.report_user_confirm_message, displayName)
|
return getString(R.string.report_user_confirm_message, displayName)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getTitle(user: ParcelableUser): String {
|
override fun getTitle(user: ParcelableUser): String {
|
||||||
val displayName = userColorNameManager.getDisplayName(user)
|
val displayName = UserColorNameManager.get(context!!).getDisplayName(user)
|
||||||
return getString(R.string.report_user, displayName)
|
return getString(R.string.report_user, displayName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +45,7 @@ class ReportUserSpamDialogFragment : AbsUserMuteBlockDialogFragment() {
|
||||||
|
|
||||||
override fun performUserAction(user: ParcelableUser, filterEverywhere: Boolean) {
|
override fun performUserAction(user: ParcelableUser, filterEverywhere: Boolean) {
|
||||||
val accountKey = user.account_key ?: return
|
val accountKey = user.account_key ?: return
|
||||||
BlockPromises.getInstance(context!!).report(accountKey, user.key, filterEverywhere)
|
BlockPromises.get(context!!).report(accountKey, user.key, filterEverywhere)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
|
@ -34,10 +34,12 @@ import org.mariotaku.microblog.library.model.microblog.SavedSearch
|
||||||
import org.mariotaku.twidere.R
|
import org.mariotaku.twidere.R
|
||||||
import org.mariotaku.twidere.adapter.SavedSearchesAdapter
|
import org.mariotaku.twidere.adapter.SavedSearchesAdapter
|
||||||
import org.mariotaku.twidere.extension.accountKey
|
import org.mariotaku.twidere.extension.accountKey
|
||||||
|
import org.mariotaku.twidere.extension.get
|
||||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||||
import org.mariotaku.twidere.loader.SavedSearchesLoader
|
import org.mariotaku.twidere.loader.SavedSearchesLoader
|
||||||
import org.mariotaku.twidere.model.UserKey
|
import org.mariotaku.twidere.model.UserKey
|
||||||
import org.mariotaku.twidere.model.event.SavedSearchDestroyedEvent
|
import org.mariotaku.twidere.model.event.SavedSearchDestroyedEvent
|
||||||
|
import org.mariotaku.twidere.singleton.BusSingleton
|
||||||
import org.mariotaku.twidere.util.IntentUtils.openTweetSearch
|
import org.mariotaku.twidere.util.IntentUtils.openTweetSearch
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
@ -67,13 +69,13 @@ class SavedSearchesListFragment : AbsContentListViewFragment<SavedSearchesAdapte
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
bus.unregister(this)
|
BusSingleton.unregister(this)
|
||||||
super.onStop()
|
super.onStop()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
bus.register(this)
|
BusSingleton.register(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateAdapter(context: Context, requestManager: RequestManager): SavedSearchesAdapter {
|
override fun onCreateAdapter(context: Context, requestManager: RequestManager): SavedSearchesAdapter {
|
||||||
|
|
|
@ -34,22 +34,24 @@ import org.mariotaku.twidere.extension.name
|
||||||
import org.mariotaku.twidere.extension.onShow
|
import org.mariotaku.twidere.extension.onShow
|
||||||
import org.mariotaku.twidere.extension.userKey
|
import org.mariotaku.twidere.extension.userKey
|
||||||
import org.mariotaku.twidere.model.UserKey
|
import org.mariotaku.twidere.model.UserKey
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager
|
||||||
|
|
||||||
class SetUserNicknameDialogFragment : BaseDialogFragment(), OnClickListener {
|
class SetUserNicknameDialogFragment : BaseDialogFragment(), OnClickListener {
|
||||||
|
|
||||||
override fun onClick(dialog: DialogInterface, which: Int) {
|
override fun onClick(dialog: DialogInterface, which: Int) {
|
||||||
val editName = (dialog as AlertDialog).editName
|
val editName = (dialog as AlertDialog).editName
|
||||||
val userKey = arguments!!.userKey!!
|
val userKey = arguments!!.userKey!!
|
||||||
|
val manager = UserColorNameManager.get(context!!)
|
||||||
when (which) {
|
when (which) {
|
||||||
DialogInterface.BUTTON_POSITIVE -> {
|
DialogInterface.BUTTON_POSITIVE -> {
|
||||||
if (editName.empty) {
|
if (editName.empty) {
|
||||||
userColorNameManager.clearUserNickname(userKey)
|
manager.clearUserNickname(userKey)
|
||||||
} else {
|
} else {
|
||||||
userColorNameManager.setUserNickname(userKey, editName.text.toString())
|
manager.setUserNickname(userKey, editName.text.toString())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DialogInterface.BUTTON_NEUTRAL -> {
|
DialogInterface.BUTTON_NEUTRAL -> {
|
||||||
userColorNameManager.clearUserNickname(userKey)
|
manager.clearUserNickname(userKey)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,6 @@ import org.mariotaku.twidere.activity.QuickSearchBarActivity
|
||||||
import org.mariotaku.twidere.adapter.TrendsAdapter
|
import org.mariotaku.twidere.adapter.TrendsAdapter
|
||||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_EXTRAS
|
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_EXTRAS
|
||||||
import org.mariotaku.twidere.constant.localTrendsWoeIdKey
|
import org.mariotaku.twidere.constant.localTrendsWoeIdKey
|
||||||
import org.mariotaku.twidere.extension.get
|
|
||||||
import org.mariotaku.twidere.fragment.iface.IFloatingActionButtonFragment
|
import org.mariotaku.twidere.fragment.iface.IFloatingActionButtonFragment
|
||||||
import org.mariotaku.twidere.model.FloatingActionButtonInfo
|
import org.mariotaku.twidere.model.FloatingActionButtonInfo
|
||||||
import org.mariotaku.twidere.model.UserKey
|
import org.mariotaku.twidere.model.UserKey
|
||||||
|
@ -48,6 +47,7 @@ import org.mariotaku.twidere.model.event.TrendsRefreshedEvent
|
||||||
import org.mariotaku.twidere.model.tab.extra.TrendsTabExtras
|
import org.mariotaku.twidere.model.tab.extra.TrendsTabExtras
|
||||||
import org.mariotaku.twidere.promise.GetTrendsPromise
|
import org.mariotaku.twidere.promise.GetTrendsPromise
|
||||||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedTrends
|
import org.mariotaku.twidere.provider.TwidereDataStore.CachedTrends
|
||||||
|
import org.mariotaku.twidere.singleton.BusSingleton
|
||||||
import org.mariotaku.twidere.util.IntentUtils.openTweetSearch
|
import org.mariotaku.twidere.util.IntentUtils.openTweetSearch
|
||||||
import org.mariotaku.twidere.util.Utils
|
import org.mariotaku.twidere.util.Utils
|
||||||
|
|
||||||
|
@ -129,11 +129,11 @@ class TrendsSuggestionsFragment : AbsContentListViewFragment<TrendsAdapter>(), L
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
loaderManager.restartLoader(0, null, this)
|
loaderManager.restartLoader(0, null, this)
|
||||||
bus.register(this)
|
BusSingleton.register(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
bus.unregister(this)
|
BusSingleton.unregister(this)
|
||||||
super.onStop()
|
super.onStop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,7 @@ import android.view.View.OnTouchListener
|
||||||
import android.view.animation.AnimationUtils
|
import android.view.animation.AnimationUtils
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import com.squareup.otto.Subscribe
|
import com.squareup.otto.Subscribe
|
||||||
import kotlinx.android.synthetic.main.fragment_user.*
|
import kotlinx.android.synthetic.main.fragment_user.*
|
||||||
import kotlinx.android.synthetic.main.header_user.*
|
import kotlinx.android.synthetic.main.header_user.*
|
||||||
|
@ -119,13 +120,13 @@ import org.mariotaku.twidere.promise.MutePromises
|
||||||
import org.mariotaku.twidere.promise.UserListPromises
|
import org.mariotaku.twidere.promise.UserListPromises
|
||||||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedRelationships
|
import org.mariotaku.twidere.provider.TwidereDataStore.CachedRelationships
|
||||||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedUsers
|
import org.mariotaku.twidere.provider.TwidereDataStore.CachedUsers
|
||||||
|
import org.mariotaku.twidere.singleton.BusSingleton
|
||||||
import org.mariotaku.twidere.task.UpdateAccountInfoPromise
|
import org.mariotaku.twidere.task.UpdateAccountInfoPromise
|
||||||
import org.mariotaku.twidere.text.TwidereURLSpan
|
import org.mariotaku.twidere.text.TwidereURLSpan
|
||||||
import org.mariotaku.twidere.util.*
|
import org.mariotaku.twidere.util.*
|
||||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback
|
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback
|
||||||
import org.mariotaku.twidere.util.TwidereLinkify.OnLinkClickListener
|
import org.mariotaku.twidere.util.TwidereLinkify.OnLinkClickListener
|
||||||
import org.mariotaku.twidere.util.UserColorNameManager.UserColorChangedListener
|
import org.mariotaku.twidere.util.UserColorNameManager.*
|
||||||
import org.mariotaku.twidere.util.UserColorNameManager.UserNicknameChangedListener
|
|
||||||
import org.mariotaku.twidere.util.shortcut.ShortcutCreator
|
import org.mariotaku.twidere.util.shortcut.ShortcutCreator
|
||||||
import org.mariotaku.twidere.util.support.ActivitySupport
|
import org.mariotaku.twidere.util.support.ActivitySupport
|
||||||
import org.mariotaku.twidere.util.support.ActivitySupport.TaskDescriptionCompat
|
import org.mariotaku.twidere.util.support.ActivitySupport.TaskDescriptionCompat
|
||||||
|
@ -235,9 +236,9 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
||||||
if (resultCode == Activity.RESULT_OK) {
|
if (resultCode == Activity.RESULT_OK) {
|
||||||
if (data == null) return
|
if (data == null) return
|
||||||
val color = data.getIntExtra(EXTRA_COLOR, Color.TRANSPARENT)
|
val color = data.getIntExtra(EXTRA_COLOR, Color.TRANSPARENT)
|
||||||
userColorNameManager.setUserColor(user.key, color)
|
UserColorNameManager.get(context!!).setUserColor(user.key, color)
|
||||||
} else if (resultCode == ColorPickerDialogActivity.RESULT_CLEARED) {
|
} else if (resultCode == ColorPickerDialogActivity.RESULT_CLEARED) {
|
||||||
userColorNameManager.clearUserColor(user.key)
|
UserColorNameManager.get(context!!).clearUserColor(user.key)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
REQUEST_ADD_TO_LIST -> {
|
REQUEST_ADD_TO_LIST -> {
|
||||||
|
@ -249,7 +250,8 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
||||||
REQUEST_SELECT_ACCOUNT -> {
|
REQUEST_SELECT_ACCOUNT -> {
|
||||||
if (resultCode == Activity.RESULT_OK) {
|
if (resultCode == Activity.RESULT_OK) {
|
||||||
if (data == null || !data.hasExtra(EXTRA_ID)) return
|
if (data == null || !data.hasExtra(EXTRA_ID)) return
|
||||||
val selectedAccountKey: UserKey = data.getParcelableExtra(EXTRA_ACCOUNT_KEY) ?: return
|
val selectedAccountKey: UserKey = data.getParcelableExtra(EXTRA_ACCOUNT_KEY)
|
||||||
|
?: return
|
||||||
var userKey = user.key
|
var userKey = user.key
|
||||||
if (liveUser.account?.type == AccountType.MASTODON && liveUser.account?.key?.host != selectedAccountKey.host) {
|
if (liveUser.account?.type == AccountType.MASTODON && liveUser.account?.key?.host != selectedAccountKey.host) {
|
||||||
userKey = AcctPlaceholderUserKey(user.key.host)
|
userKey = AcctPlaceholderUserKey(user.key.host)
|
||||||
|
@ -352,16 +354,18 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
bus.register(this)
|
BusSingleton.register(this)
|
||||||
userColorNameManager.registerColorChangedListener(this)
|
val manager = UserColorNameManager.get(context!!)
|
||||||
userColorNameManager.registerNicknameChangedListener(this)
|
manager.registerColorChangedListener(this)
|
||||||
|
manager.registerNicknameChangedListener(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
userColorNameManager.unregisterColorChangedListener(this)
|
val manager = UserColorNameManager.get(context!!)
|
||||||
userColorNameManager.unregisterNicknameChangedListener(this)
|
manager.unregisterColorChangedListener(this)
|
||||||
bus.unregister(this)
|
manager.unregisterNicknameChangedListener(this)
|
||||||
|
BusSingleton.unregister(this)
|
||||||
super.onStop()
|
super.onStop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -390,7 +394,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
||||||
val mentionItem = menu.findItem(R.id.mention)
|
val mentionItem = menu.findItem(R.id.mention)
|
||||||
if (mentionItem != null) {
|
if (mentionItem != null) {
|
||||||
mentionItem.title = getString(R.string.mention_user_name,
|
mentionItem.title = getString(R.string.mention_user_name,
|
||||||
userColorNameManager.getDisplayName(user))
|
UserColorNameManager.get(this.context!!).getDisplayName(user))
|
||||||
}
|
}
|
||||||
|
|
||||||
menu.setItemAvailability(R.id.qr_code, linkAvailable)
|
menu.setItemAvailability(R.id.qr_code, linkAvailable)
|
||||||
|
@ -474,6 +478,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
||||||
|
|
||||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||||
val context = context ?: return false
|
val context = context ?: return false
|
||||||
|
val manager = UserColorNameManager.get(context)
|
||||||
val fragmentManager = fragmentManager ?: return false
|
val fragmentManager = fragmentManager ?: return false
|
||||||
val user = liveUser.user ?: return false
|
val user = liveUser.user ?: return false
|
||||||
val accountKey = user.account_key ?: return false
|
val accountKey = user.account_key ?: return false
|
||||||
|
@ -482,7 +487,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
||||||
R.id.block -> {
|
R.id.block -> {
|
||||||
if (userRelationship == null) return true
|
if (userRelationship == null) return true
|
||||||
if (userRelationship.blocking) {
|
if (userRelationship.blocking) {
|
||||||
BlockPromises.getInstance(context).unblock(accountKey, user.key)
|
BlockPromises.get(context).unblock(accountKey, user.key)
|
||||||
} else {
|
} else {
|
||||||
CreateUserBlockDialogFragment.show(fragmentManager, user)
|
CreateUserBlockDialogFragment.show(fragmentManager, user)
|
||||||
}
|
}
|
||||||
|
@ -532,16 +537,16 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
||||||
}
|
}
|
||||||
R.id.set_color -> {
|
R.id.set_color -> {
|
||||||
val intent = Intent(activity, ColorPickerDialogActivity::class.java)
|
val intent = Intent(activity, ColorPickerDialogActivity::class.java)
|
||||||
intent.putExtra(EXTRA_COLOR, userColorNameManager.getUserColor(user.key))
|
intent.putExtra(EXTRA_COLOR, manager.getUserColor(user.key))
|
||||||
intent.putExtra(EXTRA_ALPHA_SLIDER, false)
|
intent.putExtra(EXTRA_ALPHA_SLIDER, false)
|
||||||
intent.putExtra(EXTRA_CLEAR_BUTTON, true)
|
intent.putExtra(EXTRA_CLEAR_BUTTON, true)
|
||||||
startActivityForResult(intent, REQUEST_SET_COLOR)
|
startActivityForResult(intent, REQUEST_SET_COLOR)
|
||||||
}
|
}
|
||||||
R.id.clear_nickname -> {
|
R.id.clear_nickname -> {
|
||||||
userColorNameManager.clearUserNickname(user.key)
|
manager.clearUserNickname(user.key)
|
||||||
}
|
}
|
||||||
R.id.set_nickname -> {
|
R.id.set_nickname -> {
|
||||||
val nick = userColorNameManager.getUserNickname(user.key)
|
val nick = manager.getUserNickname(user.key)
|
||||||
SetUserNicknameDialogFragment.show(fragmentManager, user.key, nick)
|
SetUserNicknameDialogFragment.show(fragmentManager, user.key, nick)
|
||||||
}
|
}
|
||||||
R.id.add_to_list -> {
|
R.id.add_to_list -> {
|
||||||
|
@ -565,7 +570,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
||||||
if (userRelationship.following) {
|
if (userRelationship.following) {
|
||||||
DestroyFriendshipDialogFragment.show(fragmentManager, user)
|
DestroyFriendshipDialogFragment.show(fragmentManager, user)
|
||||||
} else {
|
} else {
|
||||||
FriendshipPromises.getInstance(context).create(accountKey, user.key, user.screen_name)
|
FriendshipPromises.get(context).create(accountKey, user.key, user.screen_name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
@ -810,7 +815,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
||||||
val userRelationship = liveRelationship.relationship ?: return
|
val userRelationship = liveRelationship.relationship ?: return
|
||||||
when {
|
when {
|
||||||
userRelationship.blocking -> {
|
userRelationship.blocking -> {
|
||||||
BlockPromises.getInstance(context).unblock(accountKey, user.key)
|
BlockPromises.get(context).unblock(accountKey, user.key)
|
||||||
}
|
}
|
||||||
userRelationship.blocked_by -> {
|
userRelationship.blocked_by -> {
|
||||||
CreateUserBlockDialogFragment.show(childFragmentManager, user)
|
CreateUserBlockDialogFragment.show(childFragmentManager, user)
|
||||||
|
@ -819,7 +824,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
||||||
DestroyFriendshipDialogFragment.show(fragmentManager, user)
|
DestroyFriendshipDialogFragment.show(fragmentManager, user)
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
FriendshipPromises.getInstance(context).create(accountKey, user.key, user.screen_name)
|
FriendshipPromises.get(context).create(accountKey, user.key, user.screen_name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -990,7 +995,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
||||||
}
|
}
|
||||||
val user = this.liveUser.user
|
val user = this.liveUser.user
|
||||||
if (user != null) {
|
if (user != null) {
|
||||||
val name = userColorNameManager.getDisplayName(user)
|
val name = UserColorNameManager.get(activity).getDisplayName(user)
|
||||||
ActivitySupport.setTaskDescription(activity, TaskDescriptionCompat(name, null, taskColor))
|
ActivitySupport.setTaskDescription(activity, TaskDescriptionCompat(name, null, taskColor))
|
||||||
} else {
|
} else {
|
||||||
ActivitySupport.setTaskDescription(activity, TaskDescriptionCompat(null, null, taskColor))
|
ActivitySupport.setTaskDescription(activity, TaskDescriptionCompat(null, null, taskColor))
|
||||||
|
@ -1121,8 +1126,8 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
||||||
followContainer.drawEnd(user.account_color)
|
followContainer.drawEnd(user.account_color)
|
||||||
|
|
||||||
linkHandlerTitle = run {
|
linkHandlerTitle = run {
|
||||||
val nameNoNick = UserColorNameManager.decideDisplayName(null, user.name,
|
val nameNoNick = UserColorNameManager.get(activity).decideDisplayName(null, user.name,
|
||||||
user.screen_name, userColorNameManager.nameFirst)
|
user.screen_name)
|
||||||
return@run bidiFormatter.unicodeWrap(when {
|
return@run bidiFormatter.unicodeWrap(when {
|
||||||
user.nickname.isNullOrEmpty() -> nameNoNick
|
user.nickname.isNullOrEmpty() -> nameNoNick
|
||||||
else -> getString(R.string.name_with_nickname, nameNoNick, user.nickname)
|
else -> getString(R.string.name_with_nickname, nameNoNick, user.nickname)
|
||||||
|
@ -1147,7 +1152,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
||||||
|
|
||||||
if (user.description_unescaped != null) {
|
if (user.description_unescaped != null) {
|
||||||
val text = SpannableStringBuilder.valueOf(user.description_unescaped).apply {
|
val text = SpannableStringBuilder.valueOf(user.description_unescaped).apply {
|
||||||
user.description_spans?.applyTo(this, null, requestManager, description)
|
user.description_spans?.applyTo(this, null, Glide.with(this@UserFragment), description)
|
||||||
linkify.applyAllLinks(this, user.account_key, false, false)
|
linkify.applyAllLinks(this, user.account_key, false, false)
|
||||||
}
|
}
|
||||||
description.spannable = text
|
description.spannable = text
|
||||||
|
@ -1200,10 +1205,10 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
||||||
else -> Chameleon.getOverrideTheme(activity, activity).colorPrimary
|
else -> Chameleon.getOverrideTheme(activity, activity).colorPrimary
|
||||||
})
|
})
|
||||||
val defWidth = resources.displayMetrics.widthPixels
|
val defWidth = resources.displayMetrics.widthPixels
|
||||||
requestManager.loadProfileBanner(activity, user, defWidth).into(profileBanner)
|
Glide.with(this).loadProfileBanner(activity, user, defWidth).into(profileBanner)
|
||||||
requestManager.loadOriginalProfileImage(activity, user, profileImage.style,
|
Glide.with(this).loadOriginalProfileImage(activity, user, profileImage.style,
|
||||||
profileImage.cornerRadius, profileImage.cornerRadiusRatio)
|
profileImage.cornerRadius, profileImage.cornerRadiusRatio)
|
||||||
.thumbnail(requestManager.loadProfileImage(activity, user, profileImage.style,
|
.thumbnail(Glide.with(this).loadProfileImage(activity, user, profileImage.style,
|
||||||
profileImage.cornerRadius, profileImage.cornerRadiusRatio,
|
profileImage.cornerRadius, profileImage.cornerRadiusRatio,
|
||||||
getString(R.string.profile_image_size))).into(profileImage)
|
getString(R.string.profile_image_size))).into(profileImage)
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ import android.support.v4.app.FragmentActivity
|
||||||
import android.view.*
|
import android.view.*
|
||||||
import android.view.View.OnClickListener
|
import android.view.View.OnClickListener
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import com.twitter.Validator
|
import com.twitter.Validator
|
||||||
import kotlinx.android.synthetic.main.fragment_user_profile_editor.*
|
import kotlinx.android.synthetic.main.fragment_user_profile_editor.*
|
||||||
import nl.komponents.kovenant.Promise
|
import nl.komponents.kovenant.Promise
|
||||||
|
@ -253,11 +254,11 @@ class UserProfileEditorFragment : BaseFragment(), OnSizeChangedListener,
|
||||||
editLocation.setText(user.location)
|
editLocation.setText(user.location)
|
||||||
editUrl.setText(user.urlFull)
|
editUrl.setText(user.urlFull)
|
||||||
|
|
||||||
requestManager.loadProfileImage(activity, user,
|
Glide.with(this).loadProfileImage(activity, user,
|
||||||
ImageShapeStyle.SHAPE_RECTANGLE).into(profileImage)
|
ImageShapeStyle.SHAPE_RECTANGLE).into(profileImage)
|
||||||
requestManager.loadProfileBanner(activity, user, resources.displayMetrics.widthPixels)
|
Glide.with(this).loadProfileBanner(activity, user, resources.displayMetrics.widthPixels)
|
||||||
.into(profileBanner)
|
.into(profileBanner)
|
||||||
requestManager.load(user.profile_background_url).into(profileBackground)
|
Glide.with(this).load(user.profile_background_url).into(profileBackground)
|
||||||
|
|
||||||
linkColor.color = user.link_color
|
linkColor.color = user.link_color
|
||||||
backgroundColor.color = user.background_color
|
backgroundColor.color = user.background_color
|
||||||
|
|
|
@ -24,6 +24,7 @@ import android.graphics.Bitmap
|
||||||
import android.graphics.Canvas
|
import android.graphics.Canvas
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.graphics.drawable.BitmapDrawable
|
import android.graphics.drawable.BitmapDrawable
|
||||||
|
import android.graphics.drawable.Drawable
|
||||||
import android.media.MediaScannerConnection
|
import android.media.MediaScannerConnection
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
@ -34,7 +35,6 @@ import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.load.resource.drawable.GlideDrawable
|
|
||||||
import com.bumptech.glide.request.target.Target
|
import com.bumptech.glide.request.target.Target
|
||||||
import io.nayuki.qrcodegen.QrCode
|
import io.nayuki.qrcodegen.QrCode
|
||||||
import io.nayuki.qrcodegen.QrSegment
|
import io.nayuki.qrcodegen.QrSegment
|
||||||
|
@ -203,7 +203,7 @@ class UserQrDialogFragment : BaseDialogFragment() {
|
||||||
return@task SaveFileResult(saveFile, "image/png")
|
return@task SaveFileResult(saveFile, "image/png")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun loadProfileImage(): Promise<GlideDrawable, Exception> {
|
private fun loadProfileImage(): Promise<Drawable, Exception> {
|
||||||
val activity = this.activity ?: return Promise.ofFail(InterruptedException())
|
val activity = this.activity ?: return Promise.ofFail(InterruptedException())
|
||||||
if (isDetached || dialog == null || activity.isFinishing) {
|
if (isDetached || dialog == null || activity.isFinishing) {
|
||||||
return Promise.ofFail(InterruptedException())
|
return Promise.ofFail(InterruptedException())
|
||||||
|
@ -217,13 +217,13 @@ class UserQrDialogFragment : BaseDialogFragment() {
|
||||||
val profileImageSize = context.getString(R.string.profile_image_size)
|
val profileImageSize = context.getString(R.string.profile_image_size)
|
||||||
try {
|
try {
|
||||||
return@task requestManager.loadOriginalProfileImage(context, user, 0)
|
return@task requestManager.loadOriginalProfileImage(context, user, 0)
|
||||||
.into(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).get()
|
.submit(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).get()
|
||||||
} catch (e: ExecutionException) {
|
} catch (e: ExecutionException) {
|
||||||
// Ignore
|
// Ignore
|
||||||
}
|
}
|
||||||
// Return fallback profile image
|
// Return fallback profile image
|
||||||
return@task requestManager.loadProfileImage(context, user, ImageShapeStyle.SHAPE_NONE,
|
return@task requestManager.loadProfileImage(context, user, ImageShapeStyle.SHAPE_NONE,
|
||||||
size = profileImageSize).into(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).get()
|
size = profileImageSize).submit(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).get()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,9 @@ import org.mariotaku.twidere.constant.newDocumentApiKey
|
||||||
import org.mariotaku.twidere.constant.readFromBottomKey
|
import org.mariotaku.twidere.constant.readFromBottomKey
|
||||||
import org.mariotaku.twidere.data.CursorObjectDataSourceFactory
|
import org.mariotaku.twidere.data.CursorObjectDataSourceFactory
|
||||||
import org.mariotaku.twidere.data.processor.DataSourceItemProcessor
|
import org.mariotaku.twidere.data.processor.DataSourceItemProcessor
|
||||||
|
import org.mariotaku.twidere.extension.get
|
||||||
import org.mariotaku.twidere.extension.model.activityStatus
|
import org.mariotaku.twidere.extension.model.activityStatus
|
||||||
|
import org.mariotaku.twidere.extension.model.quoted
|
||||||
import org.mariotaku.twidere.extension.queryOne
|
import org.mariotaku.twidere.extension.queryOne
|
||||||
import org.mariotaku.twidere.extension.showContextMenuForChild
|
import org.mariotaku.twidere.extension.showContextMenuForChild
|
||||||
import org.mariotaku.twidere.extension.view.PositionWithOffset
|
import org.mariotaku.twidere.extension.view.PositionWithOffset
|
||||||
|
@ -78,8 +80,10 @@ import org.mariotaku.twidere.model.pagination.SinceMaxPagination
|
||||||
import org.mariotaku.twidere.model.refresh.BaseContentRefreshParam
|
import org.mariotaku.twidere.model.refresh.BaseContentRefreshParam
|
||||||
import org.mariotaku.twidere.model.refresh.ContentRefreshParam
|
import org.mariotaku.twidere.model.refresh.ContentRefreshParam
|
||||||
import org.mariotaku.twidere.provider.TwidereDataStore.Activities
|
import org.mariotaku.twidere.provider.TwidereDataStore.Activities
|
||||||
|
import org.mariotaku.twidere.singleton.BusSingleton
|
||||||
import org.mariotaku.twidere.task.statuses.GetStatusesTask
|
import org.mariotaku.twidere.task.statuses.GetStatusesTask
|
||||||
import org.mariotaku.twidere.util.*
|
import org.mariotaku.twidere.util.*
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager.Companion
|
||||||
import org.mariotaku.twidere.view.ExtendedRecyclerView
|
import org.mariotaku.twidere.view.ExtendedRecyclerView
|
||||||
import org.mariotaku.twidere.view.holder.ActivityTitleSummaryViewHolder
|
import org.mariotaku.twidere.view.holder.ActivityTitleSummaryViewHolder
|
||||||
import org.mariotaku.twidere.view.holder.GapViewHolder
|
import org.mariotaku.twidere.view.holder.GapViewHolder
|
||||||
|
@ -148,11 +152,11 @@ abstract class AbsActivitiesFragment : AbsContentRecyclerViewFragment<Parcelable
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
recyclerView.addOnScrollListener(scrollHandler)
|
recyclerView.addOnScrollListener(scrollHandler)
|
||||||
bus.register(busEventHandler)
|
BusSingleton.register(busEventHandler)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
bus.unregister(busEventHandler)
|
BusSingleton.unregister(busEventHandler)
|
||||||
recyclerView.removeOnScrollListener(scrollHandler)
|
recyclerView.removeOnScrollListener(scrollHandler)
|
||||||
if (userVisibleHint) {
|
if (userVisibleHint) {
|
||||||
saveReadPosition(layoutManager.firstVisibleItemPosition)
|
saveReadPosition(layoutManager.firstVisibleItemPosition)
|
||||||
|
@ -189,7 +193,7 @@ abstract class AbsActivitiesFragment : AbsContentRecyclerViewFragment<Parcelable
|
||||||
val contextMenuInfo = menuInfo as ExtendedRecyclerView.ContextMenuInfo
|
val contextMenuInfo = menuInfo as ExtendedRecyclerView.ContextMenuInfo
|
||||||
val status = adapter.getActivity(contextMenuInfo.position).activityStatus ?: return
|
val status = adapter.getActivity(contextMenuInfo.position).activityStatus ?: return
|
||||||
inflater.inflate(R.menu.action_status, menu)
|
inflater.inflate(R.menu.action_status, menu)
|
||||||
MenuUtils.setupForStatus(context, menu, preferences, userColorNameManager, status)
|
MenuUtils.setupForStatus(context, menu, preferences, UserColorNameManager.get(this.context!!), status)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onContextItemSelected(item: MenuItem): Boolean {
|
override fun onContextItemSelected(item: MenuItem): Boolean {
|
||||||
|
@ -214,7 +218,7 @@ abstract class AbsActivitiesFragment : AbsContentRecyclerViewFragment<Parcelable
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
else -> return MenuUtils.handleStatusClick(context, this, fragmentManager!!,
|
else -> return MenuUtils.handleStatusClick(context, this, fragmentManager!!,
|
||||||
preferences, userColorNameManager, status, item)
|
preferences, UserColorNameManager.get(this.context!!), status, item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -492,8 +496,8 @@ abstract class AbsActivitiesFragment : AbsContentRecyclerViewFragment<Parcelable
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onQuotedStatusClick(holder: IStatusViewHolder, position: Int) {
|
override fun onQuotedStatusClick(holder: IStatusViewHolder, position: Int) {
|
||||||
val status = getActivityStatus(position)?.takeIf { it.quoted_id != null } ?: return
|
val status = getActivityStatus(position)?.takeIf { it.quoted?.id != null } ?: return
|
||||||
IntentUtils.openStatus(context!!, status.account_key, status.quoted_id)
|
IntentUtils.openStatus(context!!, status.account_key, status.quoted?.id!!)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onMediaClick(holder: IStatusViewHolder, view: View, media: ParcelableMedia, position: Int) {
|
override fun onMediaClick(holder: IStatusViewHolder, view: View, media: ParcelableMedia, position: Int) {
|
||||||
|
|
|
@ -31,6 +31,7 @@ import android.view.inputmethod.InputMethodManager
|
||||||
import android.widget.CheckBox
|
import android.widget.CheckBox
|
||||||
import android.widget.Checkable
|
import android.widget.Checkable
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import kotlinx.android.synthetic.main.dialog_filter_rule_editor.*
|
import kotlinx.android.synthetic.main.dialog_filter_rule_editor.*
|
||||||
import org.mariotaku.ktextension.ContentValues
|
import org.mariotaku.ktextension.ContentValues
|
||||||
import org.mariotaku.ktextension.set
|
import org.mariotaku.ktextension.set
|
||||||
|
@ -115,7 +116,7 @@ class AddEditItemFragment : BaseDialogFragment() {
|
||||||
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
|
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
|
||||||
editText.setAdapter(when (contentUri) {
|
editText.setAdapter(when (contentUri) {
|
||||||
Filters.Sources.CONTENT_URI -> SourceAutoCompleteAdapter(activity!!)
|
Filters.Sources.CONTENT_URI -> SourceAutoCompleteAdapter(activity!!)
|
||||||
Filters.Users.CONTENT_URI -> ComposeAutoCompleteAdapter(activity!!, requestManager).apply {
|
Filters.Users.CONTENT_URI -> ComposeAutoCompleteAdapter(activity!!, Glide.with(this@AddEditItemFragment)).apply {
|
||||||
val accountKey = arguments!!.accountKey
|
val accountKey = arguments!!.accountKey
|
||||||
if (accountKey != null) {
|
if (accountKey != null) {
|
||||||
val am = AccountManager.get(activity)
|
val am = AccountManager.get(activity)
|
||||||
|
|
|
@ -44,6 +44,7 @@ import org.mariotaku.twidere.text.style.EmojiSpan
|
||||||
import org.mariotaku.twidere.util.IntentUtils
|
import org.mariotaku.twidere.util.IntentUtils
|
||||||
import org.mariotaku.twidere.util.ThemeUtils
|
import org.mariotaku.twidere.util.ThemeUtils
|
||||||
import org.mariotaku.twidere.util.UserColorNameManager
|
import org.mariotaku.twidere.util.UserColorNameManager
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager.Companion
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class FilteredUsersFragment : BaseFiltersFragment() {
|
class FilteredUsersFragment : BaseFiltersFragment() {
|
||||||
|
@ -163,7 +164,7 @@ class FilteredUsersFragment : BaseFiltersFragment() {
|
||||||
val adapter = this.adapter as FilterUsersListAdapter
|
val adapter = this.adapter as FilterUsersListAdapter
|
||||||
val item = adapter.getFilterItem(position) ?: return
|
val item = adapter.getFilterItem(position) ?: return
|
||||||
if (item.source >= 0) return
|
if (item.source >= 0) return
|
||||||
addOrEditItem(item.id, userColorNameManager.getDisplayName(item), item.scope)
|
addOrEditItem(item.id, UserColorNameManager.get(context!!).getDisplayName(item), item.scope)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun addOrEditItem(id: Long, value: String?, scope: Int) {
|
override fun addOrEditItem(id: Long, value: String?, scope: Int) {
|
||||||
|
|
|
@ -32,13 +32,13 @@ import android.view.LayoutInflater
|
||||||
import android.view.MotionEvent
|
import android.view.MotionEvent
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import com.google.android.exoplayer2.*
|
import com.google.android.exoplayer2.ExoPlaybackException
|
||||||
|
import com.google.android.exoplayer2.ExoPlayerFactory
|
||||||
|
import com.google.android.exoplayer2.Player
|
||||||
import com.google.android.exoplayer2.extractor.ExtractorsFactory
|
import com.google.android.exoplayer2.extractor.ExtractorsFactory
|
||||||
import com.google.android.exoplayer2.source.ExtractorMediaSource
|
import com.google.android.exoplayer2.source.ExtractorMediaSource
|
||||||
import com.google.android.exoplayer2.source.TrackGroupArray
|
|
||||||
import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection
|
import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection
|
||||||
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector
|
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector
|
||||||
import com.google.android.exoplayer2.trackselection.TrackSelectionArray
|
|
||||||
import com.google.android.exoplayer2.upstream.DataSource
|
import com.google.android.exoplayer2.upstream.DataSource
|
||||||
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter
|
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter
|
||||||
import com.google.android.exoplayer2.upstream.HttpDataSource
|
import com.google.android.exoplayer2.upstream.HttpDataSource
|
||||||
|
@ -111,10 +111,7 @@ class ExoPlayerPageFragment : MediaViewerFragment(), IBaseFragment<ExoPlayerPage
|
||||||
AccountManager.get(context).getDetailsOrThrow(accountKey, true)
|
AccountManager.get(context).getDetailsOrThrow(accountKey, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val playerListener = object : Player.EventListener {
|
private val playerListener = object : Player.DefaultEventListener() {
|
||||||
override fun onLoadingChanged(isLoading: Boolean) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPlayerError(error: ExoPlaybackException) {
|
override fun onPlayerError(error: ExoPlaybackException) {
|
||||||
playerHasError = true
|
playerHasError = true
|
||||||
|
@ -161,21 +158,6 @@ class ExoPlayerPageFragment : MediaViewerFragment(), IBaseFragment<ExoPlayerPage
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPositionDiscontinuity() {
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onTimelineChanged(timeline: Timeline, manifest: Any?) {
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onTracksChanged(trackGroups: TrackGroupArray, trackSelections: TrackSelectionArray) {
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPlaybackParametersChanged(playbackParameters: PlaybackParameters?) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onRepeatModeChanged(repeatMode: Int) {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||||
|
|
|
@ -42,6 +42,7 @@ import android.support.v7.widget.Toolbar
|
||||||
import android.view.*
|
import android.view.*
|
||||||
import android.widget.CompoundButton
|
import android.widget.CompoundButton
|
||||||
import android.widget.EditText
|
import android.widget.EditText
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.RequestManager
|
import com.bumptech.glide.RequestManager
|
||||||
import kotlinx.android.synthetic.main.activity_home_content.view.*
|
import kotlinx.android.synthetic.main.activity_home_content.view.*
|
||||||
import kotlinx.android.synthetic.main.fragment_messages_conversation_info.*
|
import kotlinx.android.synthetic.main.fragment_messages_conversation_info.*
|
||||||
|
@ -73,7 +74,6 @@ import org.mariotaku.twidere.annotation.ProfileImageSize
|
||||||
import org.mariotaku.twidere.constant.IntentConstants
|
import org.mariotaku.twidere.constant.IntentConstants
|
||||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY
|
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY
|
||||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_USER
|
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_USER
|
||||||
import org.mariotaku.twidere.constant.nameFirstKey
|
|
||||||
import org.mariotaku.twidere.constant.profileImageStyleKey
|
import org.mariotaku.twidere.constant.profileImageStyleKey
|
||||||
import org.mariotaku.twidere.exception.UnsupportedCountIndexException
|
import org.mariotaku.twidere.exception.UnsupportedCountIndexException
|
||||||
import org.mariotaku.twidere.extension.*
|
import org.mariotaku.twidere.extension.*
|
||||||
|
@ -93,6 +93,7 @@ import org.mariotaku.twidere.promise.MessagePromises
|
||||||
import org.mariotaku.twidere.promise.UpdateStatusPromise
|
import org.mariotaku.twidere.promise.UpdateStatusPromise
|
||||||
import org.mariotaku.twidere.provider.TwidereDataStore.Messages.Conversations
|
import org.mariotaku.twidere.provider.TwidereDataStore.Messages.Conversations
|
||||||
import org.mariotaku.twidere.util.IntentUtils
|
import org.mariotaku.twidere.util.IntentUtils
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager
|
||||||
import org.mariotaku.twidere.view.holder.SimpleUserViewHolder
|
import org.mariotaku.twidere.view.holder.SimpleUserViewHolder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -124,7 +125,7 @@ class MessageConversationInfoFragment : BaseFragment(), IToolBarSupportFragment,
|
||||||
(activity as? AppCompatActivity)?.supportActionBar?.setDisplayShowTitleEnabled(false)
|
(activity as? AppCompatActivity)?.supportActionBar?.setDisplayShowTitleEnabled(false)
|
||||||
val theme = Chameleon.getOverrideTheme(context, activity)
|
val theme = Chameleon.getOverrideTheme(context, activity)
|
||||||
|
|
||||||
adapter = ConversationInfoAdapter(context, requestManager)
|
adapter = ConversationInfoAdapter(context, Glide.with(this))
|
||||||
adapter.listener = object : ConversationInfoAdapter.Listener {
|
adapter.listener = object : ConversationInfoAdapter.Listener {
|
||||||
override fun onUserClick(position: Int) {
|
override fun onUserClick(position: Int) {
|
||||||
val user = adapter.getUser(position) ?: return
|
val user = adapter.getUser(position) ?: return
|
||||||
|
@ -257,12 +258,12 @@ class MessageConversationInfoFragment : BaseFragment(), IToolBarSupportFragment,
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
val name = data.getTitle(context, userColorNameManager, preferences[nameFirstKey]).first
|
val name = data.getTitle(context, UserColorNameManager.get(context)).first
|
||||||
val summary = data.getSubtitle(context)
|
val summary = data.getSubtitle(context)
|
||||||
|
|
||||||
@ImageShapeStyle val profileImageStyle: Int = preferences[profileImageStyleKey]
|
@ImageShapeStyle val profileImageStyle: Int = preferences[profileImageStyleKey]
|
||||||
requestManager.loadProfileImage(context, data, profileImageStyle).into(conversationAvatar)
|
Glide.with(this).loadProfileImage(context, data, profileImageStyle).into(conversationAvatar)
|
||||||
requestManager.loadProfileImage(context, data, profileImageStyle, 0f,
|
Glide.with(this).loadProfileImage(context, data, profileImageStyle, 0f,
|
||||||
0f, ProfileImageSize.REASONABLY_SMALL).into(appBarIcon)
|
0f, ProfileImageSize.REASONABLY_SMALL).into(appBarIcon)
|
||||||
appBarTitle.spannable = name
|
appBarTitle.spannable = name
|
||||||
conversationTitle.spannable = name
|
conversationTitle.spannable = name
|
||||||
|
@ -292,7 +293,7 @@ class MessageConversationInfoFragment : BaseFragment(), IToolBarSupportFragment,
|
||||||
|
|
||||||
private fun performDestroyConversation() {
|
private fun performDestroyConversation() {
|
||||||
val weakThis by weak(this)
|
val weakThis by weak(this)
|
||||||
showProgressDialog("leave_conversation_progress") and MessagePromises.getInstance(context!!).destroyConversation(accountKey, conversationId).successUi {
|
showProgressDialog("leave_conversation_progress") and MessagePromises.get(context!!).destroyConversation(accountKey, conversationId).successUi {
|
||||||
val f = weakThis ?: return@successUi
|
val f = weakThis ?: return@successUi
|
||||||
f.dismissProgressDialog("leave_conversation_progress")
|
f.dismissProgressDialog("leave_conversation_progress")
|
||||||
f.activity?.setResult(RESULT_CLOSE)
|
f.activity?.setResult(RESULT_CLOSE)
|
||||||
|
@ -302,7 +303,7 @@ class MessageConversationInfoFragment : BaseFragment(), IToolBarSupportFragment,
|
||||||
|
|
||||||
private fun performClearMessages() {
|
private fun performClearMessages() {
|
||||||
val weakThis by weak(this)
|
val weakThis by weak(this)
|
||||||
showProgressDialog("clear_messages_progress") and MessagePromises.getInstance(context!!).clearMessages(accountKey, conversationId).successUi { succeed ->
|
showProgressDialog("clear_messages_progress") and MessagePromises.get(context!!).clearMessages(accountKey, conversationId).successUi { succeed ->
|
||||||
val f = weakThis ?: return@successUi
|
val f = weakThis ?: return@successUi
|
||||||
f.dismissDialogThen("clear_messages_progress") {
|
f.dismissDialogThen("clear_messages_progress") {
|
||||||
if (succeed) {
|
if (succeed) {
|
||||||
|
@ -315,7 +316,7 @@ class MessageConversationInfoFragment : BaseFragment(), IToolBarSupportFragment,
|
||||||
private fun performAddParticipant(user: ParcelableUser) {
|
private fun performAddParticipant(user: ParcelableUser) {
|
||||||
ProgressDialogFragment.show(childFragmentManager, "add_participant_progress")
|
ProgressDialogFragment.show(childFragmentManager, "add_participant_progress")
|
||||||
val weakThis by weak(this)
|
val weakThis by weak(this)
|
||||||
ConversationPromises.getInstance(context!!).addParticipants(accountKey,
|
ConversationPromises.get(context!!).addParticipants(accountKey,
|
||||||
conversationId, listOf(user)).alwaysUi {
|
conversationId, listOf(user)).alwaysUi {
|
||||||
weakThis?.dismissDialogThen("add_participant_progress") {
|
weakThis?.dismissDialogThen("add_participant_progress") {
|
||||||
loaderManager.restartLoader(0, null, this)
|
loaderManager.restartLoader(0, null, this)
|
||||||
|
@ -325,7 +326,7 @@ class MessageConversationInfoFragment : BaseFragment(), IToolBarSupportFragment,
|
||||||
|
|
||||||
private fun performSetNotificationDisabled(disabled: Boolean) {
|
private fun performSetNotificationDisabled(disabled: Boolean) {
|
||||||
val weakThis by weak(this)
|
val weakThis by weak(this)
|
||||||
showProgressDialog("set_notifications_disabled_progress") and ConversationPromises.getInstance(context!!).setNotificationDisabled(accountKey, conversationId, disabled).alwaysUi {
|
showProgressDialog("set_notifications_disabled_progress") and ConversationPromises.get(context!!).setNotificationDisabled(accountKey, conversationId, disabled).alwaysUi {
|
||||||
weakThis?.dismissProgressDialog("set_notifications_disabled_progress")
|
weakThis?.dismissProgressDialog("set_notifications_disabled_progress")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,7 @@ import android.text.SpannableStringBuilder
|
||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
import android.text.style.ReplacementSpan
|
import android.text.style.ReplacementSpan
|
||||||
import android.view.*
|
import android.view.*
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import kotlinx.android.synthetic.main.fragment_messages_conversation_new.*
|
import kotlinx.android.synthetic.main.fragment_messages_conversation_new.*
|
||||||
import org.mariotaku.kpreferences.get
|
import org.mariotaku.kpreferences.get
|
||||||
import org.mariotaku.ktextension.*
|
import org.mariotaku.ktextension.*
|
||||||
|
@ -53,6 +54,7 @@ import org.mariotaku.twidere.provider.TwidereDataStore.Messages.Conversations
|
||||||
import org.mariotaku.twidere.task.twitter.message.SendMessageTask
|
import org.mariotaku.twidere.task.twitter.message.SendMessageTask
|
||||||
import org.mariotaku.twidere.text.MarkForDeleteSpan
|
import org.mariotaku.twidere.text.MarkForDeleteSpan
|
||||||
import org.mariotaku.twidere.util.IntentUtils
|
import org.mariotaku.twidere.util.IntentUtils
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager
|
||||||
import org.mariotaku.twidere.util.view.SimpleTextWatcher
|
import org.mariotaku.twidere.util.view.SimpleTextWatcher
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
|
|
||||||
|
@ -69,10 +71,10 @@ class MessageNewConversationFragment : BaseFragment() {
|
||||||
set(value) {
|
set(value) {
|
||||||
val roundRadius = resources.getDimension(R.dimen.element_spacing_xsmall)
|
val roundRadius = resources.getDimension(R.dimen.element_spacing_xsmall)
|
||||||
val spanPadding = resources.getDimension(R.dimen.element_spacing_xsmall)
|
val spanPadding = resources.getDimension(R.dimen.element_spacing_xsmall)
|
||||||
val nameFirst = preferences[nameFirstKey]
|
|
||||||
editParticipants.text = SpannableStringBuilder().apply {
|
editParticipants.text = SpannableStringBuilder().apply {
|
||||||
|
val manager = UserColorNameManager.get(context!!)
|
||||||
value.forEach { user ->
|
value.forEach { user ->
|
||||||
val displayName = userColorNameManager.getDisplayName(user)
|
val displayName = manager.getDisplayName(user)
|
||||||
val span = ParticipantSpan(user, displayName, roundRadius, spanPadding)
|
val span = ParticipantSpan(user, displayName, roundRadius, spanPadding)
|
||||||
appendCompat(user.screen_name, span, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
|
appendCompat(user.screen_name, span, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
|
||||||
append(" ")
|
append(" ")
|
||||||
|
@ -89,7 +91,7 @@ class MessageNewConversationFragment : BaseFragment() {
|
||||||
super.onActivityCreated(savedInstanceState)
|
super.onActivityCreated(savedInstanceState)
|
||||||
setHasOptionsMenu(true)
|
setHasOptionsMenu(true)
|
||||||
linkHandlerTitle = getString(R.string.title_direct_messages_conversation_new)
|
linkHandlerTitle = getString(R.string.title_direct_messages_conversation_new)
|
||||||
usersAdapter = SelectableUsersAdapter(context!!, requestManager)
|
usersAdapter = SelectableUsersAdapter(context!!, Glide.with(this))
|
||||||
recyclerView.adapter = usersAdapter
|
recyclerView.adapter = usersAdapter
|
||||||
recyclerView.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
|
recyclerView.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
|
||||||
|
|
||||||
|
@ -140,7 +142,6 @@ class MessageNewConversationFragment : BaseFragment() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
val nameFirst = preferences[nameFirstKey]
|
|
||||||
val roundRadius = resources.getDimension(R.dimen.element_spacing_xsmall)
|
val roundRadius = resources.getDimension(R.dimen.element_spacing_xsmall)
|
||||||
val spanPadding = resources.getDimension(R.dimen.element_spacing_xsmall)
|
val spanPadding = resources.getDimension(R.dimen.element_spacing_xsmall)
|
||||||
usersAdapter.itemCheckedListener = itemChecked@{ pos, checked ->
|
usersAdapter.itemCheckedListener = itemChecked@{ pos, checked ->
|
||||||
|
@ -154,7 +155,7 @@ class MessageNewConversationFragment : BaseFragment() {
|
||||||
if (start < 0 || end < 0 || end < start) return@forEach
|
if (start < 0 || end < 0 || end < start) return@forEach
|
||||||
text.delete(start, end)
|
text.delete(start, end)
|
||||||
}
|
}
|
||||||
val displayName = userColorNameManager.getDisplayName(user)
|
val displayName = UserColorNameManager.get(context!!).getDisplayName(user)
|
||||||
val span = ParticipantSpan(user, displayName, roundRadius, spanPadding)
|
val span = ParticipantSpan(user, displayName, roundRadius, spanPadding)
|
||||||
text.appendCompat(user.screen_name, span, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
|
text.appendCompat(user.screen_name, span, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
|
||||||
text.append(" ")
|
text.append(" ")
|
||||||
|
|
|
@ -40,6 +40,7 @@ import android.support.v7.widget.LinearLayoutManager
|
||||||
import android.support.v7.widget.RecyclerView
|
import android.support.v7.widget.RecyclerView
|
||||||
import android.support.v7.widget.Toolbar
|
import android.support.v7.widget.Toolbar
|
||||||
import android.view.*
|
import android.view.*
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.RequestManager
|
import com.bumptech.glide.RequestManager
|
||||||
import com.squareup.otto.Subscribe
|
import com.squareup.otto.Subscribe
|
||||||
import kotlinx.android.synthetic.main.activity_premium_dashboard.*
|
import kotlinx.android.synthetic.main.activity_premium_dashboard.*
|
||||||
|
@ -84,6 +85,7 @@ import org.mariotaku.twidere.model.event.SendMessageTaskEvent
|
||||||
import org.mariotaku.twidere.promise.MessagePromises
|
import org.mariotaku.twidere.promise.MessagePromises
|
||||||
import org.mariotaku.twidere.provider.TwidereDataStore.Messages
|
import org.mariotaku.twidere.provider.TwidereDataStore.Messages
|
||||||
import org.mariotaku.twidere.service.LengthyOperationsService
|
import org.mariotaku.twidere.service.LengthyOperationsService
|
||||||
|
import org.mariotaku.twidere.singleton.BusSingleton
|
||||||
import org.mariotaku.twidere.task.twitter.message.GetMessagesTask
|
import org.mariotaku.twidere.task.twitter.message.GetMessagesTask
|
||||||
import org.mariotaku.twidere.util.*
|
import org.mariotaku.twidere.util.*
|
||||||
import org.mariotaku.twidere.view.ExtendedRecyclerView
|
import org.mariotaku.twidere.view.ExtendedRecyclerView
|
||||||
|
@ -144,7 +146,7 @@ class MessagesConversationFragment : AbsContentListRecyclerViewFragment<Messages
|
||||||
return recyclerView.showContextMenuForChild(holder.itemView)
|
return recyclerView.showContextMenuForChild(holder.itemView)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mediaPreviewAdapter = MediaPreviewAdapter(activity, requestManager)
|
mediaPreviewAdapter = MediaPreviewAdapter(activity, Glide.with(this))
|
||||||
|
|
||||||
mediaPreviewAdapter.listener = object : MediaPreviewAdapter.Listener {
|
mediaPreviewAdapter.listener = object : MediaPreviewAdapter.Listener {
|
||||||
override fun onRemoveClick(position: Int, holder: MediaPreviewViewHolder) {
|
override fun onRemoveClick(position: Int, holder: MediaPreviewViewHolder) {
|
||||||
|
@ -210,11 +212,11 @@ class MessagesConversationFragment : AbsContentListRecyclerViewFragment<Messages
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
bus.register(this)
|
BusSingleton.register(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
bus.unregister(this)
|
BusSingleton.unregister(this)
|
||||||
super.onStop()
|
super.onStop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -274,7 +276,7 @@ class MessagesConversationFragment : AbsContentListRecyclerViewFragment<Messages
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateAdapter(context: Context, requestManager: RequestManager): MessagesConversationAdapter {
|
override fun onCreateAdapter(context: Context, requestManager: RequestManager): MessagesConversationAdapter {
|
||||||
return MessagesConversationAdapter(context, this.requestManager)
|
return MessagesConversationAdapter(context, Glide.with(this))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateLayoutManager(context: Context): LinearLayoutManager {
|
override fun onCreateLayoutManager(context: Context): LinearLayoutManager {
|
||||||
|
@ -304,7 +306,7 @@ class MessagesConversationFragment : AbsContentListRecyclerViewFragment<Messages
|
||||||
R.id.recyclerView -> {
|
R.id.recyclerView -> {
|
||||||
val message = adapter.getMessage(menuInfo.position)
|
val message = adapter.getMessage(menuInfo.position)
|
||||||
val conversation = adapter.conversation
|
val conversation = adapter.conversation
|
||||||
menu.setHeaderTitle(message.getSummaryText(context!!, userColorNameManager, conversation,
|
menu.setHeaderTitle(message.getSummaryText(context!!, UserColorNameManager.get(context!!), conversation,
|
||||||
preferences[nameFirstKey]))
|
preferences[nameFirstKey]))
|
||||||
activity!!.menuInflater.inflate(R.menu.menu_conversation_message_item, menu)
|
activity!!.menuInflater.inflate(R.menu.menu_conversation_message_item, menu)
|
||||||
}
|
}
|
||||||
|
@ -328,7 +330,7 @@ class MessagesConversationFragment : AbsContentListRecyclerViewFragment<Messages
|
||||||
}
|
}
|
||||||
R.id.delete -> {
|
R.id.delete -> {
|
||||||
// TODO show progress
|
// TODO show progress
|
||||||
MessagePromises.getInstance(context!!).destroyMessage(message.account_key, message.conversation_id,
|
MessagePromises.get(context!!).destroyMessage(message.account_key, message.conversation_id,
|
||||||
message.id)
|
message.id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -514,15 +516,14 @@ class MessagesConversationFragment : AbsContentListRecyclerViewFragment<Messages
|
||||||
|
|
||||||
private fun markRead() {
|
private fun markRead() {
|
||||||
// TODO: Promise progress
|
// TODO: Promise progress
|
||||||
MessagePromises.getInstance(context!!).markRead(accountKey, conversationId)
|
MessagePromises.get(context!!).markRead(accountKey, conversationId)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateConversationStatus() {
|
private fun updateConversationStatus() {
|
||||||
val activity = this.activity ?: return
|
val activity = this.activity ?: return
|
||||||
if (isDetached || activity.isFinishing) return
|
if (isDetached || activity.isFinishing) return
|
||||||
val conversation = adapter.conversation ?: return
|
val conversation = adapter.conversation ?: return
|
||||||
val title = conversation.getTitle(activity, userColorNameManager,
|
val title = conversation.getTitle(activity, UserColorNameManager.get(context!!)).first
|
||||||
preferences[nameFirstKey]).first
|
|
||||||
val subtitle = conversation.getSubtitle(activity)
|
val subtitle = conversation.getSubtitle(activity)
|
||||||
activity.title = title
|
activity.title = title
|
||||||
val readOnly = conversation.readOnly
|
val readOnly = conversation.readOnly
|
||||||
|
@ -550,7 +551,7 @@ class MessagesConversationFragment : AbsContentListRecyclerViewFragment<Messages
|
||||||
TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(conversationTitle, null,
|
TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(conversationTitle, null,
|
||||||
null, stateIcon, null)
|
null, stateIcon, null)
|
||||||
|
|
||||||
requestManager.loadProfileImage(activity, conversation, preferences[profileImageStyleKey])
|
Glide.with(this).loadProfileImage(activity, conversation, preferences[profileImageStyleKey])
|
||||||
.into(conversationAvatar)
|
.into(conversationAvatar)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@ import android.view.ContextMenu
|
||||||
import android.view.MenuInflater
|
import android.view.MenuInflater
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.RequestManager
|
import com.bumptech.glide.RequestManager
|
||||||
import com.squareup.otto.Subscribe
|
import com.squareup.otto.Subscribe
|
||||||
import kotlinx.android.synthetic.main.activity_premium_dashboard.*
|
import kotlinx.android.synthetic.main.activity_premium_dashboard.*
|
||||||
|
@ -49,7 +50,6 @@ import org.mariotaku.twidere.adapter.MessagesEntriesAdapter.MessageConversationC
|
||||||
import org.mariotaku.twidere.annotation.AccountType
|
import org.mariotaku.twidere.annotation.AccountType
|
||||||
import org.mariotaku.twidere.annotation.LoadMorePosition
|
import org.mariotaku.twidere.annotation.LoadMorePosition
|
||||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_TYPES
|
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_TYPES
|
||||||
import org.mariotaku.twidere.constant.nameFirstKey
|
|
||||||
import org.mariotaku.twidere.constant.newDocumentApiKey
|
import org.mariotaku.twidere.constant.newDocumentApiKey
|
||||||
import org.mariotaku.twidere.data.CursorObjectDataSourceFactory
|
import org.mariotaku.twidere.data.CursorObjectDataSourceFactory
|
||||||
import org.mariotaku.twidere.extension.accountKey
|
import org.mariotaku.twidere.extension.accountKey
|
||||||
|
@ -65,11 +65,9 @@ import org.mariotaku.twidere.model.UserKey
|
||||||
import org.mariotaku.twidere.model.event.GetMessagesTaskEvent
|
import org.mariotaku.twidere.model.event.GetMessagesTaskEvent
|
||||||
import org.mariotaku.twidere.promise.MessagePromises
|
import org.mariotaku.twidere.promise.MessagePromises
|
||||||
import org.mariotaku.twidere.provider.TwidereDataStore.Messages.Conversations
|
import org.mariotaku.twidere.provider.TwidereDataStore.Messages.Conversations
|
||||||
|
import org.mariotaku.twidere.singleton.BusSingleton
|
||||||
import org.mariotaku.twidere.task.twitter.message.GetMessagesTask
|
import org.mariotaku.twidere.task.twitter.message.GetMessagesTask
|
||||||
import org.mariotaku.twidere.util.DataStoreUtils
|
import org.mariotaku.twidere.util.*
|
||||||
import org.mariotaku.twidere.util.ErrorInfoStore
|
|
||||||
import org.mariotaku.twidere.util.IntentUtils
|
|
||||||
import org.mariotaku.twidere.util.Utils
|
|
||||||
import org.mariotaku.twidere.view.ExtendedRecyclerView
|
import org.mariotaku.twidere.view.ExtendedRecyclerView
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -102,11 +100,11 @@ class MessagesEntriesFragment : AbsContentListRecyclerViewFragment<MessagesEntri
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
bus.register(this)
|
BusSingleton.register(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
bus.unregister(this)
|
BusSingleton.unregister(this)
|
||||||
super.onStop()
|
super.onStop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,7 +122,7 @@ class MessagesEntriesFragment : AbsContentListRecyclerViewFragment<MessagesEntri
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateAdapter(context: Context, requestManager: RequestManager): MessagesEntriesAdapter {
|
override fun onCreateAdapter(context: Context, requestManager: RequestManager): MessagesEntriesAdapter {
|
||||||
return MessagesEntriesAdapter(context, this.requestManager)
|
return MessagesEntriesAdapter(context, Glide.with(this))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun triggerRefresh(): Boolean {
|
override fun triggerRefresh(): Boolean {
|
||||||
|
@ -189,8 +187,7 @@ class MessagesEntriesFragment : AbsContentListRecyclerViewFragment<MessagesEntri
|
||||||
val conversation = adapter.getConversation(info.position)
|
val conversation = adapter.getConversation(info.position)
|
||||||
val inflater = MenuInflater(context)
|
val inflater = MenuInflater(context)
|
||||||
inflater.inflate(R.menu.context_message_entry, menu)
|
inflater.inflate(R.menu.context_message_entry, menu)
|
||||||
menu.setHeaderTitle(conversation.getTitle(context!!, userColorNameManager,
|
menu.setHeaderTitle(conversation.getTitle(context!!, UserColorNameManager.get(context!!)).first)
|
||||||
preferences[nameFirstKey]).first)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onContextItemSelected(item: MenuItem): Boolean {
|
override fun onContextItemSelected(item: MenuItem): Boolean {
|
||||||
|
@ -200,7 +197,7 @@ class MessagesEntriesFragment : AbsContentListRecyclerViewFragment<MessagesEntri
|
||||||
R.id.mark_read -> {
|
R.id.mark_read -> {
|
||||||
val conversation = adapter.getConversation(menuInfo.position)
|
val conversation = adapter.getConversation(menuInfo.position)
|
||||||
// TODO: Promise progress
|
// TODO: Promise progress
|
||||||
MessagePromises.getInstance(context!!).markRead(conversation.account_key, conversation.id)
|
MessagePromises.get(context!!).markRead(conversation.account_key, conversation.id)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,7 @@ import android.support.v7.app.AlertDialog
|
||||||
import android.support.v7.app.AlertDialog.Builder
|
import android.support.v7.app.AlertDialog.Builder
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import nl.komponents.kovenant.Promise
|
import nl.komponents.kovenant.Promise
|
||||||
import nl.komponents.kovenant.combine.and
|
import nl.komponents.kovenant.combine.and
|
||||||
import nl.komponents.kovenant.task
|
import nl.komponents.kovenant.task
|
||||||
|
@ -70,7 +71,7 @@ abstract class AbsStatusDialogFragment : BaseDialogFragment() {
|
||||||
|
|
||||||
builder.setupAlertDialog()
|
builder.setupAlertDialog()
|
||||||
|
|
||||||
adapter = DummyItemAdapter(context!!, requestManager = requestManager)
|
adapter = DummyItemAdapter(context!!, requestManager = Glide.with(this))
|
||||||
adapter.showCardActions = false
|
adapter.showCardActions = false
|
||||||
adapter.showAccountsColor = true
|
adapter.showAccountsColor = true
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,8 @@ import org.mariotaku.twidere.extension.status
|
||||||
import org.mariotaku.twidere.fragment.BaseDialogFragment
|
import org.mariotaku.twidere.fragment.BaseDialogFragment
|
||||||
import org.mariotaku.twidere.fragment.CreateUserBlockDialogFragment
|
import org.mariotaku.twidere.fragment.CreateUserBlockDialogFragment
|
||||||
import org.mariotaku.twidere.model.ParcelableStatus
|
import org.mariotaku.twidere.model.ParcelableStatus
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager.Companion
|
||||||
|
|
||||||
class BlockStatusUsersDialogFragment : BaseDialogFragment() {
|
class BlockStatusUsersDialogFragment : BaseDialogFragment() {
|
||||||
|
|
||||||
|
@ -41,9 +43,8 @@ class BlockStatusUsersDialogFragment : BaseDialogFragment() {
|
||||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||||
val builder = AlertDialog.Builder(context!!)
|
val builder = AlertDialog.Builder(context!!)
|
||||||
val referencedUsers = status.referencedUsers
|
val referencedUsers = status.referencedUsers
|
||||||
val nameFirst = preferences[nameFirstKey]
|
|
||||||
val displayNames = referencedUsers.map {
|
val displayNames = referencedUsers.map {
|
||||||
userColorNameManager.getDisplayName(it)
|
UserColorNameManager.get(context!!).getDisplayName(it)
|
||||||
}.toTypedArray()
|
}.toTypedArray()
|
||||||
builder.setTitle(R.string.action_status_block_users)
|
builder.setTitle(R.string.action_status_block_users)
|
||||||
builder.setItems(displayNames) { _, which ->
|
builder.setItems(displayNames) { _, which ->
|
||||||
|
|
|
@ -34,7 +34,7 @@ class DestroyStatusDialogFragment : AbsSimpleStatusOperationDialogFragment() {
|
||||||
get() = getString(R.string.destroy_status_confirm_message)
|
get() = getString(R.string.destroy_status_confirm_message)
|
||||||
|
|
||||||
override fun onPerformAction(status: ParcelableStatus) {
|
override fun onPerformAction(status: ParcelableStatus) {
|
||||||
StatusPromises.getInstance(context!!).destroy(status.account_key, status.id)
|
StatusPromises.get(context!!).destroy(status.account_key, status.id)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
|
@ -32,6 +32,8 @@ import org.mariotaku.twidere.extension.status
|
||||||
import org.mariotaku.twidere.fragment.BaseDialogFragment
|
import org.mariotaku.twidere.fragment.BaseDialogFragment
|
||||||
import org.mariotaku.twidere.fragment.CreateUserMuteDialogFragment
|
import org.mariotaku.twidere.fragment.CreateUserMuteDialogFragment
|
||||||
import org.mariotaku.twidere.model.ParcelableStatus
|
import org.mariotaku.twidere.model.ParcelableStatus
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager.Companion
|
||||||
|
|
||||||
class MuteStatusUsersDialogFragment : BaseDialogFragment() {
|
class MuteStatusUsersDialogFragment : BaseDialogFragment() {
|
||||||
|
|
||||||
|
@ -43,7 +45,7 @@ class MuteStatusUsersDialogFragment : BaseDialogFragment() {
|
||||||
val referencedUsers = status.referencedUsers
|
val referencedUsers = status.referencedUsers
|
||||||
val nameFirst = preferences[nameFirstKey]
|
val nameFirst = preferences[nameFirstKey]
|
||||||
val displayNames = referencedUsers.map {
|
val displayNames = referencedUsers.map {
|
||||||
userColorNameManager.getDisplayName(it)
|
UserColorNameManager.get(context!!).getDisplayName(it)
|
||||||
}.toTypedArray()
|
}.toTypedArray()
|
||||||
builder.setTitle(R.string.action_status_mute_users)
|
builder.setTitle(R.string.action_status_mute_users)
|
||||||
builder.setItems(displayNames) { _, which ->
|
builder.setItems(displayNames) { _, which ->
|
||||||
|
|
|
@ -41,6 +41,7 @@ import org.mariotaku.twidere.constant.quickSendKey
|
||||||
import org.mariotaku.twidere.extension.*
|
import org.mariotaku.twidere.extension.*
|
||||||
import org.mariotaku.twidere.extension.model.canRetweet
|
import org.mariotaku.twidere.extension.model.canRetweet
|
||||||
import org.mariotaku.twidere.extension.model.isAccountRetweet
|
import org.mariotaku.twidere.extension.model.isAccountRetweet
|
||||||
|
import org.mariotaku.twidere.extension.model.quoted
|
||||||
import org.mariotaku.twidere.fragment.BaseDialogFragment
|
import org.mariotaku.twidere.fragment.BaseDialogFragment
|
||||||
import org.mariotaku.twidere.model.*
|
import org.mariotaku.twidere.model.*
|
||||||
import org.mariotaku.twidere.model.draft.QuoteStatusActionExtras
|
import org.mariotaku.twidere.model.draft.QuoteStatusActionExtras
|
||||||
|
@ -108,7 +109,7 @@ class RetweetQuoteDialogFragment : AbsStatusDialogFragment() {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
quoteOriginal.visibility = if (status.retweet_id != null || status.quoted_id != null) {
|
quoteOriginal.visibility = if (status.retweet_id != null || status.attachment?.quoted?.id != null) {
|
||||||
View.VISIBLE
|
View.VISIBLE
|
||||||
} else {
|
} else {
|
||||||
View.GONE
|
View.GONE
|
||||||
|
@ -116,7 +117,7 @@ class RetweetQuoteDialogFragment : AbsStatusDialogFragment() {
|
||||||
|
|
||||||
getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener {
|
getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener {
|
||||||
if (!shouldQuoteRetweet(account) && status.isAccountRetweet) {
|
if (!shouldQuoteRetweet(account) && status.isAccountRetweet) {
|
||||||
StatusPromises.getInstance(context).cancelRetweet(account.key, status.id, status.my_retweet_id)
|
StatusPromises.get(context).cancelRetweet(account.key, status.id, status.my_retweet_id)
|
||||||
dismiss()
|
dismiss()
|
||||||
} else if (retweetOrQuote(account, status, showProtectedConfirm)) {
|
} else if (retweetOrQuote(account, status, showProtectedConfirm)) {
|
||||||
dismiss()
|
dismiss()
|
||||||
|
@ -213,12 +214,12 @@ class RetweetQuoteDialogFragment : AbsStatusDialogFragment() {
|
||||||
commentText = getString(R.string.fanfou_repost_format, editingComment,
|
commentText = getString(R.string.fanfou_repost_format, editingComment,
|
||||||
status.user_screen_name, status.text_plain)
|
status.user_screen_name, status.text_plain)
|
||||||
} else {
|
} else {
|
||||||
if (status.quoted_user_is_protected && showProtectedConfirmation) {
|
if (status.quoted?.user_is_protected == true && showProtectedConfirmation) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
commentText = getString(R.string.fanfou_repost_format, editingComment,
|
commentText = getString(R.string.fanfou_repost_format, editingComment,
|
||||||
status.quoted_user_screen_name, status.quoted_text_plain)
|
status.quoted?.user_screen_name, status.quoted?.text_plain)
|
||||||
update.repost_status_id = status.quoted_id
|
update.repost_status_id = status.quoted?.id
|
||||||
}
|
}
|
||||||
if (FanfouValidator.calculateLength(commentText) > FanfouValidator.textLimit) {
|
if (FanfouValidator.calculateLength(commentText) > FanfouValidator.textLimit) {
|
||||||
commentText = commentText.substring(0, Math.max(FanfouValidator.textLimit,
|
commentText = commentText.substring(0, Math.max(FanfouValidator.textLimit,
|
||||||
|
@ -229,7 +230,7 @@ class RetweetQuoteDialogFragment : AbsStatusDialogFragment() {
|
||||||
val statusLink = if (!status.is_quote || !quoteOriginalStatus) {
|
val statusLink = if (!status.is_quote || !quoteOriginalStatus) {
|
||||||
LinkCreator.getStatusWebLink(status)
|
LinkCreator.getStatusWebLink(status)
|
||||||
} else {
|
} else {
|
||||||
LinkCreator.getQuotedStatusWebLink(status)
|
LinkCreator.getQuotedStatusWebLink(status.quoted!!)
|
||||||
}
|
}
|
||||||
update.attachment_url = statusLink?.toString()
|
update.attachment_url = statusLink?.toString()
|
||||||
commentText = editingComment
|
commentText = editingComment
|
||||||
|
|
|
@ -67,6 +67,7 @@ import org.mariotaku.twidere.extension.*
|
||||||
import org.mariotaku.twidere.extension.data.observe
|
import org.mariotaku.twidere.extension.data.observe
|
||||||
import org.mariotaku.twidere.extension.model.newMicroBlogInstance
|
import org.mariotaku.twidere.extension.model.newMicroBlogInstance
|
||||||
import org.mariotaku.twidere.extension.model.originalId
|
import org.mariotaku.twidere.extension.model.originalId
|
||||||
|
import org.mariotaku.twidere.extension.model.quoted
|
||||||
import org.mariotaku.twidere.extension.view.calculateSpaceItemHeight
|
import org.mariotaku.twidere.extension.view.calculateSpaceItemHeight
|
||||||
import org.mariotaku.twidere.fragment.BaseDialogFragment
|
import org.mariotaku.twidere.fragment.BaseDialogFragment
|
||||||
import org.mariotaku.twidere.fragment.BaseFragment
|
import org.mariotaku.twidere.fragment.BaseFragment
|
||||||
|
@ -78,11 +79,13 @@ import org.mariotaku.twidere.model.event.FavoriteTaskEvent
|
||||||
import org.mariotaku.twidere.model.event.StatusListChangedEvent
|
import org.mariotaku.twidere.model.event.StatusListChangedEvent
|
||||||
import org.mariotaku.twidere.model.pagination.Pagination
|
import org.mariotaku.twidere.model.pagination.Pagination
|
||||||
import org.mariotaku.twidere.model.pagination.SinceMaxPagination
|
import org.mariotaku.twidere.model.pagination.SinceMaxPagination
|
||||||
|
import org.mariotaku.twidere.singleton.BusSingleton
|
||||||
import org.mariotaku.twidere.task.AbsAccountRequestTask
|
import org.mariotaku.twidere.task.AbsAccountRequestTask
|
||||||
import org.mariotaku.twidere.util.*
|
import org.mariotaku.twidere.util.*
|
||||||
import org.mariotaku.twidere.util.ContentScrollHandler.ContentListSupport
|
import org.mariotaku.twidere.util.ContentScrollHandler.ContentListSupport
|
||||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback
|
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback
|
||||||
import org.mariotaku.twidere.util.RecyclerViewScrollHandler.RecyclerViewCallback
|
import org.mariotaku.twidere.util.RecyclerViewScrollHandler.RecyclerViewCallback
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager.Companion
|
||||||
import org.mariotaku.twidere.view.CardMediaContainer.OnMediaClickListener
|
import org.mariotaku.twidere.view.CardMediaContainer.OnMediaClickListener
|
||||||
import org.mariotaku.twidere.view.ExtendedRecyclerView
|
import org.mariotaku.twidere.view.ExtendedRecyclerView
|
||||||
import org.mariotaku.twidere.view.holder.GapViewHolder
|
import org.mariotaku.twidere.view.holder.GapViewHolder
|
||||||
|
@ -160,16 +163,15 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
|
||||||
private lateinit var statusActivitySummaryLiveData: StatusActivitySummaryLiveData
|
private lateinit var statusActivitySummaryLiveData: StatusActivitySummaryLiveData
|
||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||||
val activity = activity ?: return
|
|
||||||
when (requestCode) {
|
when (requestCode) {
|
||||||
REQUEST_SET_COLOR -> {
|
REQUEST_SET_COLOR -> {
|
||||||
val status = adapter.status ?: return
|
val status = adapter.status ?: return
|
||||||
if (resultCode == Activity.RESULT_OK) {
|
if (resultCode == Activity.RESULT_OK) {
|
||||||
if (data == null) return
|
if (data == null) return
|
||||||
val color = data.getIntExtra(EXTRA_COLOR, Color.TRANSPARENT)
|
val color = data.getIntExtra(EXTRA_COLOR, Color.TRANSPARENT)
|
||||||
userColorNameManager.setUserColor(status.user_key, color)
|
UserColorNameManager.get(context!!).setUserColor(status.user_key, color)
|
||||||
} else if (resultCode == ColorPickerDialogActivity.RESULT_CLEARED) {
|
} else if (resultCode == ColorPickerDialogActivity.RESULT_CLEARED) {
|
||||||
userColorNameManager.clearUserColor(status.user_key)
|
UserColorNameManager.get(context!!).clearUserColor(status.user_key)
|
||||||
}
|
}
|
||||||
loaderManager.restartLoader(LOADER_ID_DETAIL_STATUS, arguments, this)
|
loaderManager.restartLoader(LOADER_ID_DETAIL_STATUS, arguments, this)
|
||||||
}
|
}
|
||||||
|
@ -231,7 +233,7 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
|
||||||
|
|
||||||
override fun onQuotedMediaClick(holder: IStatusViewHolder, view: View, current: ParcelableMedia, statusPosition: Int) {
|
override fun onQuotedMediaClick(holder: IStatusViewHolder, view: View, current: ParcelableMedia, statusPosition: Int) {
|
||||||
val status = adapter.getStatus(statusPosition)
|
val status = adapter.getStatus(statusPosition)
|
||||||
val quotedMedia = status.quoted_media ?: return
|
val quotedMedia = status.quoted?.media ?: return
|
||||||
IntentUtils.openMedia(activity!!, status.account_key, status.is_possibly_sensitive, status,
|
IntentUtils.openMedia(activity!!, status.account_key, status.is_possibly_sensitive, status,
|
||||||
current, quotedMedia, preferences[newDocumentApiKey],
|
current, quotedMedia, preferences[newDocumentApiKey],
|
||||||
preferences[displaySensitiveContentsKey])
|
preferences[displaySensitiveContentsKey])
|
||||||
|
@ -258,7 +260,7 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
|
||||||
|
|
||||||
override fun onQuotedStatusClick(holder: IStatusViewHolder, position: Int) {
|
override fun onQuotedStatusClick(holder: IStatusViewHolder, position: Int) {
|
||||||
val status = adapter.getStatus(position)
|
val status = adapter.getStatus(position)
|
||||||
val quotedId = status.quoted_id ?: return
|
val quotedId = status.quoted?.id ?: return
|
||||||
IntentUtils.openStatus(activity!!, status.account_key, quotedId)
|
IntentUtils.openStatus(activity!!, status.account_key, quotedId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -281,11 +283,11 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
|
||||||
|
|
||||||
override fun onMediaClick(view: View, current: ParcelableMedia, accountKey: UserKey?, id: Long) {
|
override fun onMediaClick(view: View, current: ParcelableMedia, accountKey: UserKey?, id: Long) {
|
||||||
val status = adapter.status ?: return
|
val status = adapter.status ?: return
|
||||||
if ((view.parent as View).id == R.id.quotedMediaPreview && status.quoted_media != null) {
|
if ((view.parent as View).id == R.id.quotedMediaPreview && status.attachment?.quoted?.media != null) {
|
||||||
IntentUtils.openMediaDirectly(activity!!, accountKey, status.quoted_media!!, current,
|
IntentUtils.openMediaDirectly(activity!!, accountKey, status.attachment?.quoted?.media!!, current,
|
||||||
newDocument = preferences[newDocumentApiKey], status = status)
|
newDocument = preferences[newDocumentApiKey], status = status)
|
||||||
} else if (status.media != null) {
|
} else if (status.attachment?.media != null) {
|
||||||
IntentUtils.openMediaDirectly(activity!!, accountKey, status.media!!, current,
|
IntentUtils.openMediaDirectly(activity!!, accountKey, status.attachment?.media!!, current,
|
||||||
newDocument = preferences[newDocumentApiKey], status = status)
|
newDocument = preferences[newDocumentApiKey], status = status)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -503,7 +505,7 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
bus.register(this)
|
BusSingleton.register(this)
|
||||||
recyclerView.addOnScrollListener(scrollListener)
|
recyclerView.addOnScrollListener(scrollListener)
|
||||||
recyclerView.setOnTouchListener(scrollListener.touchListener)
|
recyclerView.setOnTouchListener(scrollListener.touchListener)
|
||||||
}
|
}
|
||||||
|
@ -511,7 +513,7 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
recyclerView.setOnTouchListener(null)
|
recyclerView.setOnTouchListener(null)
|
||||||
recyclerView.removeOnScrollListener(scrollListener)
|
recyclerView.removeOnScrollListener(scrollListener)
|
||||||
bus.unregister(this)
|
BusSingleton.unregister(this)
|
||||||
super.onStop()
|
super.onStop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -521,7 +523,7 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
|
||||||
val status = adapter.getStatus(contextMenuInfo.position)
|
val status = adapter.getStatus(contextMenuInfo.position)
|
||||||
val inflater = MenuInflater(context)
|
val inflater = MenuInflater(context)
|
||||||
inflater.inflate(R.menu.action_status, menu)
|
inflater.inflate(R.menu.action_status, menu)
|
||||||
MenuUtils.setupForStatus(context!!, menu, preferences, userColorNameManager, status)
|
MenuUtils.setupForStatus(context!!, menu, preferences, UserColorNameManager.get(context!!), status)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onContextItemSelected(item: MenuItem): Boolean {
|
override fun onContextItemSelected(item: MenuItem): Boolean {
|
||||||
|
@ -536,7 +538,7 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return MenuUtils.handleStatusClick(activity!!, this, fragmentManager!!,
|
return MenuUtils.handleStatusClick(activity!!, this, fragmentManager!!,
|
||||||
preferences, userColorNameManager, status, item)
|
preferences, UserColorNameManager.get(context!!), status, item)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
|
|
|
@ -12,12 +12,10 @@ import nl.komponents.kovenant.ui.alwaysUi
|
||||||
import org.mariotaku.ktextension.toWeak
|
import org.mariotaku.ktextension.toWeak
|
||||||
import org.mariotaku.twidere.R
|
import org.mariotaku.twidere.R
|
||||||
import org.mariotaku.twidere.TwidereConstants.SYNC_PREFERENCES_NAME
|
import org.mariotaku.twidere.TwidereConstants.SYNC_PREFERENCES_NAME
|
||||||
import org.mariotaku.twidere.extension.applyTheme
|
import org.mariotaku.twidere.extension.*
|
||||||
import org.mariotaku.twidere.extension.dismissProgressDialog
|
|
||||||
import org.mariotaku.twidere.extension.onShow
|
|
||||||
import org.mariotaku.twidere.extension.showProgressDialog
|
|
||||||
import org.mariotaku.twidere.fragment.BaseDialogFragment
|
import org.mariotaku.twidere.fragment.BaseDialogFragment
|
||||||
import org.mariotaku.twidere.fragment.BasePreferenceFragment
|
import org.mariotaku.twidere.fragment.BasePreferenceFragment
|
||||||
|
import org.mariotaku.twidere.singleton.BusSingleton
|
||||||
import org.mariotaku.twidere.util.TaskServiceRunner
|
import org.mariotaku.twidere.util.TaskServiceRunner
|
||||||
|
|
||||||
class SyncSettingsFragment : BasePreferenceFragment() {
|
class SyncSettingsFragment : BasePreferenceFragment() {
|
||||||
|
@ -29,11 +27,11 @@ class SyncSettingsFragment : BasePreferenceFragment() {
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
bus.register(this)
|
BusSingleton.register(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
bus.unregister(this)
|
BusSingleton.unregister(this)
|
||||||
super.onStop()
|
super.onStop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -69,6 +69,7 @@ import org.mariotaku.twidere.data.fetcher.StatusesFetcher
|
||||||
import org.mariotaku.twidere.extension.*
|
import org.mariotaku.twidere.extension.*
|
||||||
import org.mariotaku.twidere.extension.adapter.removeStatuses
|
import org.mariotaku.twidere.extension.adapter.removeStatuses
|
||||||
import org.mariotaku.twidere.extension.data.observe
|
import org.mariotaku.twidere.extension.data.observe
|
||||||
|
import org.mariotaku.twidere.extension.model.quoted
|
||||||
import org.mariotaku.twidere.extension.view.PositionWithOffset
|
import org.mariotaku.twidere.extension.view.PositionWithOffset
|
||||||
import org.mariotaku.twidere.extension.view.firstVisibleItemPosition
|
import org.mariotaku.twidere.extension.view.firstVisibleItemPosition
|
||||||
import org.mariotaku.twidere.extension.view.firstVisibleItemPositionWithOffset
|
import org.mariotaku.twidere.extension.view.firstVisibleItemPositionWithOffset
|
||||||
|
@ -91,9 +92,11 @@ import org.mariotaku.twidere.model.tab.extra.TimelineTabExtras
|
||||||
import org.mariotaku.twidere.model.timeline.TimelineFilter
|
import org.mariotaku.twidere.model.timeline.TimelineFilter
|
||||||
import org.mariotaku.twidere.promise.StatusPromises
|
import org.mariotaku.twidere.promise.StatusPromises
|
||||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
||||||
|
import org.mariotaku.twidere.singleton.BusSingleton
|
||||||
import org.mariotaku.twidere.task.CreateFavoriteTask
|
import org.mariotaku.twidere.task.CreateFavoriteTask
|
||||||
import org.mariotaku.twidere.task.statuses.GetStatusesTask
|
import org.mariotaku.twidere.task.statuses.GetStatusesTask
|
||||||
import org.mariotaku.twidere.util.*
|
import org.mariotaku.twidere.util.*
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager.Companion
|
||||||
import org.mariotaku.twidere.view.ExtendedRecyclerView
|
import org.mariotaku.twidere.view.ExtendedRecyclerView
|
||||||
import org.mariotaku.twidere.view.holder.GapViewHolder
|
import org.mariotaku.twidere.view.holder.GapViewHolder
|
||||||
import org.mariotaku.twidere.view.holder.TimelineFilterHeaderViewHolder
|
import org.mariotaku.twidere.view.holder.TimelineFilterHeaderViewHolder
|
||||||
|
@ -174,11 +177,11 @@ abstract class AbsTimelineFragment : AbsContentRecyclerViewFragment<ParcelableSt
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
recyclerView.addOnScrollListener(scrollHandler)
|
recyclerView.addOnScrollListener(scrollHandler)
|
||||||
bus.register(busEventHandler)
|
BusSingleton.register(busEventHandler)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
bus.unregister(busEventHandler)
|
BusSingleton.unregister(busEventHandler)
|
||||||
recyclerView.removeOnScrollListener(scrollHandler)
|
recyclerView.removeOnScrollListener(scrollHandler)
|
||||||
if (userVisibleHint) {
|
if (userVisibleHint) {
|
||||||
saveReadPosition(layoutManager.firstVisibleItemPosition)
|
saveReadPosition(layoutManager.firstVisibleItemPosition)
|
||||||
|
@ -215,7 +218,7 @@ abstract class AbsTimelineFragment : AbsContentRecyclerViewFragment<ParcelableSt
|
||||||
val contextMenuInfo = menuInfo as ExtendedRecyclerView.ContextMenuInfo
|
val contextMenuInfo = menuInfo as ExtendedRecyclerView.ContextMenuInfo
|
||||||
val status = adapter.getStatus(contextMenuInfo.position)
|
val status = adapter.getStatus(contextMenuInfo.position)
|
||||||
inflater.inflate(R.menu.action_status, menu)
|
inflater.inflate(R.menu.action_status, menu)
|
||||||
MenuUtils.setupForStatus(context, menu, preferences, userColorNameManager, status)
|
MenuUtils.setupForStatus(context, menu, preferences, UserColorNameManager.get(this.context!!), status)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onContextItemSelected(item: MenuItem): Boolean {
|
override fun onContextItemSelected(item: MenuItem): Boolean {
|
||||||
|
@ -240,7 +243,7 @@ abstract class AbsTimelineFragment : AbsContentRecyclerViewFragment<ParcelableSt
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
else -> return MenuUtils.handleStatusClick(context, this, fragmentManager!!,
|
else -> return MenuUtils.handleStatusClick(context, this, fragmentManager!!,
|
||||||
preferences, userColorNameManager, status, item)
|
preferences, UserColorNameManager.get(this.context!!), status, item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -570,7 +573,7 @@ abstract class AbsTimelineFragment : AbsContentRecyclerViewFragment<ParcelableSt
|
||||||
override fun onQuotedMediaClick(holder: IStatusViewHolder, view: View, current: ParcelableMedia, statusPosition: Int) {
|
override fun onQuotedMediaClick(holder: IStatusViewHolder, view: View, current: ParcelableMedia, statusPosition: Int) {
|
||||||
val context = context ?: return
|
val context = context ?: return
|
||||||
val status = getFullStatus(statusPosition)
|
val status = getFullStatus(statusPosition)
|
||||||
val quotedMedia = status.quoted_media ?: return
|
val quotedMedia = status.quoted?.media ?: return
|
||||||
IntentUtils.openMedia(context, status.account_key, status.is_possibly_sensitive, status,
|
IntentUtils.openMedia(context, status.account_key, status.is_possibly_sensitive, status,
|
||||||
current, quotedMedia, preferences[newDocumentApiKey], preferences[displaySensitiveContentsKey])
|
current, quotedMedia, preferences[newDocumentApiKey], preferences[displaySensitiveContentsKey])
|
||||||
}
|
}
|
||||||
|
@ -578,7 +581,7 @@ abstract class AbsTimelineFragment : AbsContentRecyclerViewFragment<ParcelableSt
|
||||||
override fun onQuotedStatusClick(holder: IStatusViewHolder, position: Int) {
|
override fun onQuotedStatusClick(holder: IStatusViewHolder, position: Int) {
|
||||||
val context = context ?: return
|
val context = context ?: return
|
||||||
val status = getFullStatus(position)
|
val status = getFullStatus(position)
|
||||||
val quotedId = status.quoted_id ?: return
|
val quotedId = status.quoted?.id ?: return
|
||||||
IntentUtils.openStatus(context, status.account_key, quotedId)
|
IntentUtils.openStatus(context, status.account_key, quotedId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -69,10 +69,9 @@ import org.mariotaku.twidere.model.UserKey
|
||||||
import org.mariotaku.twidere.model.event.UserListSubscriptionEvent
|
import org.mariotaku.twidere.model.event.UserListSubscriptionEvent
|
||||||
import org.mariotaku.twidere.model.event.UserListUpdatedEvent
|
import org.mariotaku.twidere.model.event.UserListUpdatedEvent
|
||||||
import org.mariotaku.twidere.promise.UserListPromises
|
import org.mariotaku.twidere.promise.UserListPromises
|
||||||
import org.mariotaku.twidere.util.IntentUtils
|
import org.mariotaku.twidere.singleton.BusSingleton
|
||||||
import org.mariotaku.twidere.util.LinkCreator
|
import org.mariotaku.twidere.util.*
|
||||||
import org.mariotaku.twidere.util.MenuUtils
|
import org.mariotaku.twidere.util.UserColorNameManager.Companion
|
||||||
import org.mariotaku.twidere.util.Utils
|
|
||||||
import org.mariotaku.twidere.util.shortcut.ShortcutCreator
|
import org.mariotaku.twidere.util.shortcut.ShortcutCreator
|
||||||
|
|
||||||
class UserListFragment : AbsToolbarTabPagesFragment(), OnClickListener,
|
class UserListFragment : AbsToolbarTabPagesFragment(), OnClickListener,
|
||||||
|
@ -100,11 +99,11 @@ class UserListFragment : AbsToolbarTabPagesFragment(), OnClickListener,
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
bus.register(this)
|
BusSingleton.register(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
bus.unregister(this)
|
BusSingleton.unregister(this)
|
||||||
super.onStop()
|
super.onStop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -401,7 +400,7 @@ class UserListFragment : AbsToolbarTabPagesFragment(), OnClickListener,
|
||||||
messageBuilder.append('\n')
|
messageBuilder.append('\n')
|
||||||
}
|
}
|
||||||
messageBuilder.append(getString(R.string.label_created_by_name,
|
messageBuilder.append(getString(R.string.label_created_by_name,
|
||||||
userColorNameManager.getDisplayName(userList)))
|
UserColorNameManager.get(context!!).getDisplayName(userList)))
|
||||||
val builder = AlertDialog.Builder(context!!)
|
val builder = AlertDialog.Builder(context!!)
|
||||||
builder.setTitle(userList.name)
|
builder.setTitle(userList.name)
|
||||||
builder.setMessage(messageBuilder)
|
builder.setMessage(messageBuilder)
|
||||||
|
|
|
@ -29,12 +29,14 @@ import com.squareup.otto.Subscribe
|
||||||
import org.mariotaku.ktextension.setItemAvailability
|
import org.mariotaku.ktextension.setItemAvailability
|
||||||
import org.mariotaku.twidere.R
|
import org.mariotaku.twidere.R
|
||||||
import org.mariotaku.twidere.constant.IntentConstants.*
|
import org.mariotaku.twidere.constant.IntentConstants.*
|
||||||
|
import org.mariotaku.twidere.extension.get
|
||||||
import org.mariotaku.twidere.fragment.CreateUserListDialogFragment
|
import org.mariotaku.twidere.fragment.CreateUserListDialogFragment
|
||||||
import org.mariotaku.twidere.fragment.ParcelableUserListsFragment
|
import org.mariotaku.twidere.fragment.ParcelableUserListsFragment
|
||||||
import org.mariotaku.twidere.loader.userlists.UserListOwnershipsLoader
|
import org.mariotaku.twidere.loader.userlists.UserListOwnershipsLoader
|
||||||
import org.mariotaku.twidere.model.ParcelableUserList
|
import org.mariotaku.twidere.model.ParcelableUserList
|
||||||
import org.mariotaku.twidere.model.UserKey
|
import org.mariotaku.twidere.model.UserKey
|
||||||
import org.mariotaku.twidere.model.event.UserListDestroyedEvent
|
import org.mariotaku.twidere.model.event.UserListDestroyedEvent
|
||||||
|
import org.mariotaku.twidere.singleton.BusSingleton
|
||||||
import org.mariotaku.twidere.util.Utils
|
import org.mariotaku.twidere.util.Utils
|
||||||
|
|
||||||
class UserListsOwnershipsFragment : ParcelableUserListsFragment() {
|
class UserListsOwnershipsFragment : ParcelableUserListsFragment() {
|
||||||
|
@ -91,11 +93,11 @@ class UserListsOwnershipsFragment : ParcelableUserListsFragment() {
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
bus.register(this)
|
BusSingleton.register(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
bus.unregister(this)
|
BusSingleton.unregister(this)
|
||||||
super.onStop()
|
super.onStop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,13 +63,13 @@ class IncomingFriendshipsFragment : AbsUsersFragment(), IUsersAdapter.RequestCli
|
||||||
override fun onAcceptClicked(holder: UserViewHolder, position: Int) {
|
override fun onAcceptClicked(holder: UserViewHolder, position: Int) {
|
||||||
val user = adapter.getUser(position) ?: return
|
val user = adapter.getUser(position) ?: return
|
||||||
val accountKey = user.account_key ?: return
|
val accountKey = user.account_key ?: return
|
||||||
FriendshipPromises.getInstance(context!!).accept(accountKey, user.key)
|
FriendshipPromises.get(context!!).accept(accountKey, user.key)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDenyClicked(holder: UserViewHolder, position: Int) {
|
override fun onDenyClicked(holder: UserViewHolder, position: Int) {
|
||||||
val user = adapter.getUser(position) ?: return
|
val user = adapter.getUser(position) ?: return
|
||||||
val accountKey = user.account_key ?: return
|
val accountKey = user.account_key ?: return
|
||||||
FriendshipPromises.getInstance(context!!).deny(accountKey, user.key)
|
FriendshipPromises.get(context!!).deny(accountKey, user.key)
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("SwitchIntDef")
|
@SuppressLint("SwitchIntDef")
|
||||||
|
|
|
@ -29,15 +29,17 @@ import kotlinx.android.synthetic.main.fragment_content_recyclerview.*
|
||||||
import org.mariotaku.twidere.R
|
import org.mariotaku.twidere.R
|
||||||
import org.mariotaku.twidere.constant.IntentConstants.*
|
import org.mariotaku.twidere.constant.IntentConstants.*
|
||||||
import org.mariotaku.twidere.data.fetcher.UsersFetcher
|
import org.mariotaku.twidere.data.fetcher.UsersFetcher
|
||||||
|
import org.mariotaku.twidere.data.fetcher.users.UserListMembersFetcher
|
||||||
import org.mariotaku.twidere.extension.*
|
import org.mariotaku.twidere.extension.*
|
||||||
import org.mariotaku.twidere.fragment.AbsUsersFragment
|
import org.mariotaku.twidere.fragment.AbsUsersFragment
|
||||||
import org.mariotaku.twidere.fragment.DeleteUserListMembersDialogFragment
|
import org.mariotaku.twidere.fragment.DeleteUserListMembersDialogFragment
|
||||||
import org.mariotaku.twidere.fragment.userlist.UserListFragment
|
import org.mariotaku.twidere.fragment.userlist.UserListFragment
|
||||||
import org.mariotaku.twidere.data.fetcher.users.UserListMembersFetcher
|
|
||||||
import org.mariotaku.twidere.model.ParcelableUserList
|
import org.mariotaku.twidere.model.ParcelableUserList
|
||||||
import org.mariotaku.twidere.model.UserKey
|
import org.mariotaku.twidere.model.UserKey
|
||||||
import org.mariotaku.twidere.model.event.UserListMembersChangedEvent
|
import org.mariotaku.twidere.model.event.UserListMembersChangedEvent
|
||||||
import org.mariotaku.twidere.model.util.ParcelableUserListUtils
|
import org.mariotaku.twidere.model.util.ParcelableUserListUtils
|
||||||
|
import org.mariotaku.twidere.singleton.BusSingleton
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager
|
||||||
import org.mariotaku.twidere.view.ExtendedRecyclerView
|
import org.mariotaku.twidere.view.ExtendedRecyclerView
|
||||||
import org.mariotaku.twidere.view.holder.UserViewHolder
|
import org.mariotaku.twidere.view.holder.UserViewHolder
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
@ -71,11 +73,11 @@ class UserListMembersFragment : AbsUsersFragment() {
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
bus.register(this)
|
BusSingleton.register(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
bus.unregister(this)
|
BusSingleton.unregister(this)
|
||||||
super.onStop()
|
super.onStop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,16 +100,16 @@ class UserListMembersFragment : AbsUsersFragment() {
|
||||||
if (accountKey != userKey) return
|
if (accountKey != userKey) return
|
||||||
val inflater = MenuInflater(context)
|
val inflater = MenuInflater(context)
|
||||||
val contextMenuInfo = menuInfo as ExtendedRecyclerView.ContextMenuInfo?
|
val contextMenuInfo = menuInfo as ExtendedRecyclerView.ContextMenuInfo?
|
||||||
val user = adapter.getUser(contextMenuInfo!!.position) ?: return
|
val user = adapter.getUser(contextMenuInfo!!.position)
|
||||||
inflater.inflate(R.menu.action_user_list_member, menu)
|
inflater.inflate(R.menu.action_user_list_member, menu)
|
||||||
menu.setHeaderTitle(userColorNameManager.getDisplayName(user))
|
menu.setHeaderTitle(UserColorNameManager.get(context!!).getDisplayName(user))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onContextItemSelected(item: MenuItem): Boolean {
|
override fun onContextItemSelected(item: MenuItem): Boolean {
|
||||||
if (!userVisibleHint) return false
|
if (!userVisibleHint) return false
|
||||||
val userList = userList ?: return false
|
val userList = userList ?: return false
|
||||||
val contextMenuInfo = item.menuInfo as ExtendedRecyclerView.ContextMenuInfo
|
val contextMenuInfo = item.menuInfo as ExtendedRecyclerView.ContextMenuInfo
|
||||||
val user = adapter.getUser(contextMenuInfo.position) ?: return false
|
val user = adapter.getUser(contextMenuInfo.position)
|
||||||
when (item.itemId) {
|
when (item.itemId) {
|
||||||
R.id.delete_from_list -> {
|
R.id.delete_from_list -> {
|
||||||
DeleteUserListMembersDialogFragment.show(fragmentManager!!, userList, user)
|
DeleteUserListMembersDialogFragment.show(fragmentManager!!, userList, user)
|
||||||
|
|
|
@ -3,7 +3,6 @@ package org.mariotaku.twidere.loader
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
||||||
import org.mariotaku.twidere.data.fetcher.users.UserSearchFetcher
|
import org.mariotaku.twidere.data.fetcher.users.UserSearchFetcher
|
||||||
import org.mariotaku.twidere.extension.get
|
|
||||||
import org.mariotaku.twidere.model.UserKey
|
import org.mariotaku.twidere.model.UserKey
|
||||||
import org.mariotaku.twidere.util.UserColorNameManager
|
import org.mariotaku.twidere.util.UserColorNameManager
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
@ -17,6 +16,7 @@ class CacheUserSearchLoader(
|
||||||
fromUser: Boolean
|
fromUser: Boolean
|
||||||
) : UserSearchFetcher(query) {
|
) : UserSearchFetcher(query) {
|
||||||
@Inject
|
@Inject
|
||||||
|
@Deprecated(message = "Deprecated", replaceWith = ReplaceWith("UserColorNameManager.get(context!!)", imports = ["org.mariotaku.twidere.util.UserColorNameManager"]))
|
||||||
internal lateinit var userColorNameManager: UserColorNameManager
|
internal lateinit var userColorNameManager: UserColorNameManager
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue