package cn.alphabets.light.setting; import android.app.Application; import android.content.pm.PackageManager; import android.util.Log; import java.io.IOException; import java.util.Enumeration; import cn.alphabets.light.network.ContextManager; import dalvik.system.DexFile; /** * 缺省值 * Created by lin on 14/11/30. */ public class Default { private static Class<?> constantClass; /** * 服务器地址 */ private static final String Server = "fastfix.alphabets.cn"; private static final String Port = "80"; private static final String Protocol = "http"; public static String Server() { return getString("Server", Server); } public static String Port() { return getString("Port", Port); } public static String Protocol() { return getString("Protocol", Protocol); } public static final int RequestTimeout = 15 * 1000;// 超时15秒 public static final int MaxReTries = 0; // 重试次数 public static int FileRequestTimeout = 300 * 1000;// 超时5分钟 public static final int BackOffMultiplier = 0; /** * Log相关 */ private static final int LogLevel = Log.DEBUG; public static final String LogTag = "ABTag"; public static final String DebugModel = "DebugModel"; public static final String LastError = "LastError"; public static int LogLevel() { return getInt("LogLevel", LogLevel); } /** * */ public static final String CookieName = "Cookie"; public static final String CsrfName = "_csrf"; public static final String ServerCookieName = "set-cookie"; public static final String ServerCsrfName = "csrftoken"; /** * */ public static final String UrlLoadFile = "file/download/"; public static final String UrlSendFile = "file/create"; public static final String UrlCategoryList = "category/list"; public static final String UrlSettingList = "setting/list"; /** * URL */ public static final String URL_VERSION_CHECK = "system/versioncheck"; /** * Broadcast names */ public static final String BroadcastLogout = "cn.alphabets.light.logout"; /** * 图片压缩的宽度 */ public static final int ScaledWidth = 960; public static final int CompressQuality = 60; /** * 检索所有的类,获取指定类名的Class。 * 该方法只对Application包路径及以下路径进行匹配。 * @param className 类名 * @return Class */ private static Class<?> findClass(String className) { Application context = ContextManager.getInstance(); String packageName = context.getPackageName(); try { String path = context.getPackageManager().getApplicationInfo(packageName, 0).sourceDir; Enumeration entries = new DexFile(path).entries(); String fullClassName = null; while (entries.hasMoreElements()) { String name = (String) entries.nextElement(); if (name.matches(packageName + ".*." + className)) { fullClassName = name; break; } } if (fullClassName == null) { return null; } return Thread.currentThread().getContextClassLoader().loadClass(fullClassName); } catch (ClassNotFoundException e) { return null; } catch (PackageManager.NameNotFoundException e) { return null; } catch (IOException e) { return null; } } /** * 获取String类型的静态变量的值 * @param key 变量名 * @param defaults 当变量不存在时的缺省值 * @return 值 */ private static String getString(String key, String defaults) { if (constantClass == null) { constantClass = findClass("Constant"); } try { return (String) constantClass.getField(key).get(null); } catch (NoSuchFieldException e) { return defaults; } catch (IllegalAccessException e) { return defaults; } } /** * 获取int类型的静态变量的值 * @param key 变量名 * @param defaults 当变量不存在时的缺省值 * @return 值 */ private static int getInt(String key, int defaults) { if (constantClass == null) { constantClass = findClass("Constant"); } try { return (Integer) constantClass.getField(key).get(null); } catch (NoSuchFieldException e) { return defaults; } catch (IllegalAccessException e) { return defaults; } } }