X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2FNewTransactionActivity.java;h=087b87690896a42779cb2e92fe1496b5479ad519;hp=148eacb1a46f56e4d056534fc538df531280c667;hb=a762905c8d7c4d7973146b454e0236f773bd6305;hpb=4c2a5558d23013ad8855997df0d8be067a2bf23d diff --git a/app/src/main/java/net/ktnx/mobileledger/NewTransactionActivity.java b/app/src/main/java/net/ktnx/mobileledger/NewTransactionActivity.java index 148eacb1..087b8769 100644 --- a/app/src/main/java/net/ktnx/mobileledger/NewTransactionActivity.java +++ b/app/src/main/java/net/ktnx/mobileledger/NewTransactionActivity.java @@ -14,7 +14,9 @@ import android.support.design.widget.Snackbar; import android.support.v4.app.DialogFragment; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; +import android.text.Editable; import android.text.InputType; +import android.text.TextWatcher; import android.util.Log; import android.util.TypedValue; import android.view.Menu; @@ -52,10 +54,50 @@ import java.util.Objects; public class NewTransactionActivity extends AppCompatActivity implements TaskCallback { private TableLayout table; private FloatingActionButton fab; + boolean fab_should_be_visible; private ProgressBar progress; private TextView text_date; private TextView text_descr; private static SaveTransactionTask saver; + FloatingActionButton.OnVisibilityChangedListener fab_visibility_changed_listener = new FloatingActionButton.OnVisibilityChangedListener() { + @Override + public void onShown(FloatingActionButton fab) { + Log.d("visuals", "FAB shown"); + super.onShown(fab); + if (!fab_should_be_visible) fab.hide(); + } + + @Override + public void onHidden(FloatingActionButton fab) { + Log.d("visuals", "FAB hidden"); + fab.setImageResource(R.drawable.ic_save_white_24dp); + fab.setEnabled(true); +// super.onHidden(fab); + if (fab_should_be_visible) fab.show(); + } + }; + + private void hide_fab() { + hide_fab(false); + } + + private void hide_fab(boolean force) { + if (!fab_should_be_visible && !force) return; + + fab_should_be_visible = false; + fab.hide(fab_visibility_changed_listener); + } + + private void show_fab() { + show_fab(false); + } + + private void show_fab(boolean force) { + if (fab_should_be_visible && !force) return; + + fab_should_be_visible = true; + fab.show(fab_visibility_changed_listener); + } @Override protected void onCreate(Bundle savedInstanceState) { @@ -83,8 +125,13 @@ public class NewTransactionActivity extends AppCompatActivity implements TaskCal Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true); table = findViewById(R.id.new_transaction_accounts_table); for (int i = 0; i < table.getChildCount(); i++) { - hook_swipe_listener((TableRow)table.getChildAt(i)); - hook_autocompletion_adapter((TableRow)table.getChildAt(i)); + TableRow row = (TableRow) table.getChildAt(i); + TextView acc_name_view = (TextView) row.getChildAt(0); + TextView amount_view = (TextView) row.getChildAt(1); + hook_swipe_listener(row); + hook_autocompletion_adapter(row); + hook_text_change_listener(acc_name_view); + hook_text_change_listener(amount_view); // Log.d("swipe", "hooked to row "+i); } } @@ -135,6 +182,27 @@ public class NewTransactionActivity extends AppCompatActivity implements TaskCal }); } + private void hook_text_change_listener(final TextView view) { + view.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { +// Log.d("input", "text changed"); + check_transaction_submittable(); + } + }); + + } + @TargetApi(Build.VERSION_CODES.N) private void hook_autocompletion_adapter(final TableRow row) { String[] from = {"name"}; @@ -195,7 +263,7 @@ public class NewTransactionActivity extends AppCompatActivity implements TaskCal return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getResources().getDisplayMetrics())); } - public void addTransactionAccountFromMenu(MenuItem item) { + private void do_add_account_row(boolean focus) { final AutoCompleteTextView acc = new AutoCompleteTextView(this); acc.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 9f)); acc.setHint(R.string.new_transaction_account_hint); @@ -215,26 +283,66 @@ public class NewTransactionActivity extends AppCompatActivity implements TaskCal row.addView(amt); table.addView(row); - acc.requestFocus(); + if (focus) acc.requestFocus(); hook_swipe_listener(row); hook_autocompletion_adapter(row); + hook_text_change_listener(acc); + hook_text_change_listener(amt); + } + + public void addTransactionAccountFromMenu(MenuItem item) { + do_add_account_row(true); + } + + private void check_transaction_submittable() { + TableLayout table = findViewById(R.id.new_transaction_accounts_table); + int accounts = 0; + int accounts_with_values = 0; + int empty_rows = 0; + for(int i = 0; i < table.getChildCount(); i++ ) { + TableRow row = (TableRow) table.getChildAt(i); + + TextView acc_name_v = (TextView) row.getChildAt(0); + + String acc_name = String.valueOf(acc_name_v.getText()); + acc_name = acc_name.trim(); + if (!acc_name.isEmpty()) { + accounts++; + + TextView amount_v = (TextView) row.getChildAt(1); + String amt = String.valueOf(amount_v.getText()); + + if (!amt.isEmpty()) accounts_with_values++; + } else empty_rows++; + } + + if (accounts_with_values == accounts && empty_rows == 0) { + do_add_account_row(false); + } + + if ((accounts >= 2) && (accounts_with_values >= (accounts - 1))) { + show_fab(); + } else hide_fab(); } @Override public void done() { - fab.setEnabled(true); - - fab.setImageResource(R.drawable.ic_thick_check_white); + fab.setImageResource(R.drawable.ic_check_white_24dp); progress.setVisibility(View.INVISIBLE); - reset_form(); - final Handler handler = new Handler(); - handler.postDelayed(new Runnable() { + Log.d("visuals", "hiding progress"); + + fab_should_be_visible = false; + final Handler fade_out = new Handler(); + fade_out.postDelayed(new Runnable() { @Override public void run() { - fab.setImageResource(R.drawable.ic_save_white_24dp); + Log.d("visuals", "hiding FAB"); + + hide_fab(true); } - }, 1500); + }, 1000); + reset_form(); } private void reset_form() {