]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/activity/MainActivity.java
separate FAB management in a helper class
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / activity / MainActivity.java
index 2fc09379873faa8d030c094c709a9451270f568e..c4d5c24a9f38016ac413373fa8e3eb5c74827874 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,6 +17,7 @@
 
 package net.ktnx.mobileledger.ui.activity;
 
+import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageInfo;
 import android.content.pm.ShortcutInfo;
@@ -52,9 +53,12 @@ import net.ktnx.mobileledger.async.RetrieveTransactionsTask;
 import net.ktnx.mobileledger.databinding.ActivityMainBinding;
 import net.ktnx.mobileledger.model.Data;
 import net.ktnx.mobileledger.model.MobileLedgerProfile;
+import net.ktnx.mobileledger.ui.FabManager;
 import net.ktnx.mobileledger.ui.MainModel;
 import net.ktnx.mobileledger.ui.account_summary.AccountSummaryFragment;
+import net.ktnx.mobileledger.ui.new_transaction.NewTransactionActivity;
 import net.ktnx.mobileledger.ui.profiles.ProfilesRecyclerViewAdapter;
+import net.ktnx.mobileledger.ui.templates.TemplatesActivity;
 import net.ktnx.mobileledger.ui.transaction_list.TransactionListFragment;
 import net.ktnx.mobileledger.utils.Colors;
 import net.ktnx.mobileledger.utils.Logger;
@@ -72,10 +76,12 @@ import java.util.Objects;
  * TODO: reports
  *  */
 
-public class MainActivity extends ProfileThemedActivity {
+public class MainActivity extends ProfileThemedActivity implements FabManager.FabHandler {
     public static final String STATE_CURRENT_PAGE = "current_page";
     public static final String BUNDLE_SAVED_STATE = "bundle_savedState";
     public static final String STATE_ACC_FILTER = "account_filter";
+    private static final boolean FAB_HIDDEN = false;
+    private static final boolean FAB_SHOWN = true;
     private SectionsPagerAdapter mSectionsPagerAdapter;
     private ProfilesRecyclerViewAdapter mProfileListAdapter;
     private int mCurrentPage;
@@ -86,6 +92,8 @@ public class MainActivity extends ProfileThemedActivity {
     private MobileLedgerProfile profile;
     private MainModel mainModel;
     private ActivityMainBinding b;
+    private int fabVerticalOffset;
+    private FabManager fabManager;
     @Override
     protected void onStart() {
         super.onStart();
@@ -245,6 +253,8 @@ public class MainActivity extends ProfileThemedActivity {
             mProfileListAdapter.notifyDataSetChanged();
         });
 
+        fabManager = new FabManager(b.btnAddTransaction);
+
         LinearLayoutManager llm = new LinearLayoutManager(this);
 
         llm.setOrientation(RecyclerView.VERTICAL);
@@ -260,7 +270,7 @@ public class MainActivity extends ProfileThemedActivity {
                 @Override
                 public void onDrawerSlide(@NonNull View drawerView, float slideOffset) {
                     if (slideOffset > 0.2)
-                        fabHide();
+                        fabManager.hideFab();
                 }
                 @Override
                 public void onDrawerClosed(View drawerView) {
@@ -275,7 +285,7 @@ public class MainActivity extends ProfileThemedActivity {
                     super.onDrawerOpened(drawerView);
                     mProfileListAdapter.setAnimationsEnabled(true);
                     Data.drawerOpen.setValue(true);
-                    fabHide();
+                    fabManager.hideFab();
                 }
             };
             b.drawerLayout.addDrawerListener(drawerListener);
@@ -293,7 +303,7 @@ public class MainActivity extends ProfileThemedActivity {
                      if (error == null)
                          return;
 
-                     Snackbar.make(b.mainPager, error, Snackbar.LENGTH_LONG)
+                     Snackbar.make(b.mainPager, error, Snackbar.LENGTH_INDEFINITE)
                              .show();
                      mainModel.clearUpdateError();
                  });
@@ -301,6 +311,13 @@ public class MainActivity extends ProfileThemedActivity {
         Data.lastUpdateDate.observe(this, date -> refreshLastUpdateInfo());
         Data.lastUpdateTransactionCount.observe(this, date -> refreshLastUpdateInfo());
         Data.lastUpdateAccountCount.observe(this, date -> refreshLastUpdateInfo());
+        b.navAccountSummary.setOnClickListener(this::onAccountSummaryClicked);
+        b.navLatestTransactions.setOnClickListener(this::onLatestTransactionsClicked);
+        b.navPatterns.setOnClickListener(this::onPatternsClick);
+    }
+    private void onPatternsClick(View view) {
+        Intent intent = new Intent(this, TemplatesActivity.class);
+        startActivity(intent);
     }
     private void scheduleDataRetrievalIfStale(long lastUpdate) {
         long now = new Date().getTime();
@@ -622,14 +639,20 @@ public class MainActivity extends ProfileThemedActivity {
     }
     public void fabShouldShow() {
         if ((profile != null) && profile.isPostingPermitted() && !b.drawerLayout.isOpen())
-            b.btnAddTransaction.show();
-        else
-            fabHide();
+            fabManager.showFab();
     }
-    public void fabHide() {
-        b.btnAddTransaction.hide();
+    @Override
+    public Context getContext() {
+        return this;
+    }
+    @Override
+    public void showManagedFab() {
+        fabShouldShow();
+    }
+    @Override
+    public void hideManagedFab() {
+        fabManager.hideFab();
     }
-
     public static class SectionsPagerAdapter extends FragmentStateAdapter {
 
         public SectionsPagerAdapter(@NonNull FragmentActivity fragmentActivity) {