package com.alorma.github;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.multidex.MultiDexApplication;
import cat.ereza.customactivityoncrash.CustomActivityOnCrash;
import com.alorma.github.gcm.GitskariosInstanceIDListenerService;
import com.alorma.github.injector.component.ApplicationComponent;
import com.alorma.github.injector.component.DaggerApplicationComponent;
import com.alorma.github.injector.component.DaggerNotificationsComponent;
import com.alorma.github.injector.component.NotificationsComponent;
import com.alorma.github.injector.module.ApplicationModule;
import com.alorma.github.injector.module.NotificationsModule;
import com.alorma.github.notifications.AppNotificationsManager;
import com.alorma.github.ui.activity.MainActivity;
import com.alorma.github.ui.utils.UniversalImageLoaderUtils;
import com.alorma.gitskarios.core.client.LogProvider;
import com.alorma.gitskarios.core.client.TokenProvider;
import com.alorma.gitskarios.core.client.UrlProvider;
import com.alorma.gitskarios.core.client.UsernameProvider;
import com.appsee.Appsee;
import com.crashlytics.android.Crashlytics;
import com.frogermcs.activityframemetrics.ActivityFrameMetrics;
import com.google.firebase.FirebaseApp;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.google.firebase.database.FirebaseDatabase;
import com.karumi.dexter.Dexter;
import com.nostra13.universalimageloader.core.ImageLoader;
import io.fabric.sdk.android.Fabric;
import io.flowup.FlowUp;
import javax.inject.Inject;
public class GitskariosApplication extends MultiDexApplication {
@Inject AppNotificationsManager notificationsManager;
private ApplicationComponent applicationComponent;
private NotificationsComponent notificationsComponent;
public static GitskariosApplication get(Context context) {
return (GitskariosApplication) context.getApplicationContext();
}
@Override
public void onCreate() {
super.onCreate();
Dexter.initialize(this);
if (!FirebaseApp.getApps(this).isEmpty()) {
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
}
if (!BuildConfig.DEBUG) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
registerActivityLifecycleCallbacks(new ActivityFrameMetrics.Builder().build());
}
CustomActivityOnCrash.install(this);
CustomActivityOnCrash.setRestartActivityClass(MainActivity.class);
CustomActivityOnCrash.setEnableAppRestart(true);
}
FlowUp.Builder.with(this)
.apiKey(getString(R.string.flowup_api_key))
.forceReports(BuildConfig.DEBUG)
.start();
Fabric.with(this, new Crashlytics());
Appsee.start(getString(R.string.com_appsee_apikey));
FirebaseAnalytics firebaseAnalytics = FirebaseAnalytics.getInstance(this);
firebaseAnalytics.setAnalyticsCollectionEnabled(true);
ImageLoader.getInstance().init(UniversalImageLoaderUtils.getImageLoaderConfiguration(this));
TokenProvider.setTokenProviderInstance(() -> getStoreCredentials().token());
UrlProvider.setUrlProviderInstance(() -> getStoreCredentials().getUrl());
UsernameProvider.setUsernameProviderInterface(() -> getStoreCredentials().getUserName());
LogProvider.setTokenProviderInstance(message -> {
if (BuildConfig.DEBUG) {
//Log.v("RETROFIT_LOG", message);
}
});
if (new GitskariosSettings(this).getGCMToken() == null) {
Intent intent = new Intent(this, GitskariosInstanceIDListenerService.class);
startService(intent);
}
initializeInjector();
notificationsManager.setNotificationsEnabled(notificationsManager.areNotificationsEnabled());
}
private void initializeInjector() {
applicationComponent = DaggerApplicationComponent.builder().applicationModule(new ApplicationModule(this)).build();
notificationsComponent = DaggerNotificationsComponent.builder()
.applicationComponent(applicationComponent)
.notificationsModule(new NotificationsModule())
.build();
notificationsComponent.inject(this);
}
public ApplicationComponent getApplicationComponent() {
return applicationComponent;
}
@NonNull
private StoreCredentials getStoreCredentials() {
return new StoreCredentials(GitskariosApplication.this);
}
public void setNotificationsEnabled(boolean isChecked) {
notificationsManager.setNotificationsEnabled(isChecked);
}
}