import net.ktnx.mobileledger.ui.DatePickerFragment;
import net.ktnx.mobileledger.ui.OnSwipeTouchListener;
import net.ktnx.mobileledger.utils.Globals;
+import net.ktnx.mobileledger.utils.LockHolder;
import net.ktnx.mobileledger.utils.MLDB;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
-import java.util.List;
import java.util.Locale;
import java.util.Objects;
* TODO: reports
* TODO: get rid of the custom session/cookie and auth code?
* (the last problem with the POST was the missing content-length header)
- * TODO: nicer swiping removal with visual feedback
* */
public class NewTransactionActivity extends ProfileThemedActivity
}
private void hookSwipeListener(final TableRow row) {
row.getChildAt(0).setOnTouchListener(new OnSwipeTouchListener(this) {
- public void onSwipeLeft() {
-// Log.d("swipe", "LEFT" + row.getId());
+ private void onSwipeAside() {
if (table.getChildCount() > 2) {
TableRow prev_row = (TableRow) table.getChildAt(table.indexOfChild(row) - 1);
TableRow next_row = (TableRow) table.getChildAt(table.indexOfChild(row) + 1);
Snackbar.LENGTH_LONG).setAction("Action", null).show();
}
}
+ public void onSwipeLeft() {
+ onSwipeAside();
+ }
+ public void onSwipeRight() {
+ onSwipeAside();
+ }
// @Override
// public boolean performClick(View view, MotionEvent m) {
// return true;
Log.d("descr selected", description);
if (!inputStateIsInitial()) return;
- try (Cursor c = MLDB.getReadableDatabase().rawQuery(
+ try (Cursor c = MLDB.getDatabase().rawQuery(
"select profile, id from transactions where description=? order by date desc " +
"limit 1", new String[]{description}))
{
String profileUUID = c.getString(0);
int transactionId = c.getInt(1);
- List<MobileLedgerProfile> profiles = Data.profiles.getList();
- MobileLedgerProfile profile = null;
- for (int i = 0; i < profiles.size(); i++) {
- MobileLedgerProfile p = profiles.get(i);
- if (p.getUuid().equals(profileUUID)) {
- profile = p;
- break;
+ LedgerTransaction tr;
+ try (LockHolder lh = Data.profiles.lockForReading()) {
+ MobileLedgerProfile profile = null;
+ for (int i = 0; i < Data.profiles.size(); i++) {
+ MobileLedgerProfile p = Data.profiles.get(i);
+ if (p.getUuid().equals(profileUUID)) {
+ profile = p;
+ break;
+ }
}
- }
- if (profile == null) throw new RuntimeException(String.format(
- "Unable to find profile %s, which is supposed to contain " +
- "transaction %d with description %s", profileUUID, transactionId, description));
+ if (profile == null) throw new RuntimeException(String.format(
+ "Unable to find profile %s, which is supposed to contain " +
+ "transaction %d with description %s", profileUUID, transactionId,
+ description));
- LedgerTransaction tr = profile.loadTransaction(transactionId);
+ tr = profile.loadTransaction(transactionId);
+ }
int i = 0;
table = findViewById(R.id.new_transaction_accounts_table);
ArrayList<LedgerTransactionAccount> accounts = tr.getAccounts();
return true;
}
- private class AsyncCrasher extends AsyncTask<Void, Void, Void>{
+ private class AsyncCrasher extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
throw new RuntimeException("Simulated crash");