package com.kickstarter;
import android.content.Context;
import android.support.annotation.CallSuper;
import android.support.annotation.NonNull;
import android.support.multidex.MultiDex;
import android.support.multidex.MultiDexApplication;
import com.facebook.FacebookSdk;
import com.kickstarter.libs.ApiCapabilities;
import com.kickstarter.libs.Build;
import com.kickstarter.libs.PushNotifications;
import com.kickstarter.libs.utils.ApplicationLifecycleUtil;
import com.kickstarter.libs.utils.Secrets;
import com.squareup.leakcanary.LeakCanary;
import com.squareup.leakcanary.RefWatcher;
import net.danlew.android.joda.JodaTimeAndroid;
import net.hockeyapp.android.CrashManager;
import net.hockeyapp.android.CrashManagerListener;
import java.net.CookieHandler;
import java.net.CookieManager;
import javax.inject.Inject;
import timber.log.Timber;
public class KSApplication extends MultiDexApplication {
private ApplicationComponent component;
private RefWatcher refWatcher;
@Inject protected CookieManager cookieManager;
@Inject protected PushNotifications pushNotifications;
@Override
@CallSuper
public void onCreate() {
super.onCreate();
// Send crash reports in release builds
if (!BuildConfig.DEBUG && !isInUnitTests()) {
checkForCrashes();
}
MultiDex.install(this);
// Only log for internal builds
if (BuildConfig.FLAVOR_AUDIENCE.equals("internal")) {
Timber.plant(new Timber.DebugTree());
}
if (!isInUnitTests() && ApiCapabilities.canDetectMemoryLeaks()) {
refWatcher = LeakCanary.install(this);
}
JodaTimeAndroid.init(this);
component = DaggerApplicationComponent.builder()
.applicationModule(new ApplicationModule(this))
.build();
component().inject(this);
CookieHandler.setDefault(cookieManager);
FacebookSdk.sdkInitialize(this);
pushNotifications.initialize();
final ApplicationLifecycleUtil appUtil = new ApplicationLifecycleUtil(this);
registerActivityLifecycleCallbacks(appUtil);
registerComponentCallbacks(appUtil);
}
public ApplicationComponent component() {
return component;
}
public static RefWatcher getRefWatcher(final @NonNull Context context) {
final KSApplication application = (KSApplication) context.getApplicationContext();
return application.refWatcher;
}
public boolean isInUnitTests() {
return false;
}
private void checkForCrashes() {
final String appId = Build.isExternal()
? Secrets.HockeyAppId.EXTERNAL
: Secrets.HockeyAppId.INTERNAL;
CrashManager.register(this, appId, new CrashManagerListener() {
public boolean shouldAutoUploadCrashes() {
return true;
}
});
}
}