package com.github.andlyticsproject; import android.app.Application; import android.content.Context; import android.content.pm.ApplicationInfo; import android.util.Log; import com.github.andlyticsproject.db.AndlyticsDb; import org.acra.ACRA; import org.acra.ACRAConfiguration; import org.acra.ReportingInteractionMode; import org.acra.annotation.ReportsCrashes; import org.acra.sender.HttpSender; @ReportsCrashes(sharedPreferencesMode = Context.MODE_PRIVATE, sharedPreferencesName = Preferences.PREF, mode = ReportingInteractionMode.TOAST, resToastText = R.string.crash_toast, sendReportsInDevMode = false) public class AndlyticsApp extends Application { private static final String TAG = AndlyticsApp.class.getSimpleName(); private ContentAdapter db; private static AndlyticsApp sInstance; private boolean isAppVisible = false; @Override public void onCreate() { super.onCreate(); initAcra(); // open DB here to force schema and preferences migration // the DB is kept open through the lifecycle ot the app, no need to // close here AndlyticsDb.getInstance(getApplicationContext()).getWritableDatabase(); setDbAdapter(ContentAdapter.getInstance(this)); sInstance = this; } private void initAcra() { try { ACRA.init(this); String bugsenseUrl = getResources().getString(R.string.bugsense_url); HttpSender bugSenseSender = new HttpSender(HttpSender.Method.POST, HttpSender.Type.FORM, bugsenseUrl, null); ACRA.getErrorReporter().setReportSender(bugSenseSender); } catch (IllegalStateException e) { Log.w(TAG, "ACRA.init() called more than once?: " + e.getMessage(), e); } } public boolean isDebug() { return (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) > 0; } public static AndlyticsApp getInstance() { return sInstance; } public boolean isAppVisible() { // TODO This is a bit of a hack, could it be improved return isAppVisible; } public void setIsAppVisible(boolean isVisible) { isAppVisible = isVisible; } public void setDbAdapter(ContentAdapter db) { this.db = db; } public ContentAdapter getDbAdapter() { return db; } }