X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2Ftransaction_list%2FTransactionListFragment.java;h=47794138cd1cb9ed526d3d7360aa7cf904ddc306;hp=6477fe84586f039894a930330793416d18b0e47d;hb=547bbc03e61978caa1efc6eea23306bd690d9429;hpb=42a6f56fda357e4f2838e68116d1d17186d7e846 diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/transaction_list/TransactionListFragment.java b/app/src/main/java/net/ktnx/mobileledger/ui/transaction_list/TransactionListFragment.java index 6477fe84..47794138 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/transaction_list/TransactionListFragment.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/transaction_list/TransactionListFragment.java @@ -1,5 +1,5 @@ /* - * Copyright © 2019 Damyan Ivanov. + * Copyright © 2020 Damyan Ivanov. * This file is part of MoLe. * MoLe is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by @@ -18,7 +18,8 @@ package net.ktnx.mobileledger.ui.transaction_list; import android.content.Context; -import android.database.MatrixCursor; +import android.database.Cursor; +import android.os.AsyncTask; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; @@ -28,29 +29,37 @@ import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; import android.widget.AutoCompleteTextView; -import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import com.google.android.material.snackbar.Snackbar; + import net.ktnx.mobileledger.R; +import net.ktnx.mobileledger.async.TransactionDateFinder; import net.ktnx.mobileledger.model.Data; +import net.ktnx.mobileledger.ui.DatePickerFragment; import net.ktnx.mobileledger.ui.MobileLedgerListFragment; import net.ktnx.mobileledger.ui.activity.MainActivity; import net.ktnx.mobileledger.utils.Colors; import net.ktnx.mobileledger.utils.Globals; +import net.ktnx.mobileledger.utils.Logger; import net.ktnx.mobileledger.utils.MLDB; +import net.ktnx.mobileledger.utils.SimpleDate; import org.jetbrains.annotations.NotNull; +import java.util.Locale; + import static android.content.Context.INPUT_METHOD_SERVICE; import static net.ktnx.mobileledger.utils.Logger.debug; // TODO: support transaction-level comment -public class TransactionListFragment extends MobileLedgerListFragment { +public class TransactionListFragment extends MobileLedgerListFragment + implements DatePickerFragment.DatePickedListener { private MenuItem menuTransactionListFilter; private View vAccountFilter; private AutoCompleteTextView accNameFilter; @@ -124,8 +133,8 @@ public class TransactionListFragment extends MobileLedgerListFragment { MLDB.hookAutocompletionAdapter(mActivity, accNameFilter, "accounts", "name"); accNameFilter.setOnItemClickListener((parent, view, position, id) -> { // debug("tmp", "direct onItemClick"); - MatrixCursor mc = (MatrixCursor) parent.getItemAtPosition(position); - Data.accountFilter.setValue(mc.getString(1)); + Cursor c = (Cursor) parent.getItemAtPosition(position); + Data.accountFilter.setValue(c.getString(1)); Globals.hideSoftKeyboard(mActivity); }); @@ -138,8 +147,8 @@ public class TransactionListFragment extends MobileLedgerListFragment { if (err == null) return; - Toast.makeText(mActivity, err, Toast.LENGTH_SHORT) - .show(); + Snackbar.make(this.root, err, Snackbar.LENGTH_LONG) + .show(); TransactionListViewModel.updateError.set(null); }); Data.transactions.addObserver( @@ -152,6 +161,15 @@ public class TransactionListFragment extends MobileLedgerListFragment { menuTransactionListFilter.setVisible(true); Globals.hideSoftKeyboard(mActivity); }); + + Data.foundTransactionItemIndex.observe(getViewLifecycleOwner(), pos -> { + Logger.debug("go-to-date", String.format(Locale.US, "Found pos %d", pos)); + if (pos != null) { + root.scrollToPosition(pos); + // reset the value to avoid re-notification upon reconfiguration or app restart + Data.foundTransactionItemIndex.setValue(null); + } + }); } private void onAccountNameFilterChanged(String accName) { final String fieldText = accNameFilter.getText() @@ -199,5 +217,22 @@ public class TransactionListFragment extends MobileLedgerListFragment { return true; }); + + menu.findItem(R.id.menu_go_to_date) + .setOnMenuItemClickListener(item -> { + DatePickerFragment picker = new DatePickerFragment(); + picker.setOnDatePickedListener(this); + picker.setDateRange(Data.earliestTransactionDate.getValue(), + Data.latestTransactionDate.getValue()); + picker.show(requireActivity().getSupportFragmentManager(), null); + return true; + }); + } + @Override + public void onDatePicked(int year, int month, int day) { + RecyclerView list = requireActivity().findViewById(R.id.transaction_root); + AsyncTask finder = new TransactionDateFinder(); + + finder.execute(new SimpleDate(year, month + 1, day)); } }