Twidere-App-Android-Twitter.../twidere/src/main/java/org/mariotaku/twidere/util/InternalTwitterContentUtils...

100 lines
3.6 KiB
Java

package org.mariotaku.twidere.util;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import org.mariotaku.microblog.library.twitter.model.DMResponse;
import org.mariotaku.microblog.library.twitter.model.DirectMessage;
import org.mariotaku.microblog.library.twitter.model.MediaEntity;
import org.mariotaku.microblog.library.twitter.model.UrlEntity;
import org.mariotaku.microblog.library.twitter.model.User;
import org.mariotaku.twidere.extension.model.api.StatusExtensionsKt;
import org.mariotaku.twidere.model.SpanItem;
import kotlin.Pair;
/**
* Created by mariotaku on 16/2/24.
*/
public class InternalTwitterContentUtils {
private InternalTwitterContentUtils() {
}
@NonNull
public static String getBestBannerUrl(@NonNull final String baseUrl, final int width, final int height) {
final String type;
if (width <= 0) {
type = "1500x500";
} else {
type = getBestBannerType(width, height);
}
final String authority = UriUtils.getAuthority(baseUrl);
return authority != null && authority.endsWith(".twimg.com") ? baseUrl + "/" + type : baseUrl;
}
@NonNull
public static String getBestBannerType(final int width, int height) {
if (height > 0 && width / height >= 3) {
if (width <= 300) return "300x100";
else if (width <= 600) return "600x200";
else return "1500x500";
}
if (width <= 320) return "mobile";
else if (width <= 520) return "web";
else if (width <= 626) return "ipad";
else if (width <= 640) return "mobile_retina";
else if (width <= 1040) return "web_retina";
else return "ipad_retina";
}
@Nullable
public static Pair<String, SpanItem[]> formatUserDescription(@NonNull final User user) {
final String text = user.getDescription();
if (text == null) return null;
final HtmlBuilder builder = new HtmlBuilder(text, false, true, false);
final UrlEntity[] urls = user.getDescriptionEntities();
if (urls != null) {
for (final UrlEntity url : urls) {
final String expandedUrl = url.getExpandedUrl();
if (expandedUrl != null) {
builder.addLink(expandedUrl, url.getDisplayUrl(), url.getStart(), url.getEnd(),
false);
}
}
}
return builder.buildWithIndices();
}
@NonNull
public static Pair<String, SpanItem[]> formatDirectMessageText(@NonNull final DirectMessage message) {
final HtmlBuilder builder = new HtmlBuilder(message.getText(), false, true, false);
StatusExtensionsKt.addEntities(builder, message);
return builder.buildWithIndices();
}
@NonNull
public static Pair<String, SpanItem[]> formatDirectMessageText(@NonNull final DMResponse.Entry.Message.Data message) {
String text = message.getText();
if (text == null) {
text = "";
}
final HtmlBuilder builder = new HtmlBuilder(text, false, true, false);
StatusExtensionsKt.addEntities(builder, message);
return builder.buildWithIndices();
}
public static String getMediaUrl(MediaEntity entity) {
return TextUtils.isEmpty(entity.getMediaUrlHttps()) ? entity.getMediaUrl() : entity.getMediaUrlHttps();
}
public static boolean getStartEndForEntity(UrlEntity entity, @NonNull int[] out) {
out[0] = entity.getStart();
out[1] = entity.getEnd();
return true;
}
}