package com.gitonway.fineday.utils;
import android.content.Context;
import android.os.Environment;
import android.os.StatFs;
import android.text.TextUtils;
import org.apache.http.Header;
import org.apache.http.HeaderElement;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.protocol.HTTP;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.security.cert.X509Certificate;
public class OtherUtils {
private OtherUtils() {
}
/**
* @param context
* @param dirName
* Only the folder name, not full path.
* @return app_cache_path/dirName
*/
public static String getDiskCacheDir(Context context, String dirName) {
String cachePath = null;
if (Environment.MEDIA_MOUNTED.equals(Environment
.getExternalStorageState())) {
File externalCacheDir = context.getExternalCacheDir();
if (externalCacheDir != null) {
cachePath = externalCacheDir.getPath();
}
}
if (cachePath == null) {
cachePath = context.getCacheDir().getPath();
}
return cachePath + File.separator + dirName;
}
public static long getAvailableSpace(File dir) {
try {
final StatFs stats = new StatFs(dir.getPath());
return (long) stats.getBlockSize()
* (long) stats.getAvailableBlocks();
} catch (Throwable e) {
LogUtils.e(e.getMessage(), e);
return -1;
}
}
public static boolean isSupportRange(final HttpResponse response) {
if (response == null)
return false;
Header header = response.getFirstHeader("Accept-Ranges");
if (header != null) {
return "bytes".equals(header.getValue());
}
header = response.getFirstHeader("Content-Range");
if (header != null) {
String value = header.getValue();
return value != null && value.startsWith("bytes");
}
return false;
}
// public static String getFileNameFromHttpResponse(final HttpResponse response) {
// if (response == null)
// return null;
// String result = null;
// Header header = response.getFirstHeader("Content-Disposition");
// if (header != null) {
// for (HeaderElement element : header.getElements()) {
// NameValuePair fileNamePair = element
// .getParameterByName("filename");
// if (fileNamePair != null) {
// result = fileNamePair.getValue();
// // try to get correct encoding str
// result = CharsetUtils.toCharset(result, HTTP.UTF_8,
// result.length());
// break;
// }
// }
// }
// return result;
// }
public static Charset getCharsetFromHttpRequest(
final HttpRequestBase request) {
if (request == null)
return null;
String charsetName = null;
Header header = request.getFirstHeader("Content-Type");
if (header != null) {
for (HeaderElement element : header.getElements()) {
NameValuePair charsetPair = element
.getParameterByName("charset");
if (charsetPair != null) {
charsetName = charsetPair.getValue();
break;
}
}
}
boolean isSupportedCharset = false;
if (!TextUtils.isEmpty(charsetName)) {
try {
isSupportedCharset = Charset.isSupported(charsetName);
} catch (Throwable e) {
}
}
return isSupportedCharset ? Charset.forName(charsetName) : null;
}
private static final int STRING_BUFFER_LENGTH = 100;
public static long sizeOfString(final String str, String charset)
throws UnsupportedEncodingException {
if (TextUtils.isEmpty(str)) {
return 0;
}
int len = str.length();
if (len < STRING_BUFFER_LENGTH) {
return str.getBytes(charset).length;
}
long size = 0;
for (int i = 0; i < len; i += STRING_BUFFER_LENGTH) {
int end = i + STRING_BUFFER_LENGTH;
end = end < len ? end : len;
String temp = getSubString(str, i, end);
size += temp.getBytes(charset).length;
}
return size;
}
// get the sub string for large string
public static String getSubString(final String str, int start, int end) {
return new String(str.substring(start, end));
}
public static StackTraceElement getCurrentStackTraceElement() {
return Thread.currentThread().getStackTrace()[3];
}
public static StackTraceElement getCallerStackTraceElement() {
return Thread.currentThread().getStackTrace()[4];
}
private static TrustManager[] trustAllCerts;
public static void trustAllSSLForHttpsURLConnection() {
// Create a trust manager that does not validate certificate chains
if (trustAllCerts == null) {
trustAllCerts = new TrustManager[] { new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs,
String authType) {
}
public void checkServerTrusted(X509Certificate[] certs,
String authType) {
}
} };
}
// Install the all-trusting trust manager
final SSLContext sslContext;
try {
sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustAllCerts, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext
.getSocketFactory());
} catch (Throwable e) {
LogUtils.e(e.getMessage(), e);
}
HttpsURLConnection
.setDefaultHostnameVerifier(org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
}
}