package com.webshrub.citizencomplaint.androidapp;
import android.annotation.TargetApi;
import android.app.Application;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.StrictMode;
import android.util.Log;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.MemoryCacheAware;
import com.nostra13.universalimageloader.cache.memory.impl.LRULimitedMemoryCache;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* Created by IntelliJ IDEA.
* User: Ahsan.Javed
* Date: 5/7/13
* Time: 9:38 PM
*/
public class CitizenComplaintApplication extends Application {
public static final String CITIZEN_COMPLAINT_APPLICATION_LOG_TAG = "CitizenComplaintApplication";
public static void initImageLoader(Context context) {
int memoryCacheSize = (int) (Runtime.getRuntime().maxMemory() / 8);
MemoryCacheAware<String, Bitmap> memoryCache;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
memoryCache = new LruMemoryCache(memoryCacheSize);
} else {
memoryCache = new LRULimitedMemoryCache(memoryCacheSize);
}
// This configuration tuning is custom. You can tune every option, you may tune some of them, or you can create default configuration by
// ImageLoaderConfiguration.createDefault(this); method.
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.threadPriority(Thread.NORM_PRIORITY - 2)
.memoryCache(memoryCache)
.denyCacheImageMultipleSizesInMemory()
.discCacheFileNameGenerator(new Md5FileNameGenerator())
.tasksProcessingOrder(QueueProcessingType.LIFO)
.enableLogging() // Not necessary in common
.build();
// Initialize ImageLoader with configuration.
ImageLoader.getInstance().init(config);
}
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@Override
public void onCreate() {
if (CitizenComplaintConstants.DEVELOPER_MODE && Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyDialog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll().penaltyDeath().build());
}
super.onCreate();
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
executorService.scheduleWithFixedDelay(new CitizenComplaintPostDetailsTask(), 1, 2 * 60, TimeUnit.SECONDS);
initImageLoader(getApplicationContext());
}
private class CitizenComplaintPostDetailsTask implements Runnable {
@SuppressWarnings("unchecked")
@Override
public void run() {
if (CitizenComplaintUtility.isDeviceOnline(getApplicationContext())) {
for (CitizenComplaint citizenComplaint : CitizenComplaintDataSource.getInstance(getApplicationContext()).getAllCitizenComplaints()) {
CitizenComplaintHttpUtil.postComplaintDetails(getApplicationContext(), citizenComplaint);
}
} else {
Log.w(CITIZEN_COMPLAINT_APPLICATION_LOG_TAG, "Not connected to internet.");
}
}
}
}