package de.tum.in.tumcampusapp.managers; import android.content.Context; import android.content.Intent; import android.database.sqlite.SQLiteDatabase; import java.io.File; import de.tum.in.tumcampusapp.auxiliary.Const; import de.tum.in.tumcampusapp.services.BackgroundService; import de.tum.in.tumcampusapp.services.DownloadService; import de.tum.in.tumcampusapp.services.SendMessageService; import de.tum.in.tumcampusapp.services.SilenceService; public class AbstractManager { protected Context mContext; private static final Object GLOBAL_DB_LOCK = new Object(); private static SQLiteDatabase globalDb; protected final SQLiteDatabase db; protected AbstractManager(Context context) { mContext = context.getApplicationContext(); db = getDb(context); } /** * Constructor, open/create database, create table if necessary * * @param c Context * @return SQLiteDatabase Db */ public static SQLiteDatabase getDb(Context c) { // TODO: create a suggestionsmanager and make this protected synchronized (GLOBAL_DB_LOCK) { if (globalDb == null) { File f = c.getDatabasePath(Const.DATABASE_NAME); f.getParentFile().mkdirs(); globalDb = SQLiteDatabase.openOrCreateDatabase(f, null); } return globalDb; } } /** * Drop all tables, so we can do a complete clean start * Careful: After executing this method, almost all the managers are in an illegal state, and * can't do any SQL anymore. So take care to actually reinitialize all Managers * * @param c context */ public static void resetDb(Context c) { SQLiteDatabase db = getDb(c); // Stop all services, since they might have instantiated Managers and cause SQLExceptions Class<?>[] services = new Class<?>[]{ CalendarManager.QueryLocationsService.class, SendMessageService.class, SilenceService.class, DownloadService.class, BackgroundService.class}; for (Class<?> service : services) { c.stopService(new Intent(c, service)); } db.beginTransaction(); try { db.execSQL("DROP TABLE IF EXISTS cafeterias"); db.execSQL("DROP TABLE IF EXISTS cafeterias_menus"); db.execSQL("DROP TABLE IF EXISTS calendar"); db.execSQL("DROP TABLE IF EXISTS kalendar_events"); db.execSQL("DROP TABLE IF EXISTS locations"); db.execSQL("DROP TABLE IF EXISTS news"); db.execSQL("DROP TABLE IF EXISTS news_sources"); db.execSQL("DROP TABLE IF EXISTS recents"); db.execSQL("DROP TABLE IF EXISTS room_locations"); db.execSQL("DROP TABLE IF EXISTS syncs"); db.execSQL("DROP TABLE IF EXISTS suggestions_lecture"); db.execSQL("DROP TABLE IF EXISTS suggestions_mvv"); db.execSQL("DROP TABLE IF EXISTS suggestions_persons"); db.execSQL("DROP TABLE IF EXISTS suggestions_rooms"); db.execSQL("DROP TABLE IF EXISTS unsent_chat_message"); db.execSQL("DROP TABLE IF EXISTS chat_message"); db.execSQL("DROP TABLE IF EXISTS chat_room"); db.execSQL("DROP TABLE IF EXISTS tumLocks"); db.execSQL("DROP TABLE IF EXISTS openQuestions"); db.execSQL("DROP TABLE IF EXISTS ownQuestions"); db.execSQL("DROP TABLE IF EXISTS faculties"); db.execSQL("DROP TABLE IF EXISTS transport_favorites"); CacheManager.clearCache(c); db.setTransactionSuccessful(); } finally { db.endTransaction(); } } }