]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/activity/NewTransactionActivity.java
make the profile details activity use the theme of the profile
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / activity / NewTransactionActivity.java
index b522abc767966511602173dd1ef3f798dd082cba..b69710b3598c8c0d15d619e035e2fa8a930a49ef 100644 (file)
@@ -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;
@@ -65,17 +65,18 @@ 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
- * TODO: setup wizard
- * TODO: update accounts/check settings upon change of backend settings
  *  */
 
-public class NewTransactionActivity extends AppCompatActivity
+public class NewTransactionActivity extends ProfileThemedActivity
         implements TaskCallback, DescriptionSelectedCallback {
     private static SaveTransactionTask saver;
     private TableLayout table;
@@ -89,6 +90,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);
@@ -245,10 +247,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;
@@ -303,6 +313,7 @@ public class NewTransactionActivity extends AppCompatActivity
         amt.setMinWidth(dp2px(40));
         amt.setTextAlignment(EditText.TEXT_ALIGNMENT_VIEW_END);
         amt.setImeOptions(EditorInfo.IME_ACTION_DONE);
+        amt.setSelectAllOnFocus(true);
 
         // forward navigation support
         final TableRow last_row = (TableRow) table.getChildAt(table.getChildCount() - 1);
@@ -497,6 +508,8 @@ public class NewTransactionActivity extends AppCompatActivity
             int i = 0;
             table = findViewById(R.id.new_transaction_accounts_table);
             ArrayList<LedgerTransactionAccount> accounts = tr.getAccounts();
+            TableRow firstNegative = null;
+            int negativeCount = 0;
             for (i = 0; i < accounts.size(); i++) {
                 LedgerTransactionAccount acc = accounts.get(i);
                 TableRow row = (TableRow) table.getChildAt(i);
@@ -505,11 +518,23 @@ public class NewTransactionActivity extends AppCompatActivity
                 ((TextView) row.getChildAt(0)).setText(acc.getAccountName());
                 ((TextView) row.getChildAt(1))
                         .setText(String.format(Locale.US, "%1.2f", acc.getAmount()));
+
+                if (acc.getAmount() < 0.005) {
+                    if (firstNegative == null) firstNegative = row;
+                    negativeCount++;
+                }
+            }
+
+            if (negativeCount == 1) {
+                ((TextView) firstNegative.getChildAt(1)).setText(null);
             }
 
             check_transaction_submittable();
 
-            ((TableRow) table.getChildAt(table.getChildCount() - 1)).getChildAt(0).requestFocus();
+            EditText firstAmount = (EditText) ((TableRow) table.getChildAt(0)).getChildAt(1);
+            String amtString = String.valueOf(firstAmount.getText());
+            firstAmount.requestFocus();
+            firstAmount.setSelection(0, amtString.length());
         }
 
     }
@@ -526,4 +551,10 @@ public class NewTransactionActivity extends AppCompatActivity
 
         return true;
     }
+    private class AsyncCrasher extends AsyncTask<Void, Void, Void>{
+        @Override
+        protected Void doInBackground(Void... voids) {
+            throw new RuntimeException("Simulated crash");
+        }
+    }
 }