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=c39ec9ae4e4664f493dc9e34042c84cd078ca51a;hp=845afea58c0ddc258b40ca6628fa98649553dcf6;hb=a9f669055c4458c54e3ece1d2896e5ce0c28b920;hpb=b18cd774a08afb15f9c3b953508b4823211c547b 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 845afea5..c39ec9ae 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 @@ -24,7 +24,6 @@ import android.os.Bundle; import android.text.Editable; import android.text.InputType; import android.text.TextWatcher; -import android.util.Log; import android.util.TypedValue; import android.view.Gravity; import android.view.Menu; @@ -44,6 +43,7 @@ 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.App; import net.ktnx.mobileledger.BuildConfig; import net.ktnx.mobileledger.R; import net.ktnx.mobileledger.async.DescriptionSelectedCallback; @@ -56,7 +56,6 @@ 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; @@ -68,6 +67,8 @@ import java.util.Objects; import androidx.appcompat.widget.Toolbar; import androidx.fragment.app.DialogFragment; +import static net.ktnx.mobileledger.utils.Logger.debug; + /* * TODO: nicer progress while transaction is submitted * TODO: reports @@ -93,7 +94,7 @@ public class NewTransactionActivity extends ProfileThemedActivity setContentView(R.layout.activity_new_transaction); Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); - toolbar.setSubtitle(Data.profile.get().getName()); + toolbar.setSubtitle(mProfile.getName()); tvDate = findViewById(R.id.new_transaction_date); tvDate.setOnFocusChangeListener((v, hasFocus) -> { @@ -101,7 +102,7 @@ public class NewTransactionActivity extends ProfileThemedActivity }); tvDescription = findViewById(R.id.new_transaction_description); MLDB.hookAutocompletionAdapter(this, tvDescription, MLDB.DESCRIPTION_HISTORY_TABLE, - "description", false, findViewById(R.id.new_transaction_acc_1), this); + "description", false, findViewById(R.id.new_transaction_acc_1), this, mProfile); hookTextChangeListener(tvDescription); progress = findViewById(R.id.save_transaction_progress); @@ -116,13 +117,22 @@ public class NewTransactionActivity extends ProfileThemedActivity TextView tvAmount = (TextView) row.getChildAt(1); hookSwipeListener(row); MLDB.hookAutocompletionAdapter(this, tvAccountName, MLDB.ACCOUNTS_TABLE, "name", true, - tvAmount, null); + tvAmount, null, mProfile); hookTextChangeListener(tvAccountName); hookTextChangeListener(tvAmount); -// Log.d("swipe", "hooked to row "+i); +// debug("swipe", "hooked to row "+i); } } + @Override + protected void initProfile() { + String profileUUID = getIntent().getStringExtra("profile_uuid"); + if (profileUUID != null) { + mProfile = Data.getProfile(profileUUID); + if (mProfile == null) finish(); + } + else super.initProfile(); + } @Override public void finish() { super.finish(); @@ -149,13 +159,13 @@ public class NewTransactionActivity extends ProfileThemedActivity progress.setVisibility(View.VISIBLE); try { - saver = new SendTransactionTask(this); + saver = new SendTransactionTask(this, mProfile); String dateString = tvDate.getText().toString(); Date date; if (dateString.isEmpty()) date = new Date(); else date = Globals.parseLedgerDate(dateString); - LedgerTransaction tr = new LedgerTransaction(date, tvDescription.getText().toString()); + LedgerTransaction tr = new LedgerTransaction(null, date, tvDescription.getText().toString(), mProfile); TableLayout table = findViewById(R.id.new_transaction_accounts_table); LedgerTransactionAccount emptyAmountAccount = null; @@ -180,11 +190,12 @@ public class NewTransactionActivity extends ProfileThemedActivity tr.addAccount(item); } - if (emptyAmountAccount != null) emptyAmountAccount.setAmount(-emptyAmountAccountBalance); + if (emptyAmountAccount != null) + emptyAmountAccount.setAmount(-emptyAmountAccountBalance); saver.execute(tr); } catch (ParseException e) { - Log.d("new-transaction", "Parse error", e); + debug("new-transaction", "Parse error", e); Toast.makeText(this, getResources().getString(R.string.error_invalid_date), Toast.LENGTH_LONG).show(); tvDate.requestFocus(); @@ -194,7 +205,7 @@ public class NewTransactionActivity extends ProfileThemedActivity if (fab != null) fab.setEnabled(true); } catch (Exception e) { - Log.d("new-transaction", "Unknown error", e); + debug("new-transaction", "Unknown error", e); progress.setVisibility(View.GONE); toggleAllEditing(true); @@ -264,10 +275,9 @@ public class NewTransactionActivity extends ProfileThemedActivity }); } - public boolean simulateCrash(MenuItem item) { - Log.d("crash", "Will crash intentionally"); + 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. @@ -304,7 +314,7 @@ public class NewTransactionActivity extends ProfileThemedActivity @Override public void afterTextChanged(Editable s) { -// Log.d("input", "text changed"); +// debug("input", "text changed"); check_transaction_submittable(); } }); @@ -352,7 +362,8 @@ public class NewTransactionActivity extends ProfileThemedActivity if (focus) acc.requestFocus(); hookSwipeListener(row); - MLDB.hookAutocompletionAdapter(this, acc, MLDB.ACCOUNTS_TABLE, "name", true, amt, null); + MLDB.hookAutocompletionAdapter(this, acc, MLDB.ACCOUNTS_TABLE, "name", true, amt, null, + mProfile); hookTextChangeListener(acc); hookTextChangeListener(amt); @@ -431,7 +442,7 @@ public class NewTransactionActivity extends ProfileThemedActivity doAddAccountRow(false); } - Log.d("submittable", String.format("accounts=%d, accounts_with_values=%s, " + + debug("submittable", String.format("accounts=%d, accounts_with_values=%s, " + "amounts_with_accounts=%d, amounts=%d, running_total=%1.2f, " + "single_empty_with_acc=%s", accounts, accounts_with_values, amounts_with_accounts, amounts, running_total, @@ -468,7 +479,7 @@ public class NewTransactionActivity extends ProfileThemedActivity @Override public void done(String error) { progress.setVisibility(View.INVISIBLE); - Log.d("visuals", "hiding progress"); + debug("visuals", "hiding progress"); if (error == null) resetForm(); else Snackbar.make(findViewById(R.id.new_transaction_accounts_table), error, @@ -497,11 +508,10 @@ public class NewTransactionActivity extends ProfileThemedActivity } @Override public void descriptionSelected(String description) { - Log.d("descr selected", description); + debug("descr selected", description); if (!inputStateIsInitial()) return; - MobileLedgerProfile currentProfile = Data.profile.get(); - String accFilter = currentProfile.getPreferredAccountsFilter(); + String accFilter = mProfile.getPreferredAccountsFilter(); ArrayList params = new ArrayList<>(); StringBuilder sb = new StringBuilder( @@ -518,37 +528,26 @@ public class NewTransactionActivity extends ProfileThemedActivity sb.append(" ORDER BY date desc limit 1"); final String sql = sb.toString(); - Log.d("descr", sql); - Log.d("descr", params.toString()); + debug("descr", sql); + debug("descr", params.toString()); - try (Cursor c = MLDB.getDatabase().rawQuery(sql, params.toArray(new String[]{}))) { + try (Cursor c = App.getDatabase().rawQuery(sql, params.toArray(new String[]{}))) { if (!c.moveToNext()) return; String profileUUID = c.getString(0); int transactionId = c.getInt(1); 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)); + MobileLedgerProfile profile = Data.getProfile(profileUUID); + 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)); - tr = profile.loadTransaction(transactionId); - } - int i = 0; + tr = profile.loadTransaction(transactionId); table = findViewById(R.id.new_transaction_accounts_table); ArrayList accounts = tr.getAccounts(); TableRow firstNegative = null; int negativeCount = 0; - for (i = 0; i < accounts.size(); i++) { + for (int i = 0; i < accounts.size(); i++) { LedgerTransactionAccount acc = accounts.get(i); TableRow row = (TableRow) table.getChildAt(i); if (row == null) row = doAddAccountRow(false);