package com.ladjzero.uzlee; import android.app.Application; import android.content.Context; import android.content.SharedPreferences; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Build; import android.preference.PreferenceManager; import android.util.LruCache; import android.webkit.WebView; import com.joanzapata.iconify.Iconify; import com.joanzapata.iconify.fonts.MaterialModule; import com.ladjzero.hipda.Forum; import com.ladjzero.hipda.User; import com.ladjzero.uzlee.utils.Constants; import com.ladjzero.uzlee.utils.UilUtils; import com.ladjzero.uzlee.utils.Utils; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.orhanobut.logger.Logger; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.Predicate; import java.util.ArrayList; import java.util.List; /** * Created by ladjzero on 2015/1/2. */ public class App extends Application implements SharedPreferences.OnSharedPreferenceChangeListener { private static App app; private LruCache<String, String> mMemCache; private HttpClient2 mHttpClient; private Core mCore; private boolean mShouldDownloadImage; private SharedPreferences mPref; private List<OnEventListener> mListeners; private Api mApi; private List<Forum> mFlattenForums; public static App getInstance() { return app; } public HttpClient2 getHttpClient() { return mHttpClient; } public Core getCore() { return mCore; } public Api getApi() { return mApi; } @Override public void onCreate() { super.onCreate(); Iconify.with(new MaterialModule()); // 10MB. mMemCache = new LruCache<String, String>(1024 * 1024 * 10) { @Override protected int sizeOf(String key, String value) { return value.length(); } }; ImageLoaderConfiguration ilConfig = new ImageLoaderConfiguration.Builder(this) .memoryCacheSizePercentage(50) .defaultDisplayImageOptions(Constants.DIO_USER_IMAGE).build(); ImageLoader.getInstance().init(ilConfig); mHttpClient = new HttpClient2(this); mApi = new Api(); PersistenceAdapter adapter = new AndroidAdapter(this); mCore = Core.initialize(adapter, mHttpClient); UilUtils.init(this); mPref = PreferenceManager.getDefaultSharedPreferences(this); mPref.registerOnSharedPreferenceChangeListener(this); setImageNetwork(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { WebView.setWebContentsDebuggingEnabled(true); } app = this; mListeners = new ArrayList<>(); Logger.init(); } @Override public void onTerminate() { mPref.unregisterOnSharedPreferenceChangeListener(this); super.onTerminate(); } public LruCache<String, String> getMemCache() { return mMemCache; } public List<Forum> getFlattenForums() { return Forum.flatten(Utils.getAllForums(this)); } public List<Forum> getUserFlattenForums() { final User me = getInstance().getCore().getApiStore().getUser(); List<Forum> forums = getFlattenForums(); CollectionUtils.filter(forums, new Predicate() { @Override public boolean evaluate(Object o) { Forum f = (Forum) o; return me.getId() != 0 || !f.isSecurity(); } }); return forums; } public boolean shouldDownloadImage() { return mShouldDownloadImage; } public SharedPreferences getSharedPreferences() { return mPref; } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) { if (s.equals(Constants.PREF_KEY_ENABLE_DOWNLOAD_IMAGE)) { setImageNetwork(); } } @Override public void onLowMemory() { super.onLowMemory(); ImageLoader.getInstance().clearMemoryCache(); } public void setImageNetwork() { ConnectivityManager connectivityManager = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); if (activeNetInfo != null) { boolean isWifi = activeNetInfo.getType() == ConnectivityManager.TYPE_WIFI; boolean loadWifiOnly = mPref.getBoolean(Constants.PREF_KEY_ENABLE_DOWNLOAD_IMAGE, false); mShouldDownloadImage = isWifi || !loadWifiOnly; ImageLoader.getInstance().denyNetworkDownloads(!mShouldDownloadImage); Logger.i("wifi %b load when wifi only %b", isWifi, loadWifiOnly); } } public interface OnEventListener { void onEvent(Object o); } public void addEventListener(OnEventListener l) { mListeners.add(l); } public void removeEventListener(OnEventListener l){ mListeners.remove(l); } public void dispatchEvent(Object o) { for (OnEventListener l : mListeners) { l.onEvent(o); } } }