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=f8738a59d10810c0d15c463e792ce93a9338add3;hp=72e07b27ba9229ea08599834f72dad2357b970e1;hb=05efd84b433be55e8992fe87e31912d9d57c2362;hpb=0bbdc409d82da31324c031f36607510f17d992e6 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 72e07b27..f8738a59 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 © 2018 Damyan Ivanov. + * Copyright © 2019 Damyan Ivanov. * This file is part of Mobile-Ledger. * Mobile-Ledger is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by @@ -25,6 +25,7 @@ import android.os.Bundle; import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.design.widget.FloatingActionButton; import android.support.v4.app.Fragment; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; @@ -41,23 +42,21 @@ import android.widget.AdapterView; import android.widget.AutoCompleteTextView; import android.widget.LinearLayout; import android.widget.ProgressBar; -import android.widget.TextView; -import net.ktnx.mobileledger.ui.activity.MainActivity; import net.ktnx.mobileledger.R; import net.ktnx.mobileledger.async.RetrieveTransactionsTask; +import net.ktnx.mobileledger.ui.activity.MainActivity; import net.ktnx.mobileledger.utils.Globals; import net.ktnx.mobileledger.utils.MLDB; import java.lang.ref.WeakReference; -import java.time.ZoneId; -import java.time.format.DateTimeFormatter; -import java.util.Date; import static android.content.Context.INPUT_METHOD_SERVICE; public class TransactionListFragment extends Fragment { + public static final String BUNDLE_KEY_FILTER_ACCOUNT_NAME = "filter_account_name"; public TransactionListViewModel model; + private String mShowOnlyAccountName; private MainActivity mActivity; private View bTransactionListCancelDownload; private MenuItem menuTransactionListFilter; @@ -66,10 +65,28 @@ public class TransactionListFragment extends Fragment { private RecyclerView root; private ProgressBar progressBar; private LinearLayout progressLayout; - private TextView tvLastUpdate; private TransactionListAdapter modelAdapter; private RetrieveTransactionsTask retrieveTransactionsTask; private AutoCompleteTextView accNameFilter; + public void setShowOnlyAccountName(String mShowOnlyAccountName) { + this.mShowOnlyAccountName = mShowOnlyAccountName; + if (modelAdapter != null) { + modelAdapter.setBoldAccountName(mShowOnlyAccountName); + } + if (accNameFilter != null) { + accNameFilter.setText(mShowOnlyAccountName, false); + } + if (vAccountFilter != null) { + vAccountFilter.setVisibility( + ((mShowOnlyAccountName != null) && !mShowOnlyAccountName.isEmpty()) + ? View.VISIBLE : View.GONE); + } + } + @Override + public void setArguments(@Nullable Bundle args) { + super.setArguments(args); + mShowOnlyAccountName = args.getString(BUNDLE_KEY_FILTER_ACCOUNT_NAME); + } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -92,6 +109,8 @@ public class TransactionListFragment extends Fragment { Log.d("flow", "TransactionListFragment.onActivityCreated called"); super.onActivityCreated(savedInstanceState); + mActivity.markDrawerItemCurrent(R.id.nav_latest_transactions); + swiper = mActivity.findViewById(R.id.transaction_swipe); if (swiper == null) throw new RuntimeException("Can't get hold on the swipe layout"); root = mActivity.findViewById(R.id.transaction_root); @@ -102,14 +121,27 @@ public class TransactionListFragment extends Fragment { progressLayout = mActivity.findViewById(R.id.transaction_progress_layout); if (progressLayout == null) throw new RuntimeException( "Can't get hold on the transaction list progress bar layout"); - tvLastUpdate = mActivity.findViewById(R.id.transactions_last_update); - updateLastUpdateText(); model = ViewModelProviders.of(this).get(TransactionListViewModel.class); modelAdapter = new TransactionListAdapter(model); + modelAdapter.setBoldAccountName(mShowOnlyAccountName); + + FloatingActionButton fab = mActivity.findViewById(R.id.btn_add_transaction); + RecyclerView root = mActivity.findViewById(R.id.transaction_root); root.setAdapter(modelAdapter); + fab.show(); + root.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { + if (fab != null) { + if (dy < 0) fab.show(); + if (dy > 0) fab.hide(); + } + } + }); + LinearLayoutManager llm = new LinearLayoutManager(mActivity); llm.setOrientation(LinearLayoutManager.VERTICAL); @@ -141,15 +173,13 @@ public class TransactionListFragment extends Fragment { } }); - updateLastUpdateText(); - long last_update = MLDB.get_option_value(mActivity, MLDB.OPT_TRANSACTION_LIST_STAMP, 0L); - Log.d("transactions", String.format("Last update = %d", last_update)); - if (last_update == 0) { - update_transactions(); - } - else { - model.reloadTransactions(this); + if (mShowOnlyAccountName != null) { + accNameFilter.setText(mShowOnlyAccountName, false); + onShowFilterClick(null); + Log.d("flow", String.format("Account filter set to '%s'", mShowOnlyAccountName)); } + + model.reloadTransactions(this); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { @@ -158,6 +188,10 @@ public class TransactionListFragment extends Fragment { menuTransactionListFilter = menu.findItem(R.id.menu_transaction_list_filter); if ((menuTransactionListFilter == null)) throw new AssertionError(); + if (mShowOnlyAccountName != null) { + menuTransactionListFilter.setVisible(false); + } + super.onCreateOptionsMenu(menu, inflater); } private void update_transactions() { @@ -197,36 +231,17 @@ public class TransactionListFragment extends Fragment { public void onRetrieveDone(boolean success) { progressLayout.setVisibility(View.GONE); swiper.setRefreshing(false); - updateLastUpdateText(); + mActivity.updateLastUpdateText(); if (success) { Log.d("transactions", "calling notifyDataSetChanged()"); modelAdapter.notifyDataSetChanged(); } } - private void updateLastUpdateText() { - { - long last_update = - MLDB.get_option_value(mActivity, MLDB.OPT_TRANSACTION_LIST_STAMP, 0L); - Log.d("transactions", String.format("Last update = %d", last_update)); - if (last_update == 0) { - tvLastUpdate.setText(getString(R.string.transaction_last_update_never)); - } - else { - Date date = new Date(last_update); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - tvLastUpdate.setText(date.toInstant().atZone(ZoneId.systemDefault()) - .format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); - } - else { - tvLastUpdate.setText(date.toLocaleString()); - } - } - } - } public void onClearAccountNameClick(View view) { vAccountFilter.setVisibility(View.GONE); - menuTransactionListFilter.setVisible(true); + if (menuTransactionListFilter != null) menuTransactionListFilter.setVisible(true); accNameFilter.setText(null); + mShowOnlyAccountName = null; model.reloadTransactions(this); modelAdapter.resetBoldAccountName(); modelAdapter.notifyDataSetChanged(); @@ -234,11 +249,13 @@ public class TransactionListFragment extends Fragment { } public void onShowFilterClick(MenuItem menuItem) { vAccountFilter.setVisibility(View.VISIBLE); - menuTransactionListFilter.setVisible(false); - accNameFilter.requestFocus(); - InputMethodManager imm = - (InputMethodManager) mActivity.getSystemService(INPUT_METHOD_SERVICE); - imm.showSoftInput(accNameFilter, 0); + if (menuTransactionListFilter != null) menuTransactionListFilter.setVisible(false); + if (menuItem != null) { + accNameFilter.requestFocus(); + InputMethodManager imm = + (InputMethodManager) mActivity.getSystemService(INPUT_METHOD_SERVICE); + imm.showSoftInput(accNameFilter, 0); + } } public void onStopTransactionRefreshClick(View view) { Log.d("interactive", "Cancelling transactions refresh");