X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2FAccountSummary.java;h=2b05c1b3b2559435208dc6455c4db3b1d4b6e67a;hp=8593430010bca00f3e51ae3c01cc5a244a6c8f3f;hb=d54573f51530baacd9567a8aa2894a57f170f5e8;hpb=b9a1a49246efbddaa6f41256b5ea4dec0aef8e3c diff --git a/app/src/main/java/net/ktnx/mobileledger/AccountSummary.java b/app/src/main/java/net/ktnx/mobileledger/AccountSummary.java index 85934300..2b05c1b3 100644 --- a/app/src/main/java/net/ktnx/mobileledger/AccountSummary.java +++ b/app/src/main/java/net/ktnx/mobileledger/AccountSummary.java @@ -16,6 +16,8 @@ import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; import android.util.TypedValue; +import android.view.ContextMenu; +import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -23,11 +25,12 @@ import android.view.ViewGroup; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ProgressBar; -import android.widget.TableLayout; -import android.widget.TableRow; import android.widget.TextView; +import android.widget.Toast; import java.util.Date; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import static android.view.View.GONE; import static net.ktnx.mobileledger.MobileLedgerDB.db; @@ -38,6 +41,8 @@ public class AccountSummary extends AppCompatActivity { private static long account_list_last_updated; private static boolean account_list_needs_update = true; + private LinearLayout clickedAccountRow; + public static void preferences_changed() { account_list_needs_update = true; } @@ -100,7 +105,7 @@ public class AccountSummary extends AppCompatActivity { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.account_summary, menu); mRefresh = menu.findItem(R.id.menu_acc_summary_refresh); - assert mRefresh != null; + if (mRefresh == null) throw new AssertionError(); return true; } @@ -147,7 +152,7 @@ public class AccountSummary extends AppCompatActivity { } private void update_accounts() { - mRefresh.setVisible(false); + if (mRefresh != null) mRefresh.setVisible(false); Resources rm = getResources(); ProgressBar pb = findViewById(R.id.progressBar); @@ -169,7 +174,7 @@ public class AccountSummary extends AppCompatActivity { protected void onPostExecute(Void result) { pb.setVisibility(GONE); pt.setVisibility(GONE); - mRefresh.setVisible(true); + if (mRefresh != null) mRefresh.setVisible(true); if (this.error != 0) { String err_text = rm.getString(this.error); Log.d("visual", String.format("showing snackbar: %s", err_text)); @@ -191,33 +196,71 @@ public class AccountSummary extends AppCompatActivity { return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getResources().getDisplayMetrics())); } + Pattern higher_account = Pattern.compile("^[^:]+:"); + + private String strip_higher_accounts(String acc_name, int[] count) { + count[0] = 0; + while (true) { + Matcher m = higher_account.matcher(acc_name); + if (m.find()) { + count[0]++; + acc_name = m.replaceFirst(""); + } + else break; + } + + return acc_name; + } + + public void hideAccountClicked(MenuItem item) { + TextView textView = (TextView) clickedAccountRow.getChildAt(0); + Toast.makeText(this, textView.getText(), Toast.LENGTH_SHORT).show(); + } + @SuppressLint("DefaultLocale") private void update_account_table() { LinearLayout root = findViewById(R.id.account_root); root.removeAllViewsInLayout(); + View.OnCreateContextMenuListener ccml = new View.OnCreateContextMenuListener() { + @Override + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { + clickedAccountRow = (LinearLayout) v; + getMenuInflater().inflate(R.menu.account_summary_account_menu, menu); + } + }; + try (Cursor cursor = db.rawQuery("SELECT name FROM accounts ORDER BY name;", null)) { boolean even = false; while (cursor.moveToNext()) { String acc_name = cursor.getString(0); - TableLayout t = new TableLayout(this); - TableRow r = new TableRow(this); - r.setLayoutParams(new TableRow.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); - r.setPadding(getResources().getDimensionPixelSize(R.dimen.activity_horizontal_margin), dp2px(4), getResources().getDimensionPixelSize(R.dimen.activity_horizontal_margin), dp2px(4)); + LinearLayout r = new LinearLayout(this); + r.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); + r.setGravity(Gravity.CENTER_VERTICAL); + r.setPadding(getResources().getDimensionPixelSize(R.dimen.activity_horizontal_margin), dp2px(3), getResources().getDimensionPixelSize(R.dimen.activity_horizontal_margin), dp2px(4)); if (even) r.setBackgroundColor(getResources().getColor(R.color.table_row_even_bg, getTheme())); even = !even; + r.setContextClickable(true); + r.setOnCreateContextMenuListener(ccml); + TextView acc_tv = new TextView(this, null, R.style.account_summary_account_name); - acc_tv.setLayoutParams(new TableRow.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, 9f)); - acc_tv.setText(acc_name); + acc_tv.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT, 5f)); + acc_tv.setGravity(Gravity.CENTER_VERTICAL); + int[] indent_level = new int[]{0}; + String short_acc_name = strip_higher_accounts(acc_name, indent_level); + acc_tv.setPadding(indent_level[0] * getResources().getDimensionPixelSize(R.dimen.activity_horizontal_margin) / 2, 0, 0, 0); + acc_tv.setText(short_acc_name); r.addView(acc_tv); TextView amt_tv = new TextView(this, null, R.style.account_summary_amounts); - amt_tv.setLayoutParams(new TableRow.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)); + amt_tv.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT, 1f)); amt_tv.setTextAlignment(EditText.TEXT_ALIGNMENT_VIEW_END); - amt_tv.setMinWidth(dp2px(40f)); + amt_tv.setGravity(Gravity.CENTER_VERTICAL); +// amt_tv.setGravity(Gravity.CENTER); + amt_tv.setMinWidth(dp2px(60f)); StringBuilder amt_text = new StringBuilder(); try (Cursor cAmounts = db.rawQuery("SELECT currency, value FROM account_values WHERE account = ?", new String[]{acc_name})) { while (cAmounts.moveToNext()) { @@ -231,9 +274,7 @@ public class AccountSummary extends AppCompatActivity { r.addView(amt_tv); - t.addView(r); - - root.addView(t); + root.addView(r); } } }