From 6d0b1dfe31c79d0956d852374d7e53fd6cfa7c14 Mon Sep 17 00:00:00 2001 From: Moshe W Date: Thu, 2 Jan 2025 13:39:35 +0200 Subject: [PATCH 1/4] Report sizes. --- app/src/main/res/layout/actionbar_progress_indicator.xml | 8 +++++--- app/src/main/res/layout/activity_reports.xml | 9 ++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/app/src/main/res/layout/actionbar_progress_indicator.xml b/app/src/main/res/layout/actionbar_progress_indicator.xml index 8c6cfd750..ab3b3d305 100644 --- a/app/src/main/res/layout/actionbar_progress_indicator.xml +++ b/app/src/main/res/layout/actionbar_progress_indicator.xml @@ -17,15 +17,17 @@ This is a progress indicator that should be displayed above the toolbar. See toolbar.xml layout for example of how to include it --> - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_reports.xml b/app/src/main/res/layout/activity_reports.xml index 04ae481e2..8d5fbd40c 100644 --- a/app/src/main/res/layout/activity_reports.xml +++ b/app/src/main/res/layout/activity_reports.xml @@ -72,15 +72,14 @@ android:id="@+id/time_range_spinner" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginStart="10dp" - android:layout_weight="2" /> + android:layout_marginStart="4dp" + android:layout_weight="1" /> + android:layout_marginStart="4dp" /> From 17445d08714dcd1a74173bf1ad04acb4a2c0cfb0 Mon Sep 17 00:00:00 2001 From: Moshe W Date: Thu, 2 Jan 2025 16:39:30 +0200 Subject: [PATCH 2/4] Account balances as float. --- .../android/db/adapter/AccountsDbAdapter.java | 8 ++------ .../android/db/adapter/SplitsDbAdapter.java | 17 ++++++++--------- .../android/ui/report/BaseReportFragment.java | 7 +++---- .../ui/report/ReportsOverviewFragment.java | 12 ++++++------ .../barchart/StackedBarChartFragment.java | 5 ++--- .../ui/report/piechart/PieChartFragment.java | 7 +++---- .../kotlin/org/gnucash/android/model/Account.kt | 2 ++ 7 files changed, 26 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/org/gnucash/android/db/adapter/AccountsDbAdapter.java b/app/src/main/java/org/gnucash/android/db/adapter/AccountsDbAdapter.java index 8013064d7..2948c7a21 100644 --- a/app/src/main/java/org/gnucash/android/db/adapter/AccountsDbAdapter.java +++ b/app/src/main/java/org/gnucash/android/db/adapter/AccountsDbAdapter.java @@ -885,19 +885,15 @@ private Money computeBalance(String accountUID, long startTimestamp, long endTim */ public Money getAccountsBalance(@NonNull List accountUIDList, long startTimestamp, long endTimestamp) { String currencyCode = GnuCashApplication.getDefaultCurrencyCode(); - Money balance = Money.createZeroInstance(currencyCode); if (accountUIDList.isEmpty()) - return balance; + return Money.createZeroInstance(currencyCode); boolean hasDebitNormalBalance = getAccountType(accountUIDList.get(0)).hasDebitNormalBalance(); SplitsDbAdapter splitsDbAdapter = mTransactionsAdapter.getSplitDbAdapter(); - Money splitSum = (startTimestamp == -1 && endTimestamp == -1) - ? splitsDbAdapter.computeSplitBalance(accountUIDList, currencyCode, hasDebitNormalBalance) - : splitsDbAdapter.computeSplitBalance(accountUIDList, currencyCode, hasDebitNormalBalance, startTimestamp, endTimestamp); - return balance.plus(splitSum); + return splitsDbAdapter.computeSplitBalance(accountUIDList, currencyCode, hasDebitNormalBalance, startTimestamp, endTimestamp); } /** diff --git a/app/src/main/java/org/gnucash/android/db/adapter/SplitsDbAdapter.java b/app/src/main/java/org/gnucash/android/db/adapter/SplitsDbAdapter.java index cb56cc2aa..a0b9efcb8 100644 --- a/app/src/main/java/org/gnucash/android/db/adapter/SplitsDbAdapter.java +++ b/app/src/main/java/org/gnucash/android/db/adapter/SplitsDbAdapter.java @@ -190,11 +190,10 @@ public Money computeSplitBalance(List accountUIDList, String currencyCod private Money calculateSplitBalance(List accountUIDList, String currencyCode, boolean hasDebitNormalBalance, long startTimestamp, long endTimestamp) { - if (accountUIDList.size() == 0) { - return new Money("0", currencyCode); + if (accountUIDList.isEmpty()) { + return Money.createZeroInstance(currencyCode); } - Cursor cursor; String[] selectionArgs = null; String selection = DatabaseSchema.AccountEntry.TABLE_NAME + "_" + DatabaseSchema.CommonColumns.COLUMN_UID + " in ( '" + TextUtils.join("' , '", accountUIDList) + "' ) AND " + TransactionEntry.TABLE_NAME + "_" + TransactionEntry.COLUMN_TEMPLATE + " = 0"; @@ -210,12 +209,12 @@ private Money calculateSplitBalance(List accountUIDList, String currency selectionArgs = new String[]{String.valueOf(startTimestamp)}; } - cursor = mDb.query("trans_split_acct", - new String[]{"TOTAL ( CASE WHEN " + SplitEntry.TABLE_NAME + "_" + SplitEntry.COLUMN_TYPE + " = 'DEBIT' THEN " + - SplitEntry.TABLE_NAME + "_" + SplitEntry.COLUMN_QUANTITY_NUM + " ELSE - " + - SplitEntry.TABLE_NAME + "_" + SplitEntry.COLUMN_QUANTITY_NUM + " END )", - SplitEntry.TABLE_NAME + "_" + SplitEntry.COLUMN_QUANTITY_DENOM, - DatabaseSchema.AccountEntry.TABLE_NAME + "_" + DatabaseSchema.AccountEntry.COLUMN_CURRENCY}, + String[] columns = new String[]{"TOTAL ( CASE WHEN " + SplitEntry.TABLE_NAME + "_" + SplitEntry.COLUMN_TYPE + " = 'DEBIT' THEN " + + SplitEntry.TABLE_NAME + "_" + SplitEntry.COLUMN_QUANTITY_NUM + " ELSE - " + + SplitEntry.TABLE_NAME + "_" + SplitEntry.COLUMN_QUANTITY_NUM + " END )", + SplitEntry.TABLE_NAME + "_" + SplitEntry.COLUMN_QUANTITY_DENOM, + DatabaseSchema.AccountEntry.TABLE_NAME + "_" + DatabaseSchema.AccountEntry.COLUMN_CURRENCY}; + Cursor cursor = mDb.query("trans_split_acct", columns, selection, selectionArgs, DatabaseSchema.AccountEntry.TABLE_NAME + "_" + DatabaseSchema.AccountEntry.COLUMN_CURRENCY, null, null); try { diff --git a/app/src/main/java/org/gnucash/android/ui/report/BaseReportFragment.java b/app/src/main/java/org/gnucash/android/ui/report/BaseReportFragment.java index 15160ec5c..30182a111 100644 --- a/app/src/main/java/org/gnucash/android/ui/report/BaseReportFragment.java +++ b/app/src/main/java/org/gnucash/android/ui/report/BaseReportFragment.java @@ -297,23 +297,22 @@ public void refresh() { mReportGenerator.cancel(true); mReportGenerator = new AsyncTask() { - private final ReportsActivity activity = mReportsActivity; @Override protected void onPreExecute() { - activity.showProgressBar(true); + mReportsActivity.showProgressBar(true); } @Override protected Void doInBackground(Void... params) { - generateReport(activity); + generateReport(mReportsActivity); return null; } @Override protected void onPostExecute(Void aVoid) { displayReport(); - activity.showProgressBar(false); + mReportsActivity.showProgressBar(false); } }; mReportGenerator.execute(); diff --git a/app/src/main/java/org/gnucash/android/ui/report/ReportsOverviewFragment.java b/app/src/main/java/org/gnucash/android/ui/report/ReportsOverviewFragment.java index 94e539b96..a905f668c 100644 --- a/app/src/main/java/org/gnucash/android/ui/report/ReportsOverviewFragment.java +++ b/app/src/main/java/org/gnucash/android/ui/report/ReportsOverviewFragment.java @@ -171,18 +171,18 @@ private PieData getData() { PieDataSet dataSet = new PieDataSet(null, ""); List labels = new ArrayList<>(); List colors = new ArrayList<>(); + LocalDateTime now = LocalDateTime.now(); + long start = now.minusMonths(2).dayOfMonth().withMinimumValue().toDateTime().getMillis(); + long end = now.toDateTime().getMillis(); + for (Account account : mAccountsDbAdapter.getSimpleAccountList()) { if (account.getAccountType() == AccountType.EXPENSE && !account.isPlaceholderAccount() && account.getCommodity().equals(mCommodity)) { - LocalDateTime now = LocalDateTime.now(); - long start = now.minusMonths(2).dayOfMonth().withMinimumValue().toDateTime().getMillis(); - long end = now.plusDays(1).toDateTime().getMillis(); - double balance = mAccountsDbAdapter.getAccountsBalance( - Collections.singletonList(account.getUID()), start, end).toDouble(); + float balance = mAccountsDbAdapter.getAccountBalance(account.getUID(), start, end).toFloat(); if (balance > 0) { - dataSet.addEntry(new Entry((float) balance, dataSet.getEntryCount())); + dataSet.addEntry(new Entry(balance, dataSet.getEntryCount())); colors.add(account.getColor() != Account.DEFAULT_COLOR ? account.getColor() : COLORS[(dataSet.getEntryCount() - 1) % COLORS.length]); diff --git a/app/src/main/java/org/gnucash/android/ui/report/barchart/StackedBarChartFragment.java b/app/src/main/java/org/gnucash/android/ui/report/barchart/StackedBarChartFragment.java index f04181b33..ccc9ae850 100644 --- a/app/src/main/java/org/gnucash/android/ui/report/barchart/StackedBarChartFragment.java +++ b/app/src/main/java/org/gnucash/android/ui/report/barchart/StackedBarChartFragment.java @@ -161,10 +161,9 @@ protected BarData getData(@NonNull Context context) { && !account.isPlaceholderAccount() && account.getCommodity().equals(mCommodity)) { - double balance = mAccountsDbAdapter.getAccountsBalance( - Collections.singletonList(account.getUID()), start, end).toDouble(); + float balance = mAccountsDbAdapter.getAccountBalance(account.getUID(), start, end).toFloat(); if (balance != 0) { - stack.add((float) balance); + stack.add(balance); String accountName = account.getName(); while (labels.contains(accountName)) { diff --git a/app/src/main/java/org/gnucash/android/ui/report/piechart/PieChartFragment.java b/app/src/main/java/org/gnucash/android/ui/report/piechart/PieChartFragment.java index 80f2d72ff..04924bfd4 100644 --- a/app/src/main/java/org/gnucash/android/ui/report/piechart/PieChartFragment.java +++ b/app/src/main/java/org/gnucash/android/ui/report/piechart/PieChartFragment.java @@ -146,11 +146,10 @@ private PieData getData() { && !account.isPlaceholderAccount() && account.getCommodity().equals(mCommodity)) { - double balance = mAccountsDbAdapter.getAccountsBalance(Collections.singletonList(account.getUID()), - mReportPeriodStart, mReportPeriodEnd).toDouble(); + float balance = mAccountsDbAdapter.getAccountBalance(account.getUID(), mReportPeriodStart, mReportPeriodEnd).toFloat(); if (balance > 0) { - dataSet.addEntry(new Entry((float) balance, dataSet.getEntryCount())); - int color; + dataSet.addEntry(new Entry(balance, dataSet.getEntryCount())); + @ColorInt int color; if (mUseAccountColor) { color = (account.getColor() != Account.DEFAULT_COLOR) ? account.getColor() diff --git a/app/src/main/kotlin/org/gnucash/android/model/Account.kt b/app/src/main/kotlin/org/gnucash/android/model/Account.kt index 7454f4fb4..1265743dc 100644 --- a/app/src/main/kotlin/org/gnucash/android/model/Account.kt +++ b/app/src/main/kotlin/org/gnucash/android/model/Account.kt @@ -281,6 +281,8 @@ class Account : BaseModel { _defaultTransferAccountUID = defaultTransferAccountUID } + override fun toString(): String = fullName ?: name + companion object { /** * The MIME type for accounts in GnucashMobile From 839067c83537dcf2f6ffc4dbfacaf4bfdb2f6aef Mon Sep 17 00:00:00 2001 From: Moshe W Date: Thu, 2 Jan 2025 17:26:30 +0200 Subject: [PATCH 3/4] Report layouts - use whole screen. --- .../android/ui/report/ReportsOverviewFragment.java | 8 -------- .../ui/report/barchart/StackedBarChartFragment.java | 10 +++------- .../report/linechart/CashFlowLineChartFragment.java | 4 ---- .../android/ui/report/piechart/PieChartFragment.java | 10 ++++------ app/src/main/res/layout/activity_reports.xml | 7 +++---- app/src/main/res/layout/fragment_bar_chart.xml | 10 +++------- app/src/main/res/layout/fragment_line_chart.xml | 12 ++++-------- app/src/main/res/layout/fragment_pie_chart.xml | 8 +++----- app/src/main/res/layout/fragment_report_summary.xml | 9 +++++---- 9 files changed, 25 insertions(+), 53 deletions(-) diff --git a/app/src/main/java/org/gnucash/android/ui/report/ReportsOverviewFragment.java b/app/src/main/java/org/gnucash/android/ui/report/ReportsOverviewFragment.java index a905f668c..fb28a3da2 100644 --- a/app/src/main/java/org/gnucash/android/ui/report/ReportsOverviewFragment.java +++ b/app/src/main/java/org/gnucash/android/ui/report/ReportsOverviewFragment.java @@ -15,7 +15,6 @@ */ package org.gnucash.android.ui.report; -import static com.github.mikephil.charting.components.Legend.LegendPosition; import static org.gnucash.android.ui.util.TextViewExtKt.displayBalance; import android.content.Context; @@ -36,7 +35,6 @@ import androidx.core.view.ViewCompat; import com.github.mikephil.charting.components.Legend; -import com.github.mikephil.charting.components.Legend.LegendForm; import com.github.mikephil.charting.data.Entry; import com.github.mikephil.charting.data.PieData; import com.github.mikephil.charting.data.PieDataSet; @@ -60,8 +58,6 @@ */ public class ReportsOverviewFragment extends BaseReportFragment { - public static final int LEGEND_TEXT_SIZE = 14; - private Money mAssetsBalance; private Money mLiabilitiesBalance; @@ -111,11 +107,7 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) { mBinding.pieChart.setCenterTextColor(textColorPrimary); mBinding.pieChart.setHoleColor(Color.TRANSPARENT); Legend legend = mBinding.pieChart.getLegend(); - legend.setEnabled(true); legend.setWordWrapEnabled(true); - legend.setForm(LegendForm.CIRCLE); - legend.setPosition(LegendPosition.RIGHT_OF_CHART_CENTER); - legend.setTextSize(LEGEND_TEXT_SIZE); legend.setTextColor(textColorPrimary); ColorStateList csl = new ColorStateList(new int[][]{StateSet.WILD_CARD}, new int[]{ContextCompat.getColor(context, R.color.account_green)}); diff --git a/app/src/main/java/org/gnucash/android/ui/report/barchart/StackedBarChartFragment.java b/app/src/main/java/org/gnucash/android/ui/report/barchart/StackedBarChartFragment.java index ccc9ae850..fdade8ab4 100644 --- a/app/src/main/java/org/gnucash/android/ui/report/barchart/StackedBarChartFragment.java +++ b/app/src/main/java/org/gnucash/android/ui/report/barchart/StackedBarChartFragment.java @@ -51,7 +51,6 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -98,7 +97,6 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) { mBinding.barChart.setOnChartValueSelectedListener(this); mBinding.barChart.setDescription(""); -// mChart.setDrawValuesForWholeStack(false); mBinding.barChart.getXAxis().setDrawGridLines(false); mBinding.barChart.getXAxis().setTextColor(textColorPrimary); mBinding.barChart.getAxisRight().setEnabled(false); @@ -106,11 +104,9 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) { mBinding.barChart.getAxisLeft().enableGridDashedLine(4.0f, 4.0f, 0); mBinding.barChart.getAxisLeft().setValueFormatter(new LargeValueFormatter(mCommodity.getSymbol())); mBinding.barChart.getAxisLeft().setTextColor(textColorPrimary); - Legend chartLegend = mBinding.barChart.getLegend(); - chartLegend.setForm(Legend.LegendForm.CIRCLE); - chartLegend.setPosition(Legend.LegendPosition.BELOW_CHART_CENTER); - chartLegend.setWordWrapEnabled(true); - chartLegend.setTextColor(textColorPrimary); + Legend legend = mBinding.barChart.getLegend(); + legend.setTextColor(textColorPrimary); + legend.setWordWrapEnabled(true); } diff --git a/app/src/main/java/org/gnucash/android/ui/report/linechart/CashFlowLineChartFragment.java b/app/src/main/java/org/gnucash/android/ui/report/linechart/CashFlowLineChartFragment.java index 1308660bd..cca0a8165 100644 --- a/app/src/main/java/org/gnucash/android/ui/report/linechart/CashFlowLineChartFragment.java +++ b/app/src/main/java/org/gnucash/android/ui/report/linechart/CashFlowLineChartFragment.java @@ -113,11 +113,7 @@ public void onActivityCreated(Bundle savedInstanceState) { mBinding.lineChart.getAxisLeft().enableGridDashedLine(4.0f, 4.0f, 0); mBinding.lineChart.getAxisLeft().setValueFormatter(new LargeValueFormatter(mCommodity.getSymbol())); mBinding.lineChart.getAxisLeft().setTextColor(textColorPrimary); - Legend legend = mBinding.lineChart.getLegend(); - legend.setPosition(Legend.LegendPosition.BELOW_CHART_CENTER); - legend.setTextSize(16); - legend.setForm(Legend.LegendForm.CIRCLE); legend.setTextColor(textColorPrimary); } diff --git a/app/src/main/java/org/gnucash/android/ui/report/piechart/PieChartFragment.java b/app/src/main/java/org/gnucash/android/ui/report/piechart/PieChartFragment.java index 04924bfd4..ed4ffc2cc 100644 --- a/app/src/main/java/org/gnucash/android/ui/report/piechart/PieChartFragment.java +++ b/app/src/main/java/org/gnucash/android/ui/report/piechart/PieChartFragment.java @@ -17,8 +17,6 @@ package org.gnucash.android.ui.report.piechart; -import static com.github.mikephil.charting.components.Legend.LegendForm; -import static com.github.mikephil.charting.components.Legend.LegendPosition; import static org.gnucash.android.util.ColorExtKt.getTextColorPrimary; import android.content.Context; @@ -34,6 +32,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.github.mikephil.charting.components.Legend; import com.github.mikephil.charting.data.Entry; import com.github.mikephil.charting.data.PieData; import com.github.mikephil.charting.data.PieDataSet; @@ -84,12 +83,11 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) { mBinding.pieChart.setCenterTextSize(CENTER_TEXT_SIZE); mBinding.pieChart.setDescription(""); mBinding.pieChart.setOnChartValueSelectedListener(this); - mBinding.pieChart.getLegend().setForm(LegendForm.CIRCLE); - mBinding.pieChart.getLegend().setWordWrapEnabled(true); - mBinding.pieChart.getLegend().setPosition(LegendPosition.RIGHT_OF_CHART_INSIDE); - mBinding.pieChart.getLegend().setTextColor(textColorPrimary); mBinding.pieChart.setHoleColor(Color.TRANSPARENT); mBinding.pieChart.setCenterTextColor(textColorPrimary); + Legend legend = mBinding.pieChart.getLegend(); + legend.setTextColor(textColorPrimary); + legend.setWordWrapEnabled(true); } @Override diff --git a/app/src/main/res/layout/activity_reports.xml b/app/src/main/res/layout/activity_reports.xml index 8d5fbd40c..a1713432a 100644 --- a/app/src/main/res/layout/activity_reports.xml +++ b/app/src/main/res/layout/activity_reports.xml @@ -42,16 +42,15 @@ + android:layout_marginTop="5dp" /> + android:padding="@dimen/dialog_padding"> + tools:text="Nothing selected" /> + android:minHeight="400dp" /> - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_pie_chart.xml b/app/src/main/res/layout/fragment_pie_chart.xml index b522b252a..34b4d0f17 100644 --- a/app/src/main/res/layout/fragment_pie_chart.xml +++ b/app/src/main/res/layout/fragment_pie_chart.xml @@ -27,14 +27,12 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" - android:padding="5dp" android:textSize="16sp" - tools:text="Selected chart slice" /> + tools:text="Nothing selected" /> @@ -42,8 +40,8 @@ android:id="@+id/pie_chart" android:layout_width="match_parent" android:layout_height="match_parent" - android:minHeight="400dp" - android:orientation="horizontal" /> + android:minHeight="400dp" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_report_summary.xml b/app/src/main/res/layout/fragment_report_summary.xml index aa9871935..9f6a46105 100644 --- a/app/src/main/res/layout/fragment_report_summary.xml +++ b/app/src/main/res/layout/fragment_report_summary.xml @@ -76,14 +76,14 @@ limitations under the License. + android:layout_height="0dp" + android:layout_weight="1" + android:minHeight="300dp"> @@ -91,6 +91,7 @@ limitations under the License. android:id="@+id/card_total" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginTop="@dimen/edge_padding" app:elevation="10dp"> Date: Sat, 4 Jan 2025 23:15:24 +0200 Subject: [PATCH 4/4] Avoid null activities in fragments. --- .../android/ui/report/BaseReportFragment.java | 45 ++++++++++--------- .../ui/report/ReportsOverviewFragment.java | 3 +- .../barchart/StackedBarChartFragment.java | 12 +++-- .../linechart/CashFlowLineChartFragment.java | 1 + .../ui/report/piechart/PieChartFragment.java | 7 +-- .../ui/report/sheet/BalanceSheetFragment.java | 1 + 6 files changed, 39 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/org/gnucash/android/ui/report/BaseReportFragment.java b/app/src/main/java/org/gnucash/android/ui/report/BaseReportFragment.java index 30182a111..b55c6156c 100644 --- a/app/src/main/java/org/gnucash/android/ui/report/BaseReportFragment.java +++ b/app/src/main/java/org/gnucash/android/ui/report/BaseReportFragment.java @@ -49,6 +49,7 @@ import org.gnucash.android.db.adapter.AccountsDbAdapter; import org.gnucash.android.model.AccountType; import org.gnucash.android.model.Commodity; +import org.gnucash.android.ui.common.BaseDrawerActivity; import org.gnucash.android.ui.common.Refreshable; import org.joda.time.LocalDateTime; import org.joda.time.Months; @@ -211,28 +212,19 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) { mAccountType = reportsActivity.getAccountType(); } - @Override - public void onStart() { - super.onStart(); - refresh(); - } - @Override public void onResume() { super.onResume(); - mReportsActivity.onFragmentResumed(this); - toggleBaseReportingOptionsVisibility(); - } - @Override - public void onAttach(Context context) { - super.onAttach(context); Activity activity = getActivity(); if (activity instanceof ReportsActivity) { mReportsActivity = (ReportsActivity) activity; } else { throw new RuntimeException("Report fragments can only be used with the ReportsActivity"); } + mReportsActivity.onFragmentResumed(this); + toggleBaseReportingOptionsVisibility(mReportsActivity); + refresh(); } @Override @@ -242,9 +234,9 @@ public void onDetach() { mReportGenerator.cancel(true); } - private void toggleBaseReportingOptionsVisibility() { - View timeRangeLayout = mReportsActivity.findViewById(R.id.time_range_layout); - View dateRangeDivider = mReportsActivity.findViewById(R.id.date_range_divider); + private void toggleBaseReportingOptionsVisibility(ReportsActivity activity) { + View timeRangeLayout = activity.findViewById(R.id.time_range_layout); + View dateRangeDivider = activity.findViewById(R.id.date_range_divider); if (timeRangeLayout != null && dateRangeDivider != null) { int visibility = requiresTimeRangeOptions() ? View.VISIBLE : View.GONE; timeRangeLayout.setVisibility(visibility); @@ -300,22 +292,31 @@ public void refresh() { @Override protected void onPreExecute() { - mReportsActivity.showProgressBar(true); + BaseDrawerActivity activity = mReportsActivity; + assert activity != null; + activity.showProgressBar(true); } @Override protected Void doInBackground(Void... params) { - generateReport(mReportsActivity); + BaseDrawerActivity activity = mReportsActivity; + if (activity != null) { + // FIXME return data to be displayed. + generateReport(activity); + } return null; } @Override - protected void onPostExecute(Void aVoid) { - displayReport(); - mReportsActivity.showProgressBar(false); + protected void onPostExecute(Void result) { + BaseDrawerActivity activity = mReportsActivity; + if (activity != null) { + // FIXME display the result data that was generated. + displayReport(); + activity.showProgressBar(false); + } } - }; - mReportGenerator.execute(); + }.execute(); } /** diff --git a/app/src/main/java/org/gnucash/android/ui/report/ReportsOverviewFragment.java b/app/src/main/java/org/gnucash/android/ui/report/ReportsOverviewFragment.java index fb28a3da2..22cbf8e92 100644 --- a/app/src/main/java/org/gnucash/android/ui/report/ReportsOverviewFragment.java +++ b/app/src/main/java/org/gnucash/android/ui/report/ReportsOverviewFragment.java @@ -122,12 +122,13 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) { @Override public void onPrepareOptionsMenu(@NonNull Menu menu) { + super.onPrepareOptionsMenu(menu); menu.findItem(R.id.menu_group_reports_by).setVisible(false); } @Override protected void generateReport(@NonNull Context context) { - PieData pieData = PieChartFragment.groupSmallerSlices(getData(), context); + PieData pieData = PieChartFragment.groupSmallerSlices(context, getData()); if (pieData.getYValCount() != 0) { mBinding.pieChart.setData(pieData); float sum = mBinding.pieChart.getData().getYValueSum(); diff --git a/app/src/main/java/org/gnucash/android/ui/report/barchart/StackedBarChartFragment.java b/app/src/main/java/org/gnucash/android/ui/report/barchart/StackedBarChartFragment.java index fdade8ab4..89fab7952 100644 --- a/app/src/main/java/org/gnucash/android/ui/report/barchart/StackedBarChartFragment.java +++ b/app/src/main/java/org/gnucash/android/ui/report/barchart/StackedBarChartFragment.java @@ -29,6 +29,7 @@ import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.StringRes; import com.github.mikephil.charting.components.Legend; import com.github.mikephil.charting.data.BarData; @@ -327,6 +328,7 @@ private void setCustomLegend() { @Override public void onPrepareOptionsMenu(@NonNull Menu menu) { + super.onPrepareOptionsMenu(menu); menu.findItem(R.id.menu_percentage_mode).setVisible(mChartDataPresent); // hide pie/line chart specific menu items menu.findItem(R.id.menu_order_by_size).setVisible(false); @@ -337,13 +339,15 @@ public void onPrepareOptionsMenu(@NonNull Menu menu) { @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { - if (item.isCheckable()) + if (item.isCheckable()) { item.setChecked(!item.isChecked()); + } + final Context context = mBinding.barChart.getContext(); switch (item.getItemId()) { case R.id.menu_toggle_legend: Legend legend = mBinding.barChart.getLegend(); if (!legend.isLegendCustom()) { - Toast.makeText(getActivity(), R.string.toast_legend_too_long, Toast.LENGTH_LONG).show(); + Toast.makeText(context, R.string.toast_legend_too_long, Toast.LENGTH_LONG).show(); item.setChecked(false); } else { item.setChecked(!mBinding.barChart.getLegend().isEnabled()); @@ -354,9 +358,9 @@ public boolean onOptionsItemSelected(@NonNull MenuItem item) { case R.id.menu_percentage_mode: mTotalPercentageMode = !mTotalPercentageMode; - int msgId = mTotalPercentageMode ? R.string.toast_chart_percentage_mode_total + @StringRes int msgId = mTotalPercentageMode ? R.string.toast_chart_percentage_mode_total : R.string.toast_chart_percentage_mode_current_bar; - Toast.makeText(getActivity(), msgId, Toast.LENGTH_LONG).show(); + Toast.makeText(context, msgId, Toast.LENGTH_LONG).show(); return true; default: diff --git a/app/src/main/java/org/gnucash/android/ui/report/linechart/CashFlowLineChartFragment.java b/app/src/main/java/org/gnucash/android/ui/report/linechart/CashFlowLineChartFragment.java index cca0a8165..8dae4d215 100644 --- a/app/src/main/java/org/gnucash/android/ui/report/linechart/CashFlowLineChartFragment.java +++ b/app/src/main/java/org/gnucash/android/ui/report/linechart/CashFlowLineChartFragment.java @@ -357,6 +357,7 @@ public void onGroupingUpdated(GroupInterval groupInterval) { @Override public void onPrepareOptionsMenu(@NonNull Menu menu) { + super.onPrepareOptionsMenu(menu); menu.findItem(R.id.menu_toggle_average_lines).setVisible(mChartDataPresent); // hide pie/bar chart specific menu items menu.findItem(R.id.menu_order_by_size).setVisible(false); diff --git a/app/src/main/java/org/gnucash/android/ui/report/piechart/PieChartFragment.java b/app/src/main/java/org/gnucash/android/ui/report/piechart/PieChartFragment.java index ed4ffc2cc..553775234 100644 --- a/app/src/main/java/org/gnucash/android/ui/report/piechart/PieChartFragment.java +++ b/app/src/main/java/org/gnucash/android/ui/report/piechart/PieChartFragment.java @@ -106,7 +106,7 @@ protected void generateReport(@NonNull Context context) { PieData pieData = getData(); if (pieData != null && pieData.getYValCount() != 0) { mChartDataPresent = true; - mBinding.pieChart.setData(mGroupSmallerSlices ? groupSmallerSlices(pieData, getActivity()) : pieData); + mBinding.pieChart.setData(mGroupSmallerSlices ? groupSmallerSlices(context, pieData) : pieData); float sum = mBinding.pieChart.getData().getYValueSum(); String total = context.getString(R.string.label_chart_total); String currencySymbol = mCommodity.getSymbol(); @@ -216,6 +216,7 @@ private void bubbleSort() { @Override public void onPrepareOptionsMenu(@NonNull Menu menu) { + super.onPrepareOptionsMenu(menu); menu.findItem(R.id.menu_order_by_size).setVisible(mChartDataPresent); menu.findItem(R.id.menu_toggle_labels).setVisible(mChartDataPresent); menu.findItem(R.id.menu_group_other_slice).setVisible(mChartDataPresent); @@ -260,12 +261,12 @@ public boolean onOptionsItemSelected(@NonNull MenuItem item) { /** * Groups smaller slices. All smaller slices will be combined and displayed as a single "Other". * - * @param data the pie data which smaller slices will be grouped * @param context Context for retrieving resources + * @param data the pie data which smaller slices will be grouped * @return a {@code PieData} instance with combined smaller slices */ @NonNull - public static PieData groupSmallerSlices(@NonNull PieData data, Context context) { + public static PieData groupSmallerSlices(@NonNull Context context, @NonNull PieData data) { float otherSlice = 0f; List newEntries = new ArrayList<>(); List newLabels = new ArrayList<>(); diff --git a/app/src/main/java/org/gnucash/android/ui/report/sheet/BalanceSheetFragment.java b/app/src/main/java/org/gnucash/android/ui/report/sheet/BalanceSheetFragment.java index 27d2804e1..6ce0df44e 100644 --- a/app/src/main/java/org/gnucash/android/ui/report/sheet/BalanceSheetFragment.java +++ b/app/src/main/java/org/gnucash/android/ui/report/sheet/BalanceSheetFragment.java @@ -130,6 +130,7 @@ public void onPrepareOptionsMenu(@NonNull Menu menu) { private void loadAccountViews(List accountTypes, TableLayout tableLayout) { LayoutInflater inflater = LayoutInflater.from(getActivity()); + // FIXME move this to generateReport Cursor cursor = mAccountsDbAdapter.fetchAccounts(DatabaseSchema.AccountEntry.COLUMN_TYPE + " IN ( '" + TextUtils.join("' , '", accountTypes) + "' ) AND " + DatabaseSchema.AccountEntry.COLUMN_PLACEHOLDER + " = 0",