mirror of
https://github.com/TwidereProject/Twidere-Android
synced 2025-02-15 11:10:38 +01:00
improved status interactions
fixed media viewer crash
This commit is contained in:
parent
400b33d485
commit
d74ffe2814
twidere.component.common/src/main/java/org/mariotaku/twidere/model
twidere/src/main/java/org/mariotaku/twidere
activity/support
fragment/support
util
@ -211,6 +211,7 @@ public class ParcelableMedia implements Parcelable {
|
||||
final BindingValue playerStreamUrl = card.getBindingValue("player_stream_url");
|
||||
media.card = ParcelableStatus.ParcelableCardEntity.fromCardEntity(card, -1);
|
||||
if ("animated_gif".equals(name)) {
|
||||
media.media_url = ((StringValue) playerStreamUrl).getValue();
|
||||
media.type = ParcelableMedia.TYPE_CARD_ANIMATED_GIF;
|
||||
} else if (playerStreamUrl instanceof StringValue) {
|
||||
media.media_url = ((StringValue) playerStreamUrl).getValue();
|
||||
|
@ -85,7 +85,6 @@ import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.util.VideoLoader.VideoLoadingListener;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import pl.droidsonroids.gif.GifSupportChecker;
|
||||
@ -643,7 +642,7 @@ public final class MediaViewerActivity extends BaseAppCompatActivity implements
|
||||
|
||||
public void loadVideo(boolean forceReload) {
|
||||
Pair<String, String> urlAndType = getBestVideoUrlAndType(getMedia());
|
||||
if (urlAndType == null) return;
|
||||
if (urlAndType == null || urlAndType.first == null) return;
|
||||
mVideoUrlAndType = urlAndType;
|
||||
mVideoLoader.loadVideo(urlAndType.first, forceReload, this);
|
||||
}
|
||||
|
@ -1118,9 +1118,11 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
retweetsCountView.setText(Utils.getLocalizedNumber(locale, retweetCount));
|
||||
favoritesCountView.setText(Utils.getLocalizedNumber(locale, favoriteCount));
|
||||
final UserProfileImagesAdapter interactUsersAdapter = (UserProfileImagesAdapter) interactUsersView.getAdapter();
|
||||
interactUsersAdapter.clear();
|
||||
if (statusActivity != null && statusActivity.retweeters != null) {
|
||||
interactUsersAdapter.addAll(statusActivity.retweeters);
|
||||
if (interactUsersAdapter != null) {
|
||||
interactUsersAdapter.clear();
|
||||
if (statusActivity != null && statusActivity.retweeters != null) {
|
||||
interactUsersAdapter.addAll(statusActivity.retweeters);
|
||||
}
|
||||
}
|
||||
|
||||
final ParcelableMedia[] media = Utils.getPrimaryMedia(status);
|
||||
@ -1971,6 +1973,11 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
}
|
||||
|
||||
public void setStatusActivity(StatusActivity activity) {
|
||||
final ParcelableStatus status = getStatus();
|
||||
if (status == null) return;
|
||||
if (activity != null && activity.statusId != (status.is_retweet ? status.retweet_id : status.id)) {
|
||||
return;
|
||||
}
|
||||
mStatusActivity = activity;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
@ -2047,9 +2054,10 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
@Override
|
||||
public StatusActivity loadInBackground() {
|
||||
final Context context = getContext();
|
||||
final Twitter twitter = TwitterAPIFactory.getTwitterInstance(context, mAccountId, true);
|
||||
final Twitter twitter = TwitterAPIFactory.getTwitterInstance(context, mAccountId, false);
|
||||
final Paging paging = new Paging();
|
||||
final StatusActivity activitySummary = new StatusActivity();
|
||||
paging.setCount(10);
|
||||
final StatusActivity activitySummary = new StatusActivity(mStatusId);
|
||||
final List<ParcelableUser> retweeters = new ArrayList<>();
|
||||
try {
|
||||
for (Status status : twitter.getRetweets(mStatusId, paging)) {
|
||||
@ -2114,10 +2122,16 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
|
||||
List<ParcelableUser> retweeters;
|
||||
|
||||
long statusId;
|
||||
|
||||
long favoriteCount;
|
||||
long replyCount = -1;
|
||||
long retweetCount;
|
||||
|
||||
public StatusActivity(long statusId) {
|
||||
this.statusId = statusId;
|
||||
}
|
||||
|
||||
public List<ParcelableUser> getRetweeters() {
|
||||
return retweeters;
|
||||
}
|
||||
|
@ -11,11 +11,8 @@ import android.support.annotation.Nullable;
|
||||
import android.text.TextUtils;
|
||||
import android.webkit.URLUtil;
|
||||
|
||||
import com.squareup.okhttp.Authenticator;
|
||||
import com.squareup.okhttp.Dns;
|
||||
import com.squareup.okhttp.OkHttpClient;
|
||||
import com.squareup.okhttp.Request;
|
||||
import com.squareup.okhttp.Response;
|
||||
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.mariotaku.restfu.ExceptionFactory;
|
||||
@ -54,12 +51,12 @@ import org.mariotaku.twidere.model.RequestType;
|
||||
import org.mariotaku.twidere.util.dagger.ApplicationModule;
|
||||
import org.mariotaku.twidere.util.net.NetworkUsageUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.Proxy;
|
||||
import java.net.SocketAddress;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -105,7 +102,10 @@ public class TwitterAPIFactory implements TwidereConstants {
|
||||
final boolean includeRetweets, Class<T> cls) {
|
||||
if (context == null) return null;
|
||||
final ParcelableCredentials credentials = ParcelableCredentials.getCredentials(context, accountId);
|
||||
return getInstance(context, credentials, cls);
|
||||
final HashMap<String, String> extraParams = new HashMap<>();
|
||||
extraParams.put("include_entities", String.valueOf(includeEntities));
|
||||
extraParams.put("include_retweets", String.valueOf(includeRetweets));
|
||||
return getInstance(context, credentials, extraParams, cls);
|
||||
}
|
||||
|
||||
public static RestHttpClient getDefaultHttpClient(final Context context) {
|
||||
@ -164,7 +164,9 @@ public class TwitterAPIFactory implements TwidereConstants {
|
||||
return Proxy.NO_PROXY;
|
||||
}
|
||||
|
||||
public static <T> T getInstance(final Context context, final Endpoint endpoint, final Authorization auth, Class<T> cls) {
|
||||
public static <T> T getInstance(final Context context, final Endpoint endpoint,
|
||||
final Authorization auth, final Map<String, String> extraRequestParams,
|
||||
final Class<T> cls) {
|
||||
final RestAPIFactory factory = new RestAPIFactory();
|
||||
final String userAgent;
|
||||
if (auth instanceof OAuthAuthorization) {
|
||||
@ -183,19 +185,41 @@ public class TwitterAPIFactory implements TwidereConstants {
|
||||
factory.setConverter(new TwitterConverter());
|
||||
factory.setEndpoint(endpoint);
|
||||
factory.setAuthorization(auth);
|
||||
factory.setRequestInfoFactory(new TwidereRequestInfoFactory());
|
||||
factory.setRequestInfoFactory(new TwidereRequestInfoFactory(extraRequestParams));
|
||||
factory.setHttpRequestFactory(new TwidereHttpRequestFactory(userAgent));
|
||||
factory.setExceptionFactory(new TwidereExceptionFactory());
|
||||
return factory.build(cls);
|
||||
}
|
||||
|
||||
public static <T> T getInstance(final Context context, final Endpoint endpoint, final ParcelableCredentials credentials, Class<T> cls) {
|
||||
return TwitterAPIFactory.getInstance(context, endpoint, getAuthorization(credentials), cls);
|
||||
public static <T> T getInstance(final Context context, final Endpoint endpoint,
|
||||
final Authorization auth, final Class<T> cls) {
|
||||
return getInstance(context, endpoint, auth, null, cls);
|
||||
}
|
||||
|
||||
static <T> T getInstance(final Context context, final ParcelableCredentials credentials, final Class<T> cls) {
|
||||
|
||||
public static <T> T getInstance(final Context context, final Endpoint endpoint,
|
||||
final ParcelableCredentials credentials,
|
||||
final Class<T> cls) {
|
||||
return getInstance(context, endpoint, credentials, null, cls);
|
||||
}
|
||||
|
||||
public static <T> T getInstance(final Context context, final Endpoint endpoint,
|
||||
final ParcelableCredentials credentials,
|
||||
final Map<String, String> extraRequestParams, final Class<T> cls) {
|
||||
return TwitterAPIFactory.getInstance(context, endpoint, getAuthorization(credentials),
|
||||
extraRequestParams, cls);
|
||||
}
|
||||
|
||||
static <T> T getInstance(final Context context, final ParcelableCredentials credentials,
|
||||
final Class<T> cls) {
|
||||
return getInstance(context, credentials, null, cls);
|
||||
}
|
||||
|
||||
static <T> T getInstance(final Context context, final ParcelableCredentials credentials,
|
||||
final Map<String, String> extraRequestParams, final Class<T> cls) {
|
||||
if (credentials == null) return null;
|
||||
return TwitterAPIFactory.getInstance(context, getEndpoint(credentials, cls), credentials, cls);
|
||||
return TwitterAPIFactory.getInstance(context, getEndpoint(credentials, cls), credentials,
|
||||
extraRequestParams, cls);
|
||||
}
|
||||
|
||||
public static Endpoint getEndpoint(ParcelableCredentials credentials, Class<?> cls) {
|
||||
@ -263,7 +287,7 @@ public class TwitterAPIFactory implements TwidereConstants {
|
||||
return new EmptyAuthorization();
|
||||
}
|
||||
|
||||
private static void addParameter(List<Pair<String, String>> params, String name, Object value) {
|
||||
private static void addParam(List<Pair<String, String>> params, String name, Object value) {
|
||||
params.add(Pair.create(name, String.valueOf(value)));
|
||||
}
|
||||
|
||||
@ -385,18 +409,29 @@ public class TwitterAPIFactory implements TwidereConstants {
|
||||
|
||||
public static class TwidereRequestInfoFactory implements RequestInfoFactory {
|
||||
|
||||
private static HashMap<String, String> sExtraParams = new HashMap<>();
|
||||
private static Map<String, String> sDefaultRequestParams;
|
||||
|
||||
static {
|
||||
sExtraParams.put("include_cards", "true");
|
||||
sExtraParams.put("cards_platform", "Android-12");
|
||||
sExtraParams.put("include_entities", "true");
|
||||
sExtraParams.put("include_my_retweet", "true");
|
||||
sExtraParams.put("include_rts", "true");
|
||||
sExtraParams.put("include_reply_count", "true");
|
||||
sExtraParams.put("include_descendent_reply_count", "true");
|
||||
sExtraParams.put("full_text", "true");
|
||||
sExtraParams.put("model_version", "7");
|
||||
final HashMap<String, String> map = new HashMap<>();
|
||||
try {
|
||||
map.put("include_cards", "true");
|
||||
map.put("cards_platform", "Android-12");
|
||||
map.put("include_entities", "true");
|
||||
map.put("include_my_retweet", "true");
|
||||
map.put("include_rts", "true");
|
||||
map.put("include_reply_count", "true");
|
||||
map.put("include_descendent_reply_count", "true");
|
||||
map.put("full_text", "true");
|
||||
map.put("model_version", "7");
|
||||
} finally {
|
||||
sDefaultRequestParams = Collections.unmodifiableMap(map);
|
||||
}
|
||||
}
|
||||
|
||||
private final Map<String, String> extraRequestParams;
|
||||
|
||||
TwidereRequestInfoFactory(Map<String, String> extraRequestParams) {
|
||||
this.extraRequestParams = extraRequestParams;
|
||||
}
|
||||
|
||||
|
||||
@ -416,11 +451,19 @@ public class TwitterAPIFactory implements TwidereConstants {
|
||||
if (parts.isEmpty()) {
|
||||
final List<Pair<String, String>> params = method.hasBody() ? forms : queries;
|
||||
for (String key : extraParamKeys) {
|
||||
addParameter(params, key, sExtraParams.get(key));
|
||||
if (extraRequestParams != null && extraRequestParams.containsKey(key)) {
|
||||
addParam(params, key, extraRequestParams.get(key));
|
||||
} else {
|
||||
addParam(params, key, sDefaultRequestParams.get(key));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (String key : extraParamKeys) {
|
||||
addPart(parts, key, sExtraParams.get(key));
|
||||
if (extraRequestParams != null && extraRequestParams.containsKey(key)) {
|
||||
addPart(parts, key, extraRequestParams.get(key));
|
||||
} else {
|
||||
addPart(parts, key, sDefaultRequestParams.get(key));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user