]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/model/Data.java
rename formatNumber to formatCurrency and provide formatNumber w/o curr.
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / model / Data.java
index f0ba846ec05d9271a7c4f390631cde6a9906c4e5..dfd1cd673fa888f05f8f355d24f143f7b1078b9e 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;
@@ -67,6 +69,7 @@ public final class Data {
             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());
@@ -91,6 +94,10 @@ public final class Data {
         backgroundTasksRunning.postValue(cnt > 0);
     }
     public static void setCurrentProfile(@NonNull MobileLedgerProfile newProfile) {
+        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);
     }
@@ -185,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);
@@ -200,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)
+            throw new ParseException("Error parsing '" + str + "'", pos.getErrorIndex());
+
+        return (float) parsed;
+    }
 }
\ No newline at end of file