improved link click
This commit is contained in:
parent
8507cb3a20
commit
320a818b70
|
@ -316,24 +316,28 @@ public class Status extends TwitterResponseObject implements Comparable<Status>,
|
|||
}
|
||||
|
||||
|
||||
@Override
|
||||
public MediaEntity[] getExtendedMediaEntities() {
|
||||
if (extendedEntities == null) return null;
|
||||
return extendedEntities.getMedia();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public HashtagEntity[] getHashtagEntities() {
|
||||
if (entities == null) return null;
|
||||
return entities.getHashtags();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public MediaEntity[] getMediaEntities() {
|
||||
if (entities == null) return null;
|
||||
return entities.getMedia();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public UrlEntity[] getUrlEntities() {
|
||||
if (entities == null) return null;
|
||||
return entities.getUrls();
|
||||
|
@ -343,6 +347,7 @@ public class Status extends TwitterResponseObject implements Comparable<Status>,
|
|||
return entities;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserMentionEntity[] getUserMentionEntities() {
|
||||
if (entities == null) return null;
|
||||
return entities.getUserMentions();
|
||||
|
|
|
@ -1111,7 +1111,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
countsUsersHeightHolder.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
final ParcelableMedia[] media = IntentUtils.getPrimaryMedia(status);
|
||||
final ParcelableMedia[] media = ParcelableMediaUtils.getPrimaryMedia(status);
|
||||
|
||||
if (ArrayUtils.isEmpty(media)) {
|
||||
mediaPreviewContainer.setVisibility(View.GONE);
|
||||
|
|
|
@ -16,6 +16,7 @@ import org.mariotaku.twidere.api.twitter.model.Status;
|
|||
import org.mariotaku.twidere.api.twitter.model.UrlEntity;
|
||||
import org.mariotaku.twidere.model.ParcelableMedia;
|
||||
import org.mariotaku.twidere.model.ParcelableMediaUpdate;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.util.InternalTwitterContentUtils;
|
||||
import org.mariotaku.twidere.util.TwidereArrayUtils;
|
||||
import org.mariotaku.twidere.util.media.preview.PreviewMediaExtractor;
|
||||
|
@ -68,6 +69,7 @@ public class ParcelableMediaUtils {
|
|||
media.url = mediaUrl;
|
||||
media.media_url = mediaUrl;
|
||||
media.preview_url = mediaUrl;
|
||||
media.page_url = entity.getExpandedUrl();
|
||||
media.start = entity.getStart();
|
||||
media.end = entity.getEnd();
|
||||
media.type = ParcelableMediaUtils.getTypeInt(entity.getType());
|
||||
|
@ -266,4 +268,19 @@ public class ParcelableMediaUtils {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ParcelableMedia[] getPrimaryMedia(ParcelableStatus status) {
|
||||
if (status.is_quote && ArrayUtils.isEmpty(status.media)) {
|
||||
return status.quoted_media;
|
||||
} else {
|
||||
return status.media;
|
||||
}
|
||||
}
|
||||
|
||||
public static ParcelableMedia[] getAllMedia(ParcelableStatus status) {
|
||||
ParcelableMedia[] result = new ParcelableMedia[TwidereArrayUtils.arraysLength(status.media,
|
||||
status.quoted_media)];
|
||||
TwidereArrayUtils.mergeArray(result, status.media, status.quoted_media);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,7 +17,6 @@ import android.support.v4.app.FragmentActivity;
|
|||
import android.support.v4.app.FragmentManager;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.mariotaku.twidere.BuildConfig;
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.R;
|
||||
|
@ -33,6 +32,7 @@ import org.mariotaku.twidere.model.ParcelableUser;
|
|||
import org.mariotaku.twidere.model.ParcelableUserList;
|
||||
import org.mariotaku.twidere.model.UserKey;
|
||||
import org.mariotaku.twidere.model.util.ParcelableLocationUtils;
|
||||
import org.mariotaku.twidere.model.util.ParcelableMediaUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
@ -141,7 +141,7 @@ public class IntentUtils implements Constants {
|
|||
final ParcelableMedia current, final Bundle options,
|
||||
final boolean newDocument) {
|
||||
openMedia(context, status.account_key, status.is_possibly_sensitive, status, null, current,
|
||||
getPrimaryMedia(status), options, newDocument);
|
||||
ParcelableMediaUtils.getPrimaryMedia(status), options, newDocument);
|
||||
}
|
||||
|
||||
public static void openMedia(@NonNull final Context context, @Nullable final UserKey accountKey, final boolean isPossiblySensitive,
|
||||
|
@ -185,18 +185,10 @@ public class IntentUtils implements Constants {
|
|||
public static void openMediaDirectly(@NonNull final Context context, @Nullable final UserKey accountKey,
|
||||
final ParcelableStatus status, final ParcelableMedia current,
|
||||
final Bundle options, final boolean newDocument) {
|
||||
openMediaDirectly(context, accountKey, status, null, current, getPrimaryMedia(status),
|
||||
openMediaDirectly(context, accountKey, status, null, current, ParcelableMediaUtils.getPrimaryMedia(status),
|
||||
options, newDocument);
|
||||
}
|
||||
|
||||
public static ParcelableMedia[] getPrimaryMedia(ParcelableStatus status) {
|
||||
if (status.is_quote && ArrayUtils.isEmpty(status.media)) {
|
||||
return status.quoted_media;
|
||||
} else {
|
||||
return status.media;
|
||||
}
|
||||
}
|
||||
|
||||
public static String getDefaultBrowserPackage(Context context) {
|
||||
Uri.Builder builder = new Uri.Builder();
|
||||
builder.scheme(SCHEME_HTTP);
|
||||
|
|
|
@ -15,6 +15,7 @@ import org.mariotaku.twidere.api.twitter.Twitter;
|
|||
import org.mariotaku.twidere.api.twitter.TwitterException;
|
||||
import org.mariotaku.twidere.api.twitter.model.DirectMessage;
|
||||
import org.mariotaku.twidere.api.twitter.model.EntitySupport;
|
||||
import org.mariotaku.twidere.api.twitter.model.ExtendedEntitySupport;
|
||||
import org.mariotaku.twidere.api.twitter.model.MediaEntity;
|
||||
import org.mariotaku.twidere.api.twitter.model.Status;
|
||||
import org.mariotaku.twidere.api.twitter.model.UrlEntity;
|
||||
|
@ -252,13 +253,19 @@ public class InternalTwitterContentUtils {
|
|||
|
||||
private static void parseEntities(final HtmlBuilder builder, final EntitySupport entities) {
|
||||
// Format media.
|
||||
final MediaEntity[] mediaEntities = entities.getMediaEntities();
|
||||
MediaEntity[] mediaEntities = null;
|
||||
if (entities instanceof ExtendedEntitySupport) {
|
||||
mediaEntities = ((ExtendedEntitySupport) entities).getExtendedMediaEntities();
|
||||
}
|
||||
if (mediaEntities == null) {
|
||||
mediaEntities = entities.getMediaEntities();
|
||||
}
|
||||
if (mediaEntities != null) {
|
||||
for (final MediaEntity mediaEntity : mediaEntities) {
|
||||
final int start = mediaEntity.getStart(), end = mediaEntity.getEnd();
|
||||
final String mediaUrl = getMediaUrl(mediaEntity);
|
||||
if (mediaUrl != null && start >= 0 && end >= 0) {
|
||||
builder.addLink(mediaUrl, mediaEntity.getDisplayUrl(), start, end);
|
||||
builder.addLink(mediaEntity.getExpandedUrl(), mediaEntity.getDisplayUrl(), start, end);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -78,7 +78,7 @@ public class OnLinkClickHandler implements OnLinkClickListener, Constants {
|
|||
break;
|
||||
}
|
||||
case TwidereLinkify.LINK_TYPE_LINK_IN_TEXT: {
|
||||
if (PreviewMediaExtractor.isSupported(link)) {
|
||||
if (isMedia(link, extraId)) {
|
||||
openMedia(accountKey, extraId, sensitive, link, start, end);
|
||||
} else {
|
||||
openLink(link);
|
||||
|
@ -86,7 +86,7 @@ public class OnLinkClickHandler implements OnLinkClickListener, Constants {
|
|||
break;
|
||||
}
|
||||
case TwidereLinkify.LINK_TYPE_ENTITY_URL: {
|
||||
if (PreviewMediaExtractor.isSupported(link)) {
|
||||
if (isMedia(link, extraId)) {
|
||||
openMedia(accountKey, extraId, sensitive, link, start, end);
|
||||
} else {
|
||||
if (orig != null && "fanfou.com".equals(UriUtils.getAuthority(link))) {
|
||||
|
@ -147,6 +147,10 @@ public class OnLinkClickHandler implements OnLinkClickListener, Constants {
|
|||
return false;
|
||||
}
|
||||
|
||||
protected boolean isMedia(String link, long extraId) {
|
||||
return PreviewMediaExtractor.isSupported(link);
|
||||
}
|
||||
|
||||
protected void openMedia(UserKey accountKey, long extraId, boolean sensitive, String link, int start, int end) {
|
||||
final ParcelableMedia[] media = {ParcelableMediaUtils.image(link)};
|
||||
IntentUtils.openMedia(context, accountKey, sensitive, null, media, null,
|
||||
|
|
|
@ -25,6 +25,7 @@ import org.mariotaku.twidere.adapter.iface.IStatusesAdapter;
|
|||
import org.mariotaku.twidere.model.ParcelableMedia;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.model.UserKey;
|
||||
import org.mariotaku.twidere.model.util.ParcelableMediaUtils;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 15/4/6.
|
||||
|
@ -44,13 +45,24 @@ public class StatusAdapterLinkClickHandler<D> extends OnLinkClickHandler {
|
|||
final String link, final int start, final int end) {
|
||||
if (extraId == RecyclerView.NO_POSITION) return;
|
||||
final ParcelableStatus status = adapter.getStatus((int) extraId);
|
||||
final ParcelableMedia current = StatusLinkClickHandler.findByLink(status.media, link);
|
||||
final ParcelableMedia[] media = ParcelableMediaUtils.getAllMedia(status);
|
||||
final ParcelableMedia current = StatusLinkClickHandler.findByLink(media, link);
|
||||
if (current != null && current.open_browser) {
|
||||
openLink(link);
|
||||
} else {
|
||||
IntentUtils.openMedia(context, status, current, null,
|
||||
preferences.getBoolean(KEY_NEW_DOCUMENT_API));
|
||||
final boolean newDocument = preferences.getBoolean(KEY_NEW_DOCUMENT_API);
|
||||
IntentUtils.openMedia(context, status, current, null, newDocument);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isMedia(String link, long extraId) {
|
||||
if (extraId != RecyclerView.NO_POSITION) {
|
||||
final ParcelableStatus status = adapter.getStatus((int) extraId);
|
||||
final ParcelableMedia[] media = ParcelableMediaUtils.getAllMedia(status);
|
||||
final ParcelableMedia current = StatusLinkClickHandler.findByLink(media, link);
|
||||
return current != null && !current.open_browser;
|
||||
}
|
||||
return super.isMedia(link, extraId);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,7 +48,8 @@ public class StatusLinkClickHandler extends OnLinkClickHandler {
|
|||
public static ParcelableMedia findByLink(ParcelableMedia[] media, String link) {
|
||||
if (link == null || media == null) return null;
|
||||
for (ParcelableMedia mediaItem : media) {
|
||||
if (link.equals(mediaItem.media_url) || link.equals(mediaItem.url))
|
||||
if (link.equals(mediaItem.media_url) || link.equals(mediaItem.url) ||
|
||||
link.equals(mediaItem.page_url) || link.equals(mediaItem.preview_url))
|
||||
return mediaItem;
|
||||
}
|
||||
return null;
|
||||
|
|
Loading…
Reference in New Issue