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;
}
}
}