package com.qiniu.android.http;
import android.os.Build;
import android.text.TextUtils;
import com.qiniu.android.common.Constants;
import com.qiniu.android.utils.StringUtils;
import java.nio.charset.Charset;
import java.util.Locale;
import java.util.Random;
import static java.lang.String.format;
/**
* Created by bailong on 15/6/23.
*/
public final class UserAgent {
private static UserAgent _instance = new UserAgent();
public final String id;
public final String ua;
private UserAgent() {
id = genId();
ua = getUserAgent(id);
}
public static UserAgent instance() {
return _instance;
}
private static String genId() {
Random r = new Random();
return System.currentTimeMillis() + "" + r.nextInt(999);
}
private static String getUserAgent(String id) {
return format("QiniuAndroid/%s (%s; %s; %s", Constants.VERSION,
osVersion(), device(), id);
}
private static String osVersion() {
try {
String v = android.os.Build.VERSION.RELEASE;
if (v == null) {
return "-";
}
return StringUtils.strip(v.trim());
} catch (Throwable t) {
return "-";
}
}
private static String device() {
try {
String model = Build.MODEL.trim();
String device = deviceName(Build.MANUFACTURER.trim(), model);
if (TextUtils.isEmpty(device)) {
device = deviceName(Build.BRAND.trim(), model);
}
return StringUtils.strip((device == null ? "-" : device) + "-" + model);
} catch (Throwable t) {
return "-";
}
}
private static String deviceName(String manufacturer, String model) {
String str = manufacturer.toLowerCase(Locale.getDefault());
if ((str.startsWith("unknown")) || (str.startsWith("alps")) ||
(str.startsWith("android")) || (str.startsWith("sprd")) ||
(str.startsWith("spreadtrum")) || (str.startsWith("rockchip")) ||
(str.startsWith("wondermedia")) || (str.startsWith("mtk")) ||
(str.startsWith("mt65")) || (str.startsWith("nvidia")) ||
(str.startsWith("brcm")) || (str.startsWith("marvell")) ||
(model.toLowerCase(Locale.getDefault()).contains(str))) {
return null;
}
return manufacturer;
}
public String getUa(String part) {
String _part = ("" + part).trim();
_part = _part.substring(0, Math.min(16, _part.length()));
return new String((ua + "; " + _part + ")").getBytes(Charset.forName("ISO-8859-1")));
}
}