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=f075929d9c85e8227fb0b8c0b98e91d1d1ebd8b0;hp=c907b891b7db57b446717aa255545e8489260ccd;hb=2bba456716f97113b7cefc1fba74cf9210c4e127;hpb=d27efe691dc027355839ca8fd2d717a501f987c1 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 c907b891..f075929d 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,13 +19,8 @@ package net.ktnx.mobileledger.ui.activity; import android.annotation.SuppressLint; import android.database.Cursor; +import android.os.AsyncTask; import android.os.Bundle; -import android.support.design.widget.BaseTransientBottomBar; -import android.support.design.widget.FloatingActionButton; -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; @@ -45,6 +40,11 @@ import android.widget.TableRow; import android.widget.TextView; import android.widget.Toast; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.android.material.snackbar.BaseTransientBottomBar; +import com.google.android.material.snackbar.Snackbar; + +import net.ktnx.mobileledger.BuildConfig; import net.ktnx.mobileledger.R; import net.ktnx.mobileledger.async.DescriptionSelectedCallback; import net.ktnx.mobileledger.async.SaveTransactionTask; @@ -56,24 +56,26 @@ import net.ktnx.mobileledger.model.MobileLedgerProfile; 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; +import androidx.appcompat.widget.Toolbar; +import androidx.fragment.app.DialogFragment; + /* * TODO: nicer progress while transaction is submitted * 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 AppCompatActivity +public class NewTransactionActivity extends ProfileThemedActivity implements TaskCallback, DescriptionSelectedCallback { private static SaveTransactionTask saver; private TableLayout table; @@ -87,6 +89,7 @@ public class NewTransactionActivity extends AppCompatActivity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setContentView(R.layout.activity_new_transaction); Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); @@ -198,8 +201,7 @@ public class NewTransactionActivity extends AppCompatActivity } 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); @@ -233,6 +235,12 @@ public class NewTransactionActivity extends AppCompatActivity 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; @@ -243,10 +251,18 @@ public class NewTransactionActivity extends AppCompatActivity }); } + public boolean simulateCrash(MenuItem item) { + Log.d("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. getMenuInflater().inflate(R.menu.new_transaction, menu); + if (BuildConfig.DEBUG) { + menu.findItem(R.id.action_simulate_crash).setVisible(true); + } check_transaction_submittable(); return true; @@ -471,7 +487,7 @@ public class NewTransactionActivity extends AppCompatActivity 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})) { @@ -479,20 +495,23 @@ public class NewTransactionActivity extends AppCompatActivity String profileUUID = c.getString(0); int transactionId = c.getInt(1); - List 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 accounts = tr.getAccounts(); @@ -539,4 +558,10 @@ public class NewTransactionActivity extends AppCompatActivity return true; } + private class AsyncCrasher extends AsyncTask { + @Override + protected Void doInBackground(Void... voids) { + throw new RuntimeException("Simulated crash"); + } + } }