package com.easydroid.utils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
import android.content.Context;
import android.provider.Settings.Secure;
import android.telephony.TelephonyManager;
public class EasyCommonUtils {
private static String DEVICE_ID;
public static String convertStreamToString(InputStream inputStream) {
BufferedReader reader = new BufferedReader(new InputStreamReader(
inputStream));
StringBuilder stringBuilder = new StringBuilder();
String streamLine = null;
try {
while ((streamLine = reader.readLine()) != null) {
stringBuilder.append(streamLine + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
return stringBuilder.toString();
}
public static String buildEncodedQueryString(
HashMap<String, String> requestParams) {
String queryString = "?";
if (requestParams == null) {
return null;
}
Iterator<Entry<String, String>> it = requestParams.entrySet()
.iterator();
while (it.hasNext()) {
Map.Entry<String, String> pairs = (Map.Entry <String, String>) it.next();
try {
queryString += URLEncoder.encode(pairs.getKey().toString(),
"UTF-8")
+ "="
+ URLEncoder.encode(pairs.getValue().toString(),
"UTF-8") + "&";
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (queryString.length() > 0)
queryString = queryString.substring(0, queryString.length() - 1);
return queryString;
}
// return a cached unique ID for each device
public static String getDeviceID(Context context) {
if (DEVICE_ID == null) {
DEVICE_ID = EasySharedUtils.getDeviceId(context);
}
if (DEVICE_ID == null) {
DEVICE_ID = generateID(context);
if (DEVICE_ID != null) {
EasySharedUtils.storeDevieId(DEVICE_ID, context);
}
}
return DEVICE_ID;
}
// generate a unique ID for each device
// use available schemes if possible / generate a random signature instead
private static String generateID(Context context) {
// use the ANDROID_ID constant, generated at the first device boot
String deviceId = Secure.getString(context.getContentResolver(),
Secure.ANDROID_ID);
// in case known problems are occured
if (deviceId == null) {
// get a unique deviceID like IMEI for GSM or ESN for CDMA phones
// don't forget:
// <uses-permission
// android:name="android.permission.READ_PHONE_STATE" />
deviceId = ((TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();
// if nothing else works, generate a random number
if (deviceId == null) {
Random tmpRand = new Random();
deviceId = String.valueOf(tmpRand.nextLong());
}
}
// any value is hashed to have consistent format
return getHash(deviceId);
}
// generates a SHA-1 hash for any string
public static String getHash(String stringToHash) {
MessageDigest digest = null;
try {
digest = MessageDigest.getInstance("SHA-1");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
byte[] result = null;
try {
result = digest.digest(stringToHash.getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
StringBuilder sb = new StringBuilder();
for (byte b : result) {
sb.append(String.format("%02X", b));
}
String messageDigest = sb.toString();
return messageDigest;
}
}