X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2Factivity%2FNewTransactionItemHolder.java;h=0ee99136eaa0d51579677b296e4a55e42a397b85;hb=0fb03702b44e99bef2a5674d96f025595aed4274;hp=504ec0adc0811477726869e4c2810ffaefec7da0;hpb=5f09bee380291c06a5fee1bb55049a1b09cf4e3c;p=mobile-ledger.git diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/activity/NewTransactionItemHolder.java b/app/src/main/java/net/ktnx/mobileledger/ui/activity/NewTransactionItemHolder.java index 504ec0ad..0ee99136 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/activity/NewTransactionItemHolder.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/activity/NewTransactionItemHolder.java @@ -67,7 +67,7 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder private AutoCompleteTextView tvDescription; private AutoCompleteTextView tvAccount; private TextView tvComment; - private TextView tvAmount; + private EditText tvAmount; private LinearLayout lHead; private ViewGroup lAccount; private FrameLayout lPadding; @@ -81,6 +81,7 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder private Observer editableObserver; private Observer commentVisibleObserver; private Observer commentObserver; + private Observer localeObserver; private boolean inUpdate = false; private boolean syncingData = false; private View commentButton; @@ -187,15 +188,14 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { // only one decimal separator is allowed // plus and minus are allowed only at the beginning + String allowed = "0123456789"; String val = s.toString(); - if (val.isEmpty()) - tvAmount.setKeyListener(DigitsKeyListener.getInstance( - "0123456789+-" + decimalSeparator + decimalDot)); - else if (val.contains(decimalSeparator) || val.contains(decimalDot)) - tvAmount.setKeyListener(DigitsKeyListener.getInstance("0123456789")); - else - tvAmount.setKeyListener(DigitsKeyListener.getInstance( - "0123456789" + decimalSeparator + decimalDot)); + if (val.isEmpty() || (tvAmount.getSelectionStart() == 0)) + allowed += "-"; + if (!val.contains(decimalSeparator) && !val.contains(decimalDot)) + allowed += decimalSeparator + decimalDot; + + tvAmount.setKeyListener(DigitsKeyListener.getInstance(allowed)); syncData(); adapter.model.checkTransactionSubmittable(adapter); @@ -207,7 +207,6 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder tvComment.addTextChangedListener(tw); tvAmount.addTextChangedListener(amountWatcher); - // FIXME: react on locale changes if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) tvAmount.setKeyListener(DigitsKeyListener.getInstance(Locale.getDefault(), true, true)); else @@ -315,6 +314,11 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder else tvAmount.setImeOptions(EditorInfo.IME_ACTION_NEXT); }; + + localeObserver = locale -> { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) + tvAmount.setKeyListener(DigitsKeyListener.getInstance(locale, true, true)); + }; } private void setEditable(Boolean editable) { tvDate.setEnabled(editable); @@ -443,6 +447,7 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder .stopObservingFocusedItem(focusedAccountObserver); this.item.getModel() .stopObservingAccountCount(accountCountObserver); + Data.locale.removeObserver(localeObserver); this.item = null; } @@ -495,6 +500,7 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder .observeFocusedItem(activity, focusedAccountObserver); item.getModel() .observeAccountCount(activity, accountCountObserver); + Data.locale.observe(activity, localeObserver); } } finally {