package eu.pretix.pretixdroid; import android.app.Application; import com.facebook.stetho.Stetho; import eu.pretix.libpretixsync.check.AsyncCheckProvider; import eu.pretix.libpretixsync.check.OnlineCheckProvider; import eu.pretix.libpretixsync.check.TicketCheckProvider; import eu.pretix.libpretixsync.db.Migrations; import eu.pretix.libpretixsync.db.Models; import io.requery.BlockingEntityStore; import io.requery.Persistable; import io.requery.android.sqlite.DatabaseSource; import io.requery.sql.Configuration; import io.requery.sql.EntityDataStore; public class PretixDroid extends Application { /* * It is not a security problem that the keystore password is hardcoded in plain text. * It would be only relevant in a case in which the attack would have either root access on the * phone or can execute arbitrary code with this application's user. In both cases, we're * screwed either way. */ public static final String KEYSTORE_PASSWORD = "ZnDNUkQ01PVZyD7oNP3a8DVXrvltxD"; private BlockingEntityStore<Persistable> dataStore; @Override public void onCreate() { super.onCreate(); if (BuildConfig.DEBUG) { Stetho.initializeWithDefaults(this); } } public BlockingEntityStore<Persistable> getData() { if (dataStore == null) { // override onUpgrade to handle migrating to a new version DatabaseSource source = new DatabaseSource(this, Models.DEFAULT, 6); Configuration configuration = source.getConfiguration(); dataStore = new EntityDataStore<Persistable>(configuration); } return dataStore; } public TicketCheckProvider getNewCheckProvider() { AppConfig config = new AppConfig(this); TicketCheckProvider p; if (config.getAsyncModeEnabled()) { p = new AsyncCheckProvider(config, getData()); } else { p = new OnlineCheckProvider(config, new AndroidHttpClientFactory()); } p.setSentry(new AndroidSentryImplementation()); return p; } }