/*
- * 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
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;
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;
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);
});
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(
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()
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<SimpleDate, Void, Integer> finder = new TransactionDateFinder();
+
+ finder.execute(new SimpleDate(year, month + 1, day));
}
}