package com.marverenic.music;
import android.app.Application;
import android.content.Context;
import android.os.StrictMode;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import com.bumptech.glide.Glide;
import com.crashlytics.android.Crashlytics;
import com.marverenic.music.data.inject.JockeyComponentFactory;
import com.marverenic.music.data.inject.JockeyGraph;
import com.marverenic.music.utils.CrashlyticsTree;
import com.marverenic.music.utils.compat.JockeyPreferencesCompat;
import io.fabric.sdk.android.Fabric;
import timber.log.Timber;
public class JockeyApplication extends Application {
private JockeyGraph mComponent;
@Override
public void onCreate() {
setupStrictMode();
super.onCreate();
setupCrashlytics();
setupTimber();
mComponent = createDaggerComponent();
JockeyPreferencesCompat.upgradeSharedPreferences(this);
}
@NonNull
protected JockeyGraph createDaggerComponent() {
return JockeyComponentFactory.create(this);
}
private void setupStrictMode() {
if (BuildConfig.DEBUG) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectAll()
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.build());
}
}
private void setupCrashlytics() {
Fabric.with(this, new Crashlytics());
}
private void setupTimber() {
if (BuildConfig.DEBUG) {
Timber.plant(new Timber.DebugTree());
} else {
Timber.plant(new CrashlyticsTree());
}
}
@Override
public void onTrimMemory(int level) {
super.onTrimMemory(level);
Glide.with(this).onTrimMemory(level);
}
public static JockeyGraph getComponent(Fragment fragment) {
return getComponent(fragment.getContext());
}
public static JockeyGraph getComponent(Context context) {
return ((JockeyApplication) context.getApplicationContext()).mComponent;
}
}