X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fmodel%2FMobileLedgerProfile.java;h=1f2eac7360acc17e5356fa39387363297cc24d63;hp=d7fae411f5ea94e42519bcac9ecf9843a22bcae3;hb=6603a66690138661b04ad9c56d4b3498e64eef95;hpb=90383a155ec16a9f13b1e6ac94a118033e09b3aa diff --git a/app/src/main/java/net/ktnx/mobileledger/model/MobileLedgerProfile.java b/app/src/main/java/net/ktnx/mobileledger/model/MobileLedgerProfile.java index d7fae411..1f2eac73 100644 --- a/app/src/main/java/net/ktnx/mobileledger/model/MobileLedgerProfile.java +++ b/app/src/main/java/net/ktnx/mobileledger/model/MobileLedgerProfile.java @@ -17,11 +17,18 @@ package net.ktnx.mobileledger.model; +import android.content.res.Resources; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; +import android.util.SparseArray; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import net.ktnx.mobileledger.App; +import net.ktnx.mobileledger.R; import net.ktnx.mobileledger.async.DbOpQueue; +import net.ktnx.mobileledger.async.SendTransactionTask; import net.ktnx.mobileledger.utils.Globals; import net.ktnx.mobileledger.utils.Logger; import net.ktnx.mobileledger.utils.MLDB; @@ -32,9 +39,6 @@ import java.util.List; import java.util.Locale; import java.util.UUID; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - import static net.ktnx.mobileledger.utils.Logger.debug; public final class MobileLedgerProfile { @@ -48,6 +52,8 @@ public final class MobileLedgerProfile { private String authPassword; private int themeId; private int orderNo = -1; + private FutureDates futureDates = FutureDates.None; + private SendTransactionTask.API apiVersion = SendTransactionTask.API.auto; public MobileLedgerProfile() { this.uuid = String.valueOf(UUID.randomUUID()); } @@ -65,6 +71,8 @@ public final class MobileLedgerProfile { authPassword = origin.authPassword; themeId = origin.themeId; orderNo = origin.orderNo; + futureDates = origin.futureDates; + apiVersion = origin.apiVersion; } // loads all profiles into Data.profiles // returns the profile with the given UUID @@ -74,8 +82,8 @@ public final class MobileLedgerProfile { SQLiteDatabase db = App.getDatabase(); try (Cursor cursor = db.rawQuery("SELECT uuid, name, url, use_authentication, auth_user, " + "auth_password, permit_posting, theme, order_no, " + - "preferred_accounts_filter FROM " + - "profiles order by order_no", null)) + "preferred_accounts_filter, future_dates, api_version " + + "FROM " + "profiles order by order_no", null)) { while (cursor.moveToNext()) { MobileLedgerProfile item = new MobileLedgerProfile(cursor.getString(0)); @@ -88,8 +96,12 @@ public final class MobileLedgerProfile { item.setThemeId(cursor.getInt(7)); item.orderNo = cursor.getInt(8); item.setPreferredAccountsFilter(cursor.getString(9)); + item.setFutureDates(cursor.getInt(10)); + item.setApiVersion(cursor.getInt(11)); list.add(item); - if (item.getUuid().equals(currentProfileUUID)) result = item; + if (item.getUuid() + .equals(currentProfileUUID)) + result = item; } } Data.profiles.setValue(list); @@ -112,6 +124,24 @@ public final class MobileLedgerProfile { db.endTransaction(); } } + public SendTransactionTask.API getApiVersion() { + return apiVersion; + } + public void setApiVersion(SendTransactionTask.API apiVersion) { + this.apiVersion = apiVersion; + } + public void setApiVersion(int apiVersion) { + this.apiVersion = SendTransactionTask.API.valueOf(apiVersion); + } + public FutureDates getFutureDates() { + return futureDates; + } + public void setFutureDates(int anInt) { + futureDates = FutureDates.valueOf(anInt); + } + public void setFutureDates(FutureDates futureDates) { + this.futureDates = futureDates; + } public String getPreferredAccountsFilter() { return preferredAccountsFilter; } @@ -182,12 +212,12 @@ public final class MobileLedgerProfile { // permitPosting ? "TRUE" : "FALSE", authEnabled ? "TRUE" : "FALSE", themeId)); db.execSQL("REPLACE INTO profiles(uuid, name, permit_posting, url, " + "use_authentication, auth_user, " + - "auth_password, theme, order_no, preferred_accounts_filter) " + - "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", + "auth_password, theme, order_no, preferred_accounts_filter, future_dates, " + + "api_version) " + "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", new Object[]{uuid, name, permitPosting, url, authEnabled, authEnabled ? authUserName : null, authEnabled ? authPassword : null, themeId, orderNo, - preferredAccountsFilter + preferredAccountsFilter, futureDates.toInt(), apiVersion.toInt() }); db.setTransactionSuccessful(); } @@ -203,9 +233,8 @@ public final class MobileLedgerProfile { new Object[]{acc.getLevel(), acc.isHiddenByStar(), acc.isExpanded(), uuid, acc.getName() }); - db.execSQL( - "insert into accounts(profile, name, name_upper, parent_name, level, hidden, expanded, keep) " + - "select ?,?,?,?,?,?,?,1 where (select changes() = 0)", + db.execSQL("insert into accounts(profile, name, name_upper, parent_name, level, hidden, " + + "expanded, keep) " + "select ?,?,?,?,?,?,?,1 where (select changes() = 0)", new Object[]{uuid, acc.getName(), acc.getName().toUpperCase(), acc.getParentName(), acc.getLevel(), acc.isHiddenByStar(), acc.isExpanded() }); @@ -250,11 +279,13 @@ public final class MobileLedgerProfile { debug("profile", "returning default value for " + name); result = default_value; } - else debug("profile", String.format("option %s=%s", name, result)); + else + debug("profile", String.format("option %s=%s", name, result)); return result; } - else return default_value; + else + return default_value; } catch (Exception e) { debug("db", "returning default value for " + name, e); @@ -300,6 +331,7 @@ public final class MobileLedgerProfile { db.execSQL("delete from account_values where profile=?", uuid_param); db.execSQL("delete from transactions where profile=?", uuid_param); db.execSQL("delete from transaction_accounts where profile=?", uuid_param); + db.execSQL("delete from options where profile=?", uuid_param); db.setTransactionSuccessful(); } finally { @@ -320,7 +352,8 @@ public final class MobileLedgerProfile { public LedgerAccount loadAccount(SQLiteDatabase db, String accName) { LedgerAccount acc = tryLoadAccount(db, accName); - if (acc == null) throw new RuntimeException("Unable to load account with name " + accName); + if (acc == null) + throw new RuntimeException("Unable to load account with name " + accName); return acc; } @@ -362,7 +395,8 @@ public final class MobileLedgerProfile { return this.themeId; } public void setThemeId(Object o) { - setThemeId(Integer.valueOf(String.valueOf(o)).intValue()); + setThemeId(Integer.valueOf(String.valueOf(o)) + .intValue()); } public void setThemeId(int themeId) { // debug("profile", String.format("Profile.setThemeId(%d) called", themeId)); @@ -455,4 +489,44 @@ public final class MobileLedgerProfile { db.endTransaction(); } } + public enum FutureDates { + None(0), OneMonth(30), TwoMonths(60), ThreeMonths(90), SixMonths(180), OneYear(365), + All(-1); + private static SparseArray map = new SparseArray<>(); + + static { + for (FutureDates item : FutureDates.values()) { + map.put(item.value, item); + } + } + + private int value; + FutureDates(int value) { + this.value = value; + } + public static FutureDates valueOf(int i) { + return map.get(i, None); + } + public int toInt() { + return this.value; + } + public String getText(Resources resources) { + switch (value) { + case 30: + return resources.getString(R.string.future_dates_30); + case 60: + return resources.getString(R.string.future_dates_60); + case 90: + return resources.getString(R.string.future_dates_90); + case 180: + return resources.getString(R.string.future_dates_180); + case 365: + return resources.getString(R.string.future_dates_365); + case -1: + return resources.getString(R.string.future_dates_all); + default: + return resources.getString(R.string.future_dates_none); + } + } + } }