package com.jdroid.android.sample.application;
import android.app.Activity;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.multidex.MultiDex;
import android.support.v4.app.Fragment;
import com.firebase.client.Firebase;
import com.jdroid.android.about.AboutAppModule;
import com.jdroid.android.activity.AbstractFragmentActivity;
import com.jdroid.android.activity.ActivityHelper;
import com.jdroid.android.analytics.AnalyticsSender;
import com.jdroid.android.analytics.AnalyticsTracker;
import com.jdroid.android.application.AbstractApplication;
import com.jdroid.android.application.AppModule;
import com.jdroid.android.context.AppContext;
import com.jdroid.android.crashlytics.CrashlyticsAppModule;
import com.jdroid.android.debug.DebugContext;
import com.jdroid.android.facebook.FacebookAppModule;
import com.jdroid.android.firebase.FirebaseAppModule;
import com.jdroid.android.firebase.fcm.AbstractFcmAppModule;
import com.jdroid.android.firebase.remoteconfig.FirebaseRemoteConfigAppModule;
import com.jdroid.android.fragment.FragmentHelper;
import com.jdroid.android.google.admob.AdMobAppModule;
import com.jdroid.android.google.analytics.GoogleAnalyticsAppModule;
import com.jdroid.android.repository.UserRepository;
import com.jdroid.android.sample.BuildConfig;
import com.jdroid.android.sample.R;
import com.jdroid.android.sample.analytics.AppAnalyticsSender;
import com.jdroid.android.sample.analytics.AppAnalyticsTracker;
import com.jdroid.android.sample.debug.AndroidDebugContext;
import com.jdroid.android.sample.exception.AndroidCrashlyticsAppModule;
import com.jdroid.android.sample.firebase.AndroidFirebaseAppModule;
import com.jdroid.android.sample.firebase.fcm.AndroidFcmAppModule;
import com.jdroid.android.sample.google.analytics.AndroidGoogleAnalyticsAppModule;
import com.jdroid.android.sample.repository.UserRepositoryImpl;
import com.jdroid.android.sample.ui.AndroidActivityHelper;
import com.jdroid.android.sample.ui.AndroidFragmentHelper;
import com.jdroid.android.sample.ui.about.AndroidAboutAppModule;
import com.jdroid.android.sample.ui.google.admob.SampleAdMobAppModule;
import com.jdroid.android.sample.ui.home.HomeActivity;
import com.jdroid.android.sample.ui.sqlite.SampleSQLiteEntity;
import com.jdroid.android.sample.ui.sqlite.SampleSQLiteRepository;
import com.jdroid.android.sample.ui.uri.SampleUriWatcher;
import com.jdroid.android.sqlite.SQLiteHelper;
import com.jdroid.android.twitter.TwitterAppModule;
import com.jdroid.java.domain.Identifiable;
import com.jdroid.java.http.okhttp.OkHttpServiceFactory;
import com.jdroid.java.repository.Repository;
import java.util.List;
import java.util.Map;
public class AndroidApplication extends AbstractApplication {
public static AndroidApplication get() {
return (AndroidApplication)AbstractApplication.INSTANCE;
}
public AndroidApplication() {
setHttpServiceFactory(new OkHttpServiceFactory());
}
@Override
public void onCreate() {
super.onCreate();
getUriMapper().addUriWatcher(new SampleUriWatcher());
Firebase.setAndroidContext(this);
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
@Override
public Class<? extends Activity> getHomeActivityClass() {
return HomeActivity.class;
}
@NonNull
@Override
protected AppContext createAppContext() {
return new AndroidAppContext();
}
@NonNull
public AndroidAppContext getAppContext() {
return (AndroidAppContext)super.getAppContext();
}
@Override
public ActivityHelper createActivityHelper(AbstractFragmentActivity activity) {
return new AndroidActivityHelper(activity);
}
@Override
public FragmentHelper createFragmentHelper(Fragment fragment) {
return new AndroidFragmentHelper(fragment);
}
@NonNull
@Override
protected AnalyticsSender<? extends AnalyticsTracker> createAnalyticsSender(List<? extends AnalyticsTracker> analyticsTrackers) {
return new AppAnalyticsSender((List<AppAnalyticsTracker>)analyticsTrackers);
}
@NonNull
@Override
public AppAnalyticsSender getAnalyticsSender() {
return (AppAnalyticsSender)super.getAnalyticsSender();
}
@Override
protected DebugContext createDebugContext() {
return new AndroidDebugContext();
}
@Override
public UserRepository getUserRepository() {
return new UserRepositoryImpl();
}
@Override
public Boolean isDatabaseEnabled() {
return true;
}
@Override
protected void initDatabaseRepositories(Map<Class<? extends Identifiable>, Repository<? extends Identifiable>> repositories, SQLiteHelper dbHelper) {
repositories.put(SampleSQLiteEntity.class, new SampleSQLiteRepository(dbHelper));
}
@Override
protected void initAppModule(Map<String, AppModule> appModulesMap) {
appModulesMap.put(GoogleAnalyticsAppModule.MODULE_NAME, new AndroidGoogleAnalyticsAppModule());
appModulesMap.put(FirebaseAppModule.MODULE_NAME, new AndroidFirebaseAppModule());
appModulesMap.put(CrashlyticsAppModule.MODULE_NAME, new AndroidCrashlyticsAppModule());
appModulesMap.put(AdMobAppModule.MODULE_NAME, new SampleAdMobAppModule());
appModulesMap.put(FacebookAppModule.MODULE_NAME, new FacebookAppModule());
appModulesMap.put(AbstractFcmAppModule.MODULE_NAME, new AndroidFcmAppModule());
appModulesMap.put(FirebaseRemoteConfigAppModule.MODULE_NAME, new FirebaseRemoteConfigAppModule());
appModulesMap.put(AboutAppModule.MODULE_NAME, new AndroidAboutAppModule());
appModulesMap.put(TwitterAppModule.MODULE_NAME, new TwitterAppModule());
}
@Override
public int getLauncherIconResId() {
return R.mipmap.ic_launcher;
}
@Override
public int getNotificationIconResId() {
return R.drawable.ic_notification;
}
@Override
public String getManifestPackageName() {
return "com.jdroid.android.sample";
}
}