streamlined database utility, fed with the application context upon startup
authorDamyan Ivanov <dam+mobileledger@ktnx.net>
Mon, 31 Dec 2018 19:17:44 +0000 (19:17 +0000)
committerDamyan Ivanov <dam+mobileledger@ktnx.net>
Mon, 31 Dec 2018 19:17:44 +0000 (19:17 +0000)
app/src/main/java/net/ktnx/mobileledger/MobileLedgerApplication.java
app/src/main/java/net/ktnx/mobileledger/ui/account_summary/AccountSummaryViewModel.java
app/src/main/java/net/ktnx/mobileledger/ui/transaction_list/TransactionListAdapter.java
app/src/main/java/net/ktnx/mobileledger/ui/transaction_list/TransactionListViewModel.java
app/src/main/java/net/ktnx/mobileledger/utils/MLDB.java

index 2cd3db0a0d555859f02419d21389977e6de304d5..f4a7215992face74b717ee283979f970bcfdcd48 100644 (file)
@@ -23,6 +23,7 @@ import android.content.res.Resources;
 import android.os.Build;
 
 import net.ktnx.mobileledger.utils.Globals;
+import net.ktnx.mobileledger.utils.MLDB;
 
 public class MobileLedgerApplication extends Application {
 
@@ -30,6 +31,7 @@ public class MobileLedgerApplication extends Application {
     public void onCreate() {
         super.onCreate();
         updateColorValues();
+        MLDB.init(this);
     }
     @Override
     public void onConfigurationChanged(Configuration newConfig) {
index 942a56850b57e20e605c949d8b2ce6b06cb37e06..999f16f2d9d93d217604613ac154f8277c9fbb17 100644 (file)
@@ -70,7 +70,7 @@ class AccountSummaryViewModel extends AndroidViewModel {
         if (showingOnlyStarred) sql += " WHERE hidden = 0";
         sql += " ORDER BY name";
 
-        try (SQLiteDatabase db = MLDB.getReadableDatabase(context)) {
+        try (SQLiteDatabase db = MLDB.getReadableDatabase()) {
             try (Cursor cursor = db
                     .rawQuery(sql,null))
             {
index 7983aa5b9cd580b13e4f4b367647347a5822bf3d..5b1e46f4b5ea3e05e3737c2a37457dca063c9e27 100644 (file)
@@ -57,7 +57,7 @@ public class TransactionListAdapter
 
         Context ctx = holder.row.getContext();
 
-        try (SQLiteDatabase db = MLDB.getReadableDatabase(ctx)) {
+        try (SQLiteDatabase db = MLDB.getReadableDatabase()) {
             tr.loadData(db);
             holder.tvDescription.setText(tr.getDescription());
             holder.tvDate.setText(tr.getDate());
index ec339fcf499762e7847576863e84b6e83675a39c..52fb19761d19a6adcda5bdd14643873ffcbed927 100644 (file)
@@ -64,7 +64,7 @@ public class TransactionListViewModel extends ViewModel {
         }
 
         Log.d("tmp", sql);
-        try (SQLiteDatabase db = MLDB.getReadableDatabase(act)) {
+        try (SQLiteDatabase db = MLDB.getReadableDatabase()) {
             try (Cursor cursor = db.rawQuery(sql, params)) {
                 while (cursor.moveToNext()) {
                     newList.add(new LedgerTransaction(cursor.getInt(0)));
index d528a37a9ccb9e17dba0c20f21ec3c32abc910c3..b42f1613f5704dfb52bf24ba08ad606873180683 100644 (file)
@@ -42,14 +42,18 @@ import static net.ktnx.mobileledger.utils.MLDB.DatabaseMode.READ;
 import static net.ktnx.mobileledger.utils.MLDB.DatabaseMode.WRITE;
 
 public final class MLDB {
-    public enum DatabaseMode {READ, WRITE}
-
     public static final String ACCOUNTS_TABLE = "accounts";
     public static final String DESCRIPTION_HISTORY_TABLE = "description_history";
     public static final String OPT_TRANSACTION_LIST_STAMP = "transaction_list_last_update";
     private static MobileLedgerDatabase helperForReading, helperForWriting;
+    private static Context context;
+    private static void checkState() {
+        if (context == null)
+            throw new IllegalStateException("First call init with a valid context");
+    }
+    public static synchronized SQLiteDatabase getDatabase(DatabaseMode mode) {
+        checkState();
 
-    public static synchronized SQLiteDatabase getDatabase(Context context, DatabaseMode mode) {
         if (mode == READ) {
             if (helperForReading == null) helperForReading = new MobileLedgerDatabase(context);
             return helperForReading.getReadableDatabase();
@@ -59,11 +63,11 @@ public final class MLDB {
             return helperForWriting.getWritableDatabase();
         }
     }
-    public static SQLiteDatabase getReadableDatabase(Context context) {
-        return getDatabase(context.getApplicationContext(), READ);
+    public static SQLiteDatabase getReadableDatabase() {
+        return getDatabase(READ);
     }
     public static SQLiteDatabase getWritableDatabase(Context context) {
-        return getDatabase(context.getApplicationContext(), WRITE);
+        return getDatabase(WRITE);
     }
     static public int get_option_value(Context context, String name, int default_value) {
         String s = get_option_value(context, name, String.valueOf(default_value));
@@ -75,7 +79,6 @@ public final class MLDB {
             return default_value;
         }
     }
-
     static public long get_option_value(Context context, String name, long default_value) {
         String s = get_option_value(context, name, String.valueOf(default_value));
         try {
@@ -86,10 +89,9 @@ public final class MLDB {
             return default_value;
         }
     }
-
     static public String get_option_value(Context context, String name, String default_value) {
         Log.d("db", "about to fetch option " + name);
-        try (SQLiteDatabase db = getReadableDatabase(context)) {
+        try (SQLiteDatabase db = getReadableDatabase()) {
             try (Cursor cursor = db
                     .rawQuery("select value from options where name=?", new String[]{name}))
             {
@@ -109,7 +111,6 @@ public final class MLDB {
             }
         }
     }
-
     static public void set_option_value(Context context, String name, String value) {
         Log.d("db", "setting option " + name + "=" + value);
         try (SQLiteDatabase db = getWritableDatabase(context)) {
@@ -117,7 +118,6 @@ public final class MLDB {
                     new String[]{name, value});
         }
     }
-
     static public void set_option_value(Context context, String name, long value) {
         set_option_value(context, name, String.valueOf(value));
     }
@@ -142,7 +142,7 @@ public final class MLDB {
                 String[] col_names = {FontsContract.Columns._ID, field};
                 MatrixCursor c = new MatrixCursor(col_names);
 
-                try (SQLiteDatabase db = MLDB.getReadableDatabase(context)) {
+                try (SQLiteDatabase db = MLDB.getReadableDatabase()) {
 
                     try (Cursor matches = db.rawQuery(String.format(
                             "SELECT %s as a, case when %s_upper LIKE ?||'%%' then 1 " +
@@ -171,6 +171,10 @@ public final class MLDB {
 
         view.setAdapter(adapter);
     }
+    public static void init(Context context) {
+        MLDB.context = context.getApplicationContext();
+    }
+    public enum DatabaseMode {READ, WRITE}
 }
 
 class MobileLedgerDatabase extends SQLiteOpenHelper implements AutoCloseable {
@@ -203,8 +207,8 @@ class MobileLedgerDatabase extends SQLiteOpenHelper implements AutoCloseable {
         String rev_file = String.format(Locale.US, "sql_%d", rev_no);
 
         int res_id = rm.getIdentifier(rev_file, "raw", mContext.getPackageName());
-        if (res_id == 0) throw new SQLException(
-                String.format(Locale.US, "No resource for revision %d", rev_no));
+        if (res_id == 0)
+            throw new SQLException(String.format(Locale.US, "No resource for revision %d", rev_no));
         db.beginTransaction();
         try (InputStream res = rm.openRawResource(res_id)) {
             Log.d("db", "Applying revision " + String.valueOf(rev_no));