package edu.hebtu.movingcampus.utils;
import java.security.SecureRandom;
import java.util.Date;
import android.app.Activity;
import android.util.DisplayMetrics;
public class Utility {
private static final int MAX_NONCE = 0 + 10;
private static final String LABEL_App_sign = "api_sign";
private static final String LABEL_TIME = "timestamp";
private static final String LABEL_NONCE = "nonce";
private static final String LABEL_UID = "uid";
private static final SecureRandom sRandom = new SecureRandom();
private static char sHexDigits[] = { '0', '1', '2', '3', '4', '5', '6',
'7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
private static String getNonce() {
byte[] bytes = new byte[MAX_NONCE / 2];
sRandom.nextBytes(bytes);
return hexString(bytes);
}
public static String hexString(byte[] source) {
if (source == null || source.length <= 0) {
return "";
}
final int size = source.length;
final char str[] = new char[size * 2];
int index = 0;
byte b;
for (int i = 0; i < size; i++) {
b = source[i];
str[index++] = sHexDigits[b >>> 4 & 0xf];
str[index++] = sHexDigits[b & 0xf];
}
return new String(str);
}
private static long getTimestamp() {
Date date = new Date();
long i = date.getTime();
return i;
}
private static String getAPIsig(String key, long timestamp, String nonce,
String uid) {
// api_sig =
// MD5("api_key"+@api_key+"nonce"+@nonce+"timestamp"+@timestamp)
String result = null;
StringBuilder builder = new StringBuilder();
synchronized (builder) {
builder.append(key);
builder.append(timestamp);
builder.append(nonce);
builder.append(uid);
result = MD5.encode(builder.toString());
builder.delete(0, builder.length());
}
return result;
}
/**
* &…………………………
*
* @param key
* @return
*/
public static String getParams(String key) {
String result = "";
try {
String[] temp = key.split(":");
long timestamp = getTimestamp();
String nonce = getNonce();
String api_sign = getAPIsig(key, timestamp, nonce, temp[1]);
StringBuilder builder = new StringBuilder();
synchronized (result) {
builder.append(String.format("&" + LABEL_UID + "=%s", temp[1]));
builder.append(String.format("&" + LABEL_NONCE + "=%s", nonce));
builder.append(String.format("&" + LABEL_TIME + "=%s",
timestamp));
builder.append(String.format("&" + LABEL_App_sign + "=%s",
api_sign));
result = builder.toString();
builder.delete(0, builder.length());
}
return result;
} catch (Exception ex) {
ex.printStackTrace();
return "";
}
}
public static String getScreenParams(Activity activity) {
DisplayMetrics dm = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
return "&screen="
+ (dm.heightPixels > dm.widthPixels ? dm.widthPixels + "*"
+ dm.heightPixels : dm.heightPixels + "*"
+ dm.widthPixels);
}
}