/* * Copyright (C) 2013 Chris Lacy * * 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.tweetalib.android; import com.twitter.Autolink; import org.appdotnet4j.model.AdnPost; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import twitter4j.MediaEntity; import twitter4j.Paging; import twitter4j.Query; import twitter4j.Status; import twitter4j.URLEntity; import twitter4j.UserMentionEntity; public class TwitterUtil { private static Autolink mAutoLink; private static boolean showFullUrl = true; private static boolean mAllowReInit = true; private static void initCommon() { if (mAllowReInit) { if (mAutoLink == null) { mAutoLink = new Autolink(); } mAutoLink.setExtractURLWithoutProtocol(false); } } public static void setShowFullUrl(boolean newValue) { showFullUrl = newValue; } /* * */ public static String stripMarkup(String text) { return text != null ? android.text.Html.fromHtml(text).toString() : null; } public static String getTextMarkup(String text, URLEntity[] urlEntities) { return getStatusMarkup(text, null, urlEntities, showFullUrl); } /* * return the markup for a status, which replaces t.co/ links with the * visible links */ public static String getStatusMarkup(Status status) { return getStatusMarkup(status.getText(), status.getMediaEntities(), status.getURLEntities(), showFullUrl); } /* * */ public static String getStatusMarkup(AdnPost post) { initCommon(); mAutoLink.setExtractURLWithoutProtocol(true); mAllowReInit = false; String statusMarkup = getStatusMarkup(post.mText, null, post.mUrls, showFullUrl); mAllowReInit = true; return statusMarkup; } public static String getStatusMarkup(String statusText, MediaEntity[] mediaEntities, URLEntity[] urlEntities) { return getStatusMarkup(statusText, mediaEntities, urlEntities, showFullUrl); } /* * */ private static String getStatusMarkup(String statusText, MediaEntity[] mediaEntities, URLEntity[] urlEntities, boolean showFullUrl) { initCommon(); return mAutoLink.autoLinkAll(statusText, mediaEntities, urlEntities, showFullUrl); } /* * */ public static String[] getUserMentions(UserMentionEntity[] entities) { if (entities != null && entities.length > 0) { ArrayList<String> arrayList = new ArrayList<String>(); for (UserMentionEntity entity : entities) { if (entity.getScreenName() != null) { arrayList.add(entity.getScreenName()); } } if (arrayList.size() > 0) { String[] stringArray = new String[arrayList.size()]; arrayList.toArray(stringArray); return stringArray; } } return null; } /* * public static String getStatusMarkup(String status, URLEntity[] * urlEntities) { * * String result = null; if (urlEntities.length > 0) { int lastEnd = -1; for * (int i = 0; i < urlEntities.length; i++) { URLEntity urlEntity = * urlEntities[i]; int start = urlEntity.getStart(); int end = * urlEntity.getEnd(); int statusLength = status.length(); * * // TODO: Problem with this tweet: * https://twitter.com/#!/Proto3000_RP/status/177144322645434368 // Have to * keep an eye on this solution if (end > statusLength) { int diff = end - * statusLength; start -= diff; end -= diff; } * * if (start > 0) { if (result == null) { result = status.substring(0, * start); } else if (lastEnd > -1) { if (lastEnd < start) { result += * status.substring(lastEnd, start); } else { // TODO: Handle this, such as * for id 179136028555231232 } } } String link = "<a href=\"" + * urlEntity.getExpandedURL() + "\">" + urlEntity.getDisplayURL() + "</a>"; * result += link; String after; if (i == urlEntities.length - 1) { if (end * <= statusLength) { after = status.substring(end, statusLength); } else { * after = ""; // should never get here } } else { after = * status.substring(end, urlEntities[i+1].getStart()); } result += after; * lastEnd = end; } } else { result = status; } return result; } */ public static Query updateQueryWithPaging(Query query, Paging paging) { if (paging.getMaxId() > -1) { query.setMaxId(paging.getMaxId()); } if (paging.getSinceId() > -1) { query.setSinceId(paging.getSinceId()); } /* * if (paging.getPage() != 1 && paging.getPage() != -1) { * query.setPage(paging.getPage()); } */ return query; } /* * */ public static Date iso6801StringToDate(String iso8601string) throws ParseException { String s = iso8601string.replace("Z", "+00:00"); try { s = s.substring(0, 22) + s.substring(23); } catch (IndexOutOfBoundsException e) { throw new ParseException("Invalid length", 0); } return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").parse(s); } }