package org.michenux.drodrolib;
import android.app.Activity;
import android.app.Application;
import android.content.AbstractThreadedSyncAdapter;
import android.content.ContentProvider;
import android.content.Context;
import android.support.multidex.MultiDexApplication;
import android.support.v4.app.Fragment;
import android.util.Log;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import dagger.ObjectGraph;
public class MCXApplication extends MultiDexApplication {
public static final String LOG_TAG = "MCX";
private ObjectGraph objectGraph;
public void inject(Activity activity) {
getObjectGraph().inject(activity);
}
public void inject(ContentProvider contentProvider) {
getObjectGraph().inject(contentProvider);
}
public void inject(Fragment fragment) {
getObjectGraph().inject(fragment);
}
public void inject(AbstractThreadedSyncAdapter fragment) {
getObjectGraph().inject(fragment);
}
public void injectSelf() {
getObjectGraph().inject(this);
}
public synchronized ObjectGraph getObjectGraph() {
if (objectGraph == null) {
List<Object> modules = new ArrayList<>();
buildDaggerModules(modules);
this.objectGraph = ObjectGraph.create(modules.toArray());
onObjectGraphCreated(this.objectGraph);
}
return objectGraph;
}
public void buildDaggerModules(List<Object> modules) {
modules.add(new MCXModule());
}
public void onObjectGraphCreated(ObjectGraph objectGraph) {
}
public static MCXApplication getRealApplication(Context applicationContext) {
MCXApplication application = null;
if (applicationContext instanceof MCXApplication) {
application = (MCXApplication) applicationContext;
} else {
Application realApplication = null;
Field magicField = null;
try {
magicField = applicationContext.getClass().getDeclaredField("realApplication");
magicField.setAccessible(true);
realApplication = (Application) magicField.get(applicationContext);
} catch (NoSuchFieldException e) {
Log.e(LOG_TAG, e.getMessage(), e);
} catch (IllegalAccessException e) {
Log.e(LOG_TAG, e.getMessage(), e);
}
application = (MCXApplication) realApplication;
}
return application;
}
}