X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2Factivity%2FNewTransactionActivity.java;h=9062f545540a5c9db23c6d7bd11f82f38808da79;hp=d163aa280079c529b8a49bc8524626019853cce3;hb=72e437223bee45070c13b4acba4bd4368fe68244;hpb=90383a155ec16a9f13b1e6ac94a118033e09b3aa diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/activity/NewTransactionActivity.java b/app/src/main/java/net/ktnx/mobileledger/ui/activity/NewTransactionActivity.java index d163aa28..9062f545 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/activity/NewTransactionActivity.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/activity/NewTransactionActivity.java @@ -19,6 +19,7 @@ package net.ktnx.mobileledger.ui.activity; import android.annotation.SuppressLint; import android.database.Cursor; +import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.os.Bundle; import android.text.Editable; @@ -104,6 +105,7 @@ public class NewTransactionActivity extends ProfileThemedActivity MLDB.hookAutocompletionAdapter(this, tvDescription, MLDB.DESCRIPTION_HISTORY_TABLE, "description", false, findViewById(R.id.new_transaction_acc_1), this, mProfile); hookTextChangeListener(tvDescription); + hookClearClickListener(tvDescription); progress = findViewById(R.id.save_transaction_progress); fab = findViewById(R.id.fab); @@ -111,17 +113,81 @@ public class NewTransactionActivity extends ProfileThemedActivity Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true); table = findViewById(R.id.new_transaction_accounts_table); - for (int i = 0; i < table.getChildCount(); i++) { - TableRow row = (TableRow) table.getChildAt(i); - AutoCompleteTextView tvAccountName = (AutoCompleteTextView) row.getChildAt(0); - TextView tvAmount = (TextView) row.getChildAt(1); - hookSwipeListener(row); - MLDB.hookAutocompletionAdapter(this, tvAccountName, MLDB.ACCOUNTS_TABLE, "name", true, - tvAmount, null, mProfile); - hookTextChangeListener(tvAccountName); - hookTextChangeListener(tvAmount); -// debug("swipe", "hooked to row "+i); + + while (table.getChildCount() < 2) { + doAddAccountRow(false); } + + check_transaction_submittable(); + } + private void hookClearClickListener(AutoCompleteTextView v) { + final TextWatcher w = new TextWatcher() { + private boolean hasText; + private boolean hadText; + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + hadText = s.length() > 0; + } + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + @Override + public void afterTextChanged(Editable s) { + hasText = s.length() > 0; + + if (hadText && !hasText) { + v.setCompoundDrawablesRelative(null, null, null, null); + } + if (!hadText && hasText) { + v.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, + R.drawable.ic_clear_black_24dp, 0); + } + } + }; + View.OnFocusChangeListener prevFocusListener = v.getOnFocusChangeListener(); + v.setOnFocusChangeListener((v12, hasFocus) -> { + if (hasFocus) { + if (((TextView) v12).getText().length() > 0) { + ((TextView) v12).setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, + R.drawable.ic_clear_black_24dp, 0); + } + ((TextView) v12).addTextChangedListener(w); + } + else { + ((TextView) v12).removeTextChangedListener(w); + ((TextView) v12).setCompoundDrawables(null, null, null, null); + } + + if (prevFocusListener != null) prevFocusListener.onFocusChange(v12, hasFocus); + }); + + v.setOnTouchListener((v1, event) -> { + if (event.getAction() == MotionEvent.ACTION_UP) + if (((TextView) v1).getText().length() > 0) { + boolean clearClicked = false; + final float x = event.getX(); + final int vw = v1.getWidth(); + // start, top, end, bottom (end == 2) + Drawable dwb = ((TextView) v1).getCompoundDrawablesRelative()[2]; + if (dwb != null) { + final int dw = dwb.getBounds().width(); + if (v1.getLayoutDirection() == View.LAYOUT_DIRECTION_LTR) { + if ((x > vw - dw)) clearClicked = true; + } + else { + if (x < vw - dw) clearClicked = true; + } + if (clearClicked) { + ((TextView) v1).setText(""); + v1.requestFocus(); + return true; + } + } + } + v.performClick(); + return false; + }); } @Override protected void initProfile() { @@ -275,10 +341,9 @@ public class NewTransactionActivity extends ProfileThemedActivity }); } - public boolean simulateCrash(MenuItem item) { + public void simulateCrash(MenuItem item) { debug("crash", "Will crash intentionally"); new AsyncCrasher().execute(); - return true; } public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. @@ -344,8 +409,15 @@ public class NewTransactionActivity extends ProfileThemedActivity amt.setSelectAllOnFocus(true); // forward navigation support - final TableRow last_row = (TableRow) table.getChildAt(table.getChildCount() - 1); - final TextView last_amt = (TextView) last_row.getChildAt(1); + TextView last_amt; + int rows = table.getChildCount(); + if (rows > 0) { + final TableRow last_row = (TableRow) table.getChildAt(rows - 1); + last_amt = (TextView) last_row.getChildAt(1); + } + else { + last_amt = tvDescription; + } last_amt.setNextFocusForwardId(acc.getId()); last_amt.setNextFocusRightId(acc.getId()); last_amt.setImeOptions(EditorInfo.IME_ACTION_NEXT); @@ -366,6 +438,7 @@ public class NewTransactionActivity extends ProfileThemedActivity MLDB.hookAutocompletionAdapter(this, acc, MLDB.ACCOUNTS_TABLE, "name", true, amt, null, mProfile); hookTextChangeListener(acc); + hookClearClickListener(acc); hookTextChangeListener(amt); return row; @@ -544,7 +617,6 @@ public class NewTransactionActivity extends ProfileThemedActivity "transaction %d with description %s", profileUUID, transactionId, description)); tr = profile.loadTransaction(transactionId); - table = findViewById(R.id.new_transaction_accounts_table); ArrayList accounts = tr.getAccounts(); TableRow firstNegative = null; int negativeCount = 0;