package org.goodev.discourse; import android.app.Application; import android.content.Context; import android.content.res.Resources; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.support.v4.app.FragmentActivity; import android.util.DisplayMetrics; import com.android.volley.RequestQueue; import com.android.volley.toolbox.ImageLoader; import com.android.volley.toolbox.ImageLoader.ImageCache; import com.android.volley.toolbox.Volley; import com.squareup.okhttp.OkHttpClient; import org.goodev.discourse.api.data.Category; import org.goodev.discourse.utils.BitmapLruCache; import org.goodev.discourse.utils.CookieManager; import org.goodev.discourse.utils.Tools; import java.util.ArrayList; import java.util.HashMap; public class App extends Application { private static App sThis; private static RequestQueue sQueue; private static ImageLoader mImageLoader; private static int PLACEHOLDER_USER_IMAGE = 0; private static int PLACEHOLDER_POST_IMAGE = 1; private static int PLACEHOLDER_MEDIA_IMAGE = 2; private final HashMap<Long, Category> mCategories = new HashMap<Long, Category>(); private String mCurrentSiteUrl = ""; private String mUsername; private String mPassword; private String mXsrToken; private CookieManager mCookieManager; private boolean mIsLogin; private OkHttpClient mOkHttpClient; public static String getXsrToken() { if (sThis == null) { return null; } return sThis.mXsrToken; } public static void setXsrToken(String token) { if (sThis == null) { return; } sThis.mXsrToken = token; } public static void setUserInfo(String name, String password) { if (sThis == null) { return; } sThis.mUsername = name; sThis.mPassword = password; } public static String getUsername() { if (sThis == null) { return ""; } return sThis.mUsername; } public static String getPassword() { if (sThis == null) { return null; } return sThis.mPassword; } public static String getSiteUrl() { if (sThis == null) { return null; } return sThis.mCurrentSiteUrl; } public static void setSiteUrl(String url) { if (sThis == null) { return; } sThis.mCurrentSiteUrl = url; } public synchronized static CookieManager getCookieManager() { if (sThis == null) { return new CookieManager(); } if (sThis.mCookieManager == null) { sThis.mCookieManager = new CookieManager(); } return sThis.mCookieManager; } public synchronized static boolean isLogin() { if (sThis == null) { return false; } return sThis.mIsLogin; } public synchronized static void setLogin(boolean login) { if (sThis == null) { return; } sThis.mIsLogin = login; } public synchronized static OkHttpClient getOkHttp() { if (sThis == null) { return new OkHttpClient(); } if (sThis.mOkHttpClient == null) { sThis.mOkHttpClient = new OkHttpClient(); } return sThis.mOkHttpClient; } public synchronized static RequestQueue getRequestQueue() { if (sQueue == null) sQueue = Volley.newRequestQueue(sThis); return sQueue; } public synchronized static ImageLoader getImageLoader() { if (mImageLoader == null) { RequestQueue queue = getRequestQueue(); ImageCache cache = new BitmapLruCache(); mImageLoader = new ImageLoader(queue, cache); } return mImageLoader; } public static Context getContext() { return sThis; } public static org.goodev.discourse.utils.ImageLoader getImageLoader(FragmentActivity activity, Resources resources) { DisplayMetrics metrics = resources.getDisplayMetrics(); int largestWidth = metrics.widthPixels > metrics.heightPixels ? metrics.widthPixels : metrics.heightPixels; // Create list of placeholder drawables (this ImageLoader requires two different // placeholder images). ArrayList<Drawable> placeHolderDrawables = new ArrayList<Drawable>(3); placeHolderDrawables.add(PLACEHOLDER_USER_IMAGE, resources.getDrawable(org.goodev.discourse.R.drawable.ic_person)); placeHolderDrawables.add(PLACEHOLDER_POST_IMAGE, resources.getDrawable(org.goodev.discourse.R.drawable.ic_logo)); placeHolderDrawables.add(PLACEHOLDER_MEDIA_IMAGE, new ColorDrawable(resources.getColor(android.R.color.transparent))); // Create ImageLoader instance return new org.goodev.discourse.utils.ImageLoader(activity, placeHolderDrawables).setMaxImageSize(largestWidth); } public static Category getCategory(long cid) { if (sThis == null) { return null; } return sThis.mCategories.get(cid); } public static void setCategories(HashMap<Long, Category> categories) { if (sThis == null) { return; } sThis.mCategories.clear(); sThis.mCategories.putAll(categories); } @Override public void onCreate() { super.onCreate(); sThis = this; Tools.setupFirstRunTime(sThis); } }