package com.basic.security.manager; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.util.Pair; import com.basic.security.utils.Constants; import java.io.File; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class DatabaseManager { public static final Lock databaseLock = new ReentrantLock(); public static final Lock databaseExecSqlLock = new ReentrantLock(); public static Map databaseMap = new HashMap<>(); static boolean setCustomDatabaseFiles = false; public static SQLiteDatabase getDatabase() { return getDatabase(Constants.baseDatabasePath); } public static SQLiteDatabase getDatabase(String databaseName) { SQLiteDatabase database = databaseMap.get(databaseName); try { databaseLock.lock(); if (database == null) { database = SQLiteDatabase.openOrCreateDatabase(databaseName, null); databaseMap.put(databaseName, database); } } catch (Exception e) { e.printStackTrace(); } finally { databaseLock.unlock(); } return database; } public static void execSQL(String sql) { try { databaseExecSqlLock.lock(); getDatabase().execSQL(sql); } finally { databaseExecSqlLock.unlock(); } } public static void setCustomDatabaseFiles(Context context) { if (setCustomDatabaseFiles) { return; } setCustomDatabaseFiles = true; try { Class debugDB = Class.forName("com.amitshekhar.DebugDB"); Class[] argTypes = new Class[]{HashMap.class}; Method setCustomDatabaseFiles = debugDB.getMethod("setCustomDatabaseFiles", argTypes); HashMap> customDatabaseFiles = new HashMap<>(); customDatabaseFiles.put("xxbase_database", new Pair<>(new File(Constants.baseDatabasePath), "")); // customDatabaseFiles.put("sync_database", new Pair<>(new File(Constants.syncDatabasePath), "")); // customDatabaseFiles.put("cache_database", new Pair<>(new File(Constants.cacheDatabasePath), "")); setCustomDatabaseFiles.invoke(null, customDatabaseFiles); } catch (Exception ignore) { ignore.printStackTrace(); } } }