parent
d04d8576a8
commit
05f215b8b2
17
build.gradle
17
build.gradle
|
@ -35,7 +35,7 @@ allprojects {
|
|||
subprojects {
|
||||
buildscript {
|
||||
ext {
|
||||
kotlinVersion = '1.2.30'
|
||||
kotlinVersion = '1.2.31'
|
||||
pluginVersions = [
|
||||
AndroidSvgDrawable: '3.0.0',
|
||||
PlayServices : '3.1.1',
|
||||
|
@ -53,7 +53,7 @@ subprojects {
|
|||
MapsUtils : '0.5',
|
||||
DropboxCoreSdk : '3.0.3',
|
||||
GoogleDriveApi : 'v3-rev81-1.22.0',
|
||||
Exoplayer : 'r2.5.4',
|
||||
Exoplayer : '2.6.0',
|
||||
Toro : '2.1.0',
|
||||
LoganSquare : '1.3.7',
|
||||
Mime4J : '0.7.2',
|
||||
|
@ -66,24 +66,23 @@ subprojects {
|
|||
MultiValueSwitch : '0.9.8',
|
||||
PickNCrop : '0.9.27',
|
||||
AndroidGIFDrawable : '1.2.6',
|
||||
KPreferences : '0.9.7',
|
||||
KPreferences : '0.9.8',
|
||||
Kovenant : '3.3.0',
|
||||
ParcelablePlease : '1.0.2',
|
||||
Chameleon : '0.9.26',
|
||||
UniqR : '0.9.6',
|
||||
UniqR : '0.9.10',
|
||||
SQLiteQB : '0.9.18',
|
||||
Glide : '3.7.0',
|
||||
GlideOkHttp3 : '1.4.0',
|
||||
GlideTransformations : '2.0.2',
|
||||
Glide : '4.6.1',
|
||||
GlideOkHttp3 : '4.6.1',
|
||||
AndroidImageCropper : '2.4.6',
|
||||
ExportablePreferences : '0.9.7',
|
||||
ACRA : '4.9.2',
|
||||
AbstractTask : '0.9.8',
|
||||
Dagger : '2.11',
|
||||
StethoBeanShellREPL : '0.3',
|
||||
ArchLifecycleExtensions: '1.1.0',
|
||||
ArchLifecycleExtensions: '1.1.1',
|
||||
ArchPaging : '1.0.0-alpha6',
|
||||
ConstraintLayout : '1.1.0-beta5',
|
||||
ConstraintLayout : '1.1.0-beta6',
|
||||
MessageBubbleView : '2.1',
|
||||
]
|
||||
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
|
||||
package org.mariotaku.microblog.library.model.mastodon;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import com.bluelinelabs.logansquare.annotation.JsonField;
|
||||
import com.bluelinelabs.logansquare.annotation.JsonObject;
|
||||
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}
|
||||
*
|
||||
* <p>
|
||||
* Created by mariotaku on 2017/4/17.
|
||||
*/
|
||||
@JsonObject
|
||||
|
@ -107,6 +109,12 @@ public class Account {
|
|||
*/
|
||||
@JsonField(name = "header_static")
|
||||
String headerStatic;
|
||||
/**
|
||||
* If the owner decided to switch accounts, new account is in this attribute
|
||||
*/
|
||||
@JsonField(name = "moved")
|
||||
@Nullable
|
||||
Account moved;
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
|
@ -168,6 +176,11 @@ public class Account {
|
|||
return headerStatic;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Account getMoved() {
|
||||
return moved;
|
||||
}
|
||||
|
||||
@OnJsonParseComplete
|
||||
void onJsonParseComplete() throws IOException {
|
||||
if (id == null) {
|
||||
|
@ -196,6 +209,7 @@ public class Account {
|
|||
", avatarStatic='" + avatarStatic + '\'' +
|
||||
", header='" + header + '\'' +
|
||||
", headerStatic='" + headerStatic + '\'' +
|
||||
", moved=" + moved +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -147,20 +147,20 @@ public class ParcelableActivity extends ParcelableStatus implements Parcelable {
|
|||
", max_position='" + max_position + '\'' +
|
||||
", min_position='" + min_position + '\'' +
|
||||
", source_keys=" + Arrays.toString(source_keys) +
|
||||
", _id=" + _id +
|
||||
", sources=" + Arrays.toString(sources) +
|
||||
", id='" + id + '\'' +
|
||||
", _id=" + _id +
|
||||
", targets=" + targets +
|
||||
", account_key=" + account_key +
|
||||
", id='" + id + '\'' +
|
||||
", target_objects=" + target_objects +
|
||||
", account_key=" + account_key +
|
||||
", sources_lite=" + Arrays.toString(sources_lite) +
|
||||
", sort_id=" + sort_id +
|
||||
", position_key=" + position_key +
|
||||
", sources_lite=" + Arrays.toString(sources_lite) +
|
||||
", timestamp=" + timestamp +
|
||||
", summary_line=" + Arrays.toString(summary_line) +
|
||||
", timestamp=" + timestamp +
|
||||
", has_following_source=" + has_following_source +
|
||||
", user_key=" + user_key +
|
||||
", after_filtered_sources=" + Arrays.toString(after_filtered_sources) +
|
||||
", user_key=" + user_key +
|
||||
", retweet_id='" + retweet_id + '\'' +
|
||||
", retweeted_by_user_key=" + retweeted_by_user_key +
|
||||
", 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_user_key=" + in_reply_to_user_key +
|
||||
", 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_retweet=" + is_retweet +
|
||||
", retweeted=" + retweeted +
|
||||
|
@ -182,8 +179,6 @@ public class ParcelableActivity extends ParcelableStatus implements Parcelable {
|
|||
", user_is_protected=" + user_is_protected +
|
||||
", user_is_verified=" + user_is_verified +
|
||||
", 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_screen_name='" + retweeted_by_user_screen_name + '\'' +
|
||||
", 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 + '\'' +
|
||||
", text_unescaped='" + text_unescaped + '\'' +
|
||||
", 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 +
|
||||
", place_full_name='" + place_full_name + '\'' +
|
||||
", mentions=" + Arrays.toString(mentions) +
|
||||
", media=" + Arrays.toString(media) +
|
||||
", quoted_media=" + Arrays.toString(quoted_media) +
|
||||
", card=" + card +
|
||||
", attachment=" + attachment +
|
||||
", extras=" + extras +
|
||||
", spans=" + Arrays.toString(spans) +
|
||||
", quoted_spans=" + Arrays.toString(quoted_spans) +
|
||||
", account_color=" + account_color +
|
||||
", filter_flags=" + filter_flags +
|
||||
", filter_users=" + Arrays.toString(filter_users) +
|
||||
|
|
|
@ -145,19 +145,6 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
|||
@CursorField(Statuses.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")
|
||||
@CursorField(Statuses.IS_GAP)
|
||||
public boolean is_gap;
|
||||
|
@ -194,14 +181,6 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
|||
@CursorField(Statuses.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")
|
||||
@CursorField(Statuses.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")
|
||||
@CursorField(Statuses.TEXT_UNESCAPED)
|
||||
public String text_unescaped;
|
||||
@Nullable
|
||||
|
||||
@Nullable
|
||||
@JsonField(name = "card_name")
|
||||
@CursorField(Statuses.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")
|
||||
@CursorField(value = Statuses.LOCATION, converter = ParcelableLocation.Converter.class)
|
||||
@Nullable
|
||||
|
@ -295,22 +250,9 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
|||
@CursorField(value = Statuses.MENTIONS_JSON, converter = LoganSquareCursorFieldConverter.class)
|
||||
public ParcelableUserMention[] mentions;
|
||||
|
||||
// TODO: Simplify for list loader
|
||||
@JsonField(name = "media")
|
||||
@CursorField(value = Statuses.MEDIA_JSON, converter = LoganSquareCursorFieldConverter.class)
|
||||
@Nullable
|
||||
public ParcelableMedia[] media;
|
||||
|
||||
// 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;
|
||||
@CursorField(value = Statuses.ATTACHMENT, converter = LoganSquareCursorFieldConverter.class)
|
||||
public ParcelableStatusAttachment attachment;
|
||||
|
||||
@JsonField(name = "extras")
|
||||
@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)
|
||||
public SpanItem[] spans;
|
||||
|
||||
@JsonField(name = "quoted_spans")
|
||||
@CursorField(value = Statuses.QUOTED_SPANS, converter = LoganSquareCursorFieldConverter.class)
|
||||
public SpanItem[] quoted_spans;
|
||||
|
||||
@JsonField(name = "account_color")
|
||||
@CursorField(Statuses.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_user_key=" + in_reply_to_user_key +
|
||||
", 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_retweet=" + is_retweet +
|
||||
", retweeted=" + retweeted +
|
||||
|
@ -432,8 +367,6 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
|||
", user_is_protected=" + user_is_protected +
|
||||
", user_is_verified=" + user_is_verified +
|
||||
", 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_screen_name='" + retweeted_by_user_screen_name + '\'' +
|
||||
", 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 + '\'' +
|
||||
", text_unescaped='" + text_unescaped + '\'' +
|
||||
", 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 +
|
||||
", place_full_name='" + place_full_name + '\'' +
|
||||
", mentions=" + Arrays.toString(mentions) +
|
||||
", media=" + Arrays.toString(media) +
|
||||
", quoted_media=" + Arrays.toString(quoted_media) +
|
||||
", card=" + card +
|
||||
", attachment=" + attachment +
|
||||
", extras=" + extras +
|
||||
", spans=" + Arrays.toString(spans) +
|
||||
", quoted_spans=" + Arrays.toString(quoted_spans) +
|
||||
", account_color=" + account_color +
|
||||
", filter_flags=" + filter_flags +
|
||||
", filter_users=" + Arrays.toString(filter_users) +
|
||||
|
@ -478,7 +402,7 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
|||
|
||||
@AfterCursorObjectCreated
|
||||
void finishCursorObjectCreation() {
|
||||
card_name = card != null ? card.name : null;
|
||||
card_name = (attachment != null && attachment.card != null) ? attachment.card.name : null;
|
||||
fixSortId();
|
||||
}
|
||||
|
||||
|
@ -532,9 +456,6 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
|||
@JsonField(name = "external_url")
|
||||
public String external_url;
|
||||
|
||||
@JsonField(name = "quoted_external_url")
|
||||
public String quoted_external_url;
|
||||
|
||||
@JsonField(name = "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")
|
||||
@ParcelableThisPlease
|
||||
public String url_display;
|
||||
@JsonField(name = "moved")
|
||||
@Nullable
|
||||
public ParcelableLiteUser moved;
|
||||
|
||||
|
||||
@Override
|
||||
|
|
|
@ -19,6 +19,8 @@
|
|||
package org.mariotaku.twidere.model.tab.argument;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.support.annotation.CallSuper;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
@ -26,6 +28,7 @@ import android.support.annotation.Nullable;
|
|||
import com.bluelinelabs.logansquare.LoganSquare;
|
||||
import com.bluelinelabs.logansquare.annotation.JsonField;
|
||||
import com.bluelinelabs.logansquare.annotation.JsonObject;
|
||||
import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease;
|
||||
|
||||
import org.mariotaku.twidere.TwidereConstants;
|
||||
import org.mariotaku.twidere.annotation.CustomTabType;
|
||||
|
@ -34,8 +37,9 @@ import org.mariotaku.twidere.model.UserKey;
|
|||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
|
||||
@ParcelablePlease
|
||||
@JsonObject
|
||||
public class TabArguments implements TwidereConstants {
|
||||
public class TabArguments implements Parcelable {
|
||||
@JsonField(name = "account_id")
|
||||
String accountId;
|
||||
|
||||
|
@ -63,7 +67,7 @@ public class TabArguments implements TwidereConstants {
|
|||
for (UserKey key : accountKeys) {
|
||||
if (key == null) return;
|
||||
}
|
||||
bundle.putParcelableArray(EXTRA_ACCOUNT_KEYS, accountKeys);
|
||||
bundle.putParcelableArray(TwidereConstants.EXTRA_ACCOUNT_KEYS, accountKeys);
|
||||
} else if (accountId != null) {
|
||||
long id = Long.MIN_VALUE;
|
||||
try {
|
||||
|
@ -73,10 +77,10 @@ public class TabArguments implements TwidereConstants {
|
|||
}
|
||||
if (id != Long.MIN_VALUE && id <= 0) {
|
||||
// account_id = -1, means no account selected
|
||||
bundle.putParcelableArray(EXTRA_ACCOUNT_KEYS, null);
|
||||
bundle.putParcelableArray(TwidereConstants.EXTRA_ACCOUNT_KEYS, null);
|
||||
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;
|
||||
}
|
||||
|
||||
@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.hannesdorfmann.parcelableplease.annotation.ParcelablePlease;
|
||||
|
||||
import org.mariotaku.twidere.TwidereConstants;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/6.
|
||||
*/
|
||||
|
@ -47,7 +49,7 @@ public class TextQueryArguments extends TabArguments implements Parcelable {
|
|||
@Override
|
||||
public void copyToBundle(@NonNull Bundle bundle) {
|
||||
super.copyToBundle(bundle);
|
||||
bundle.putString(EXTRA_QUERY, query);
|
||||
bundle.putString(TwidereConstants.EXTRA_QUERY, query);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -27,6 +27,7 @@ import com.bluelinelabs.logansquare.annotation.JsonField;
|
|||
import com.bluelinelabs.logansquare.annotation.JsonObject;
|
||||
import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease;
|
||||
|
||||
import org.mariotaku.twidere.TwidereConstants;
|
||||
import org.mariotaku.twidere.model.UserKey;
|
||||
|
||||
@ParcelablePlease
|
||||
|
@ -37,6 +38,14 @@ public class UserArguments extends TabArguments implements Parcelable {
|
|||
@JsonField(name = "user_key")
|
||||
UserKey userKey;
|
||||
|
||||
public String getUserId() {
|
||||
return userId;
|
||||
}
|
||||
|
||||
public UserKey getUserKey() {
|
||||
return userKey;
|
||||
}
|
||||
|
||||
public void setUserKey(UserKey userKey) {
|
||||
this.userKey = userKey;
|
||||
}
|
||||
|
@ -45,9 +54,9 @@ public class UserArguments extends TabArguments implements Parcelable {
|
|||
public void copyToBundle(@NonNull Bundle bundle) {
|
||||
super.copyToBundle(bundle);
|
||||
if (userKey == null) {
|
||||
bundle.putParcelable(EXTRA_USER_KEY, UserKey.valueOf(userId));
|
||||
bundle.putParcelable(TwidereConstants.EXTRA_USER_KEY, UserKey.valueOf(userId));
|
||||
} 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.hannesdorfmann.parcelableplease.annotation.ParcelablePlease;
|
||||
|
||||
import org.mariotaku.twidere.TwidereConstants;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/6.
|
||||
*/
|
||||
|
@ -47,7 +49,7 @@ public class UserListArguments extends TabArguments implements Parcelable {
|
|||
@Override
|
||||
public void copyToBundle(@NonNull Bundle bundle) {
|
||||
super.copyToBundle(bundle);
|
||||
bundle.putString(EXTRA_LIST_ID, listId);
|
||||
bundle.putString(TwidereConstants.EXTRA_LIST_ID, listId);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -26,12 +26,15 @@ import com.bluelinelabs.logansquare.annotation.JsonField;
|
|||
import com.bluelinelabs.logansquare.annotation.JsonObject;
|
||||
import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease;
|
||||
|
||||
import org.mariotaku.twidere.annotation.TimelineStyle;
|
||||
|
||||
import static org.mariotaku.twidere.constant.IntentConstants.EXTRA_TIMELINE_STYLE;
|
||||
|
||||
@JsonObject
|
||||
@ParcelablePlease
|
||||
public class TimelineTabExtras extends TabExtras implements Parcelable {
|
||||
@JsonField(name = "timeline_style")
|
||||
@TimelineStyle
|
||||
int timelineStyle;
|
||||
|
||||
@Override
|
||||
|
@ -40,11 +43,12 @@ public class TimelineTabExtras extends TabExtras implements Parcelable {
|
|||
bundle.putInt(EXTRA_TIMELINE_STYLE, timelineStyle);
|
||||
}
|
||||
|
||||
@TimelineStyle
|
||||
public int getTimelineStyle() {
|
||||
return timelineStyle;
|
||||
}
|
||||
|
||||
public void setTimelineStyle(int timelineStyle) {
|
||||
public void setTimelineStyle(@TimelineStyle int timelineStyle) {
|
||||
this.timelineStyle = timelineStyle;
|
||||
}
|
||||
|
||||
|
|
|
@ -687,10 +687,10 @@ public interface TwidereDataStore {
|
|||
|
||||
String MY_RETWEET_ID = "my_retweet_id";
|
||||
|
||||
String MEDIA_JSON = "media_json";
|
||||
|
||||
String MENTIONS_JSON = "mentions_json";
|
||||
|
||||
String ATTACHMENT = "attachments";
|
||||
|
||||
String CARD = "card";
|
||||
|
||||
String CARD_NAME = "card_type";
|
||||
|
|
|
@ -148,6 +148,10 @@ android {
|
|||
|
||||
}
|
||||
|
||||
androidExtensions {
|
||||
experimental = true
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
maven { url 'https://s3.amazonaws.com/repo.commonsware.com' }
|
||||
|
@ -160,6 +164,7 @@ dependencies {
|
|||
kapt "com.hannesdorfmann.parcelableplease:processor:${libVersions['ParcelablePlease']}"
|
||||
kapt "com.google.dagger:dagger-compiler:${libVersions['Dagger']}"
|
||||
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.nyan')
|
||||
|
@ -250,7 +255,6 @@ dependencies {
|
|||
implementation "com.google.android.exoplayer:extension-okhttp:${libVersions['Exoplayer']}"
|
||||
implementation "com.github.bumptech.glide:glide:${libVersions['Glide']}"
|
||||
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.github.mariotaku.MediaViewerLibrary:base:${libVersions['MediaViewerLibrary']}"
|
||||
|
|
|
@ -65,19 +65,19 @@ class DraftExtensionsTest {
|
|||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private fun InputStream.contentEquals(that: InputStream): Boolean {
|
||||
var len1 = 0
|
||||
var len2 = 0
|
||||
val buf1 = ByteArray(8192)
|
||||
val buf2 = ByteArray(8192)
|
||||
while (len1 != -1 && len2 != -1) {
|
||||
len1 = this.read(buf1)
|
||||
len2 = that.read(buf2)
|
||||
if (!buf1.contentEquals(buf2)) {
|
||||
return false
|
||||
private fun InputStream.contentEquals(that: InputStream): Boolean {
|
||||
var len1 = 0
|
||||
var len2 = 0
|
||||
val buf1 = ByteArray(8192)
|
||||
val buf2 = ByteArray(8192)
|
||||
while (len1 != -1 && len2 != -1) {
|
||||
len1 = this.read(buf1)
|
||||
len2 = that.read(buf2)
|
||||
if (!buf1.contentEquals(buf2)) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
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: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
|
||||
android:name=".activity.MainActivity"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
|
|
|
@ -30,7 +30,7 @@ import org.mariotaku.twidere.model.UserKey;
|
|||
public interface Constants extends TwidereConstants {
|
||||
|
||||
String DATABASES_NAME = "twidere.sqlite";
|
||||
int DATABASES_VERSION = 192;
|
||||
int DATABASES_VERSION = 194;
|
||||
|
||||
int EXTRA_FEATURES_NOTICE_VERSION = 2;
|
||||
|
||||
|
|
|
@ -24,7 +24,6 @@ import android.graphics.drawable.Drawable;
|
|||
import android.os.Build;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
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) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
||||
ViewAccessorICS.setForeground(view, foreground);
|
||||
|
|
|
@ -1,14 +1,17 @@
|
|||
package org.mariotaku.ktextension
|
||||
|
||||
import android.app.Application
|
||||
import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.pm.PackageManager
|
||||
import android.support.v4.content.ContextCompat
|
||||
import java.io.File
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 2016/12/13.
|
||||
*/
|
||||
val Context.hasApplication: Boolean
|
||||
get() = applicationContext is Application
|
||||
|
||||
val Context.preferExternalCacheDir: File
|
||||
get() = externalCacheDir ?: cacheDir
|
||||
|
||||
fun Context.checkAllSelfPermissionsGranted(vararg permissions: String): Boolean {
|
||||
return permissions.none { ContextCompat.checkSelfPermission(this, it) != PackageManager.PERMISSION_GRANTED }
|
||||
|
@ -27,6 +30,3 @@ fun Context.unregisterReceiverSafe(receiver: BroadcastReceiver?): Boolean {
|
|||
return false
|
||||
}
|
||||
}
|
||||
|
||||
val Context.preferExternalCacheDir: File
|
||||
get() = externalCacheDir ?: cacheDir
|
|
@ -24,7 +24,7 @@ import android.text.Spanned
|
|||
import org.mariotaku.twidere.text.ZeroWidthSpan
|
||||
import java.text.Normalizer
|
||||
|
||||
fun CharSequence.appendTo(sb: StringBuilder) {
|
||||
fun CharSequence.appendTo(sb: Appendable) {
|
||||
sb.append(this)
|
||||
}
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@ import android.widget.AdapterView
|
|||
import android.widget.AdapterView.OnItemClickListener
|
||||
import android.widget.ListView
|
||||
import android.widget.Toast
|
||||
import com.bumptech.glide.Glide
|
||||
import kotlinx.android.synthetic.main.activity_account_selector.*
|
||||
import org.mariotaku.ktextension.getNullableTypedArrayExtra
|
||||
import org.mariotaku.twidere.R
|
||||
|
@ -96,7 +97,7 @@ class AccountSelectorActivity : BaseActivity(), OnItemClickListener {
|
|||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_account_selector)
|
||||
DataStoreUtils.prepareDatabase(this)
|
||||
adapter = AccountDetailsAdapter(this, requestManager).apply {
|
||||
adapter = AccountDetailsAdapter(this, Glide.with(this)).apply {
|
||||
switchEnabled = !isSingleSelection
|
||||
sortEnabled = false
|
||||
val am = AccountManager.get(context)
|
||||
|
|
|
@ -45,7 +45,6 @@ import android.view.View
|
|||
import android.view.WindowManager
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.RequestManager
|
||||
import com.squareup.otto.Bus
|
||||
import nl.komponents.kovenant.Promise
|
||||
import org.mariotaku.chameleon.Chameleon
|
||||
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.extension.defaultSharedPreferences
|
||||
import org.mariotaku.twidere.extension.firstLanguage
|
||||
import org.mariotaku.twidere.extension.get
|
||||
import org.mariotaku.twidere.extension.overriding
|
||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowInsetsCallback
|
||||
import org.mariotaku.twidere.model.DefaultFeatures
|
||||
|
@ -98,14 +96,10 @@ open class BaseActivity : ChameleonActivity(), IBaseActivity<BaseActivity>, IThe
|
|||
@Inject
|
||||
lateinit var readStateManager: ReadStateManager
|
||||
@Inject
|
||||
lateinit var bus: Bus
|
||||
@Inject
|
||||
lateinit var preferences: SharedPreferences
|
||||
@Inject
|
||||
lateinit var notificationManager: NotificationManagerWrapper
|
||||
@Inject
|
||||
lateinit var userColorNameManager: UserColorNameManager
|
||||
@Inject
|
||||
lateinit var permissionsManager: PermissionsManager
|
||||
@Inject
|
||||
lateinit var extraFeaturesService: ExtraFeaturesService
|
||||
|
@ -128,9 +122,6 @@ open class BaseActivity : ChameleonActivity(), IBaseActivity<BaseActivity>, IThe
|
|||
@Inject
|
||||
lateinit var dataSyncProvider: DataSyncProvider
|
||||
|
||||
lateinit var requestManager: RequestManager
|
||||
private set
|
||||
|
||||
protected val isDialogTheme: Boolean
|
||||
get() = ThemeUtils.getBooleanFromAttribute(this, R.attr.isDialogTheme)
|
||||
|
||||
|
@ -241,8 +232,8 @@ open class BaseActivity : ChameleonActivity(), IBaseActivity<BaseActivity>, IThe
|
|||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
StrictModeUtils.detectAllVmPolicy()
|
||||
StrictModeUtils.detectAllThreadPolicy()
|
||||
StrictModeUtils.detectVmPolicies()
|
||||
StrictModeUtils.detectThreadPolicies()
|
||||
}
|
||||
val themeColor = themePreferences[themeColorKey]
|
||||
val themeResource = getThemeResource(themePreferences, themePreferences[themeKey], themeColor)
|
||||
|
@ -252,27 +243,11 @@ open class BaseActivity : ChameleonActivity(), IBaseActivity<BaseActivity>, IThe
|
|||
onApplyNavigationStyle(themeNavigationStyle, themeColor)
|
||||
super.onCreate(savedInstanceState)
|
||||
title = activityLabel
|
||||
requestManager = Glide.with(this)
|
||||
ActivitySupport.setTaskDescription(this, TaskDescriptionCompat(title.toString(), null,
|
||||
ColorUtils.setAlphaComponent(overrideTheme.colorToolbar, 0xFF)))
|
||||
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() {
|
||||
super.onResume()
|
||||
val adapter = NfcAdapter.getDefaultAdapter(this)
|
||||
|
|
|
@ -212,7 +212,7 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener
|
|||
bottomMenuAnimator = ViewAnimator()
|
||||
bottomMenuAnimator.setupViews()
|
||||
|
||||
mediaPreviewAdapter = MediaPreviewAdapter(this, requestManager)
|
||||
mediaPreviewAdapter = MediaPreviewAdapter(this, Glide.with(this))
|
||||
mediaPreviewAdapter.listener = object : MediaPreviewAdapter.Listener {
|
||||
override fun onEditClick(position: Int, holder: MediaPreviewViewHolder) {
|
||||
attachedMediaPreview.showContextMenuForChild(holder.itemView)
|
||||
|
@ -832,11 +832,12 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener
|
|||
|
||||
val displayDoneIcon = isAccountSelectorVisible
|
||||
|
||||
val requestManager = Glide.with(this)
|
||||
if (single != null) {
|
||||
accountsCount.text = null
|
||||
|
||||
if (displayDoneIcon) {
|
||||
Glide.clear(accountProfileImage)
|
||||
requestManager.clear(accountProfileImage)
|
||||
accountProfileImage.setColorFilter(ThemeUtils.getColorFromAttribute(this,
|
||||
android.R.attr.colorForeground))
|
||||
accountProfileImage.scaleType = ImageView.ScaleType.CENTER_INSIDE
|
||||
|
@ -852,7 +853,7 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener
|
|||
} else {
|
||||
accountsCount.text = accounts.size.toString()
|
||||
|
||||
Glide.clear(accountProfileImage)
|
||||
requestManager.clear(accountProfileImage)
|
||||
if (displayDoneIcon) {
|
||||
accountProfileImage.setColorFilter(ThemeUtils.getColorFromAttribute(this,
|
||||
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)) {
|
||||
status.retweeted_by_user_acct?.addTo(mentions)
|
||||
}
|
||||
if (status.is_quote && !TextUtils.isEmpty(status.quoted_user_screen_name)) {
|
||||
status.quoted_user_acct?.addTo(mentions)
|
||||
if (status.is_quote && !TextUtils.isEmpty(status.quoted?.user_screen_name)) {
|
||||
status.quoted?.user_acct?.addTo(mentions)
|
||||
}
|
||||
when (statusAccount.type) {
|
||||
AccountType.FANFOU -> {
|
||||
addFanfouHtmlToMentions(status.text_unescaped, status.spans, mentions)
|
||||
if (status.is_quote) {
|
||||
addFanfouHtmlToMentions(status.quoted_text_unescaped, status.quoted_spans, mentions)
|
||||
val quoted = status.quoted
|
||||
if (status.is_quote && quoted!= null) {
|
||||
addFanfouHtmlToMentions(quoted.text_unescaped, quoted.spans, mentions)
|
||||
}
|
||||
}
|
||||
AccountType.MASTODON -> {
|
||||
|
@ -982,11 +984,11 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener
|
|||
status.mentions.filterNot {
|
||||
it.key == status.account_key || it.screen_name.isNullOrEmpty()
|
||||
}.mapTo(mentions) { it.getAcct(statusAccount.key) }
|
||||
mentions.addAll(extractor.extractMentionedScreennames(status.quoted_text_plain))
|
||||
mentions.addAll(extractor.extractMentionedScreennames(status.quoted?.text_plain))
|
||||
} else {
|
||||
mentions.addAll(extractor.extractMentionedScreennames(status.text_plain))
|
||||
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()
|
||||
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.visibility = View.VISIBLE
|
||||
editText.hint = getString(R.string.label_quote_name, replyToName)
|
||||
|
@ -1158,7 +1160,7 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener
|
|||
showDefaultLabelAndHint()
|
||||
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.visibility = View.VISIBLE
|
||||
editText.hint = getString(R.string.label_reply_name, replyToName)
|
||||
|
@ -2024,7 +2026,7 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener
|
|||
|
||||
private class AccountIconsAdapter(
|
||||
private val activity: ComposeActivity
|
||||
) : BaseRecyclerViewAdapter<AccountIconViewHolder>(activity, activity.requestManager) {
|
||||
) : BaseRecyclerViewAdapter<AccountIconViewHolder>(activity, Glide.with(activity)) {
|
||||
private val inflater: LayoutInflater = activity.layoutInflater
|
||||
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.receiver.NotificationReceiver
|
||||
import org.mariotaku.twidere.service.StreamingService
|
||||
import org.mariotaku.twidere.singleton.BusSingleton
|
||||
import org.mariotaku.twidere.util.*
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback
|
||||
import org.mariotaku.twidere.util.premium.ExtraFeaturesService
|
||||
|
@ -334,7 +335,7 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
|||
super.onStart()
|
||||
multiSelectHandler.dispatchOnStart()
|
||||
AccountManager.get(this).addOnAccountsUpdatedListenerSafe(accountUpdatedListener, updateImmediately = false)
|
||||
bus.register(this)
|
||||
BusSingleton.register(this)
|
||||
|
||||
readStateManager.registerOnSharedPreferenceChangeListener(readStateChangeListener)
|
||||
updateUnreadCount()
|
||||
|
@ -349,7 +350,7 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
|||
override fun onStop() {
|
||||
multiSelectHandler.dispatchOnStop()
|
||||
readStateManager.unregisterOnSharedPreferenceChangeListener(readStateChangeListener)
|
||||
bus.unregister(this)
|
||||
BusSingleton.unregister(this)
|
||||
AccountManager.get(this).removeOnAccountsUpdatedListenerSafe(accountUpdatedListener)
|
||||
preferences.edit().putInt(KEY_SAVED_TAB_POSITION, mainPager.currentItem).apply()
|
||||
dataSyncProvider.newTimelineSyncManager()?.commit()
|
||||
|
|
|
@ -37,6 +37,7 @@ import android.widget.Toast
|
|||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.Priority
|
||||
import com.bumptech.glide.RequestManager
|
||||
import com.bumptech.glide.request.RequestOptions
|
||||
import kotlinx.android.synthetic.main.activity_main.*
|
||||
import nl.komponents.kovenant.Promise
|
||||
import org.mariotaku.chameleon.Chameleon
|
||||
|
@ -100,12 +101,10 @@ open class MainActivity : ChameleonActivity(), IBaseActivity<MainActivity> {
|
|||
return@lazy UserTheme.get(this, themePreferences)
|
||||
}
|
||||
|
||||
private lateinit var requestManager: RequestManager
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
StrictModeUtils.detectAllVmPolicy()
|
||||
StrictModeUtils.detectAllThreadPolicy()
|
||||
StrictModeUtils.detectVmPolicies()
|
||||
StrictModeUtils.detectThreadPolicies()
|
||||
}
|
||||
val themeColor = themePreferences[themeColorKey]
|
||||
val themeResource = getThemeResource(themePreferences, themePreferences[themeKey], themeColor)
|
||||
|
@ -114,7 +113,6 @@ open class MainActivity : ChameleonActivity(), IBaseActivity<MainActivity> {
|
|||
}
|
||||
super.onCreate(savedInstanceState)
|
||||
GeneralComponent.get(this).inject(this)
|
||||
requestManager = Glide.with(this)
|
||||
setContentView(R.layout.activity_main)
|
||||
|
||||
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() {
|
||||
actionHelper.dispatchOnPause(this)
|
||||
super.onPause()
|
||||
|
@ -246,7 +229,7 @@ open class MainActivity : ChameleonActivity(), IBaseActivity<MainActivity> {
|
|||
val image = images.firstOrNull() ?: return false
|
||||
|
||||
Glide.with(this).load(image.url)
|
||||
.priority(Priority.HIGH)
|
||||
.apply(RequestOptions.priorityOf(Priority.HIGH))
|
||||
.into(presentationView)
|
||||
return true
|
||||
}
|
||||
|
|
|
@ -516,7 +516,7 @@ class MediaViewerActivity : BaseActivity(), IMediaViewerActivity, MediaSwipeClos
|
|||
intent.addCategory(Intent.CATEGORY_OPENABLE)
|
||||
val extension = fileInfo.extension
|
||||
val saveFileName = if (extension != null) {
|
||||
"${fileInfo.name?.removeSuffix("_$extension")}.$extension"
|
||||
"${fileInfo.name.removeSuffix("_$extension")}.$extension"
|
||||
} else {
|
||||
fileInfo.name
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ import android.view.*
|
|||
import android.widget.Button
|
||||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.RequestManager
|
||||
import kotlinx.android.synthetic.main.activity_premium_dashboard.*
|
||||
import kotlinx.android.synthetic.main.adapter_item_extra_feature_normal.view.*
|
||||
|
@ -48,7 +49,7 @@ class PremiumDashboardActivity : BaseActivity() {
|
|||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_premium_dashboard)
|
||||
|
||||
adapter = ControllersAdapter(this, requestManager)
|
||||
adapter = ControllersAdapter(this, Glide.with(this))
|
||||
recyclerView.adapter = adapter
|
||||
recyclerView.layoutManager = LinearLayoutManager(this)
|
||||
if (extraFeaturesService.isSupported()) {
|
||||
|
|
|
@ -25,7 +25,6 @@ import android.content.ActivityNotFoundException
|
|||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.database.Cursor
|
||||
import android.graphics.PorterDuff.Mode
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.support.v4.app.LoaderManager.LoaderCallbacks
|
||||
|
@ -43,6 +42,7 @@ import android.view.inputmethod.InputMethodManager
|
|||
import android.widget.*
|
||||
import android.widget.AdapterView.OnItemClickListener
|
||||
import android.widget.AdapterView.OnItemSelectedListener
|
||||
import com.bumptech.glide.Glide
|
||||
import kotlinx.android.synthetic.main.activity_quick_search_bar.*
|
||||
import org.mariotaku.kpreferences.get
|
||||
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.provider.TwidereDataStore.SearchHistory
|
||||
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.IntentUtils
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler
|
||||
import org.mariotaku.twidere.util.SwipeDismissListViewTouchListener
|
||||
import org.mariotaku.twidere.util.promotion.PromotionService
|
||||
import org.mariotaku.twidere.view.ProfileImageView
|
||||
|
||||
|
@ -100,7 +97,7 @@ class QuickSearchBarActivity : BaseActivity(), OnClickListener, LoaderCallbacks<
|
|||
val am = AccountManager.get(this)
|
||||
val accounts = am.getAllDetails(am.ownedAccounts, true)
|
||||
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()
|
||||
accountSpinner.adapter = accountsSpinnerAdapter
|
||||
accountSpinner.onItemSelectedListener = this
|
||||
|
@ -361,9 +358,9 @@ class QuickSearchBarActivity : BaseActivity(), OnClickListener, LoaderCallbacks<
|
|||
|
||||
private val profileImageStyle = activity.preferences[profileImageStyleKey]
|
||||
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 userColorNameManager = activity.userColorNameManager
|
||||
private val userColorNameManager = UserColorNameManager.get(activity)
|
||||
private val removedPositions = ArrayList<Int>()
|
||||
|
||||
private var indices: SuggestionItem.Indices? = null
|
||||
|
|
|
@ -426,24 +426,13 @@ class SignInActivity : BaseActivity(), OnClickListener, TextWatcher,
|
|||
|
||||
internal fun onSignInError(exception: Exception) {
|
||||
DebugLog.w(LOGTAG, "Sign in error", exception)
|
||||
var errorReason: String? = null
|
||||
if (exception is AuthenticityTokenException) {
|
||||
Toast.makeText(this, R.string.message_toast_wrong_api_key, Toast.LENGTH_SHORT).show()
|
||||
errorReason = "wrong_api_key"
|
||||
} else if (exception is WrongUserPassException) {
|
||||
Toast.makeText(this, R.string.message_toast_wrong_username_password, Toast.LENGTH_SHORT).show()
|
||||
errorReason = "wrong_username_password"
|
||||
} 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()
|
||||
when (exception) {
|
||||
is AuthenticityTokenException -> 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()
|
||||
is SignInTask.WrongBasicCredentialException -> Toast.makeText(this, R.string.message_toast_wrong_username_password, Toast.LENGTH_SHORT).show()
|
||||
is SignInTask.WrongAPIURLFormatException -> Toast.makeText(this, R.string.message_toast_wrong_api_key, Toast.LENGTH_SHORT).show()
|
||||
is LoginVerificationException -> Toast.makeText(this, R.string.message_toast_login_verification_failed, Toast.LENGTH_SHORT).show()
|
||||
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.widget.AdapterView.OnItemClickListener
|
||||
import android.widget.TextView
|
||||
import com.bumptech.glide.Glide
|
||||
import kotlinx.android.synthetic.main.layout_list_with_empty_view.*
|
||||
import org.mariotaku.ktextension.Bundle
|
||||
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.extension.accountKey
|
||||
import org.mariotaku.twidere.extension.adapter.all
|
||||
import org.mariotaku.twidere.extension.get
|
||||
import org.mariotaku.twidere.extension.userKey
|
||||
import org.mariotaku.twidere.loader.iface.IPaginationLoader
|
||||
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.UserKey
|
||||
import org.mariotaku.twidere.model.pagination.Pagination
|
||||
import org.mariotaku.twidere.singleton.BusSingleton
|
||||
import org.mariotaku.twidere.util.ContentScrollHandler
|
||||
import org.mariotaku.twidere.util.ListViewScrollHandler
|
||||
|
||||
|
@ -86,7 +89,7 @@ class UserListSelectorActivity : BaseActivity(),
|
|||
}
|
||||
setContentView(R.layout.activity_user_list_selector)
|
||||
|
||||
adapter = SimpleParcelableUserListsAdapter(this, requestManager)
|
||||
adapter = SimpleParcelableUserListsAdapter(this, Glide.with(this))
|
||||
adapter.loadMoreSupportedPosition = LoadMorePosition.END
|
||||
listView.addFooterView(layoutInflater.inflate(R.layout.simple_list_item_activated_1,
|
||||
listView, false).apply {
|
||||
|
@ -127,11 +130,11 @@ class UserListSelectorActivity : BaseActivity(),
|
|||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
bus.register(this)
|
||||
BusSingleton.register(this)
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
bus.unregister(this)
|
||||
BusSingleton.unregister(this)
|
||||
super.onStop()
|
||||
}
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@ import android.view.View
|
|||
import android.widget.AdapterView
|
||||
import android.widget.AdapterView.OnItemClickListener
|
||||
import android.widget.ListView
|
||||
import com.bumptech.glide.Glide
|
||||
import kotlinx.android.synthetic.main.activity_user_selector.*
|
||||
import kotlinx.android.synthetic.main.layout_list_with_empty_view.*
|
||||
import kotlinx.android.synthetic.main.layout_toolbar_search.*
|
||||
|
@ -86,7 +87,7 @@ class UserSelectorActivity : BaseActivity(), OnItemClickListener {
|
|||
if (savedInstanceState == null) {
|
||||
editScreenName.setText(intent.getStringExtra(EXTRA_SCREEN_NAME))
|
||||
}
|
||||
adapter = SimpleParcelableUsersAdapter(this, requestManager = requestManager)
|
||||
adapter = SimpleParcelableUsersAdapter(this, requestManager = Glide.with(this))
|
||||
listView.adapter = adapter
|
||||
listView.onItemClickListener = this
|
||||
|
||||
|
|
|
@ -32,9 +32,11 @@ import org.mariotaku.twidere.adapter.iface.ILoadMoreSupportAdapter
|
|||
import org.mariotaku.twidere.annotation.LoadMorePosition
|
||||
import org.mariotaku.twidere.constant.*
|
||||
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
||||
import org.mariotaku.twidere.extension.get
|
||||
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
|
||||
|
||||
open class BaseArrayAdapter<T>(
|
||||
|
@ -46,8 +48,6 @@ open class BaseArrayAdapter<T>(
|
|||
IItemCountsAdapter {
|
||||
val linkify: TwidereLinkify
|
||||
|
||||
@Inject
|
||||
override lateinit var userColorNameManager: UserColorNameManager
|
||||
@Inject
|
||||
override lateinit var bidiFormatter: BidiFormatter
|
||||
@Inject
|
||||
|
|
|
@ -32,25 +32,18 @@ import org.mariotaku.twidere.constant.profileImageStyleKey
|
|||
import org.mariotaku.twidere.constant.showAbsoluteTimeKey
|
||||
import org.mariotaku.twidere.constant.textSizeKey
|
||||
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
||||
import org.mariotaku.twidere.extension.get
|
||||
import org.mariotaku.twidere.model.DefaultFeatures
|
||||
import org.mariotaku.twidere.util.MultiSelectManager
|
||||
import org.mariotaku.twidere.util.ReadStateManager
|
||||
import org.mariotaku.twidere.util.UserColorNameManager
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 15/10/5.
|
||||
*/
|
||||
abstract class BaseRecyclerViewAdapter<VH : RecyclerView.ViewHolder>(
|
||||
val context: Context,
|
||||
override val requestManager: RequestManager
|
||||
) : RecyclerView.Adapter<VH>(), IContentAdapter {
|
||||
|
||||
@Inject
|
||||
override final lateinit var userColorNameManager: UserColorNameManager
|
||||
@Inject
|
||||
override final lateinit var bidiFormatter: BidiFormatter
|
||||
override lateinit var bidiFormatter: BidiFormatter
|
||||
@Inject
|
||||
lateinit var preferences: SharedPreferences
|
||||
@Inject
|
||||
|
@ -60,11 +53,11 @@ abstract class BaseRecyclerViewAdapter<VH : RecyclerView.ViewHolder>(
|
|||
@Inject
|
||||
lateinit var defaultFeatures: DefaultFeatures
|
||||
|
||||
override final val profileImageSize: String = context.getString(R.string.profile_image_size)
|
||||
override final val profileImageStyle: Int
|
||||
override final val textSize: Float
|
||||
override final val profileImageEnabled: Boolean
|
||||
override final val showAbsoluteTime: Boolean
|
||||
final override val profileImageSize: String = context.getString(R.string.profile_image_size)
|
||||
final override val profileImageStyle: Int
|
||||
final override val textSize: Float
|
||||
final override val profileImageEnabled: Boolean
|
||||
final override val showAbsoluteTime: Boolean
|
||||
|
||||
init {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
|
|
|
@ -36,7 +36,6 @@ import org.mariotaku.twidere.constant.displayProfileImageKey
|
|||
import org.mariotaku.twidere.constant.profileImageStyleKey
|
||||
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
||||
import org.mariotaku.twidere.extension.appendQueryParameterIgnoreNull
|
||||
import org.mariotaku.twidere.extension.get
|
||||
import org.mariotaku.twidere.extension.loadProfileImage
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
import org.mariotaku.twidere.model.SuggestionItem
|
||||
|
@ -52,6 +51,7 @@ class ComposeAutoCompleteAdapter(context: Context, val requestManager: RequestMa
|
|||
@Inject
|
||||
lateinit var preferences: SharedPreferences
|
||||
@Inject
|
||||
@Deprecated(message = "Deprecated", replaceWith = ReplaceWith("UserColorNameManager.get(context!!)", imports = ["org.mariotaku.twidere.util.UserColorNameManager"]))
|
||||
lateinit var userColorNameManager: UserColorNameManager
|
||||
|
||||
var account: AccountDetails? = null
|
||||
|
@ -78,7 +78,7 @@ class ComposeAutoCompleteAdapter(context: Context, val requestManager: RequestMa
|
|||
|
||||
if (Suggestions.AutoComplete.TYPE_USERS == cursor.getString(indices.type)) {
|
||||
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))
|
||||
val screenName = cursor.getString(indices.summary)
|
||||
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.constant.*
|
||||
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
||||
import org.mariotaku.twidere.extension.get
|
||||
import org.mariotaku.twidere.extension.model.activityStatus
|
||||
import org.mariotaku.twidere.model.*
|
||||
import org.mariotaku.twidere.util.TwidereLinkify
|
||||
import org.mariotaku.twidere.util.UserColorNameManager
|
||||
import org.mariotaku.twidere.view.holder.iface.IStatusViewHolder
|
||||
import javax.inject.Inject
|
||||
|
||||
|
@ -35,8 +33,6 @@ class DummyItemAdapter(
|
|||
@Inject
|
||||
lateinit var preferences: SharedPreferences
|
||||
@Inject
|
||||
override lateinit var userColorNameManager: UserColorNameManager
|
||||
@Inject
|
||||
override lateinit var bidiFormatter: BidiFormatter
|
||||
|
||||
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,
|
||||
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
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@ import android.view.View
|
|||
import android.view.ViewGroup
|
||||
import android.widget.Space
|
||||
import android.widget.TextView
|
||||
import com.bumptech.glide.Glide
|
||||
import org.mariotaku.kpreferences.get
|
||||
import org.mariotaku.ktextension.contains
|
||||
import org.mariotaku.microblog.library.model.twitter.TranslationResult
|
||||
|
@ -53,7 +54,7 @@ import org.mariotaku.twidere.view.holder.status.DetailStatusViewHolder
|
|||
|
||||
class StatusDetailsAdapter(
|
||||
val fragment: StatusFragment
|
||||
) : LoadMoreSupportAdapter<RecyclerView.ViewHolder>(fragment.context!!, fragment.requestManager),
|
||||
) : LoadMoreSupportAdapter<RecyclerView.ViewHolder>(fragment.context!!, Glide.with(fragment)),
|
||||
IStatusesAdapter, IItemCountsAdapter {
|
||||
|
||||
override val twidereLinkify: TwidereLinkify
|
||||
|
|
|
@ -26,8 +26,6 @@ import org.mariotaku.twidere.util.UserColorNameManager
|
|||
|
||||
interface IContentAdapter {
|
||||
|
||||
val userColorNameManager: UserColorNameManager
|
||||
|
||||
fun getItemCount(): Int
|
||||
|
||||
@ImageShapeStyle
|
||||
|
|
|
@ -28,7 +28,6 @@ import android.content.res.Resources
|
|||
import android.net.ConnectivityManager
|
||||
import android.os.AsyncTask
|
||||
import android.support.multidex.MultiDex
|
||||
import com.bumptech.glide.Glide
|
||||
import nl.komponents.kovenant.android.startKovenant
|
||||
import nl.komponents.kovenant.android.stopKovenant
|
||||
import org.mariotaku.kpreferences.get
|
||||
|
@ -41,7 +40,6 @@ import org.mariotaku.twidere.activity.MainHondaJOJOActivity
|
|||
import org.mariotaku.twidere.constant.*
|
||||
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
||||
import org.mariotaku.twidere.extension.firstLanguage
|
||||
import org.mariotaku.twidere.extension.get
|
||||
import org.mariotaku.twidere.extension.setLocale
|
||||
import org.mariotaku.twidere.promise.DefaultFeaturesPromises
|
||||
import org.mariotaku.twidere.receiver.ConnectivityStateReceiver
|
||||
|
@ -82,7 +80,7 @@ class TwidereApplication : Application(), OnSharedPreferenceChangeListener {
|
|||
override fun onCreate() {
|
||||
instance = this
|
||||
if (BuildConfig.DEBUG) {
|
||||
StrictModeUtils.detectAllVmPolicy()
|
||||
StrictModeUtils.detectVmPolicies()
|
||||
}
|
||||
super.onCreate()
|
||||
applyLanguageSettings()
|
||||
|
@ -115,16 +113,6 @@ class TwidereApplication : Application(), OnSharedPreferenceChangeListener {
|
|||
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) {
|
||||
when (key) {
|
||||
KEY_CREDENTIALS_TYPE, KEY_API_URL_FORMAT, KEY_CONSUMER_KEY, KEY_CONSUMER_SECRET,
|
||||
|
@ -153,8 +141,8 @@ class TwidereApplication : Application(), OnSharedPreferenceChangeListener {
|
|||
}
|
||||
|
||||
private fun applyLanguageSettings() {
|
||||
val locale = sharedPreferences[overrideLanguageKey] ?: Resources.getSystem().
|
||||
firstLanguage ?: return
|
||||
val locale = sharedPreferences[overrideLanguageKey] ?: Resources.getSystem().firstLanguage
|
||||
?: return
|
||||
resources.setLocale(locale)
|
||||
}
|
||||
|
||||
|
|
|
@ -26,7 +26,6 @@ import okhttp3.ConnectionPool
|
|||
import okhttp3.Dns
|
||||
import org.mariotaku.restfu.http.RestHttpClient
|
||||
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
||||
import org.mariotaku.twidere.extension.get
|
||||
import org.mariotaku.twidere.model.DefaultFeatures
|
||||
import org.mariotaku.twidere.util.*
|
||||
import org.mariotaku.twidere.util.media.MediaPreloader
|
||||
|
@ -69,6 +68,7 @@ class DependencyHolder internal constructor(context: Context) {
|
|||
lateinit var mediaPreloader: MediaPreloader
|
||||
internal set
|
||||
@Inject
|
||||
@Deprecated(message = "Deprecated", replaceWith = ReplaceWith("UserColorNameManager.get(context", imports = ["org.mariotaku.twidere.util.UserColorNameManager"]))
|
||||
lateinit var userColorNameManager: UserColorNameManager
|
||||
internal set
|
||||
@Inject
|
||||
|
|
|
@ -28,7 +28,6 @@ import org.mariotaku.twidere.dagger.DependencyHolder
|
|||
import org.mariotaku.twidere.dagger.module.ApplicationModule
|
||||
import org.mariotaku.twidere.dagger.module.ChannelModule
|
||||
import org.mariotaku.twidere.data.user.UserLiveData
|
||||
import org.mariotaku.twidere.extension.get
|
||||
import org.mariotaku.twidere.fragment.BaseDialogFragment
|
||||
import org.mariotaku.twidere.fragment.BaseFragment
|
||||
import org.mariotaku.twidere.fragment.BasePreferenceFragment
|
||||
|
@ -132,10 +131,6 @@ interface GeneralComponent {
|
|||
|
||||
fun inject(activity: MainActivity)
|
||||
|
||||
fun inject(promises: MessagePromises)
|
||||
|
||||
fun inject(promises: StatusPromises)
|
||||
|
||||
fun inject(promises: FriendshipPromises)
|
||||
|
||||
fun inject(promises: BlockPromises)
|
||||
|
@ -172,15 +167,13 @@ interface GeneralComponent {
|
|||
|
||||
fun inject(promises: UserListPromises)
|
||||
|
||||
fun inject(promises: SavedSearchPromises)
|
||||
|
||||
fun inject(promises: RefreshPromises)
|
||||
|
||||
fun inject(liveData: UserLiveData)
|
||||
|
||||
fun inject(adapter: AccountSelectorAdapter)
|
||||
|
||||
companion object : ApplicationContextSingletonHolder<GeneralComponent>(creation@ { application ->
|
||||
companion object : ApplicationContextSingletonHolder<GeneralComponent>(creation@{ application ->
|
||||
return@creation DaggerGeneralComponent.builder()
|
||||
.applicationModule(ApplicationModule.get(application))
|
||||
.channelModule(ChannelModule.get(application))
|
||||
|
|
|
@ -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.ExtractorsFactory
|
||||
import com.google.android.exoplayer2.upstream.DataSource
|
||||
import com.squareup.otto.Bus
|
||||
import com.squareup.otto.ThreadEnforcer
|
||||
import com.twitter.Extractor
|
||||
import dagger.Module
|
||||
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.autoRefreshCompatibilityModeKey
|
||||
import org.mariotaku.twidere.constant.nameFirstKey
|
||||
import org.mariotaku.twidere.extension.get
|
||||
import org.mariotaku.twidere.extension.model.load
|
||||
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.LegacyRefreshTaskController
|
||||
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
|
||||
@Singleton
|
||||
fun keyboardShortcutsHandler(): KeyboardShortcutsHandler {
|
||||
|
@ -297,8 +293,8 @@ class ApplicationModule(private val application: Application) {
|
|||
@Provides
|
||||
@Singleton
|
||||
fun taskCreator(preferences: SharedPreferences, activityTracker: ActivityTracker,
|
||||
dataSyncProvider: DataSyncProvider, bus: Bus): TaskServiceRunner {
|
||||
return TaskServiceRunner(application, preferences, activityTracker, dataSyncProvider, bus)
|
||||
dataSyncProvider: DataSyncProvider): TaskServiceRunner {
|
||||
return TaskServiceRunner(application, preferences, activityTracker, dataSyncProvider, BusSingleton)
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
|
|
@ -20,11 +20,12 @@
|
|||
package org.mariotaku.twidere.extension
|
||||
|
||||
import android.content.Context
|
||||
import com.bumptech.glide.DrawableRequestBuilder
|
||||
import com.bumptech.glide.DrawableTypeRequest
|
||||
import android.graphics.drawable.Drawable
|
||||
import com.bumptech.glide.RequestBuilder
|
||||
import com.bumptech.glide.RequestManager
|
||||
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.annotation.ImageShapeStyle
|
||||
import org.mariotaku.twidere.extension.model.getBestProfileBanner
|
||||
|
@ -35,8 +36,8 @@ import org.mariotaku.twidere.util.Utils
|
|||
import org.mariotaku.twidere.util.glide.RoundedRectTransformation
|
||||
|
||||
fun RequestManager.loadProfileImage(context: Context, url: String?, @ImageShapeStyle style: Int,
|
||||
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f, size: String? = null): DrawableRequestBuilder<String?> {
|
||||
return configureLoadProfileImage(context, style, cornerRadius, cornerRadiusRatio) {
|
||||
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f, size: String? = null): RequestBuilder<Drawable> {
|
||||
return configureLoadProfileImage(style, cornerRadius, cornerRadiusRatio) {
|
||||
if (url == null || size == null) {
|
||||
return@configureLoadProfileImage load(url)
|
||||
} else {
|
||||
|
@ -46,23 +47,25 @@ fun RequestManager.loadProfileImage(context: Context, url: String?, @ImageShapeS
|
|||
}
|
||||
|
||||
fun RequestManager.loadProfileImage(context: Context, resourceId: Int, @ImageShapeStyle shapeStyle: Int,
|
||||
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f): DrawableRequestBuilder<Int> {
|
||||
return configureLoadProfileImage(context, shapeStyle, cornerRadius, cornerRadiusRatio) { load(resourceId) }
|
||||
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f): RequestBuilder<Drawable> {
|
||||
return configureLoadProfileImage(shapeStyle, cornerRadius, cornerRadiusRatio) {
|
||||
return@configureLoadProfileImage load(resourceId)
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
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) {
|
||||
// No fallback image, use compatible logic
|
||||
return loadProfileImage(context, user.profile_image_url, shapeStyle, cornerRadius,
|
||||
cornerRadiusRatio, size)
|
||||
}
|
||||
return configureLoadProfileImage(context, shapeStyle, cornerRadius, cornerRadiusRatio) {
|
||||
return configureLoadProfileImage(shapeStyle, cornerRadius, cornerRadiusRatio) {
|
||||
if (size != null) {
|
||||
return@configureLoadProfileImage load(Utils.getTwitterProfileImageOfSize(user.profile_image_url, size))
|
||||
} else {
|
||||
|
@ -72,8 +75,8 @@ fun RequestManager.loadProfileImage(context: Context, user: ParcelableUser, @Ima
|
|||
}
|
||||
|
||||
fun RequestManager.loadProfileImage(context: Context, user: ParcelableLiteUser, @ImageShapeStyle shapeStyle: Int,
|
||||
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f, size: String? = null): DrawableRequestBuilder<String?> {
|
||||
return configureLoadProfileImage(context, shapeStyle, cornerRadius, cornerRadiusRatio) {
|
||||
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f, size: String? = null): RequestBuilder<Drawable> {
|
||||
return configureLoadProfileImage(shapeStyle, cornerRadius, cornerRadiusRatio) {
|
||||
if (size != null) {
|
||||
return@configureLoadProfileImage load(Utils.getTwitterProfileImageOfSize(user.profile_image_url, size))
|
||||
} else {
|
||||
|
@ -84,35 +87,35 @@ fun RequestManager.loadProfileImage(context: Context, user: ParcelableLiteUser,
|
|||
|
||||
fun RequestManager.loadProfileImage(context: Context, userList: ParcelableUserList,
|
||||
@ImageShapeStyle shapeStyle: Int,
|
||||
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f): DrawableRequestBuilder<String?> {
|
||||
return configureLoadProfileImage(context, shapeStyle, cornerRadius, cornerRadiusRatio) {
|
||||
load(userList.user_profile_image_url)
|
||||
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f): RequestBuilder<Drawable> {
|
||||
return configureLoadProfileImage(shapeStyle, cornerRadius, cornerRadiusRatio) {
|
||||
return@configureLoadProfileImage load(userList.user_profile_image_url)
|
||||
}
|
||||
}
|
||||
|
||||
fun RequestManager.loadProfileImage(context: Context, group: ParcelableGroup,
|
||||
@ImageShapeStyle shapeStyle: Int,
|
||||
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f): DrawableRequestBuilder<String?> {
|
||||
return configureLoadProfileImage(context, shapeStyle, cornerRadius, cornerRadiusRatio) {
|
||||
load(group.homepage_logo)
|
||||
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f): RequestBuilder<Drawable> {
|
||||
return configureLoadProfileImage(shapeStyle, cornerRadius, cornerRadiusRatio) {
|
||||
return@configureLoadProfileImage load(group.homepage_logo)
|
||||
}
|
||||
}
|
||||
|
||||
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) {
|
||||
// No fallback image, use compatible logic
|
||||
return loadProfileImage(context, status.user_profile_image_url, shapeStyle, cornerRadius,
|
||||
cornerRadiusRatio, size)
|
||||
}
|
||||
return configureLoadProfileImage(context, shapeStyle, cornerRadius, cornerRadiusRatio) {
|
||||
load(status.user_profile_image_url)
|
||||
return configureLoadProfileImage(shapeStyle, cornerRadius, cornerRadiusRatio) {
|
||||
return@configureLoadProfileImage load(status.user_profile_image_url)
|
||||
}
|
||||
}
|
||||
|
||||
fun RequestManager.loadProfileImage(context: Context, conversation: ParcelableMessageConversation,
|
||||
@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) {
|
||||
val user = conversation.user
|
||||
if (user != null) {
|
||||
|
@ -135,35 +138,32 @@ fun RequestManager.loadProfileImage(context: Context, conversation: ParcelableMe
|
|||
|
||||
fun RequestManager.loadOriginalProfileImage(context: Context, user: ParcelableUser,
|
||||
@ImageShapeStyle shapeStyle: Int, cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f
|
||||
): DrawableRequestBuilder<String> {
|
||||
return configureLoadProfileImage(context, shapeStyle, cornerRadius, cornerRadiusRatio) {
|
||||
load(user.originalProfileImage)
|
||||
): RequestBuilder<Drawable> {
|
||||
return configureLoadProfileImage(shapeStyle, cornerRadius, cornerRadiusRatio) {
|
||||
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)
|
||||
return load(user.getBestProfileBanner(width, (width / ratio).toInt()))
|
||||
}
|
||||
|
||||
internal inline fun <T> configureLoadProfileImage(context: Context, @ImageShapeStyle shapeStyle: Int,
|
||||
cornerRadius: Float = 0f, cornerRadiusRatio: Float = 0f, create: () -> DrawableTypeRequest<T>
|
||||
): DrawableRequestBuilder<T> {
|
||||
internal inline fun <T> configureLoadProfileImage(@ImageShapeStyle shapeStyle: Int, cornerRadius: Float = 0f,
|
||||
cornerRadiusRatio: Float = 0f, create: () -> RequestBuilder<T>
|
||||
): RequestBuilder<T> {
|
||||
val builder = create()
|
||||
builder.diskCacheStrategy(DiskCacheStrategy.RESULT)
|
||||
builder.centerCrop()
|
||||
builder.dontAnimate()
|
||||
val requestOptions = RequestOptions.diskCacheStrategyOf(DiskCacheStrategy.DATA).dontAnimate().centerCrop()
|
||||
when (shapeStyle) {
|
||||
ImageShapeStyle.SHAPE_CIRCLE -> {
|
||||
builder.bitmapTransform(CropCircleTransformation(context))
|
||||
requestOptions.transform(CircleCrop())
|
||||
}
|
||||
ImageShapeStyle.SHAPE_RECTANGLE -> {
|
||||
builder.bitmapTransform(RoundedRectTransformation(context, cornerRadius,
|
||||
cornerRadiusRatio))
|
||||
requestOptions.transform(RoundedRectTransformation(cornerRadius, cornerRadiusRatio))
|
||||
}
|
||||
ImageShapeStyle.SHAPE_NONE -> {
|
||||
// No-op
|
||||
}
|
||||
}
|
||||
return builder
|
||||
return builder.apply(requestOptions)
|
||||
}
|
||||
|
|
|
@ -21,4 +21,4 @@ package org.mariotaku.twidere.extension
|
|||
|
||||
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,15 +50,15 @@ fun View.getFrame(rect: Rect) {
|
|||
@UiThread
|
||||
fun View.getFrameRelatedTo(rect: Rect, other: View? = null) {
|
||||
this.getFrame(rect)
|
||||
if (other == null) {
|
||||
offsetToRoot(this, rect)
|
||||
} else if (other === this) {
|
||||
rect.offsetTo(0, 0)
|
||||
} else if (other !== parent) {
|
||||
offsetToRoot(this, rect)
|
||||
other.getFrame(tempRect)
|
||||
offsetToRoot(other, tempRect)
|
||||
rect.offset(-tempRect.left, -tempRect.top)
|
||||
when {
|
||||
other == null -> offsetToRoot(this, rect)
|
||||
other === this -> rect.offsetTo(0, 0)
|
||||
other !== parent -> {
|
||||
offsetToRoot(this, rect)
|
||||
other.getFrame(tempRect)
|
||||
offsetToRoot(other, tempRect)
|
||||
rect.offset(-tempRect.left, -tempRect.top)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -158,6 +158,18 @@ fun View.findViewByText(text: CharSequence?): TextView? {
|
|||
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) {
|
||||
var parent = view.parent as? View
|
||||
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.util.promotion.PromotionService
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 2017/1/7.
|
||||
*/
|
||||
|
||||
fun parcelableMediaTypeString(@ParcelableMedia.Type type: Int): String? = when (type) {
|
||||
ParcelableMedia.Type.IMAGE -> "image"
|
||||
|
@ -29,7 +26,8 @@ fun ParcelableMedia.getBestVideoUrlAndType(supportedTypes: Array<String>): Pair<
|
|||
val videoInfo = video_info ?: return Pair(mediaUrl, null)
|
||||
val firstMatch = videoInfo.variants.filter { variant ->
|
||||
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)
|
||||
}
|
||||
ParcelableMedia.Type.CARD_ANIMATED_GIF -> {
|
||||
|
@ -47,12 +45,19 @@ val ParcelableMedia.aspect_ratio: Double
|
|||
return this.width / this.height.toDouble()
|
||||
}
|
||||
|
||||
|
||||
val ParcelableMedia.bannerExtras: PromotionService.BannerExtras?
|
||||
get() {
|
||||
val contentUrl = this.page_url ?: this.url ?: return null
|
||||
return PromotionService.BannerExtras(contentUrl)
|
||||
}
|
||||
|
||||
val Array<ParcelableMedia?>.type: Int
|
||||
get() {
|
||||
forEach { if (it != null) return it.type }
|
||||
return 0
|
||||
}
|
||||
|
||||
@ParcelableMedia.Type
|
||||
val InputContentInfoCompat.inferredMediaType: Int
|
||||
get() = if (description.mimeTypeCount > 0) {
|
||||
|
|
|
@ -83,8 +83,7 @@ var ParcelableMessageConversation.notificationDisabled: Boolean
|
|||
}
|
||||
}
|
||||
|
||||
fun ParcelableMessageConversation.getTitle(context: Context, manager: UserColorNameManager,
|
||||
nameFirst: Boolean): Pair<String, String?> {
|
||||
fun ParcelableMessageConversation.getTitle(context: Context, manager: UserColorNameManager): Pair<String, String?> {
|
||||
if (conversation_type == ConversationType.ONE_TO_ONE) {
|
||||
val user = this.user ?: return Pair(context.getString(R.string.title_direct_messages), null)
|
||||
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
|
||||
|
||||
val ParcelableStatus.media_type: Int
|
||||
get() = media?.firstOrNull()?.type ?: 0
|
||||
get() = attachment?.media?.firstOrNull()?.type ?: 0
|
||||
|
||||
val ParcelableStatus.user: ParcelableUser
|
||||
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>
|
||||
get() {
|
||||
val resultList = mutableSetOf(user)
|
||||
if (quoted_user_key != null) {
|
||||
resultList.add(ParcelableUser(account_key, quoted_user_key, quoted_user_name,
|
||||
quoted_user_screen_name, quoted_user_profile_image))
|
||||
val quoted = attachment?.quoted
|
||||
if (quoted != null) {
|
||||
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) {
|
||||
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}"
|
||||
}
|
||||
|
||||
inline val ParcelableStatus.quoted_user_acct: String?
|
||||
get() = if (account_key.host == quoted_user_key?.host) {
|
||||
quoted_user_screen_name
|
||||
inline val ParcelableStatusAttachment.QuotedStatus.user_acct: String?
|
||||
get() = if (account_key?.host == user_key?.host) {
|
||||
user_screen_name
|
||||
} else {
|
||||
"$quoted_user_screen_name@${quoted_user_key?.host}"
|
||||
"$user_screen_name@${user_key?.host}"
|
||||
}
|
||||
|
||||
inline val ParcelableStatus.isAccountRetweet: Boolean
|
||||
|
@ -90,25 +91,8 @@ inline val ParcelableStatus.canRetweet: Boolean
|
|||
}
|
||||
}
|
||||
|
||||
val ParcelableStatus.quoted: ParcelableStatus?
|
||||
get() {
|
||||
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
|
||||
}
|
||||
inline val ParcelableStatus.quoted: ParcelableStatusAttachment.QuotedStatus?
|
||||
get() = attachment?.quoted
|
||||
|
||||
val ParcelableStatus.retweet_sort_id: Long
|
||||
get() {
|
||||
|
@ -162,8 +146,8 @@ fun ParcelableStatus.addFilterFlag(@ParcelableStatus.FilterFlags flags: Long) {
|
|||
|
||||
fun ParcelableStatus.updateFilterInfo(descriptions: Collection<String?>?) {
|
||||
updateContentFilterInfo()
|
||||
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_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_descriptions = descriptions?.filterNotNull()?.joinToString("\n")
|
||||
}
|
||||
|
||||
|
@ -171,17 +155,17 @@ fun ParcelableStatus.updateContentFilterInfo() {
|
|||
filter_links = generateFilterLinks()
|
||||
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 {
|
||||
val texts = StringBuilder()
|
||||
texts.appendNonEmptyLine(text_unescaped)
|
||||
texts.appendNonEmptyLine(quoted_text_unescaped)
|
||||
media?.forEach { item ->
|
||||
texts.appendNonEmptyLine(quoted?.text_unescaped)
|
||||
attachment?.media?.forEach { item ->
|
||||
texts.appendNonEmptyLine(item.alt_text)
|
||||
}
|
||||
quoted_media?.forEach { item ->
|
||||
quoted?.media?.forEach { item ->
|
||||
texts.appendNonEmptyLine(item.alt_text)
|
||||
}
|
||||
return texts.toString()
|
||||
|
@ -193,7 +177,7 @@ fun ParcelableStatus.generateFilterLinks(): Array<String> {
|
|||
if (span.type != SpanItem.SpanType.LINK) return@mapNotNullTo null
|
||||
return@mapNotNullTo span.link
|
||||
}
|
||||
quoted_spans?.mapNotNullTo(links) { span ->
|
||||
quoted?.spans?.mapNotNullTo(links) { span ->
|
||||
if (span.type != SpanItem.SpanType.LINK) return@mapNotNullTo null
|
||||
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.Status
|
||||
import org.mariotaku.twidere.exception.MalformedResponseException
|
||||
import org.mariotaku.twidere.extension.model.addFilterFlag
|
||||
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.model.*
|
||||
import org.mariotaku.twidere.extension.toSpanItem
|
||||
import org.mariotaku.twidere.model.*
|
||||
import org.mariotaku.twidere.model.util.ParcelableMediaUtils
|
||||
|
@ -60,6 +57,7 @@ fun Status.applyTo(accountKey: UserKey, accountType: String, profileImageSize: S
|
|||
result: ParcelableStatus,
|
||||
updateFilterInfoAction: (Status, ParcelableStatus) -> Unit = ::updateFilterInfoDefault) {
|
||||
val extras = ParcelableStatus.Extras()
|
||||
val attachment = ParcelableStatusAttachment()
|
||||
result.account_key = accountKey
|
||||
result.id = id
|
||||
result.sort_id = sortId
|
||||
|
@ -101,44 +99,47 @@ fun Status.applyTo(accountKey: UserKey, accountType: String, profileImageSize: S
|
|||
result.addFilterFlag(ParcelableStatus.FilterFlags.POSSIBLY_SENSITIVE)
|
||||
}
|
||||
|
||||
val quoted = status.quotedStatus
|
||||
val quotedStatus = status.quotedStatus
|
||||
result.is_quote = status.isQuoteStatus
|
||||
result.quoted_id = status.quotedStatusId
|
||||
if (quoted != null) {
|
||||
val quotedUser = quoted.user ?: throw MalformedResponseException()
|
||||
result.quoted_id = quoted.id
|
||||
extras.quoted_external_url = quoted.inferredExternalUrl
|
||||
if (quotedStatus != null) {
|
||||
val quoted = ParcelableStatusAttachment.QuotedStatus()
|
||||
val quotedUser = quotedStatus.user ?: throw MalformedResponseException()
|
||||
quoted.id = quotedStatus.id
|
||||
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
|
||||
// We should treat this as an html
|
||||
if (quotedText.isHtml) {
|
||||
val html = HtmlSpanBuilder.fromHtml(quotedText, quoted.extendedText)
|
||||
result.quoted_text_unescaped = html?.toString()
|
||||
result.quoted_text_plain = result.quoted_text_unescaped
|
||||
result.quoted_spans = html?.spanItems
|
||||
val html = HtmlSpanBuilder.fromHtml(quotedText, quotedStatus.extendedText)
|
||||
quoted.text_unescaped = html?.toString()
|
||||
quoted.text_plain = quoted.text_unescaped
|
||||
quoted.spans = html?.spanItems
|
||||
} else {
|
||||
val textWithIndices = quoted.formattedTextWithIndices()
|
||||
result.quoted_text_plain = quotedText.twitterUnescaped()
|
||||
result.quoted_text_unescaped = textWithIndices.text
|
||||
result.quoted_spans = textWithIndices.spans
|
||||
val textWithIndices = quotedStatus.formattedTextWithIndices()
|
||||
quoted.text_plain = quotedText.twitterUnescaped()
|
||||
quoted.text_unescaped = textWithIndices.text
|
||||
quoted.spans = textWithIndices.spans
|
||||
extras.quoted_display_text_range = textWithIndices.range
|
||||
}
|
||||
|
||||
result.quoted_timestamp = quoted.createdAt.time
|
||||
result.quoted_source = quoted.source
|
||||
result.quoted_media = ParcelableMediaUtils.fromStatus(quoted, accountKey, accountType)
|
||||
quoted.timestamp = quotedStatus.createdAt.time
|
||||
quoted.source = quotedStatus.source
|
||||
quoted.media = ParcelableMediaUtils.fromStatus(quotedStatus, accountKey, accountType)
|
||||
|
||||
result.quoted_user_key = quotedUser.key
|
||||
result.quoted_user_name = quotedUser.name
|
||||
result.quoted_user_screen_name = quotedUser.screenName
|
||||
result.quoted_user_profile_image = quotedUser.getProfileImageOfSize(profileImageSize)
|
||||
result.quoted_user_is_protected = quotedUser.isProtected
|
||||
result.quoted_user_is_verified = quotedUser.isVerified
|
||||
quoted.user_key = quotedUser.key
|
||||
quoted.user_name = quotedUser.name
|
||||
quoted.user_screen_name = quotedUser.screenName
|
||||
quoted.user_profile_image = quotedUser.getProfileImageOfSize(profileImageSize)
|
||||
quoted.user_is_protected = quotedUser.isProtected
|
||||
quoted.user_is_verified = quotedUser.isVerified
|
||||
|
||||
if (quoted.isPossiblySensitive) {
|
||||
if (quotedStatus.isPossiblySensitive) {
|
||||
result.addFilterFlag(ParcelableStatus.FilterFlags.POSSIBLY_SENSITIVE)
|
||||
}
|
||||
|
||||
attachment.quoted = quoted
|
||||
} else if (status.isQuoteStatus) {
|
||||
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
|
||||
}
|
||||
|
||||
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.location = status.parcelableLocation
|
||||
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.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.lang = status.lang
|
||||
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)
|
||||
}
|
||||
if (user.isFollowing == false) {
|
||||
|
@ -291,8 +296,8 @@ fun updateFilterInfoForUserTimeline(status: Status, result: ParcelableStatus) {
|
|||
result.updateContentFilterInfo()
|
||||
|
||||
if (result.is_retweet) {
|
||||
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_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_descriptions = setOf(
|
||||
status.retweetedStatus?.userDescriptionUnescaped,
|
||||
status.retweetedStatus?.userUrlExpanded,
|
||||
|
@ -302,8 +307,8 @@ fun updateFilterInfoForUserTimeline(status: Status, result: ParcelableStatus) {
|
|||
status.quotedStatus?.userUrlExpanded
|
||||
).filterNotNull().joinToString("\n")
|
||||
} else {
|
||||
result.filter_users = setOf(result.quoted_user_key).filterNotNull().toTypedArray()
|
||||
result.filter_names = setOf(result.quoted_user_name).filterNotNull().toTypedArray()
|
||||
result.filter_users = setOf(result.quoted?.user_key).filterNotNull().toTypedArray()
|
||||
result.filter_names = setOf(result.quoted?.user_name).filterNotNull().toTypedArray()
|
||||
result.filter_descriptions = setOf(
|
||||
status.quotedStatus?.userDescriptionUnescaped,
|
||||
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.spanItems
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
import org.mariotaku.twidere.model.ParcelableLiteUser
|
||||
import org.mariotaku.twidere.model.ParcelableUser
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
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,
|
||||
relationship: Relationship? = null): ParcelableUser {
|
||||
val obj = ParcelableUser()
|
||||
|
@ -81,13 +100,15 @@ fun Account.toParcelable(accountKey: UserKey, position: Long = 0,
|
|||
extras.muting = relationship.isMuting
|
||||
extras.blocking = relationship.isBlocking
|
||||
}
|
||||
extras.moved = moved?.toLiteParcelable(accountKey)
|
||||
|
||||
return obj
|
||||
}
|
||||
|
||||
inline val Account.host: String? get() = acct?.let(UserKey::valueOf)?.host
|
||||
|
||||
inline val Account.name: String? get() = displayName?.takeIf(String::isNotEmpty)
|
||||
?.let(EmojioneTranslator::translate) ?: username
|
||||
inline val Account.name: String?
|
||||
get() = displayName?.takeIf(String::isNotEmpty)
|
||||
?.let(EmojioneTranslator::translate) ?: username
|
||||
|
||||
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) {
|
||||
val extras = ParcelableStatus.Extras()
|
||||
val attachment = ParcelableStatusAttachment()
|
||||
result.account_key = accountKey
|
||||
result.id = id
|
||||
result.sort_id = sortId
|
||||
|
@ -104,14 +105,14 @@ fun Status.applyTo(accountKey: UserKey, result: ParcelableStatus) {
|
|||
result.text_unescaped = html?.toString()
|
||||
result.text_plain = result.text_unescaped
|
||||
result.spans = html?.spanItems
|
||||
result.media = status.mediaAttachments?.mapToArray { it.toParcelable() }
|
||||
attachment.media = status.mediaAttachments?.mapToArray { it.toParcelable() }
|
||||
result.source = status.application?.sourceHtml
|
||||
result.is_favorite = status.isFavourited
|
||||
result.is_possibly_sensitive = status.isSensitive
|
||||
result.mentions = status.mentions?.mapToArray { it.toParcelable(accountKey) }
|
||||
|
||||
extras.display_text_range = calculateDisplayTextRange(result.text_unescaped, result.spans,
|
||||
result.media)
|
||||
result.attachment?.media)
|
||||
extras.summary_text = status.spoilerText?.let(EmojioneTranslator::translate)
|
||||
extras.visibility = status.visibility
|
||||
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_screen_name = inReplyToMention.screen_name
|
||||
}
|
||||
if (result.media.isNotNullOrEmpty()) {
|
||||
if (result.attachment?.media.isNotNullOrEmpty()) {
|
||||
result.addFilterFlag(ParcelableStatus.FilterFlags.HAS_MEDIA)
|
||||
}
|
||||
|
||||
result.extras = extras
|
||||
result.attachment = attachment
|
||||
|
||||
result.updateFilterInfo(setOf(accountDescriptionUnescaped, reblog?.accountDescriptionUnescaped,
|
||||
accountUrl, reblog?.accountUrl))
|
||||
|
|
|
@ -27,6 +27,7 @@ import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener
|
|||
import android.view.*
|
||||
import android.widget.AbsListView
|
||||
import android.widget.ListAdapter
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.RequestManager
|
||||
import kotlinx.android.synthetic.main.fragment_content_listview.*
|
||||
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)
|
||||
swipeLayout.setOnRefreshListener(this)
|
||||
swipeLayout.setProgressBackgroundColorSchemeResource(colorRes)
|
||||
adapter = onCreateAdapter(context!!, requestManager)
|
||||
adapter = onCreateAdapter(context!!, Glide.with(this))
|
||||
listView.setOnTouchListener { _, event ->
|
||||
if (event.actionMasked == MotionEvent.ACTION_DOWN) {
|
||||
updateRefreshProgressOffset()
|
||||
|
|
|
@ -26,6 +26,7 @@ import android.support.v4.widget.SwipeRefreshLayout
|
|||
import android.support.v7.widget.RecyclerView
|
||||
import android.support.v7.widget.RecyclerView.ItemDecoration
|
||||
import android.view.*
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.RequestManager
|
||||
import kotlinx.android.synthetic.main.fragment_content_recyclerview.*
|
||||
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)
|
||||
swipeLayout.setOnRefreshListener(this)
|
||||
swipeLayout.setProgressBackgroundColorSchemeResource(colorRes)
|
||||
adapter = onCreateAdapter(context!!, requestManager)
|
||||
adapter = onCreateAdapter(context!!, Glide.with(this))
|
||||
layoutManager = onCreateLayoutManager(context!!)
|
||||
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.RecyclerView
|
||||
import android.view.KeyEvent
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.RequestManager
|
||||
import com.squareup.otto.Subscribe
|
||||
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.FriendshipPromises
|
||||
import org.mariotaku.twidere.promise.MutePromises
|
||||
import org.mariotaku.twidere.singleton.BusSingleton
|
||||
import org.mariotaku.twidere.util.IntentUtils
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback
|
||||
|
@ -93,11 +95,11 @@ abstract class AbsUsersFragment : AbsContentListRecyclerViewFragment<ParcelableU
|
|||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
bus.register(usersBusCallback)
|
||||
BusSingleton.register(usersBusCallback)
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
bus.unregister(usersBusCallback)
|
||||
BusSingleton.unregister(usersBusCallback)
|
||||
super.onStop()
|
||||
}
|
||||
|
||||
|
@ -106,7 +108,7 @@ abstract class AbsUsersFragment : AbsContentListRecyclerViewFragment<ParcelableU
|
|||
}
|
||||
|
||||
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.showFollow = showFollow
|
||||
val accountType = arguments?.accountKey?.let { key ->
|
||||
|
@ -152,7 +154,7 @@ abstract class AbsUsersFragment : AbsContentListRecyclerViewFragment<ParcelableU
|
|||
if (user.is_following) {
|
||||
DestroyFriendshipDialogFragment.show(fragmentManager!!, user)
|
||||
} 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 accountKey = user.account_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) {
|
||||
|
|
|
@ -51,6 +51,8 @@ import android.view.*
|
|||
import android.view.View.OnClickListener
|
||||
import android.view.animation.DecelerateInterpolator
|
||||
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 org.mariotaku.chameleon.Chameleon
|
||||
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.util.*
|
||||
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.transformer.AccountsSelectorTransformer
|
||||
import java.lang.ref.WeakReference
|
||||
|
@ -117,7 +120,7 @@ class AccountsDashboardFragment : BaseFragment(), LoaderCallbacks<AccountsInfo>,
|
|||
@SuppressLint("RestrictedApi")
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
accountsAdapter = AccountSelectorAdapter(context!!, preferences, requestManager).also {
|
||||
accountsAdapter = AccountSelectorAdapter(context!!, preferences, Glide.with(this)).also {
|
||||
it.listener = this
|
||||
}
|
||||
accountsSelector.adapter = accountsAdapter
|
||||
|
@ -161,7 +164,8 @@ class AccountsDashboardFragment : BaseFragment(), LoaderCallbacks<AccountsInfo>,
|
|||
} else {
|
||||
when (item.itemId) {
|
||||
R.id.compose -> {
|
||||
val account = accountsAdapter.selectedAccount ?: return@OnMenuItemClickListener true
|
||||
val account = accountsAdapter.selectedAccount
|
||||
?: return@OnMenuItemClickListener true
|
||||
val composeIntent = Intent(INTENT_ACTION_COMPOSE)
|
||||
composeIntent.setClass(activity, ComposeActivity::class.java)
|
||||
composeIntent.putExtra(EXTRA_ACCOUNT_KEY, account.key)
|
||||
|
@ -273,8 +277,7 @@ class AccountsDashboardFragment : BaseFragment(), LoaderCallbacks<AccountsInfo>,
|
|||
}
|
||||
|
||||
override fun onApplySystemWindowInsets(insets: Rect) {
|
||||
view?.findViewById<View?>(android.support.design.R.id.design_navigation_view)?.
|
||||
setPadding(0, 0, 0, insets.bottom)
|
||||
view?.findViewById<View?>(android.support.design.R.id.design_navigation_view)?.setPadding(0, 0, 0, insets.bottom)
|
||||
systemWindowsInsets.set(insets)
|
||||
updateSystemWindowsInsets()
|
||||
}
|
||||
|
@ -473,7 +476,7 @@ class AccountsDashboardFragment : BaseFragment(), LoaderCallbacks<AccountsInfo>,
|
|||
clickedColors = clickedImageView.borderColors
|
||||
val oldSelectedAccount = accountsAdapter.selectedAccount ?: return
|
||||
val profileImageStyle = preferences[profileImageStyleKey]
|
||||
requestManager.loadProfileImage(activity, oldSelectedAccount,
|
||||
Glide.with(this@AccountsDashboardFragment).loadProfileImage(activity, oldSelectedAccount,
|
||||
profileImageStyle, clickedImageView.cornerRadius, clickedImageView.cornerRadiusRatio)
|
||||
.into(clickedImageView).onLoadStarted(profileDrawable)
|
||||
//TODO complete border color
|
||||
|
@ -536,7 +539,7 @@ class AccountsDashboardFragment : BaseFragment(), LoaderCallbacks<AccountsInfo>,
|
|||
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)
|
||||
}
|
||||
|
||||
|
@ -551,11 +554,11 @@ class AccountsDashboardFragment : BaseFragment(), LoaderCallbacks<AccountsInfo>,
|
|||
accountProfileNameView.updateText(bidiFormatter)
|
||||
|
||||
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,
|
||||
ProfileImageSize.REASONABLY_SMALL).placeholder(profileImageSnapshot).into(accountProfileImageView)
|
||||
ProfileImageSize.REASONABLY_SMALL).apply(RequestOptions.placeholderOf(profileImageSnapshot)).into(accountProfileImageView)
|
||||
//TODO complete border color
|
||||
accountProfileImageView.setBorderColors(account.color)
|
||||
accountProfileBanner.showNext()
|
||||
|
|
|
@ -18,6 +18,7 @@ import android.view.ContextMenu.ContextMenuInfo
|
|||
import android.widget.AdapterView
|
||||
import android.widget.AdapterView.AdapterContextMenuInfo
|
||||
import android.widget.Toast
|
||||
import com.bumptech.glide.Glide
|
||||
import kotlinx.android.synthetic.main.layout_draggable_list_with_empty_view.*
|
||||
import nl.komponents.kovenant.combine.and
|
||||
import nl.komponents.kovenant.task
|
||||
|
@ -68,7 +69,7 @@ class AccountsManagerFragment : BaseFragment(), LoaderManager.LoaderCallbacks<Li
|
|||
linkHandlerTitle = getString(R.string.title_accounts)
|
||||
val context = context!!
|
||||
val am = AccountManager.get(context)
|
||||
adapter = AccountDetailsAdapter(context, requestManager).apply {
|
||||
adapter = AccountDetailsAdapter(context, Glide.with(this)).apply {
|
||||
sortEnabled = true
|
||||
switchEnabled = true
|
||||
accountToggleListener = { pos, checked ->
|
||||
|
|
|
@ -33,6 +33,7 @@ import org.mariotaku.twidere.constant.nameFirstKey
|
|||
import org.mariotaku.twidere.extension.applyTheme
|
||||
import org.mariotaku.twidere.extension.blockBulkInsert
|
||||
import org.mariotaku.twidere.extension.bulkDelete
|
||||
import org.mariotaku.twidere.extension.model.quoted
|
||||
import org.mariotaku.twidere.extension.onShow
|
||||
import org.mariotaku.twidere.model.ParcelableStatus
|
||||
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.HtmlEscapeHelper
|
||||
import org.mariotaku.twidere.util.UserColorNameManager
|
||||
import org.mariotaku.twidere.util.UserColorNameManager.Companion
|
||||
import java.util.*
|
||||
|
||||
class AddStatusFilterDialogFragment : BaseDialogFragment() {
|
||||
|
@ -55,10 +57,10 @@ class AddStatusFilterDialogFragment : BaseDialogFragment() {
|
|||
UserItem(status.retweeted_by_user_key!!, status.retweeted_by_user_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,
|
||||
UserItem(status.quoted_user_key!!, status.quoted_user_name,
|
||||
status.quoted_user_screen_name)))
|
||||
UserItem(status.quoted?.user_key!!, status.quoted?.user_name!!,
|
||||
status.quoted?.user_screen_name!!)))
|
||||
}
|
||||
list.add(FilterItemInfo(FilterItemInfo.FILTER_TYPE_USER, UserItem(status.user_key,
|
||||
status.user_name, status.user_screen_name)))
|
||||
|
@ -81,6 +83,7 @@ class AddStatusFilterDialogFragment : BaseDialogFragment() {
|
|||
private var filterItems: Array<FilterItemInfo>? = null
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
val manager = UserColorNameManager.get(context!!)
|
||||
val builder = AlertDialog.Builder(context!!)
|
||||
filterItems = filterItemsInfo
|
||||
val entries = arrayOfNulls<String>(filterItems!!.size)
|
||||
|
@ -89,15 +92,15 @@ class AddStatusFilterDialogFragment : BaseDialogFragment() {
|
|||
val info = filterItems!![i]
|
||||
when (info.type) {
|
||||
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))
|
||||
}
|
||||
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))
|
||||
}
|
||||
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))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,11 +26,13 @@ import org.mariotaku.twidere.R
|
|||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_USER
|
||||
import org.mariotaku.twidere.model.ParcelableUser
|
||||
import org.mariotaku.twidere.model.event.FriendshipTaskEvent
|
||||
import org.mariotaku.twidere.singleton.BusSingleton
|
||||
import org.mariotaku.twidere.util.DataStoreUtils
|
||||
import org.mariotaku.twidere.util.UserColorNameManager
|
||||
|
||||
class AddUserFilterDialogFragment : AbsUserMuteBlockDialogFragment() {
|
||||
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 {
|
||||
|
@ -40,7 +42,7 @@ class AddUserFilterDialogFragment : AbsUserMuteBlockDialogFragment() {
|
|||
override fun performUserAction(user: ParcelableUser, filterEverywhere: Boolean) {
|
||||
DataStoreUtils.addToFilter(context!!, listOf(user), filterEverywhere)
|
||||
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
|
||||
isSucceeded = true
|
||||
})
|
||||
|
|
|
@ -29,8 +29,8 @@ import android.widget.CompoundButton
|
|||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.TwidereConstants.ACCOUNT_PREFERENCES_NAME_PREFIX
|
||||
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.util.UserColorNameManager
|
||||
|
||||
abstract class BaseAccountPreferenceFragment : BasePreferenceFragment() {
|
||||
|
||||
|
@ -67,8 +67,7 @@ abstract class BaseAccountPreferenceFragment : BasePreferenceFragment() {
|
|||
val activity = activity!!
|
||||
val intent = activity.intent
|
||||
if (intent.hasExtra(EXTRA_SHOW_FRAGMENT)) {
|
||||
val nameFirst = prefs.getBoolean(KEY_NAME_FIRST, true)
|
||||
val name = userColorNameManager.getDisplayName(account.key,
|
||||
val name = UserColorNameManager.get(activity).getDisplayName(account.key,
|
||||
account.user.name, account.user.screen_name)
|
||||
activity.title = name
|
||||
}
|
||||
|
|
|
@ -21,35 +21,25 @@ package org.mariotaku.twidere.fragment
|
|||
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.os.Bundle
|
||||
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 okhttp3.Dns
|
||||
import org.mariotaku.restfu.http.RestHttpClient
|
||||
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
||||
import org.mariotaku.twidere.extension.get
|
||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment
|
||||
import org.mariotaku.twidere.util.DebugModeUtils
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler
|
||||
import org.mariotaku.twidere.util.UserColorNameManager
|
||||
import org.mariotaku.twidere.util.premium.ExtraFeaturesService
|
||||
import org.mariotaku.twidere.util.sync.DataSyncProvider
|
||||
import javax.inject.Inject
|
||||
|
||||
open class BaseDialogFragment : DialogFragment(), IBaseFragment<BaseDialogFragment> {
|
||||
|
||||
@Inject
|
||||
lateinit var userColorNameManager: UserColorNameManager
|
||||
@Inject
|
||||
lateinit var preferences: SharedPreferences
|
||||
@Inject
|
||||
lateinit var keyboardShortcutsHandler: KeyboardShortcutsHandler
|
||||
@Inject
|
||||
lateinit var bus: Bus
|
||||
@Inject
|
||||
lateinit var dns: Dns
|
||||
@Inject
|
||||
lateinit var extraFeaturesService: ExtraFeaturesService
|
||||
|
@ -58,26 +48,8 @@ open class BaseDialogFragment : DialogFragment(), IBaseFragment<BaseDialogFragme
|
|||
@Inject
|
||||
lateinit var dataSyncProvider: DataSyncProvider
|
||||
|
||||
lateinit var requestManager: RequestManager
|
||||
private set
|
||||
|
||||
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() {
|
||||
super.onResume()
|
||||
actionHelper.dispatchOnResumeFragments(this)
|
||||
|
@ -89,7 +61,6 @@ open class BaseDialogFragment : DialogFragment(), IBaseFragment<BaseDialogFragme
|
|||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
requestManager.onDestroy()
|
||||
super.onDestroy()
|
||||
DebugModeUtils.watchReferenceLeak(this)
|
||||
}
|
||||
|
|
|
@ -25,14 +25,10 @@ import android.os.Bundle
|
|||
import android.support.v4.app.Fragment
|
||||
import android.support.v4.text.BidiFormatter
|
||||
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 okhttp3.Dns
|
||||
import org.mariotaku.restfu.http.RestHttpClient
|
||||
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
||||
import org.mariotaku.twidere.extension.get
|
||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment
|
||||
import org.mariotaku.twidere.model.DefaultFeatures
|
||||
import org.mariotaku.twidere.util.*
|
||||
|
@ -49,10 +45,9 @@ open class BaseFragment : Fragment(), IBaseFragment<BaseFragment> {
|
|||
@Inject
|
||||
lateinit var readStateManager: ReadStateManager
|
||||
@Inject
|
||||
lateinit var bus: Bus
|
||||
@Inject
|
||||
lateinit var multiSelectManager: MultiSelectManager
|
||||
@Inject
|
||||
@Deprecated(message = "Deprecated", replaceWith = ReplaceWith("UserColorNameManager.get(context!!)", imports = ["org.mariotaku.twidere.util.UserColorNameManager"]))
|
||||
lateinit var userColorNameManager: UserColorNameManager
|
||||
@Inject
|
||||
lateinit var preferences: SharedPreferences
|
||||
|
@ -83,26 +78,8 @@ open class BaseFragment : Fragment(), IBaseFragment<BaseFragment> {
|
|||
@Inject
|
||||
lateinit var promotionService: PromotionService
|
||||
|
||||
lateinit var requestManager: RequestManager
|
||||
private set
|
||||
|
||||
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() {
|
||||
super.onResume()
|
||||
actionHelper.dispatchOnResumeFragments(this)
|
||||
|
@ -114,7 +91,6 @@ open class BaseFragment : Fragment(), IBaseFragment<BaseFragment> {
|
|||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
requestManager.onDestroy()
|
||||
super.onDestroy()
|
||||
DebugModeUtils.watchReferenceLeak(this)
|
||||
}
|
||||
|
|
|
@ -30,10 +30,8 @@ import android.os.Bundle
|
|||
import android.provider.Settings
|
||||
import android.support.v7.preference.Preference
|
||||
import android.support.v7.preference.PreferenceFragmentCompat
|
||||
import com.squareup.otto.Bus
|
||||
import nl.komponents.kovenant.Promise
|
||||
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
||||
import org.mariotaku.twidere.extension.get
|
||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment
|
||||
import org.mariotaku.twidere.preference.RingtonePreference
|
||||
import org.mariotaku.twidere.taskcontroller.sync.SyncTaskController
|
||||
|
@ -49,14 +47,13 @@ abstract class BasePreferenceFragment : PreferenceFragmentCompat(), IBaseFragmen
|
|||
@Inject
|
||||
lateinit var keyboardShortcutHandler: KeyboardShortcutsHandler
|
||||
@Inject
|
||||
@Deprecated(message = "Deprecated", replaceWith = ReplaceWith("UserColorNameManager.get(context!!)", imports = ["org.mariotaku.twidere.util.UserColorNameManager"]))
|
||||
lateinit var userColorNameManager: UserColorNameManager
|
||||
@Inject
|
||||
lateinit var preferences: SharedPreferences
|
||||
@Inject
|
||||
lateinit var syncController: SyncTaskController
|
||||
@Inject
|
||||
lateinit var bus: Bus
|
||||
@Inject
|
||||
lateinit var dataSyncProvider: DataSyncProvider
|
||||
@Inject
|
||||
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.model.ParcelableUser
|
||||
import org.mariotaku.twidere.promise.BlockPromises
|
||||
import org.mariotaku.twidere.util.UserColorNameManager
|
||||
|
||||
class CreateUserBlockDialogFragment : AbsUserMuteBlockDialogFragment() {
|
||||
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)
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
|
@ -43,7 +44,7 @@ class CreateUserBlockDialogFragment : AbsUserMuteBlockDialogFragment() {
|
|||
|
||||
override fun performUserAction(user: ParcelableUser, filterEverywhere: Boolean) {
|
||||
val accountKey = user.account_key ?: return
|
||||
BlockPromises.getInstance(context!!).block(accountKey, user.key, filterEverywhere)
|
||||
BlockPromises.get(context!!).block(accountKey, user.key, filterEverywhere)
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
|
|
@ -23,19 +23,19 @@ import android.os.Bundle
|
|||
import android.support.v4.app.FragmentManager
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_USER
|
||||
import org.mariotaku.twidere.extension.get
|
||||
import org.mariotaku.twidere.model.ParcelableUser
|
||||
import org.mariotaku.twidere.promise.MutePromises
|
||||
import org.mariotaku.twidere.util.UserColorNameManager
|
||||
|
||||
class CreateUserMuteDialogFragment : AbsUserMuteBlockDialogFragment() {
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
|
|
|
@ -40,6 +40,7 @@ import android.view.*
|
|||
import android.widget.*
|
||||
import android.widget.AbsListView.MultiChoiceModeListener
|
||||
import android.widget.AdapterView.OnItemClickListener
|
||||
import com.bumptech.glide.Glide
|
||||
import com.mobeta.android.dslv.SimpleDragSortCursorAdapter
|
||||
import kotlinx.android.synthetic.main.dialog_custom_tab_editor.*
|
||||
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 iconsAdapter = TabIconsAdapter(context!!)
|
||||
val accountsAdapter = AccountsSpinnerAdapter(context!!, requestManager = requestManager)
|
||||
val accountsAdapter = AccountsSpinnerAdapter(context!!, requestManager = Glide.with(this))
|
||||
iconSpinner.adapter = iconsAdapter
|
||||
accountSpinner.adapter = accountsAdapter
|
||||
|
||||
|
|
|
@ -36,6 +36,8 @@ import org.mariotaku.twidere.extension.get
|
|||
import org.mariotaku.twidere.model.ParcelableUser
|
||||
import org.mariotaku.twidere.model.ParcelableUserList
|
||||
import org.mariotaku.twidere.promise.UserListPromises
|
||||
import org.mariotaku.twidere.util.UserColorNameManager
|
||||
import org.mariotaku.twidere.util.UserColorNameManager.Companion
|
||||
|
||||
class DeleteUserListMembersDialogFragment : BaseDialogFragment(), DialogInterface.OnClickListener {
|
||||
|
||||
|
@ -61,8 +63,7 @@ class DeleteUserListMembersDialogFragment : BaseDialogFragment(), DialogInterfac
|
|||
val userList = userList!!
|
||||
if (users.size == 1) {
|
||||
val user = users[0]
|
||||
val nameFirst = preferences[nameFirstKey]
|
||||
val displayName = userColorNameManager.getDisplayName(user)
|
||||
val displayName = UserColorNameManager.get(context!!).getDisplayName(user)
|
||||
builder.setTitle(getString(R.string.delete_user, displayName))
|
||||
builder.setMessage(getString(R.string.delete_user_from_list_confirm, displayName, userList.name))
|
||||
} else {
|
||||
|
|
|
@ -33,6 +33,8 @@ import org.mariotaku.twidere.extension.applyTheme
|
|||
import org.mariotaku.twidere.extension.user
|
||||
import org.mariotaku.twidere.model.ParcelableUser
|
||||
import org.mariotaku.twidere.promise.FriendshipPromises
|
||||
import org.mariotaku.twidere.util.UserColorNameManager
|
||||
import org.mariotaku.twidere.util.UserColorNameManager.Companion
|
||||
|
||||
class DestroyFriendshipDialogFragment : BaseDialogFragment(), DialogInterface.OnClickListener {
|
||||
|
||||
|
@ -41,7 +43,7 @@ class DestroyFriendshipDialogFragment : BaseDialogFragment(), DialogInterface.On
|
|||
DialogInterface.BUTTON_POSITIVE -> {
|
||||
val user = arguments!!.user!!
|
||||
val accountKey = user.account_key ?: return
|
||||
FriendshipPromises.getInstance(context!!).destroy(accountKey, user.key)
|
||||
FriendshipPromises.get(context!!).destroy(accountKey, user.key)
|
||||
}
|
||||
else -> {
|
||||
}
|
||||
|
@ -50,9 +52,8 @@ class DestroyFriendshipDialogFragment : BaseDialogFragment(), DialogInterface.On
|
|||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
val builder = AlertDialog.Builder(context!!)
|
||||
val nameFirst = preferences[nameFirstKey]
|
||||
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.setMessage(getString(R.string.unfollow_user_confirm_message, displayName))
|
||||
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.extension.accountKey
|
||||
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.model.ParcelableHashtag
|
||||
import org.mariotaku.twidere.model.ParcelableMedia
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.util.IntentUtils
|
||||
import org.mariotaku.twidere.util.MenuUtils
|
||||
import org.mariotaku.twidere.util.UserColorNameManager
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
import org.mariotaku.twidere.view.ExtendedRecyclerView
|
||||
import org.mariotaku.twidere.view.holder.UserViewHolder
|
||||
|
@ -71,7 +73,7 @@ open class ItemsListFragment : AbsContentListRecyclerViewFragment<VariousItemsAd
|
|||
|
||||
override fun onQuotedStatusClick(holder: IStatusViewHolder, position: Int) {
|
||||
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) {
|
||||
|
@ -147,7 +149,7 @@ open class ItemsListFragment : AbsContentListRecyclerViewFragment<VariousItemsAd
|
|||
val dummyAdapter = adapter.dummyAdapter
|
||||
val status = dummyAdapter.getStatus(contextMenuInfo.position)
|
||||
inflater.inflate(R.menu.action_status, menu)
|
||||
MenuUtils.setupForStatus(context, menu, preferences, userColorNameManager,
|
||||
MenuUtils.setupForStatus(context, menu, preferences, UserColorNameManager.get(context),
|
||||
status)
|
||||
}
|
||||
}
|
||||
|
@ -169,7 +171,7 @@ open class ItemsListFragment : AbsContentListRecyclerViewFragment<VariousItemsAd
|
|||
return true
|
||||
}
|
||||
return MenuUtils.handleStatusClick(context, this, fragmentManager!!,
|
||||
preferences, userColorNameManager, status, item)
|
||||
preferences, UserColorNameManager.get(context), status, item)
|
||||
}
|
||||
}
|
||||
return false
|
||||
|
|
|
@ -26,6 +26,7 @@ import android.support.v4.app.hasRunningLoadersSafe
|
|||
import android.support.v4.content.Loader
|
||||
import android.support.v7.widget.RecyclerView
|
||||
import android.view.KeyEvent
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.RequestManager
|
||||
import kotlinx.android.synthetic.main.fragment_content_recyclerview.*
|
||||
import org.mariotaku.twidere.adapter.ParcelableGroupsAdapter
|
||||
|
@ -66,7 +67,7 @@ abstract class ParcelableGroupsFragment : AbsContentListRecyclerViewFragment<Par
|
|||
}
|
||||
|
||||
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) {
|
||||
|
|
|
@ -26,6 +26,7 @@ import android.support.v4.app.hasRunningLoadersSafe
|
|||
import android.support.v4.content.Loader
|
||||
import android.support.v7.widget.RecyclerView
|
||||
import android.view.KeyEvent
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.RequestManager
|
||||
import kotlinx.android.synthetic.main.fragment_content_recyclerview.*
|
||||
import org.mariotaku.ktextension.set
|
||||
|
@ -71,7 +72,7 @@ abstract class ParcelableUserListsFragment : AbsContentListRecyclerViewFragment<
|
|||
}
|
||||
|
||||
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) {
|
||||
|
|
|
@ -26,15 +26,16 @@ import org.mariotaku.twidere.R
|
|||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_USER
|
||||
import org.mariotaku.twidere.model.ParcelableUser
|
||||
import org.mariotaku.twidere.promise.BlockPromises
|
||||
import org.mariotaku.twidere.util.UserColorNameManager
|
||||
|
||||
class ReportUserSpamDialogFragment : AbsUserMuteBlockDialogFragment() {
|
||||
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)
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
|
@ -44,7 +45,7 @@ class ReportUserSpamDialogFragment : AbsUserMuteBlockDialogFragment() {
|
|||
|
||||
override fun performUserAction(user: ParcelableUser, filterEverywhere: Boolean) {
|
||||
val accountKey = user.account_key ?: return
|
||||
BlockPromises.getInstance(context!!).report(accountKey, user.key, filterEverywhere)
|
||||
BlockPromises.get(context!!).report(accountKey, user.key, filterEverywhere)
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
|
|
@ -34,10 +34,12 @@ import org.mariotaku.microblog.library.model.microblog.SavedSearch
|
|||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.adapter.SavedSearchesAdapter
|
||||
import org.mariotaku.twidere.extension.accountKey
|
||||
import org.mariotaku.twidere.extension.get
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.loader.SavedSearchesLoader
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.model.event.SavedSearchDestroyedEvent
|
||||
import org.mariotaku.twidere.singleton.BusSingleton
|
||||
import org.mariotaku.twidere.util.IntentUtils.openTweetSearch
|
||||
import java.util.*
|
||||
|
||||
|
@ -67,13 +69,13 @@ class SavedSearchesListFragment : AbsContentListViewFragment<SavedSearchesAdapte
|
|||
}
|
||||
|
||||
override fun onStop() {
|
||||
bus.unregister(this)
|
||||
BusSingleton.unregister(this)
|
||||
super.onStop()
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
bus.register(this)
|
||||
BusSingleton.register(this)
|
||||
}
|
||||
|
||||
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.userKey
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.util.UserColorNameManager
|
||||
|
||||
class SetUserNicknameDialogFragment : BaseDialogFragment(), OnClickListener {
|
||||
|
||||
override fun onClick(dialog: DialogInterface, which: Int) {
|
||||
val editName = (dialog as AlertDialog).editName
|
||||
val userKey = arguments!!.userKey!!
|
||||
val manager = UserColorNameManager.get(context!!)
|
||||
when (which) {
|
||||
DialogInterface.BUTTON_POSITIVE -> {
|
||||
if (editName.empty) {
|
||||
userColorNameManager.clearUserNickname(userKey)
|
||||
manager.clearUserNickname(userKey)
|
||||
} else {
|
||||
userColorNameManager.setUserNickname(userKey, editName.text.toString())
|
||||
manager.setUserNickname(userKey, editName.text.toString())
|
||||
}
|
||||
}
|
||||
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.constant.IntentConstants.EXTRA_EXTRAS
|
||||
import org.mariotaku.twidere.constant.localTrendsWoeIdKey
|
||||
import org.mariotaku.twidere.extension.get
|
||||
import org.mariotaku.twidere.fragment.iface.IFloatingActionButtonFragment
|
||||
import org.mariotaku.twidere.model.FloatingActionButtonInfo
|
||||
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.promise.GetTrendsPromise
|
||||
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.Utils
|
||||
|
||||
|
@ -129,11 +129,11 @@ class TrendsSuggestionsFragment : AbsContentListViewFragment<TrendsAdapter>(), L
|
|||
override fun onStart() {
|
||||
super.onStart()
|
||||
loaderManager.restartLoader(0, null, this)
|
||||
bus.register(this)
|
||||
BusSingleton.register(this)
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
bus.unregister(this)
|
||||
BusSingleton.unregister(this)
|
||||
super.onStop()
|
||||
}
|
||||
|
||||
|
|
|
@ -59,6 +59,7 @@ import android.view.View.OnTouchListener
|
|||
import android.view.animation.AnimationUtils
|
||||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import com.bumptech.glide.Glide
|
||||
import com.squareup.otto.Subscribe
|
||||
import kotlinx.android.synthetic.main.fragment_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.provider.TwidereDataStore.CachedRelationships
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedUsers
|
||||
import org.mariotaku.twidere.singleton.BusSingleton
|
||||
import org.mariotaku.twidere.task.UpdateAccountInfoPromise
|
||||
import org.mariotaku.twidere.text.TwidereURLSpan
|
||||
import org.mariotaku.twidere.util.*
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback
|
||||
import org.mariotaku.twidere.util.TwidereLinkify.OnLinkClickListener
|
||||
import org.mariotaku.twidere.util.UserColorNameManager.UserColorChangedListener
|
||||
import org.mariotaku.twidere.util.UserColorNameManager.UserNicknameChangedListener
|
||||
import org.mariotaku.twidere.util.UserColorNameManager.*
|
||||
import org.mariotaku.twidere.util.shortcut.ShortcutCreator
|
||||
import org.mariotaku.twidere.util.support.ActivitySupport
|
||||
import org.mariotaku.twidere.util.support.ActivitySupport.TaskDescriptionCompat
|
||||
|
@ -235,9 +236,9 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
|||
if (resultCode == Activity.RESULT_OK) {
|
||||
if (data == null) return
|
||||
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) {
|
||||
userColorNameManager.clearUserColor(user.key)
|
||||
UserColorNameManager.get(context!!).clearUserColor(user.key)
|
||||
}
|
||||
}
|
||||
REQUEST_ADD_TO_LIST -> {
|
||||
|
@ -249,7 +250,8 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
|||
REQUEST_SELECT_ACCOUNT -> {
|
||||
if (resultCode == Activity.RESULT_OK) {
|
||||
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
|
||||
if (liveUser.account?.type == AccountType.MASTODON && liveUser.account?.key?.host != selectedAccountKey.host) {
|
||||
userKey = AcctPlaceholderUserKey(user.key.host)
|
||||
|
@ -283,7 +285,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
|||
return
|
||||
}
|
||||
|
||||
Utils.setNdefPushMessageCallback(activity, CreateNdefMessageCallback cb@ {
|
||||
Utils.setNdefPushMessageCallback(activity, CreateNdefMessageCallback cb@{
|
||||
val user = liveUser.user ?: return@cb null
|
||||
val link = LinkCreator.getUserWebLink(user) ?: return@cb null
|
||||
return@cb NdefMessage(arrayOf(NdefRecord.createUri(link)))
|
||||
|
@ -352,16 +354,18 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
|||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
bus.register(this)
|
||||
userColorNameManager.registerColorChangedListener(this)
|
||||
userColorNameManager.registerNicknameChangedListener(this)
|
||||
BusSingleton.register(this)
|
||||
val manager = UserColorNameManager.get(context!!)
|
||||
manager.registerColorChangedListener(this)
|
||||
manager.registerNicknameChangedListener(this)
|
||||
}
|
||||
|
||||
|
||||
override fun onStop() {
|
||||
userColorNameManager.unregisterColorChangedListener(this)
|
||||
userColorNameManager.unregisterNicknameChangedListener(this)
|
||||
bus.unregister(this)
|
||||
val manager = UserColorNameManager.get(context!!)
|
||||
manager.unregisterColorChangedListener(this)
|
||||
manager.unregisterNicknameChangedListener(this)
|
||||
BusSingleton.unregister(this)
|
||||
super.onStop()
|
||||
}
|
||||
|
||||
|
@ -390,7 +394,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
|||
val mentionItem = menu.findItem(R.id.mention)
|
||||
if (mentionItem != null) {
|
||||
mentionItem.title = getString(R.string.mention_user_name,
|
||||
userColorNameManager.getDisplayName(user))
|
||||
UserColorNameManager.get(this.context!!).getDisplayName(user))
|
||||
}
|
||||
|
||||
menu.setItemAvailability(R.id.qr_code, linkAvailable)
|
||||
|
@ -474,6 +478,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
|||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
val context = context ?: return false
|
||||
val manager = UserColorNameManager.get(context)
|
||||
val fragmentManager = fragmentManager ?: return false
|
||||
val user = liveUser.user ?: return false
|
||||
val accountKey = user.account_key ?: return false
|
||||
|
@ -482,7 +487,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
|||
R.id.block -> {
|
||||
if (userRelationship == null) return true
|
||||
if (userRelationship.blocking) {
|
||||
BlockPromises.getInstance(context).unblock(accountKey, user.key)
|
||||
BlockPromises.get(context).unblock(accountKey, user.key)
|
||||
} else {
|
||||
CreateUserBlockDialogFragment.show(fragmentManager, user)
|
||||
}
|
||||
|
@ -532,16 +537,16 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
|||
}
|
||||
R.id.set_color -> {
|
||||
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_CLEAR_BUTTON, true)
|
||||
startActivityForResult(intent, REQUEST_SET_COLOR)
|
||||
}
|
||||
R.id.clear_nickname -> {
|
||||
userColorNameManager.clearUserNickname(user.key)
|
||||
manager.clearUserNickname(user.key)
|
||||
}
|
||||
R.id.set_nickname -> {
|
||||
val nick = userColorNameManager.getUserNickname(user.key)
|
||||
val nick = manager.getUserNickname(user.key)
|
||||
SetUserNicknameDialogFragment.show(fragmentManager, user.key, nick)
|
||||
}
|
||||
R.id.add_to_list -> {
|
||||
|
@ -565,7 +570,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
|||
if (userRelationship.following) {
|
||||
DestroyFriendshipDialogFragment.show(fragmentManager, user)
|
||||
} else {
|
||||
FriendshipPromises.getInstance(context).create(accountKey, user.key, user.screen_name)
|
||||
FriendshipPromises.get(context).create(accountKey, user.key, user.screen_name)
|
||||
}
|
||||
}
|
||||
return true
|
||||
|
@ -810,7 +815,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
|||
val userRelationship = liveRelationship.relationship ?: return
|
||||
when {
|
||||
userRelationship.blocking -> {
|
||||
BlockPromises.getInstance(context).unblock(accountKey, user.key)
|
||||
BlockPromises.get(context).unblock(accountKey, user.key)
|
||||
}
|
||||
userRelationship.blocked_by -> {
|
||||
CreateUserBlockDialogFragment.show(childFragmentManager, user)
|
||||
|
@ -819,7 +824,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
|||
DestroyFriendshipDialogFragment.show(fragmentManager, user)
|
||||
}
|
||||
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
|
||||
if (user != null) {
|
||||
val name = userColorNameManager.getDisplayName(user)
|
||||
val name = UserColorNameManager.get(activity).getDisplayName(user)
|
||||
ActivitySupport.setTaskDescription(activity, TaskDescriptionCompat(name, null, taskColor))
|
||||
} else {
|
||||
ActivitySupport.setTaskDescription(activity, TaskDescriptionCompat(null, null, taskColor))
|
||||
|
@ -1121,8 +1126,8 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
|||
followContainer.drawEnd(user.account_color)
|
||||
|
||||
linkHandlerTitle = run {
|
||||
val nameNoNick = UserColorNameManager.decideDisplayName(null, user.name,
|
||||
user.screen_name, userColorNameManager.nameFirst)
|
||||
val nameNoNick = UserColorNameManager.get(activity).decideDisplayName(null, user.name,
|
||||
user.screen_name)
|
||||
return@run bidiFormatter.unicodeWrap(when {
|
||||
user.nickname.isNullOrEmpty() -> nameNoNick
|
||||
else -> getString(R.string.name_with_nickname, nameNoNick, user.nickname)
|
||||
|
@ -1147,7 +1152,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
|||
|
||||
if (user.description_unescaped != null) {
|
||||
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)
|
||||
}
|
||||
description.spannable = text
|
||||
|
@ -1200,10 +1205,10 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
|||
else -> Chameleon.getOverrideTheme(activity, activity).colorPrimary
|
||||
})
|
||||
val defWidth = resources.displayMetrics.widthPixels
|
||||
requestManager.loadProfileBanner(activity, user, defWidth).into(profileBanner)
|
||||
requestManager.loadOriginalProfileImage(activity, user, profileImage.style,
|
||||
Glide.with(this).loadProfileBanner(activity, user, defWidth).into(profileBanner)
|
||||
Glide.with(this).loadOriginalProfileImage(activity, user, profileImage.style,
|
||||
profileImage.cornerRadius, profileImage.cornerRadiusRatio)
|
||||
.thumbnail(requestManager.loadProfileImage(activity, user, profileImage.style,
|
||||
.thumbnail(Glide.with(this).loadProfileImage(activity, user, profileImage.style,
|
||||
profileImage.cornerRadius, profileImage.cornerRadiusRatio,
|
||||
getString(R.string.profile_image_size))).into(profileImage)
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@ import android.support.v4.app.FragmentActivity
|
|||
import android.view.*
|
||||
import android.view.View.OnClickListener
|
||||
import android.widget.ImageView
|
||||
import com.bumptech.glide.Glide
|
||||
import com.twitter.Validator
|
||||
import kotlinx.android.synthetic.main.fragment_user_profile_editor.*
|
||||
import nl.komponents.kovenant.Promise
|
||||
|
@ -253,11 +254,11 @@ class UserProfileEditorFragment : BaseFragment(), OnSizeChangedListener,
|
|||
editLocation.setText(user.location)
|
||||
editUrl.setText(user.urlFull)
|
||||
|
||||
requestManager.loadProfileImage(activity, user,
|
||||
Glide.with(this).loadProfileImage(activity, user,
|
||||
ImageShapeStyle.SHAPE_RECTANGLE).into(profileImage)
|
||||
requestManager.loadProfileBanner(activity, user, resources.displayMetrics.widthPixels)
|
||||
Glide.with(this).loadProfileBanner(activity, user, resources.displayMetrics.widthPixels)
|
||||
.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
|
||||
backgroundColor.color = user.background_color
|
||||
|
|
|
@ -24,6 +24,7 @@ import android.graphics.Bitmap
|
|||
import android.graphics.Canvas
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.media.MediaScannerConnection
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
|
@ -34,7 +35,6 @@ import android.view.View
|
|||
import android.view.ViewGroup
|
||||
import android.widget.Toast
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.load.resource.drawable.GlideDrawable
|
||||
import com.bumptech.glide.request.target.Target
|
||||
import io.nayuki.qrcodegen.QrCode
|
||||
import io.nayuki.qrcodegen.QrSegment
|
||||
|
@ -203,7 +203,7 @@ class UserQrDialogFragment : BaseDialogFragment() {
|
|||
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())
|
||||
if (isDetached || dialog == null || activity.isFinishing) {
|
||||
return Promise.ofFail(InterruptedException())
|
||||
|
@ -217,13 +217,13 @@ class UserQrDialogFragment : BaseDialogFragment() {
|
|||
val profileImageSize = context.getString(R.string.profile_image_size)
|
||||
try {
|
||||
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) {
|
||||
// Ignore
|
||||
}
|
||||
// Return fallback profile image
|
||||
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.data.CursorObjectDataSourceFactory
|
||||
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.quoted
|
||||
import org.mariotaku.twidere.extension.queryOne
|
||||
import org.mariotaku.twidere.extension.showContextMenuForChild
|
||||
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.ContentRefreshParam
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Activities
|
||||
import org.mariotaku.twidere.singleton.BusSingleton
|
||||
import org.mariotaku.twidere.task.statuses.GetStatusesTask
|
||||
import org.mariotaku.twidere.util.*
|
||||
import org.mariotaku.twidere.util.UserColorNameManager.Companion
|
||||
import org.mariotaku.twidere.view.ExtendedRecyclerView
|
||||
import org.mariotaku.twidere.view.holder.ActivityTitleSummaryViewHolder
|
||||
import org.mariotaku.twidere.view.holder.GapViewHolder
|
||||
|
@ -148,11 +152,11 @@ abstract class AbsActivitiesFragment : AbsContentRecyclerViewFragment<Parcelable
|
|||
override fun onStart() {
|
||||
super.onStart()
|
||||
recyclerView.addOnScrollListener(scrollHandler)
|
||||
bus.register(busEventHandler)
|
||||
BusSingleton.register(busEventHandler)
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
bus.unregister(busEventHandler)
|
||||
BusSingleton.unregister(busEventHandler)
|
||||
recyclerView.removeOnScrollListener(scrollHandler)
|
||||
if (userVisibleHint) {
|
||||
saveReadPosition(layoutManager.firstVisibleItemPosition)
|
||||
|
@ -189,7 +193,7 @@ abstract class AbsActivitiesFragment : AbsContentRecyclerViewFragment<Parcelable
|
|||
val contextMenuInfo = menuInfo as ExtendedRecyclerView.ContextMenuInfo
|
||||
val status = adapter.getActivity(contextMenuInfo.position).activityStatus ?: return
|
||||
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 {
|
||||
|
@ -214,7 +218,7 @@ abstract class AbsActivitiesFragment : AbsContentRecyclerViewFragment<Parcelable
|
|||
return true
|
||||
}
|
||||
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) {
|
||||
val status = getActivityStatus(position)?.takeIf { it.quoted_id != null } ?: return
|
||||
IntentUtils.openStatus(context!!, status.account_key, status.quoted_id)
|
||||
val status = getActivityStatus(position)?.takeIf { it.quoted?.id != null } ?: return
|
||||
IntentUtils.openStatus(context!!, status.account_key, status.quoted?.id!!)
|
||||
}
|
||||
|
||||
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.Checkable
|
||||
import android.widget.Toast
|
||||
import com.bumptech.glide.Glide
|
||||
import kotlinx.android.synthetic.main.dialog_filter_rule_editor.*
|
||||
import org.mariotaku.ktextension.ContentValues
|
||||
import org.mariotaku.ktextension.set
|
||||
|
@ -115,7 +116,7 @@ class AddEditItemFragment : BaseDialogFragment() {
|
|||
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
|
||||
editText.setAdapter(when (contentUri) {
|
||||
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
|
||||
if (accountKey != null) {
|
||||
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.ThemeUtils
|
||||
import org.mariotaku.twidere.util.UserColorNameManager
|
||||
import org.mariotaku.twidere.util.UserColorNameManager.Companion
|
||||
import javax.inject.Inject
|
||||
|
||||
class FilteredUsersFragment : BaseFiltersFragment() {
|
||||
|
@ -163,7 +164,7 @@ class FilteredUsersFragment : BaseFiltersFragment() {
|
|||
val adapter = this.adapter as FilterUsersListAdapter
|
||||
val item = adapter.getFilterItem(position) ?: 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) {
|
||||
|
|
|
@ -32,13 +32,13 @@ import android.view.LayoutInflater
|
|||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
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.source.ExtractorMediaSource
|
||||
import com.google.android.exoplayer2.source.TrackGroupArray
|
||||
import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection
|
||||
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.DefaultBandwidthMeter
|
||||
import com.google.android.exoplayer2.upstream.HttpDataSource
|
||||
|
@ -111,10 +111,7 @@ class ExoPlayerPageFragment : MediaViewerFragment(), IBaseFragment<ExoPlayerPage
|
|||
AccountManager.get(context).getDetailsOrThrow(accountKey, true)
|
||||
}
|
||||
|
||||
private val playerListener = object : Player.EventListener {
|
||||
override fun onLoadingChanged(isLoading: Boolean) {
|
||||
|
||||
}
|
||||
private val playerListener = object : Player.DefaultEventListener() {
|
||||
|
||||
override fun onPlayerError(error: ExoPlaybackException) {
|
||||
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?) {
|
||||
|
|
|
@ -42,6 +42,7 @@ import android.support.v7.widget.Toolbar
|
|||
import android.view.*
|
||||
import android.widget.CompoundButton
|
||||
import android.widget.EditText
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.RequestManager
|
||||
import kotlinx.android.synthetic.main.activity_home_content.view.*
|
||||
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.EXTRA_ACCOUNT_KEY
|
||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_USER
|
||||
import org.mariotaku.twidere.constant.nameFirstKey
|
||||
import org.mariotaku.twidere.constant.profileImageStyleKey
|
||||
import org.mariotaku.twidere.exception.UnsupportedCountIndexException
|
||||
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.provider.TwidereDataStore.Messages.Conversations
|
||||
import org.mariotaku.twidere.util.IntentUtils
|
||||
import org.mariotaku.twidere.util.UserColorNameManager
|
||||
import org.mariotaku.twidere.view.holder.SimpleUserViewHolder
|
||||
|
||||
/**
|
||||
|
@ -124,7 +125,7 @@ class MessageConversationInfoFragment : BaseFragment(), IToolBarSupportFragment,
|
|||
(activity as? AppCompatActivity)?.supportActionBar?.setDisplayShowTitleEnabled(false)
|
||||
val theme = Chameleon.getOverrideTheme(context, activity)
|
||||
|
||||
adapter = ConversationInfoAdapter(context, requestManager)
|
||||
adapter = ConversationInfoAdapter(context, Glide.with(this))
|
||||
adapter.listener = object : ConversationInfoAdapter.Listener {
|
||||
override fun onUserClick(position: Int) {
|
||||
val user = adapter.getUser(position) ?: return
|
||||
|
@ -257,12 +258,12 @@ class MessageConversationInfoFragment : BaseFragment(), IToolBarSupportFragment,
|
|||
return
|
||||
}
|
||||
|
||||
val name = data.getTitle(context, userColorNameManager, preferences[nameFirstKey]).first
|
||||
val name = data.getTitle(context, UserColorNameManager.get(context)).first
|
||||
val summary = data.getSubtitle(context)
|
||||
|
||||
@ImageShapeStyle val profileImageStyle: Int = preferences[profileImageStyleKey]
|
||||
requestManager.loadProfileImage(context, data, profileImageStyle).into(conversationAvatar)
|
||||
requestManager.loadProfileImage(context, data, profileImageStyle, 0f,
|
||||
Glide.with(this).loadProfileImage(context, data, profileImageStyle).into(conversationAvatar)
|
||||
Glide.with(this).loadProfileImage(context, data, profileImageStyle, 0f,
|
||||
0f, ProfileImageSize.REASONABLY_SMALL).into(appBarIcon)
|
||||
appBarTitle.spannable = name
|
||||
conversationTitle.spannable = name
|
||||
|
@ -292,7 +293,7 @@ class MessageConversationInfoFragment : BaseFragment(), IToolBarSupportFragment,
|
|||
|
||||
private fun performDestroyConversation() {
|
||||
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
|
||||
f.dismissProgressDialog("leave_conversation_progress")
|
||||
f.activity?.setResult(RESULT_CLOSE)
|
||||
|
@ -302,7 +303,7 @@ class MessageConversationInfoFragment : BaseFragment(), IToolBarSupportFragment,
|
|||
|
||||
private fun performClearMessages() {
|
||||
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
|
||||
f.dismissDialogThen("clear_messages_progress") {
|
||||
if (succeed) {
|
||||
|
@ -315,7 +316,7 @@ class MessageConversationInfoFragment : BaseFragment(), IToolBarSupportFragment,
|
|||
private fun performAddParticipant(user: ParcelableUser) {
|
||||
ProgressDialogFragment.show(childFragmentManager, "add_participant_progress")
|
||||
val weakThis by weak(this)
|
||||
ConversationPromises.getInstance(context!!).addParticipants(accountKey,
|
||||
ConversationPromises.get(context!!).addParticipants(accountKey,
|
||||
conversationId, listOf(user)).alwaysUi {
|
||||
weakThis?.dismissDialogThen("add_participant_progress") {
|
||||
loaderManager.restartLoader(0, null, this)
|
||||
|
@ -325,7 +326,7 @@ class MessageConversationInfoFragment : BaseFragment(), IToolBarSupportFragment,
|
|||
|
||||
private fun performSetNotificationDisabled(disabled: Boolean) {
|
||||
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")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,6 +33,7 @@ import android.text.SpannableStringBuilder
|
|||
import android.text.TextUtils
|
||||
import android.text.style.ReplacementSpan
|
||||
import android.view.*
|
||||
import com.bumptech.glide.Glide
|
||||
import kotlinx.android.synthetic.main.fragment_messages_conversation_new.*
|
||||
import org.mariotaku.kpreferences.get
|
||||
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.text.MarkForDeleteSpan
|
||||
import org.mariotaku.twidere.util.IntentUtils
|
||||
import org.mariotaku.twidere.util.UserColorNameManager
|
||||
import org.mariotaku.twidere.util.view.SimpleTextWatcher
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
|
@ -69,10 +71,10 @@ class MessageNewConversationFragment : BaseFragment() {
|
|||
set(value) {
|
||||
val roundRadius = resources.getDimension(R.dimen.element_spacing_xsmall)
|
||||
val spanPadding = resources.getDimension(R.dimen.element_spacing_xsmall)
|
||||
val nameFirst = preferences[nameFirstKey]
|
||||
editParticipants.text = SpannableStringBuilder().apply {
|
||||
val manager = UserColorNameManager.get(context!!)
|
||||
value.forEach { user ->
|
||||
val displayName = userColorNameManager.getDisplayName(user)
|
||||
val displayName = manager.getDisplayName(user)
|
||||
val span = ParticipantSpan(user, displayName, roundRadius, spanPadding)
|
||||
appendCompat(user.screen_name, span, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
|
||||
append(" ")
|
||||
|
@ -89,7 +91,7 @@ class MessageNewConversationFragment : BaseFragment() {
|
|||
super.onActivityCreated(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
linkHandlerTitle = getString(R.string.title_direct_messages_conversation_new)
|
||||
usersAdapter = SelectableUsersAdapter(context!!, requestManager)
|
||||
usersAdapter = SelectableUsersAdapter(context!!, Glide.with(this))
|
||||
recyclerView.adapter = usersAdapter
|
||||
recyclerView.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
|
||||
|
||||
|
@ -140,10 +142,9 @@ class MessageNewConversationFragment : BaseFragment() {
|
|||
}
|
||||
}
|
||||
})
|
||||
val nameFirst = preferences[nameFirstKey]
|
||||
val roundRadius = 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 ->
|
||||
val text: Editable = editParticipants.editableText ?: return@itemChecked false
|
||||
val user = usersAdapter.getUser(pos)
|
||||
if (checked) {
|
||||
|
@ -154,7 +155,7 @@ class MessageNewConversationFragment : BaseFragment() {
|
|||
if (start < 0 || end < 0 || end < start) return@forEach
|
||||
text.delete(start, end)
|
||||
}
|
||||
val displayName = userColorNameManager.getDisplayName(user)
|
||||
val displayName = UserColorNameManager.get(context!!).getDisplayName(user)
|
||||
val span = ParticipantSpan(user, displayName, roundRadius, spanPadding)
|
||||
text.appendCompat(user.screen_name, span, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
|
||||
text.append(" ")
|
||||
|
|
|
@ -40,6 +40,7 @@ import android.support.v7.widget.LinearLayoutManager
|
|||
import android.support.v7.widget.RecyclerView
|
||||
import android.support.v7.widget.Toolbar
|
||||
import android.view.*
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.RequestManager
|
||||
import com.squareup.otto.Subscribe
|
||||
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.provider.TwidereDataStore.Messages
|
||||
import org.mariotaku.twidere.service.LengthyOperationsService
|
||||
import org.mariotaku.twidere.singleton.BusSingleton
|
||||
import org.mariotaku.twidere.task.twitter.message.GetMessagesTask
|
||||
import org.mariotaku.twidere.util.*
|
||||
import org.mariotaku.twidere.view.ExtendedRecyclerView
|
||||
|
@ -144,7 +146,7 @@ class MessagesConversationFragment : AbsContentListRecyclerViewFragment<Messages
|
|||
return recyclerView.showContextMenuForChild(holder.itemView)
|
||||
}
|
||||
}
|
||||
mediaPreviewAdapter = MediaPreviewAdapter(activity, requestManager)
|
||||
mediaPreviewAdapter = MediaPreviewAdapter(activity, Glide.with(this))
|
||||
|
||||
mediaPreviewAdapter.listener = object : MediaPreviewAdapter.Listener {
|
||||
override fun onRemoveClick(position: Int, holder: MediaPreviewViewHolder) {
|
||||
|
@ -210,11 +212,11 @@ class MessagesConversationFragment : AbsContentListRecyclerViewFragment<Messages
|
|||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
bus.register(this)
|
||||
BusSingleton.register(this)
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
bus.unregister(this)
|
||||
BusSingleton.unregister(this)
|
||||
super.onStop()
|
||||
}
|
||||
|
||||
|
@ -274,7 +276,7 @@ class MessagesConversationFragment : AbsContentListRecyclerViewFragment<Messages
|
|||
}
|
||||
|
||||
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 {
|
||||
|
@ -304,7 +306,7 @@ class MessagesConversationFragment : AbsContentListRecyclerViewFragment<Messages
|
|||
R.id.recyclerView -> {
|
||||
val message = adapter.getMessage(menuInfo.position)
|
||||
val conversation = adapter.conversation
|
||||
menu.setHeaderTitle(message.getSummaryText(context!!, userColorNameManager, conversation,
|
||||
menu.setHeaderTitle(message.getSummaryText(context!!, UserColorNameManager.get(context!!), conversation,
|
||||
preferences[nameFirstKey]))
|
||||
activity!!.menuInflater.inflate(R.menu.menu_conversation_message_item, menu)
|
||||
}
|
||||
|
@ -328,7 +330,7 @@ class MessagesConversationFragment : AbsContentListRecyclerViewFragment<Messages
|
|||
}
|
||||
R.id.delete -> {
|
||||
// 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)
|
||||
}
|
||||
}
|
||||
|
@ -514,15 +516,14 @@ class MessagesConversationFragment : AbsContentListRecyclerViewFragment<Messages
|
|||
|
||||
private fun markRead() {
|
||||
// TODO: Promise progress
|
||||
MessagePromises.getInstance(context!!).markRead(accountKey, conversationId)
|
||||
MessagePromises.get(context!!).markRead(accountKey, conversationId)
|
||||
}
|
||||
|
||||
private fun updateConversationStatus() {
|
||||
val activity = this.activity ?: return
|
||||
if (isDetached || activity.isFinishing) return
|
||||
val conversation = adapter.conversation ?: return
|
||||
val title = conversation.getTitle(activity, userColorNameManager,
|
||||
preferences[nameFirstKey]).first
|
||||
val title = conversation.getTitle(activity, UserColorNameManager.get(context!!)).first
|
||||
val subtitle = conversation.getSubtitle(activity)
|
||||
activity.title = title
|
||||
val readOnly = conversation.readOnly
|
||||
|
@ -550,7 +551,7 @@ class MessagesConversationFragment : AbsContentListRecyclerViewFragment<Messages
|
|||
TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(conversationTitle, null,
|
||||
null, stateIcon, null)
|
||||
|
||||
requestManager.loadProfileImage(activity, conversation, preferences[profileImageStyleKey])
|
||||
Glide.with(this).loadProfileImage(activity, conversation, preferences[profileImageStyleKey])
|
||||
.into(conversationAvatar)
|
||||
}
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ import android.view.ContextMenu
|
|||
import android.view.MenuInflater
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.RequestManager
|
||||
import com.squareup.otto.Subscribe
|
||||
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.LoadMorePosition
|
||||
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.data.CursorObjectDataSourceFactory
|
||||
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.promise.MessagePromises
|
||||
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.util.DataStoreUtils
|
||||
import org.mariotaku.twidere.util.ErrorInfoStore
|
||||
import org.mariotaku.twidere.util.IntentUtils
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
import org.mariotaku.twidere.util.*
|
||||
import org.mariotaku.twidere.view.ExtendedRecyclerView
|
||||
|
||||
/**
|
||||
|
@ -102,11 +100,11 @@ class MessagesEntriesFragment : AbsContentListRecyclerViewFragment<MessagesEntri
|
|||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
bus.register(this)
|
||||
BusSingleton.register(this)
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
bus.unregister(this)
|
||||
BusSingleton.unregister(this)
|
||||
super.onStop()
|
||||
}
|
||||
|
||||
|
@ -124,7 +122,7 @@ class MessagesEntriesFragment : AbsContentListRecyclerViewFragment<MessagesEntri
|
|||
}
|
||||
|
||||
override fun onCreateAdapter(context: Context, requestManager: RequestManager): MessagesEntriesAdapter {
|
||||
return MessagesEntriesAdapter(context, this.requestManager)
|
||||
return MessagesEntriesAdapter(context, Glide.with(this))
|
||||
}
|
||||
|
||||
override fun triggerRefresh(): Boolean {
|
||||
|
@ -189,8 +187,7 @@ class MessagesEntriesFragment : AbsContentListRecyclerViewFragment<MessagesEntri
|
|||
val conversation = adapter.getConversation(info.position)
|
||||
val inflater = MenuInflater(context)
|
||||
inflater.inflate(R.menu.context_message_entry, menu)
|
||||
menu.setHeaderTitle(conversation.getTitle(context!!, userColorNameManager,
|
||||
preferences[nameFirstKey]).first)
|
||||
menu.setHeaderTitle(conversation.getTitle(context!!, UserColorNameManager.get(context!!)).first)
|
||||
}
|
||||
|
||||
override fun onContextItemSelected(item: MenuItem): Boolean {
|
||||
|
@ -200,7 +197,7 @@ class MessagesEntriesFragment : AbsContentListRecyclerViewFragment<MessagesEntri
|
|||
R.id.mark_read -> {
|
||||
val conversation = adapter.getConversation(menuInfo.position)
|
||||
// TODO: Promise progress
|
||||
MessagePromises.getInstance(context!!).markRead(conversation.account_key, conversation.id)
|
||||
MessagePromises.get(context!!).markRead(conversation.account_key, conversation.id)
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@ import android.support.v7.app.AlertDialog
|
|||
import android.support.v7.app.AlertDialog.Builder
|
||||
import android.view.View
|
||||
import android.widget.Toast
|
||||
import com.bumptech.glide.Glide
|
||||
import nl.komponents.kovenant.Promise
|
||||
import nl.komponents.kovenant.combine.and
|
||||
import nl.komponents.kovenant.task
|
||||
|
@ -70,7 +71,7 @@ abstract class AbsStatusDialogFragment : BaseDialogFragment() {
|
|||
|
||||
builder.setupAlertDialog()
|
||||
|
||||
adapter = DummyItemAdapter(context!!, requestManager = requestManager)
|
||||
adapter = DummyItemAdapter(context!!, requestManager = Glide.with(this))
|
||||
adapter.showCardActions = false
|
||||
adapter.showAccountsColor = true
|
||||
|
||||
|
|
|
@ -32,6 +32,8 @@ import org.mariotaku.twidere.extension.status
|
|||
import org.mariotaku.twidere.fragment.BaseDialogFragment
|
||||
import org.mariotaku.twidere.fragment.CreateUserBlockDialogFragment
|
||||
import org.mariotaku.twidere.model.ParcelableStatus
|
||||
import org.mariotaku.twidere.util.UserColorNameManager
|
||||
import org.mariotaku.twidere.util.UserColorNameManager.Companion
|
||||
|
||||
class BlockStatusUsersDialogFragment : BaseDialogFragment() {
|
||||
|
||||
|
@ -41,9 +43,8 @@ class BlockStatusUsersDialogFragment : BaseDialogFragment() {
|
|||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
val builder = AlertDialog.Builder(context!!)
|
||||
val referencedUsers = status.referencedUsers
|
||||
val nameFirst = preferences[nameFirstKey]
|
||||
val displayNames = referencedUsers.map {
|
||||
userColorNameManager.getDisplayName(it)
|
||||
UserColorNameManager.get(context!!).getDisplayName(it)
|
||||
}.toTypedArray()
|
||||
builder.setTitle(R.string.action_status_block_users)
|
||||
builder.setItems(displayNames) { _, which ->
|
||||
|
|
|
@ -34,7 +34,7 @@ class DestroyStatusDialogFragment : AbsSimpleStatusOperationDialogFragment() {
|
|||
get() = getString(R.string.destroy_status_confirm_message)
|
||||
|
||||
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 {
|
||||
|
|
|
@ -32,6 +32,8 @@ import org.mariotaku.twidere.extension.status
|
|||
import org.mariotaku.twidere.fragment.BaseDialogFragment
|
||||
import org.mariotaku.twidere.fragment.CreateUserMuteDialogFragment
|
||||
import org.mariotaku.twidere.model.ParcelableStatus
|
||||
import org.mariotaku.twidere.util.UserColorNameManager
|
||||
import org.mariotaku.twidere.util.UserColorNameManager.Companion
|
||||
|
||||
class MuteStatusUsersDialogFragment : BaseDialogFragment() {
|
||||
|
||||
|
@ -43,7 +45,7 @@ class MuteStatusUsersDialogFragment : BaseDialogFragment() {
|
|||
val referencedUsers = status.referencedUsers
|
||||
val nameFirst = preferences[nameFirstKey]
|
||||
val displayNames = referencedUsers.map {
|
||||
userColorNameManager.getDisplayName(it)
|
||||
UserColorNameManager.get(context!!).getDisplayName(it)
|
||||
}.toTypedArray()
|
||||
builder.setTitle(R.string.action_status_mute_users)
|
||||
builder.setItems(displayNames) { _, which ->
|
||||
|
|
|
@ -41,6 +41,7 @@ import org.mariotaku.twidere.constant.quickSendKey
|
|||
import org.mariotaku.twidere.extension.*
|
||||
import org.mariotaku.twidere.extension.model.canRetweet
|
||||
import org.mariotaku.twidere.extension.model.isAccountRetweet
|
||||
import org.mariotaku.twidere.extension.model.quoted
|
||||
import org.mariotaku.twidere.fragment.BaseDialogFragment
|
||||
import org.mariotaku.twidere.model.*
|
||||
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
|
||||
} else {
|
||||
View.GONE
|
||||
|
@ -116,7 +117,7 @@ class RetweetQuoteDialogFragment : AbsStatusDialogFragment() {
|
|||
|
||||
getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener {
|
||||
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()
|
||||
} else if (retweetOrQuote(account, status, showProtectedConfirm)) {
|
||||
dismiss()
|
||||
|
@ -213,12 +214,12 @@ class RetweetQuoteDialogFragment : AbsStatusDialogFragment() {
|
|||
commentText = getString(R.string.fanfou_repost_format, editingComment,
|
||||
status.user_screen_name, status.text_plain)
|
||||
} else {
|
||||
if (status.quoted_user_is_protected && showProtectedConfirmation) {
|
||||
if (status.quoted?.user_is_protected == true && showProtectedConfirmation) {
|
||||
return false
|
||||
}
|
||||
commentText = getString(R.string.fanfou_repost_format, editingComment,
|
||||
status.quoted_user_screen_name, status.quoted_text_plain)
|
||||
update.repost_status_id = status.quoted_id
|
||||
status.quoted?.user_screen_name, status.quoted?.text_plain)
|
||||
update.repost_status_id = status.quoted?.id
|
||||
}
|
||||
if (FanfouValidator.calculateLength(commentText) > FanfouValidator.textLimit) {
|
||||
commentText = commentText.substring(0, Math.max(FanfouValidator.textLimit,
|
||||
|
@ -229,7 +230,7 @@ class RetweetQuoteDialogFragment : AbsStatusDialogFragment() {
|
|||
val statusLink = if (!status.is_quote || !quoteOriginalStatus) {
|
||||
LinkCreator.getStatusWebLink(status)
|
||||
} else {
|
||||
LinkCreator.getQuotedStatusWebLink(status)
|
||||
LinkCreator.getQuotedStatusWebLink(status.quoted!!)
|
||||
}
|
||||
update.attachment_url = statusLink?.toString()
|
||||
commentText = editingComment
|
||||
|
|
|
@ -67,6 +67,7 @@ import org.mariotaku.twidere.extension.*
|
|||
import org.mariotaku.twidere.extension.data.observe
|
||||
import org.mariotaku.twidere.extension.model.newMicroBlogInstance
|
||||
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.fragment.BaseDialogFragment
|
||||
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.pagination.Pagination
|
||||
import org.mariotaku.twidere.model.pagination.SinceMaxPagination
|
||||
import org.mariotaku.twidere.singleton.BusSingleton
|
||||
import org.mariotaku.twidere.task.AbsAccountRequestTask
|
||||
import org.mariotaku.twidere.util.*
|
||||
import org.mariotaku.twidere.util.ContentScrollHandler.ContentListSupport
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback
|
||||
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.ExtendedRecyclerView
|
||||
import org.mariotaku.twidere.view.holder.GapViewHolder
|
||||
|
@ -160,16 +163,15 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
|
|||
private lateinit var statusActivitySummaryLiveData: StatusActivitySummaryLiveData
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
val activity = activity ?: return
|
||||
when (requestCode) {
|
||||
REQUEST_SET_COLOR -> {
|
||||
val status = adapter.status ?: return
|
||||
if (resultCode == Activity.RESULT_OK) {
|
||||
if (data == null) return
|
||||
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) {
|
||||
userColorNameManager.clearUserColor(status.user_key)
|
||||
UserColorNameManager.get(context!!).clearUserColor(status.user_key)
|
||||
}
|
||||
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) {
|
||||
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,
|
||||
current, quotedMedia, preferences[newDocumentApiKey],
|
||||
preferences[displaySensitiveContentsKey])
|
||||
|
@ -258,7 +260,7 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
|
|||
|
||||
override fun onQuotedStatusClick(holder: IStatusViewHolder, position: Int) {
|
||||
val status = adapter.getStatus(position)
|
||||
val quotedId = status.quoted_id ?: return
|
||||
val quotedId = status.quoted?.id ?: return
|
||||
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) {
|
||||
val status = adapter.status ?: return
|
||||
if ((view.parent as View).id == R.id.quotedMediaPreview && status.quoted_media != null) {
|
||||
IntentUtils.openMediaDirectly(activity!!, accountKey, status.quoted_media!!, current,
|
||||
if ((view.parent as View).id == R.id.quotedMediaPreview && status.attachment?.quoted?.media != null) {
|
||||
IntentUtils.openMediaDirectly(activity!!, accountKey, status.attachment?.quoted?.media!!, current,
|
||||
newDocument = preferences[newDocumentApiKey], status = status)
|
||||
} else if (status.media != null) {
|
||||
IntentUtils.openMediaDirectly(activity!!, accountKey, status.media!!, current,
|
||||
} else if (status.attachment?.media != null) {
|
||||
IntentUtils.openMediaDirectly(activity!!, accountKey, status.attachment?.media!!, current,
|
||||
newDocument = preferences[newDocumentApiKey], status = status)
|
||||
}
|
||||
}
|
||||
|
@ -503,7 +505,7 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
|
|||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
bus.register(this)
|
||||
BusSingleton.register(this)
|
||||
recyclerView.addOnScrollListener(scrollListener)
|
||||
recyclerView.setOnTouchListener(scrollListener.touchListener)
|
||||
}
|
||||
|
@ -511,7 +513,7 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
|
|||
override fun onStop() {
|
||||
recyclerView.setOnTouchListener(null)
|
||||
recyclerView.removeOnScrollListener(scrollListener)
|
||||
bus.unregister(this)
|
||||
BusSingleton.unregister(this)
|
||||
super.onStop()
|
||||
}
|
||||
|
||||
|
@ -521,7 +523,7 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
|
|||
val status = adapter.getStatus(contextMenuInfo.position)
|
||||
val inflater = MenuInflater(context)
|
||||
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 {
|
||||
|
@ -536,7 +538,7 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
|
|||
return true
|
||||
}
|
||||
return MenuUtils.handleStatusClick(activity!!, this, fragmentManager!!,
|
||||
preferences, userColorNameManager, status, item)
|
||||
preferences, UserColorNameManager.get(context!!), status, item)
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
|
|
|
@ -12,12 +12,10 @@ import nl.komponents.kovenant.ui.alwaysUi
|
|||
import org.mariotaku.ktextension.toWeak
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.TwidereConstants.SYNC_PREFERENCES_NAME
|
||||
import org.mariotaku.twidere.extension.applyTheme
|
||||
import org.mariotaku.twidere.extension.dismissProgressDialog
|
||||
import org.mariotaku.twidere.extension.onShow
|
||||
import org.mariotaku.twidere.extension.showProgressDialog
|
||||
import org.mariotaku.twidere.extension.*
|
||||
import org.mariotaku.twidere.fragment.BaseDialogFragment
|
||||
import org.mariotaku.twidere.fragment.BasePreferenceFragment
|
||||
import org.mariotaku.twidere.singleton.BusSingleton
|
||||
import org.mariotaku.twidere.util.TaskServiceRunner
|
||||
|
||||
class SyncSettingsFragment : BasePreferenceFragment() {
|
||||
|
@ -29,11 +27,11 @@ class SyncSettingsFragment : BasePreferenceFragment() {
|
|||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
bus.register(this)
|
||||
BusSingleton.register(this)
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
bus.unregister(this)
|
||||
BusSingleton.unregister(this)
|
||||
super.onStop()
|
||||
}
|
||||
|
||||
|
|
|
@ -69,6 +69,7 @@ import org.mariotaku.twidere.data.fetcher.StatusesFetcher
|
|||
import org.mariotaku.twidere.extension.*
|
||||
import org.mariotaku.twidere.extension.adapter.removeStatuses
|
||||
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.firstVisibleItemPosition
|
||||
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.promise.StatusPromises
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
||||
import org.mariotaku.twidere.singleton.BusSingleton
|
||||
import org.mariotaku.twidere.task.CreateFavoriteTask
|
||||
import org.mariotaku.twidere.task.statuses.GetStatusesTask
|
||||
import org.mariotaku.twidere.util.*
|
||||
import org.mariotaku.twidere.util.UserColorNameManager.Companion
|
||||
import org.mariotaku.twidere.view.ExtendedRecyclerView
|
||||
import org.mariotaku.twidere.view.holder.GapViewHolder
|
||||
import org.mariotaku.twidere.view.holder.TimelineFilterHeaderViewHolder
|
||||
|
@ -174,11 +177,11 @@ abstract class AbsTimelineFragment : AbsContentRecyclerViewFragment<ParcelableSt
|
|||
override fun onStart() {
|
||||
super.onStart()
|
||||
recyclerView.addOnScrollListener(scrollHandler)
|
||||
bus.register(busEventHandler)
|
||||
BusSingleton.register(busEventHandler)
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
bus.unregister(busEventHandler)
|
||||
BusSingleton.unregister(busEventHandler)
|
||||
recyclerView.removeOnScrollListener(scrollHandler)
|
||||
if (userVisibleHint) {
|
||||
saveReadPosition(layoutManager.firstVisibleItemPosition)
|
||||
|
@ -215,7 +218,7 @@ abstract class AbsTimelineFragment : AbsContentRecyclerViewFragment<ParcelableSt
|
|||
val contextMenuInfo = menuInfo as ExtendedRecyclerView.ContextMenuInfo
|
||||
val status = adapter.getStatus(contextMenuInfo.position)
|
||||
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 {
|
||||
|
@ -240,7 +243,7 @@ abstract class AbsTimelineFragment : AbsContentRecyclerViewFragment<ParcelableSt
|
|||
return true
|
||||
}
|
||||
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) {
|
||||
val context = context ?: return
|
||||
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,
|
||||
current, quotedMedia, preferences[newDocumentApiKey], preferences[displaySensitiveContentsKey])
|
||||
}
|
||||
|
@ -578,7 +581,7 @@ abstract class AbsTimelineFragment : AbsContentRecyclerViewFragment<ParcelableSt
|
|||
override fun onQuotedStatusClick(holder: IStatusViewHolder, position: Int) {
|
||||
val context = context ?: return
|
||||
val status = getFullStatus(position)
|
||||
val quotedId = status.quoted_id ?: return
|
||||
val quotedId = status.quoted?.id ?: return
|
||||
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.UserListUpdatedEvent
|
||||
import org.mariotaku.twidere.promise.UserListPromises
|
||||
import org.mariotaku.twidere.util.IntentUtils
|
||||
import org.mariotaku.twidere.util.LinkCreator
|
||||
import org.mariotaku.twidere.util.MenuUtils
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
import org.mariotaku.twidere.singleton.BusSingleton
|
||||
import org.mariotaku.twidere.util.*
|
||||
import org.mariotaku.twidere.util.UserColorNameManager.Companion
|
||||
import org.mariotaku.twidere.util.shortcut.ShortcutCreator
|
||||
|
||||
class UserListFragment : AbsToolbarTabPagesFragment(), OnClickListener,
|
||||
|
@ -100,11 +99,11 @@ class UserListFragment : AbsToolbarTabPagesFragment(), OnClickListener,
|
|||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
bus.register(this)
|
||||
BusSingleton.register(this)
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
bus.unregister(this)
|
||||
BusSingleton.unregister(this)
|
||||
super.onStop()
|
||||
}
|
||||
|
||||
|
@ -401,7 +400,7 @@ class UserListFragment : AbsToolbarTabPagesFragment(), OnClickListener,
|
|||
messageBuilder.append('\n')
|
||||
}
|
||||
messageBuilder.append(getString(R.string.label_created_by_name,
|
||||
userColorNameManager.getDisplayName(userList)))
|
||||
UserColorNameManager.get(context!!).getDisplayName(userList)))
|
||||
val builder = AlertDialog.Builder(context!!)
|
||||
builder.setTitle(userList.name)
|
||||
builder.setMessage(messageBuilder)
|
||||
|
|
|
@ -29,12 +29,14 @@ import com.squareup.otto.Subscribe
|
|||
import org.mariotaku.ktextension.setItemAvailability
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.constant.IntentConstants.*
|
||||
import org.mariotaku.twidere.extension.get
|
||||
import org.mariotaku.twidere.fragment.CreateUserListDialogFragment
|
||||
import org.mariotaku.twidere.fragment.ParcelableUserListsFragment
|
||||
import org.mariotaku.twidere.loader.userlists.UserListOwnershipsLoader
|
||||
import org.mariotaku.twidere.model.ParcelableUserList
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.model.event.UserListDestroyedEvent
|
||||
import org.mariotaku.twidere.singleton.BusSingleton
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
|
||||
class UserListsOwnershipsFragment : ParcelableUserListsFragment() {
|
||||
|
@ -91,11 +93,11 @@ class UserListsOwnershipsFragment : ParcelableUserListsFragment() {
|
|||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
bus.register(this)
|
||||
BusSingleton.register(this)
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
bus.unregister(this)
|
||||
BusSingleton.unregister(this)
|
||||
super.onStop()
|
||||
}
|
||||
|
||||
|
|
|
@ -63,13 +63,13 @@ class IncomingFriendshipsFragment : AbsUsersFragment(), IUsersAdapter.RequestCli
|
|||
override fun onAcceptClicked(holder: UserViewHolder, position: Int) {
|
||||
val user = adapter.getUser(position) ?: 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) {
|
||||
val user = adapter.getUser(position) ?: return
|
||||
val accountKey = user.account_key ?: return
|
||||
FriendshipPromises.getInstance(context!!).deny(accountKey, user.key)
|
||||
FriendshipPromises.get(context!!).deny(accountKey, user.key)
|
||||
}
|
||||
|
||||
@SuppressLint("SwitchIntDef")
|
||||
|
|
|
@ -29,15 +29,17 @@ import kotlinx.android.synthetic.main.fragment_content_recyclerview.*
|
|||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.constant.IntentConstants.*
|
||||
import org.mariotaku.twidere.data.fetcher.UsersFetcher
|
||||
import org.mariotaku.twidere.data.fetcher.users.UserListMembersFetcher
|
||||
import org.mariotaku.twidere.extension.*
|
||||
import org.mariotaku.twidere.fragment.AbsUsersFragment
|
||||
import org.mariotaku.twidere.fragment.DeleteUserListMembersDialogFragment
|
||||
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.UserKey
|
||||
import org.mariotaku.twidere.model.event.UserListMembersChangedEvent
|
||||
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.holder.UserViewHolder
|
||||
import java.util.*
|
||||
|
@ -71,11 +73,11 @@ class UserListMembersFragment : AbsUsersFragment() {
|
|||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
bus.register(this)
|
||||
BusSingleton.register(this)
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
bus.unregister(this)
|
||||
BusSingleton.unregister(this)
|
||||
super.onStop()
|
||||
}
|
||||
|
||||
|
@ -98,16 +100,16 @@ class UserListMembersFragment : AbsUsersFragment() {
|
|||
if (accountKey != userKey) return
|
||||
val inflater = MenuInflater(context)
|
||||
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)
|
||||
menu.setHeaderTitle(userColorNameManager.getDisplayName(user))
|
||||
menu.setHeaderTitle(UserColorNameManager.get(context!!).getDisplayName(user))
|
||||
}
|
||||
|
||||
override fun onContextItemSelected(item: MenuItem): Boolean {
|
||||
if (!userVisibleHint) return false
|
||||
val userList = userList ?: return false
|
||||
val contextMenuInfo = item.menuInfo as ExtendedRecyclerView.ContextMenuInfo
|
||||
val user = adapter.getUser(contextMenuInfo.position) ?: return false
|
||||
val user = adapter.getUser(contextMenuInfo.position)
|
||||
when (item.itemId) {
|
||||
R.id.delete_from_list -> {
|
||||
DeleteUserListMembersDialogFragment.show(fragmentManager!!, userList, user)
|
||||
|
|
|
@ -3,7 +3,6 @@ package org.mariotaku.twidere.loader
|
|||
import android.content.Context
|
||||
import org.mariotaku.twidere.dagger.component.GeneralComponent
|
||||
import org.mariotaku.twidere.data.fetcher.users.UserSearchFetcher
|
||||
import org.mariotaku.twidere.extension.get
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.util.UserColorNameManager
|
||||
import javax.inject.Inject
|
||||
|
@ -17,6 +16,7 @@ class CacheUserSearchLoader(
|
|||
fromUser: Boolean
|
||||
) : UserSearchFetcher(query) {
|
||||
@Inject
|
||||
@Deprecated(message = "Deprecated", replaceWith = ReplaceWith("UserColorNameManager.get(context!!)", imports = ["org.mariotaku.twidere.util.UserColorNameManager"]))
|
||||
internal lateinit var userColorNameManager: UserColorNameManager
|
||||
|
||||
init {
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue