]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/transaction_list/TransactionListFragment.java
do not force transaction list reload upon main activity start
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / transaction_list / TransactionListFragment.java
index fdb54849f7de0b351a190b537ab80db7b313bb58..e15349803dc1bee40f94c6a3003d42830c8b56d9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2020 Damyan Ivanov.
+ * Copyright © 2021 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
@@ -17,7 +17,6 @@
 
 package net.ktnx.mobileledger.ui.transaction_list;
 
-import android.database.Cursor;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.view.LayoutInflater;
@@ -37,16 +36,17 @@ import androidx.recyclerview.widget.RecyclerView;
 
 import net.ktnx.mobileledger.R;
 import net.ktnx.mobileledger.async.TransactionDateFinder;
+import net.ktnx.mobileledger.db.AccountAutocompleteAdapter;
+import net.ktnx.mobileledger.db.Profile;
 import net.ktnx.mobileledger.model.Data;
-import net.ktnx.mobileledger.model.MobileLedgerProfile;
 import net.ktnx.mobileledger.ui.DatePickerFragment;
+import net.ktnx.mobileledger.ui.FabManager;
 import net.ktnx.mobileledger.ui.MainModel;
 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;
@@ -89,9 +89,9 @@ public class TransactionListFragment extends MobileLedgerListFragment
         debug("flow", "TransactionListFragment.onPause()");
     }
     @Override
-    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
+    public void onViewCreated(@NotNull View view, @Nullable Bundle savedInstanceState) {
         debug("flow", "TransactionListFragment.onActivityCreated called");
-        super.onActivityCreated(savedInstanceState);
+        super.onViewCreated(view, savedInstanceState);
 
         Data.backgroundTasksRunning.observe(getViewLifecycleOwner(),
                 this::onBackgroundTaskRunningChanged);
@@ -100,18 +100,19 @@ public class TransactionListFragment extends MobileLedgerListFragment
 
         model = new ViewModelProvider(requireActivity()).get(MainModel.class);
 
-        refreshLayout = mainActivity.findViewById(R.id.transaction_swipe);
+        refreshLayout = view.findViewById(R.id.transaction_swipe);
         if (refreshLayout == null)
             throw new RuntimeException("Can't get hold on the swipe layout");
-        root = mainActivity.findViewById(R.id.transaction_root);
+        root = view.findViewById(R.id.transaction_root);
         if (root == null)
             throw new RuntimeException("Can't get hold on the transaction value view");
-        modelAdapter = new TransactionListAdapter(model);
+        modelAdapter = new TransactionListAdapter();
         root.setAdapter(modelAdapter);
 
         mainActivity.fabShouldShow();
 
-        manageFabOnScroll();
+        if (mainActivity instanceof FabManager.FabHandler)
+            FabManager.handle(mainActivity, root);
 
         LinearLayoutManager llm = new LinearLayoutManager(mainActivity);
 
@@ -125,15 +126,16 @@ public class TransactionListFragment extends MobileLedgerListFragment
 
         Colors.themeWatch.observe(getViewLifecycleOwner(), this::themeChanged);
 
-        vAccountFilter = mainActivity.findViewById(R.id.transaction_list_account_name_filter);
-        accNameFilter = mainActivity.findViewById(R.id.transaction_filter_account_name);
+        vAccountFilter = view.findViewById(R.id.transaction_list_account_name_filter);
+        accNameFilter = view.findViewById(R.id.transaction_filter_account_name);
 
-        MLDB.hookAutocompletionAdapter(mainActivity, accNameFilter, "accounts", "name");
-        accNameFilter.setOnItemClickListener((parent, view, position, id) -> {
+        Data.observeProfile(getViewLifecycleOwner(), this::onProfileChanged);
+
+        accNameFilter.setOnItemClickListener((parent, v, position, id) -> {
 //                debug("tmp", "direct onItemClick");
-            Cursor c = (Cursor) parent.getItemAtPosition(position);
             model.getAccountFilter()
-                 .setValue(c.getString(1));
+                 .setValue(parent.getItemAtPosition(position)
+                                 .toString());
             Globals.hideSoftKeyboard(mainActivity);
         });
 
@@ -142,18 +144,15 @@ public class TransactionListFragment extends MobileLedgerListFragment
 
         model.getUpdatingFlag()
              .observe(getViewLifecycleOwner(), (flag) -> refreshLayout.setRefreshing(flag));
-        MobileLedgerProfile profile = Data.getProfile();
         model.getDisplayedTransactions()
              .observe(getViewLifecycleOwner(), list -> modelAdapter.setTransactions(list));
 
-        mainActivity.findViewById(R.id.clearAccountNameFilter)
-                    .setOnClickListener(v -> {
-                        model.getAccountFilter()
-                             .setValue(null);
-                        vAccountFilter.setVisibility(View.GONE);
-                        menuTransactionListFilter.setVisible(true);
-                        Globals.hideSoftKeyboard(mainActivity);
-                    });
+        view.findViewById(R.id.clearAccountNameFilter)
+            .setOnClickListener(v -> {
+                model.getAccountFilter()
+                     .setValue(null);
+                Globals.hideSoftKeyboard(mainActivity);
+            });
 
         model.foundTransactionItemIndex.observe(getViewLifecycleOwner(), pos -> {
             Logger.debug("go-to-date", String.format(Locale.US, "Found pos %d", pos));
@@ -164,24 +163,21 @@ public class TransactionListFragment extends MobileLedgerListFragment
             }
         });
     }
-    private void onAccountNameFilterChanged(String accName) {
-        final String fieldText = accNameFilter.getText()
-                                              .toString();
-        if ((accName == null) && (fieldText.equals("")))
+    private void onProfileChanged(Profile profile) {
+        if (profile == null)
             return;
 
-        if (accNameFilter != null) {
-            accNameFilter.setText(accName, false);
-        }
+        accNameFilter.setAdapter(new AccountAutocompleteAdapter(getContext(), profile));
+    }
+    private void onAccountNameFilterChanged(String accName) {
+        accNameFilter.setText(accName, false);
+
         final boolean filterActive = (accName != null) && !accName.isEmpty();
         if (vAccountFilter != null) {
             vAccountFilter.setVisibility(filterActive ? View.VISIBLE : View.GONE);
         }
         if (menuTransactionListFilter != null)
             menuTransactionListFilter.setVisible(!filterActive);
-
-        model.scheduleTransactionListReload();
-
     }
     @Override
     public void onCreateOptionsMenu(@NotNull Menu menu, @NotNull MenuInflater inflater) {
@@ -191,18 +187,14 @@ public class TransactionListFragment extends MobileLedgerListFragment
         if ((menuTransactionListFilter == null))
             throw new AssertionError();
 
-        if ((model.getAccountFilter()
-                  .getValue() != null) || (vAccountFilter.getVisibility() == View.VISIBLE))
-        {
-            menuTransactionListFilter.setVisible(false);
-        }
+        model.getAccountFilter()
+             .observe(this, v -> menuTransactionListFilter.setVisible(v == null));
 
         super.onCreateOptionsMenu(menu, inflater);
 
         menuTransactionListFilter.setOnMenuItemClickListener(item -> {
             vAccountFilter.setVisibility(View.VISIBLE);
-            if (menuTransactionListFilter != null)
-                menuTransactionListFilter.setVisible(false);
+            menuTransactionListFilter.setVisible(false);
             accNameFilter.requestFocus();
             InputMethodManager imm =
                     (InputMethodManager) getMainActivity().getSystemService(INPUT_METHOD_SERVICE);