/*
* Copyright 2013 Chris Banes
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.zhaojian.jolly.selectphotos;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import uk.co.senab.bitmapcache.BitmapLruCache;
import android.accounts.Account;
import android.app.Application;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.preference.PreferenceManager;
import android.service.textservice.SpellCheckerService.Session;
import android.util.Log;
import android.view.Display;
import android.view.WindowManager;
import com.zhaojian.jolly.constant.Constants;
import com.zhaojian.jolly.constant.PreferenceConstants;
import com.zhaojian.jolly.controller.PhotoUploadController;
import com.zhaojian.jolly.tasks.PhotupThreadFactory;
import com.zhaojian.jolly.utils.Utils;
public class SelectPhotoApplication {
static final String LOG_TAG = "PhotupApplication";
public static final String THREAD_FILTERS = "filters_thread";
static final float EXECUTOR_POOL_SIZE_PER_CORE = 1.5f;
private ExecutorService mMultiThreadExecutor, mSingleThreadExecutor,
mDatabaseThreadExecutor;
private BitmapLruCache mImageCache;
private static PhotoUploadController mPhotoController;
private static Context mContext;
private static SelectPhotoApplication uniqueInstance = null;
private SelectPhotoApplication() {
// Exists only to defeat instantiation.
}
public static SelectPhotoApplication init(Context context) {
if (uniqueInstance == null) {
uniqueInstance = new SelectPhotoApplication();
mContext = context;
mPhotoController = new PhotoUploadController(mContext);
}
return uniqueInstance;
}
public static SelectPhotoApplication getInstanse(){
if (uniqueInstance == null) {
uniqueInstance = new SelectPhotoApplication();
}
return uniqueInstance;
}
public ExecutorService getMultiThreadExecutorService() {
if (null == mMultiThreadExecutor || mMultiThreadExecutor.isShutdown()) {
final int numThreads = Math.round(Runtime.getRuntime()
.availableProcessors() * EXECUTOR_POOL_SIZE_PER_CORE);
mMultiThreadExecutor = Executors.newFixedThreadPool(numThreads,
new PhotupThreadFactory());
}
return mMultiThreadExecutor;
}
public ExecutorService getPhotoFilterThreadExecutorService() {
if (null == mSingleThreadExecutor || mSingleThreadExecutor.isShutdown()) {
mSingleThreadExecutor = Executors
.newSingleThreadExecutor(new PhotupThreadFactory(
THREAD_FILTERS));
}
return mSingleThreadExecutor;
}
public ExecutorService getDatabaseThreadExecutorService() {
if (null == mDatabaseThreadExecutor
|| mDatabaseThreadExecutor.isShutdown()) {
mDatabaseThreadExecutor = Executors
.newSingleThreadExecutor(new PhotupThreadFactory());
}
return mDatabaseThreadExecutor;
}
public BitmapLruCache getImageCache() {
if (null == mImageCache) {
mImageCache = new BitmapLruCache(mContext,
Constants.IMAGE_CACHE_HEAP_PERCENTAGE);
}
return mImageCache;
}
public PhotoUploadController getPhotoUploadController() {
return mPhotoController;
}
@SuppressWarnings("deprecation")
public int getSmallestScreenDimension() {
WindowManager wm = (WindowManager) mContext
.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
return Math.min(display.getHeight(), display.getWidth());
}
public Context getContext(){
return mContext;
}
}