package com.mirhoseini.marvel;
import android.app.Application;
import android.content.Context;
import com.mirhoseini.marvel.character.cache.CacheModule;
import com.mirhoseini.marvel.character.cache.CacheSubComponent;
import com.mirhoseini.marvel.character.search.SearchModule;
import com.mirhoseini.marvel.character.search.SearchSubComponent;
/**
* Created by Mohsen on 20/10/2016.
*/
public abstract class MarvelApplication extends Application {
private static ApplicationComponent component;
private CacheSubComponent cacheSubComponent;
private SearchSubComponent searchSubComponent;
public static ApplicationComponent getComponent() {
return component;
}
public static MarvelApplication get(Context context) {
return (MarvelApplication) context.getApplicationContext();
}
public CacheSubComponent getCacheSubComponent() {
if (null == cacheSubComponent)
createCacheSubComponent();
return cacheSubComponent;
}
public CacheSubComponent createCacheSubComponent() {
cacheSubComponent = component.plus(new CacheModule());
return cacheSubComponent;
}
public void releaseCacheSubComponent() {
cacheSubComponent = null;
}
public SearchSubComponent getSearchSubComponent() {
if (null == searchSubComponent)
createSearchSubComponent();
return searchSubComponent;
}
public SearchSubComponent createSearchSubComponent() {
searchSubComponent = component.plus(new SearchModule());
return searchSubComponent;
}
public void releaseSearchSubComponent() {
searchSubComponent = null;
}
@Override
public void onCreate() {
super.onCreate();
initApplication();
component = createComponent();
}
public ApplicationComponent createComponent() {
return DaggerApplicationComponent.builder()
.androidModule(new AndroidModule(this))
.build();
}
public abstract void initApplication();
}