package com.yaoyumeng.v2ex; import android.app.Activity; import android.app.ActivityManager; import android.content.Context; import android.graphics.Bitmap; import android.os.Environment; import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache; import com.nostra13.universalimageloader.cache.memory.impl.WeakMemoryCache; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.assist.ImageScaleType; import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; import com.yaoyumeng.v2ex.database.DatabaseHelper; import com.yaoyumeng.v2ex.database.V2EXDataSource; import org.apache.http.conn.ssl.AllowAllHostnameVerifier; import org.apache.http.conn.ssl.SSLSocketFactory; import java.io.File; import java.util.Properties; public class Application extends android.app.Application { private static Application mContext; private static V2EXDataSource mDataSource; private boolean mJsonAPI; private boolean mHttps; private boolean mShowEffect; private boolean mLoadImage; private boolean mPushMessage; @Override public void onCreate() { super.onCreate(); //MobclickAgent.openActivityDurationTrack(false); SSLSocketFactory.getSocketFactory().setHostnameVerifier(new AllowAllHostnameVerifier()); mContext = this; initDatabase(); initImageLoader(); initAppConfig(); } public int getMemorySize(){ final ActivityManager mgr = (ActivityManager) getApplicationContext(). getSystemService(Activity.ACTIVITY_SERVICE); return mgr.getMemoryClass(); } private void initAppConfig() { mHttps = isHttps(); mJsonAPI = isJsonAPI(); mShowEffect = isShowEffect(); mLoadImage = isLoadImageInMobileNetwork(); mPushMessage = isMessagePush(); } private void initDatabase() { mDataSource = new V2EXDataSource(DatabaseHelper.getInstance(getApplicationContext())); } private void initImageLoader() { DisplayImageOptions options = new DisplayImageOptions.Builder() .bitmapConfig(Bitmap.Config.RGB_565) .imageScaleType(ImageScaleType.EXACTLY) .cacheOnDisc(true) .displayer(new FadeInBitmapDisplayer(200)) .showImageOnLoading(R.drawable.ic_avatar) .build(); File cacheDir; if (Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED) { cacheDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); } else { cacheDir = getCacheDir(); } ImageLoaderConfiguration.Builder configBuilder = new ImageLoaderConfiguration.Builder(mContext) .threadPoolSize(2) .memoryCache(new WeakMemoryCache()) .denyCacheImageMultipleSizesInMemory() .discCache(new UnlimitedDiscCache(cacheDir)) .defaultDisplayImageOptions(options); if (BuildConfig.DEBUG) { configBuilder.writeDebugLogs(); } ImageLoader.getInstance().init(configBuilder.build()); } public static Application getInstance() { return mContext; } public static V2EXDataSource getDataSource() { return mDataSource; } public static Context getContext() { return mContext; } public boolean isLoadImageInMobileNetworkFromCache() { return mLoadImage; } /** * 3G网络下是否加载显示文章图片 * @return */ public boolean isLoadImageInMobileNetwork() { String perf_loadimage = getProperty(AppConfig.CONF_NOIMAGE_NOWIFI); if (perf_loadimage == null || perf_loadimage.isEmpty()) return false; else return Boolean.parseBoolean(perf_loadimage); } /** * 设置3G网络下是否加载文章图片 * @param b */ public void setConfigLoadImageInMobileNetwork(boolean b) { setProperty(AppConfig.CONF_NOIMAGE_NOWIFI, String.valueOf(b)); mLoadImage = b; } /** * 是否显示动画效果 * * @return */ public boolean isShowEffectFromCache() { return mShowEffect; } /** * 是否显示动画效果 * * @return */ public boolean isShowEffect() { String perf_effect = getProperty(AppConfig.CONF_EFFECT); //默认是关闭动画效果 if (perf_effect == null || perf_effect.isEmpty()) return false; else return Boolean.parseBoolean(perf_effect); } /** * 设置是否显示动画效果 * * @param b */ public void setConfigEffect(boolean b) { setProperty(AppConfig.CONF_EFFECT, String.valueOf(b)); mShowEffect = b; } /** * 是否消息推送 * * @return */ public boolean isMessagePushFromCache() { return mPushMessage; } /** * 是否消息推送 * * @return */ public boolean isMessagePush() { String perf_message = getProperty(AppConfig.CONF_MESSAGE); if (perf_message == null || perf_message.isEmpty()) return true; else return Boolean.parseBoolean(perf_message); } /** * 设置消息推送 * * @param b */ public void setMessagePush(boolean b) { setProperty(AppConfig.CONF_MESSAGE, String.valueOf(b)); mPushMessage = b; } /** * 是否以JsonAPI的形式访问 * * @return */ public boolean isJsonAPIFromCache() { return mJsonAPI; } /** * 是否以JsonAPI的形式访问 * * @return */ public boolean isJsonAPI() { String perf_json = getProperty(AppConfig.CONF_JSONAPI); if (perf_json == null || perf_json.isEmpty()) return false; else return Boolean.parseBoolean(perf_json); } /** * 设置是否以JsonAPI访问 * * @param b */ public void setConfigJsonAPI(boolean b) { setProperty(AppConfig.CONF_JSONAPI, String.valueOf(b)); mJsonAPI = b; } /** * 是否Https登录 * * @return */ public boolean isHttpsFromCache(){ return mHttps; } /** * 是否Https登录 * * @return */ public boolean isHttps() { String perf_https = getProperty(AppConfig.CONF_USE_HTTPS); if (perf_https == null || perf_https.isEmpty()) return true; else return Boolean.parseBoolean(perf_https); } /** * 设置是是否Https访问 * * @param b */ public void setConfigHttps(boolean b) { setProperty(AppConfig.CONF_USE_HTTPS, String.valueOf(b)); mHttps = b; } public boolean containsProperty(String key) { Properties props = getProperties(); return props.containsKey(key); } public void setProperties(Properties ps) { AppConfig.getAppConfig(this).set(ps); } public Properties getProperties() { return AppConfig.getAppConfig(this).get(); } public void setProperty(String key, String value) { AppConfig.getAppConfig(this).set(key, value); } public String getProperty(String key) { return AppConfig.getAppConfig(this).get(key); } public void removeProperty(String... key) { AppConfig.getAppConfig(this).remove(key); } }