package org.indywidualni.fblite.util; import android.app.Activity; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.util.DisplayMetrics; import android.util.Log; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Miscellany { // "clean" and decode an url, all in one public static String cleanAndDecodeUrl(String url) { return decodeUrl(cleanUrl(url)); } // "clean" an url and remove Facebook tracking redirection private static String cleanUrl(String url) { return url.replace("http://lm.facebook.com/l.php?u=", "") .replace("https://lm.facebook.com/l.php?u=", "") .replace("http://m.facebook.com/l.php?u=", "") .replace("https://m.facebook.com/l.php?u=", "") .replace("http://0.facebook.com/l.php?u=", "") .replace("https://0.facebook.com/l.php?u=", "") .replaceAll("&h=.*", "").replaceAll("\\?acontext=.*", ""); } // url decoder, recreate all the special characters private static String decodeUrl(String url) { return url.replace("%3C", "<").replace("%3E", ">").replace("%23", "#").replace("%25", "%") .replace("%7B", "{").replace("%7D", "}").replace("%7C", "|").replace("%5C", "\\") .replace("%5E", "^").replace("%7E", "~").replace("%5B", "[").replace("%5D", "]") .replace("%60", "`").replace("%3B", ";").replace("%2F", "/").replace("%3F", "?") .replace("%3A", ":").replace("%40", "@").replace("%3D", "=").replace("%26", "&") .replace("%24", "$").replace("%2B", "+").replace("%22", "\"").replace("%2C", ",") .replace("%20", " "); } // get some information about the device (needed for e-mail signature) public static String getDeviceInfo(Activity activity) { StringBuilder sb = new StringBuilder(); try { PackageInfo pInfo = activity.getPackageManager().getPackageInfo( activity.getPackageName(), PackageManager.GET_META_DATA); sb.append("\nApp Package Name: ").append(activity.getPackageName()); sb.append("\nApp Version Name: ").append(pInfo.versionName); sb.append("\nApp Version Code: ").append(pInfo.versionCode); } catch (PackageManager.NameNotFoundException ex) { Log.e("Misc: getDeviceInfo", ex.getMessage()); } sb.append("\nOS Version: ").append(System.getProperty("os.version")).append(" (") .append(android.os.Build.VERSION.RELEASE).append(")"); sb.append("\nOS API Level: ").append(android.os.Build.VERSION.SDK_INT); sb.append("\nDevice: ").append(android.os.Build.DEVICE); sb.append("\nModel: ").append(android.os.Build.MODEL); sb.append("\nManufacturer: ").append(android.os.Build.MANUFACTURER); DisplayMetrics metrics = new DisplayMetrics(); activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); sb.append("\nScreen: ").append(metrics.heightPixels).append(" x ").append(metrics.widthPixels); sb.append("\nLocale: ").append(Locale.getDefault().toString()); return sb.toString(); } public static void copyTextToClipboard(Context context, String label, String text) { ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText(label, text); clipboard.setPrimaryClip(clip); } /** * Extracts URL from a given string * @param string Text which may contain an URL * @return Extracted URL or empty string if URL not found inside */ public static String extractUrl(String string) { final Pattern urlPattern = Pattern.compile( "(?:^|[\\W])((ht|f)tp(s?):\\/\\/|www\\.)" + "(([\\w\\-]+\\.){1,}?([\\w\\-.~]+\\/?)*" + "[\\p{Alnum}.,%_=?&#\\-+()\\[\\]\\*$~@!:/{};']*)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL); Matcher matcher = urlPattern.matcher(string); int matchStart = 0; int matchEnd = 0; while (matcher.find()) { matchStart = matcher.start(1); matchEnd = matcher.end(); } return string.substring(matchStart, matchEnd); } /** * Download an image as Bitmap object (run always outside the Main Thread) */ public static Bitmap getBitmapFromURL(String src) { try { URL url = new URL(src); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.connect(); InputStream input = connection.getInputStream(); return BitmapFactory.decodeStream(input); } catch (IOException e) { return null; } catch (Exception e) { return null; } } }