package com.devsmart.android;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.security.MessageDigest;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import android.content.res.Resources;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.method.MovementMethod;
import android.text.style.ClickableSpan;
import android.util.Log;
import android.widget.TextView;
public class StringUtils {
public static String bytesToHex(byte[] bytes) {
final char[] hexArray = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char[] hexChars = new char[bytes.length * 2];
int v;
for ( int j = 0; j < bytes.length; j++ ) {
v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}
public static String sha1hash(String text) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-1");
md.update(text.getBytes("UTF-8"), 0, text.length());
byte[] sha1hash = md.digest();
return bytesToHex(sha1hash);
} catch (Exception e) {
Log.e(StringUtils.class.getName(), "", e);
return null;
}
}
public static boolean isEmptyString(String str) {
return !(str != null && str.trim().length() > 0);
}
public static String loadRawResourceString(Resources res, int resourceId) throws IOException {
InputStream is = res.openRawResource(resourceId);
return loadString(is);
}
public static String loadAssetString(Resources res, String filename) throws IOException {
InputStream is = res.getAssets().open(filename);
return loadString(is);
}
public static String loadString(InputStream is) throws IOException {
StringBuilder builder = new StringBuilder();
InputStreamReader reader = new InputStreamReader(is);
char[] buf = new char[1024];
int numRead=0;
while((numRead=reader.read(buf)) != -1){
builder.append(buf, 0, numRead);
}
return builder.toString();
}
public static String[] union(String[] a, String[] b) {
LinkedList<String> retval = new LinkedList<String>();
for(int i=0;i<a.length;i++){
retval.add(a[i]);
}
for(int i=0;i<b.length;i++){
if(!retval.contains(b[i])){
retval.add(b[i]);
}
}
String[] retarray = new String[retval.size()];
retval.toArray(retarray);
return retarray;
}
public static String[] intersection(String[] a, String[] b){
List<String> blist = Arrays.asList(b);
LinkedList<String> retval = new LinkedList<String>();
for(int i=0;i<a.length;i++){
if(blist.contains(a[i])){
retval.add(a[i]);
}
}
String[] retarray = new String[retval.size()];
retval.toArray(retarray);
return retarray;
}
public abstract static class ClickSpan extends ClickableSpan {
}
public static void clickify(TextView view, final String clickableText,
final ClickSpan span) {
CharSequence text = view.getText();
String string = text.toString();
int start = string.indexOf(clickableText);
int end = start + clickableText.length();
if (start == -1) return;
if (text instanceof Spannable) {
((Spannable)text).setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
} else {
SpannableString s = SpannableString.valueOf(text);
s.setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
view.setText(s);
}
MovementMethod m = view.getMovementMethod();
if ((m == null) || !(m instanceof LinkMovementMethod)) {
view.setMovementMethod(LinkMovementMethod.getInstance());
}
}
}