]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/activity/NewTransactionItemHolder.java
rework transaction date handling
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / activity / NewTransactionItemHolder.java
index 16ef747e757d10d1ff130d41f91f725bd1ac2448..9af8baca40346ed0d2021d825d030665ea4824d9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2019 Damyan Ivanov.
+ * Copyright © 2020 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
@@ -19,10 +19,8 @@ package net.ktnx.mobileledger.ui.activity;
 
 import android.annotation.SuppressLint;
 import android.graphics.Typeface;
-import android.os.Build;
 import android.text.Editable;
 import android.text.TextWatcher;
-import android.text.method.DigitsKeyListener;
 import android.view.Gravity;
 import android.view.View;
 import android.view.ViewGroup;
@@ -52,22 +50,22 @@ import net.ktnx.mobileledger.utils.DimensionUtils;
 import net.ktnx.mobileledger.utils.Logger;
 import net.ktnx.mobileledger.utils.MLDB;
 import net.ktnx.mobileledger.utils.Misc;
+import net.ktnx.mobileledger.utils.SimpleDate;
 
 import java.text.DecimalFormatSymbols;
-import java.util.Calendar;
+import java.text.ParseException;
 import java.util.Date;
-import java.util.GregorianCalendar;
 import java.util.Locale;
 
 import static net.ktnx.mobileledger.ui.activity.NewTransactionModel.ItemType;
 
 class NewTransactionItemHolder extends RecyclerView.ViewHolder
         implements DatePickerFragment.DatePickedListener, DescriptionSelectedCallback {
-    private final String decimalSeparator;
     private final String decimalDot;
     private final TextView tvCurrency;
     private final Observer<Boolean> showCommentsObserver;
     private final TextView tvTransactionComment;
+    private String decimalSeparator;
     private NewTransactionModel.Item item;
     private TextView tvDate;
     private AutoCompleteTextView tvDescription;
@@ -79,7 +77,7 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder
     private FrameLayout lPadding;
     private MobileLedgerProfile mProfile;
     private Date date;
-    private Observer<Date> dateObserver;
+    private Observer<SimpleDate> dateObserver;
     private Observer<String> descriptionObserver;
     private Observer<String> transactionCommentObserver;
     private Observer<String> hintObserver;
@@ -186,9 +184,13 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder
         MLDB.hookAutocompletionAdapter(tvAccount.getContext(), tvAccount, MLDB.ACCOUNTS_TABLE,
                 "name", true, this, mProfile);
 
-        // FIXME: react on configuration (locale) changes
         decimalSeparator = String.valueOf(DecimalFormatSymbols.getInstance()
                                                               .getMonetaryDecimalSeparator());
+        localeObserver = locale -> {
+            decimalSeparator = String.valueOf(DecimalFormatSymbols.getInstance(locale)
+                                                                  .getMonetaryDecimalSeparator());
+        };
+
         decimalDot = ".";
 
         final TextWatcher tw = new TextWatcher() {
@@ -360,11 +362,6 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder
                 tvAmount.setImeOptions(EditorInfo.IME_ACTION_NEXT);
         };
 
-        localeObserver = locale -> {
-            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
-                tvAmount.setKeyListener(DigitsKeyListener.getInstance(locale, true, true));
-        };
-
         currencyObserver = currency -> {
             setCurrency(currency);
             adapter.checkTransactionSubmittable();
@@ -593,6 +590,9 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder
 
             return true;
         }
+        catch (ParseException e) {
+            throw new RuntimeException("Should not happen", e);
+        }
         finally {
             syncingData = false;
         }
@@ -601,8 +601,9 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder
         DatePickerFragment picker = new DatePickerFragment();
         picker.setFutureDates(mProfile.getFutureDates());
         picker.setOnDatePickedListener(this);
+        picker.setCurrentDateFromText(tvDate.getText());
         picker.show(((NewTransactionActivity) tvDate.getContext()).getSupportFragmentManager(),
-                "datePicker");
+                null);
     }
     /**
      * setData
@@ -709,9 +710,7 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder
     }
     @Override
     public void onDatePicked(int year, int month, int day) {
-        final Calendar c = GregorianCalendar.getInstance();
-        c.set(year, month, day);
-        item.setDate(c.getTime());
+        item.setDate(new SimpleDate(year, month+1, day));
         boolean focused = tvDescription.requestFocus();
         if (focused)
             Misc.showSoftKeyboard((NewTransactionActivity) tvAccount.getContext());