]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/model/Data.java
fu: Data.parseNumber
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / model / Data.java
index 66738cb0ba3c2d9303dfd1a5533be836dfb56b5e..c0f4cebaf81c7491185fd6cc7fbd2657727904e7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2020 Damyan Ivanov.
+ * Copyright © 2021 Damyan Ivanov.
  * This file is part of MoLe.
  * MoLe is free software: you can distribute it and/or modify it
  * under the term of the GNU General Public License as published by
@@ -35,6 +35,8 @@ import net.ktnx.mobileledger.utils.MLDB;
 import net.ktnx.mobileledger.utils.ObservableValue;
 
 import java.text.NumberFormat;
+import java.text.ParseException;
+import java.text.ParsePosition;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -56,12 +58,18 @@ public final class Data {
     public static final MutableLiveData<Boolean> currencyGap = new MutableLiveData<>(true);
     public static final MutableLiveData<Locale> locale = new MutableLiveData<>();
     public static final MutableLiveData<Boolean> drawerOpen = new MutableLiveData<>(false);
-    public static final MutableLiveData<Date> lastUpdateLiveData = new MutableLiveData<>(null);
-    public static final ObservableValue<Long> lastUpdate = new ObservableValue<>();
+    public static final MutableLiveData<Date> lastUpdateDate = new MutableLiveData<>(null);
+    public static final MutableLiveData<Integer> lastUpdateTransactionCount =
+            new MutableLiveData<>(0);
+    public static final MutableLiveData<Integer> lastUpdateAccountCount = new MutableLiveData<>(0);
+    public static final ObservableValue<String> lastTransactionsUpdateText =
+            new ObservableValue<>();
+    public static final ObservableValue<String> lastAccountsUpdateText = new ObservableValue<>();
     private static final MutableLiveData<MobileLedgerProfile> profile =
             new InertMutableLiveData<>();
     private static final AtomicInteger backgroundTaskCount = new AtomicInteger(0);
     private static final Locker profilesLocker = new Locker();
+    private static NumberFormat numberFormatter;
 
     static {
         locale.setValue(Locale.getDefault());
@@ -89,6 +97,10 @@ public final class Data {
         MLDB.setOption(MLDB.OPT_PROFILE_UUID, newProfile.getUuid());
         profile.setValue(newProfile);
     }
+    public static void postCurrentProfile(@NonNull MobileLedgerProfile newProfile) {
+        MLDB.setOption(MLDB.OPT_PROFILE_UUID, newProfile.getUuid());
+        profile.postValue(newProfile);
+    }
     public static int getProfileIndex(MobileLedgerProfile profile) {
         try (LockHolder ignored = profilesLocker.lockForReading()) {
             List<MobileLedgerProfile> prList = profiles.getValue();
@@ -180,8 +192,23 @@ public final class Data {
         }
         else
             currencySymbolPosition.setValue(Currency.Position.none);
-    }
 
+        NumberFormat newNumberFormatter = NumberFormat.getNumberInstance();
+        newNumberFormatter.setParseIntegerOnly(false);
+        newNumberFormatter.setGroupingUsed(true);
+        newNumberFormatter.setGroupingUsed(true);
+        newNumberFormatter.setMinimumIntegerDigits(1);
+        newNumberFormatter.setMinimumFractionDigits(2);
+
+        numberFormatter = newNumberFormatter;
+    }
+    public static String formatCurrency(float number) {
+        NumberFormat formatter = NumberFormat.getCurrencyInstance(locale.getValue());
+        return formatter.format(number);
+    }
+    public static String formatNumber(float number) {
+        return numberFormatter.format(number);
+    }
     public static void observeProfile(LifecycleOwner lifecycleOwner,
                                       Observer<MobileLedgerProfile> observer) {
         profile.observe(lifecycleOwner, observer);
@@ -195,10 +222,19 @@ public final class Data {
         MobileLedgerProfile startupProfile = getProfile(profileUUID);
         if (startupProfile != null)
             setCurrentProfile(startupProfile);
+        Logger.debug("profile", "initProfile() returning " + startupProfile);
         return startupProfile;
     }
 
     public static void removeProfileObservers(LifecycleOwner owner) {
         profile.removeObservers(owner);
     }
+    public static float parseNumber(String str) throws ParseException {
+        ParsePosition pos = new ParsePosition(0);
+        Number parsed = numberFormatter.parse(str);
+        if (parsed == null || pos.getErrorIndex() > -1)
+            throw new ParseException("Error parsing '" + str + "'", pos.getErrorIndex());
+
+        return parsed.floatValue();
+    }
 }
\ No newline at end of file