package com.gzsll.hupu;
import android.app.Application;
import com.facebook.cache.disk.DiskCacheConfig;
import com.facebook.common.internal.Supplier;
import com.facebook.common.util.ByteConstants;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.imagepipeline.backends.okhttp3.OkHttpImagePipelineConfigFactory;
import com.facebook.imagepipeline.cache.MemoryCacheParams;
import com.facebook.imagepipeline.core.ImagePipelineConfig;
import com.facebook.imagepipeline.decoder.SimpleProgressiveJpegConfig;
import com.gzsll.hupu.components.storage.UserStorage;
import com.gzsll.hupu.db.User;
import com.gzsll.hupu.db.UserDao;
import com.gzsll.hupu.injector.component.ApplicationComponent;
import com.gzsll.hupu.injector.component.DaggerApplicationComponent;
import com.gzsll.hupu.injector.module.ApplicationModule;
import com.gzsll.hupu.util.SettingPrefUtil;
import com.gzsll.hupu.util.ToastUtil;
import com.liulishuo.filedownloader.FileDownloader;
import com.liulishuo.filedownloader.util.FileDownloadHelper;
import com.squareup.leakcanary.LeakCanary;
import java.util.List;
import javax.inject.Inject;
import okhttp3.OkHttpClient;
/**
* Created by sll on 2016/3/8.
*/
public class MyApplication extends Application {
public static final int MAX_DISK_CACHE_SIZE = 50 * ByteConstants.MB;
private static final int MAX_HEAP_SIZE = (int) Runtime.getRuntime().maxMemory();
public static final int MAX_MEMORY_CACHE_SIZE = MAX_HEAP_SIZE / 8;
@Inject
UserStorage mUserStorage;
@Inject
UserDao mUserDao;
@Inject
OkHttpClient mOkHttpClient;
private ApplicationComponent mApplicationComponent;
@Override
public void onCreate() {
super.onCreate();
initComponent();
initUser();
FileDownloader.init(this, new FileDownloadHelper.OkHttpClientCustomMaker() {
@Override
public OkHttpClient customMake() {
return mOkHttpClient;
}
});
initFrescoConfig();
ToastUtil.register(this);
LeakCanary.install(this);
}
private void initComponent() {
mApplicationComponent =
DaggerApplicationComponent.builder().applicationModule(new ApplicationModule(this)).build();
mApplicationComponent.inject(this);
}
public ApplicationComponent getApplicationComponent() {
return mApplicationComponent;
}
private void initUser() {
List<User> users = mUserDao.queryBuilder()
.where(UserDao.Properties.Uid.eq(SettingPrefUtil.getLoginUid(this)))
.list();
if (!users.isEmpty()) {
mUserStorage.login(users.get(0));
}
}
private void initFrescoConfig() {
final MemoryCacheParams bitmapCacheParams =
new MemoryCacheParams(MAX_MEMORY_CACHE_SIZE, // Max total size of elements in the cache
Integer.MAX_VALUE, // Max entries in the cache
MAX_MEMORY_CACHE_SIZE, // Max total size of elements in eviction queue
Integer.MAX_VALUE, // Max length of eviction queue
Integer.MAX_VALUE);
ImagePipelineConfig config = OkHttpImagePipelineConfigFactory.newBuilder(this, mOkHttpClient)
.setProgressiveJpegConfig(new SimpleProgressiveJpegConfig())
.setBitmapMemoryCacheParamsSupplier(new Supplier<MemoryCacheParams>() {
public MemoryCacheParams get() {
return bitmapCacheParams;
}
})
.setMainDiskCacheConfig(
DiskCacheConfig.newBuilder(this).setMaxCacheSize(MAX_DISK_CACHE_SIZE).build())
.setDownsampleEnabled(true)
.build();
Fresco.initialize(this, config);
}
}