package com.thebluealliance.androidclient; import com.facebook.stetho.Stetho; import com.squareup.leakcanary.LeakCanary; import com.thebluealliance.androidclient.accounts.AccountModule; import com.thebluealliance.androidclient.auth.AuthModule; import com.thebluealliance.androidclient.binders.BinderModule; import com.thebluealliance.androidclient.config.AppConfig; import com.thebluealliance.androidclient.database.writers.DatabaseWriterModule; import com.thebluealliance.androidclient.datafeed.DatafeedModule; import com.thebluealliance.androidclient.datafeed.HttpModule; import com.thebluealliance.androidclient.datafeed.gce.GceModule; import com.thebluealliance.androidclient.datafeed.status.TBAStatusController; import com.thebluealliance.androidclient.di.TBAAndroidModule; import com.thebluealliance.androidclient.di.components.ApplicationComponent; import com.thebluealliance.androidclient.di.components.DaggerApplicationComponent; import com.thebluealliance.androidclient.di.components.DaggerDatafeedComponent; import com.thebluealliance.androidclient.di.components.DaggerDbComponent; import com.thebluealliance.androidclient.di.components.DatafeedComponent; import com.thebluealliance.androidclient.di.components.DbComponent; import com.thebluealliance.androidclient.gcm.GcmModule; import com.thebluealliance.androidclient.imgur.ImgurModule; import android.support.multidex.MultiDexApplication; import javax.inject.Inject; public class TBAAndroid extends MultiDexApplication { @Inject TBAStatusController mStatusController; @Inject AppConfig mAppConfig; private ApplicationComponent mComponent; private DbComponent mDbComponent; private TBAAndroidModule mModule; private DatafeedModule mDatafeedModule; private BinderModule mBinderModule; private DatabaseWriterModule mDatabaseWriterModule; private AuthModule mAuthModule; private boolean mShouldBindStetho; private HttpModule mHttpModule; private GceModule mGceModule; private ImgurModule mImgurModule; private AccountModule mAccountModule; private GcmModule mGcmModule; public TBAAndroid() { super(); mShouldBindStetho = true; } /** * Firebase Crash Reporting makes it so the application is multi-process. Each process will * run the Application's onCreate during initialization. * Therefore, ensure there are no accesses to shared resources here, otherwise we could * get some strange race conditions */ @Override public void onCreate() { super.onCreate(); TbaLogger.i("Welcome to The Blue Alliance for Android, v" + BuildConfig.VERSION_NAME); getDatafeedComponenet().inject(this); mAppConfig.updateRemoteData(); registerActivityLifecycleCallbacks(mStatusController); if (Utilities.isDebuggable() && mShouldBindStetho) { Stetho.initialize( Stetho.newInitializerBuilder(this) .enableDumpapp(Stetho.defaultDumperPluginsProvider(this)) .enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this)) .build()); } if (Utilities.isDebuggable()) { LeakCanary.install(this); } } void setShouldBindStetho(boolean shouldBindStetho) { mShouldBindStetho = shouldBindStetho; } public TBAAndroidModule getModule() { if (mModule == null) { mModule = new TBAAndroidModule(this); } return mModule; } public DatafeedModule getDatafeedModule() { if (mDatafeedModule == null) { mDatafeedModule = new DatafeedModule(); } return mDatafeedModule; } public HttpModule getHttpModule() { if (mHttpModule == null) { mHttpModule = new HttpModule(); } return mHttpModule; } public GceModule getGceModule() { if (mGceModule == null) { mGceModule = new GceModule(); } return mGceModule; } public ImgurModule getImgurModule() { if (mImgurModule == null) { mImgurModule = new ImgurModule(); } return mImgurModule; } public BinderModule getBinderModule() { if (mBinderModule == null) { mBinderModule = new BinderModule(getResources()); } return mBinderModule; } public DatabaseWriterModule getDatabaseWriterModule() { if (mDatabaseWriterModule == null) { mDatabaseWriterModule = new DatabaseWriterModule(); } return mDatabaseWriterModule; } public AuthModule getAuthModule() { if (mAuthModule == null) { mAuthModule = new AuthModule(this); } return mAuthModule; } public AccountModule getAccountModule() { if (mAccountModule == null) { mAccountModule = new AccountModule(); } return mAccountModule; } public GcmModule getGcmModule() { if (mGcmModule == null) { mGcmModule = new GcmModule(); } return mGcmModule; } public ApplicationComponent getComponent() { if (mComponent == null) { mComponent = DaggerApplicationComponent.builder() .tBAAndroidModule(getModule()) .build(); } return mComponent; } public DbComponent getDbComponent() { if (mDbComponent == null) { mDbComponent = DaggerDbComponent.builder() .tBAAndroidModule(getModule()) .build(); } return mDbComponent; } public DatafeedComponent getDatafeedComponenet() { return DaggerDatafeedComponent.builder() .applicationComponent(getComponent()) .datafeedModule(getDatafeedModule()) .build(); } }