import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar;
-import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
fab = findViewById(R.id.fab);
fab.setOnClickListener(v -> saveTransaction());
- Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
+ Objects.requireNonNull(getSupportActionBar())
+ .setDisplayHomeAsUpEnabled(true);
list = findViewById(R.id.new_transaction_accounts);
- viewModel = ViewModelProviders.of(this).get(NewTransactionModel.class);
+ viewModel = ViewModelProviders.of(this)
+ .get(NewTransactionModel.class);
listAdapter = new NewTransactionItemsAdapter(viewModel, mProfile);
list.setAdapter(listAdapter);
list.setLayoutManager(new LinearLayoutManager(this));
public int getMovementFlags(@NonNull RecyclerView recyclerView,
@NonNull RecyclerView.ViewHolder viewHolder) {
int flags = makeFlag(ItemTouchHelper.ACTION_STATE_IDLE, ItemTouchHelper.END);
- if (viewModel.getAccountCount() > 2) flags |=
- makeFlag(ItemTouchHelper.ACTION_STATE_SWIPE,
+ // the top item is always there (date and description)
+ if (viewHolder.getAdapterPosition() > 0) {
+ if (viewModel.getAccountCount() > 2) {
+ flags |= makeFlag(ItemTouchHelper.ACTION_STATE_SWIPE,
ItemTouchHelper.START | ItemTouchHelper.END);
+ }
+ }
+
return flags;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
if (viewModel.getAccountCount() == 2)
Snackbar.make(list, R.string.msg_at_least_two_accounts_are_required,
- Snackbar.LENGTH_LONG).setAction("Action", null).show();
+ Snackbar.LENGTH_LONG)
+ .setAction("Action", null)
+ .show();
else {
int pos = viewHolder.getAdapterPosition();
- listAdapter.removeItem(pos);
- // FIXME hook next/prev links somehow
- throw new RuntimeException("TODO");
+ viewModel.removeItem(pos - 1);
+ listAdapter.notifyItemRemoved(pos);
+ viewModel.sendCountNotifications(); // needed after items re-arrangement
+ viewModel.checkTransactionSubmittable(listAdapter);
}
}
}).attachToRecyclerView(list);
- viewModel.isSubmittable().observe(this, new Observer<Boolean>() {
- @Override
- public void onChanged(Boolean isSubmittable) {
- if (isSubmittable) {
- if (fab != null) {
- fab.show();
- fab.setEnabled(true);
- }
- }
- else {
- if (fab != null) {
- fab.hide();
- }
- }
- }
- });
+ viewModel.isSubmittable()
+ .observe(this, isSubmittable -> {
+ if (isSubmittable) {
+ if (fab != null) {
+ fab.show();
+ fab.setEnabled(true);
+ }
+ }
+ else {
+ if (fab != null) {
+ fab.hide();
+ }
+ }
+ });
viewModel.checkTransactionSubmittable(listAdapter);
}
@Override
if (profileUUID != null) {
mProfile = Data.getProfile(profileUUID);
- if (mProfile == null) finish();
+ if (mProfile == null)
+ finish();
Data.setCurrentProfile(mProfile);
}
- else super.initProfile();
+ else
+ super.initProfile();
}
@Override
public void finish() {
// FIXME if (tvDescription.getText().toString().isEmpty()) tvDescription.requestFocus();
}
public void saveTransaction() {
- if (fab != null) fab.setEnabled(false);
+ if (fab != null)
+ fab.setEnabled(false);
listAdapter.toggleAllEditing(false);
progress.setVisibility(View.VISIBLE);
try {
Date date = viewModel.getDate();
LedgerTransaction tr =
- new LedgerTransaction(null, date, viewModel.getDescription(),
- mProfile);
+ new LedgerTransaction(null, date, viewModel.getDescription(), mProfile);
LedgerTransactionAccount emptyAmountAccount = null;
float emptyAmountAccountBalance = 0;
for (int i = 0; i < viewModel.getAccountCount(); i++) {
LedgerTransactionAccount acc = viewModel.getAccount(i);
- if (acc.getAccountName().trim().isEmpty()) continue;
+ if (acc.getAccountName()
+ .trim()
+ .isEmpty())
+ continue;
if (acc.isAmountSet()) {
emptyAmountAccountBalance += acc.getAmount();
progress.setVisibility(View.GONE);
listAdapter.toggleAllEditing(true);
- if (fab != null) fab.setEnabled(true);
+ if (fab != null)
+ fab.setEnabled(true);
}
}
public void simulateCrash(MenuItem item) {
getMenuInflater().inflate(R.menu.new_transaction, menu);
if (BuildConfig.DEBUG) {
- menu.findItem(R.id.action_simulate_crash).setVisible(true);
+ menu.findItem(R.id.action_simulate_crash)
+ .setVisible(true);
}
return true;
getResources().getDisplayMetrics()));
}
public void resetTransactionFromMenu(MenuItem item) {
- resetForm();
+ listAdapter.reset();
}
@Override
public void done(String error) {
progress.setVisibility(View.INVISIBLE);
debug("visuals", "hiding progress");
- if (error == null) resetForm();
- else Snackbar.make(list, error, BaseTransientBottomBar.LENGTH_LONG).show();
+ if (error == null)
+ listAdapter.reset();
+ else
+ Snackbar.make(list, error, BaseTransientBottomBar.LENGTH_LONG)
+ .show();
listAdapter.toggleAllEditing(true);
+
viewModel.checkTransactionSubmittable(listAdapter);
}
- private void resetForm() {
- listAdapter.reset();
- }
private class AsyncCrasher extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {