]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/templates/TemplatesActivity.java
separate FAB management in a helper class
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / templates / TemplatesActivity.java
index 0f1d20f451debb3a6d6102dfb19224ecae8638f8..7bc722203fa405eec10572791e111102123106d7 100644 (file)
  * along with MoLe. If not, see <https://www.gnu.org/licenses/>.
  */
 
-package net.ktnx.mobileledger.ui.patterns;
+package net.ktnx.mobileledger.ui.templates;
 
+import android.content.Context;
 import android.os.Bundle;
-import android.view.Menu;
 import android.view.MenuItem;
 
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.annotation.NonNull;
 import androidx.appcompat.app.ActionBar;
 import androidx.lifecycle.ViewModelProvider;
 import androidx.lifecycle.ViewModelStoreOwner;
 import androidx.navigation.NavController;
+import androidx.navigation.NavDestination;
 import androidx.navigation.fragment.NavHostFragment;
 
+import com.google.android.material.snackbar.BaseTransientBottomBar;
+import com.google.android.material.snackbar.Snackbar;
+
 import net.ktnx.mobileledger.R;
-import net.ktnx.mobileledger.databinding.ActivityPatternsBinding;
+import net.ktnx.mobileledger.dao.TemplateHeaderDAO;
+import net.ktnx.mobileledger.databinding.ActivityTemplatesBinding;
+import net.ktnx.mobileledger.db.DB;
+import net.ktnx.mobileledger.db.TemplateWithAccounts;
+import net.ktnx.mobileledger.ui.FabManager;
+import net.ktnx.mobileledger.ui.QR;
 import net.ktnx.mobileledger.ui.activity.CrashReportingActivity;
 import net.ktnx.mobileledger.utils.Logger;
 
 import java.util.Objects;
 
-public class PatternsActivity extends CrashReportingActivity
-        implements PatternListFragment.OnPatternListFragmentInteractionListener {
-    public static final String ARG_ADD_PATTERN = "add-pattern";
-    private ActivityPatternsBinding b;
+public class TemplatesActivity extends CrashReportingActivity
+        implements TemplateListFragment.OnTemplateListFragmentInteractionListener,
+        TemplateDetailsFragment.InteractionListener, QR.QRScanResultReceiver, QR.QRScanTrigger,
+        FabManager.FabHandler {
+    public static final String ARG_ADD_TEMPLATE = "add-template";
+    private ActivityTemplatesBinding b;
     private NavController navController;
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        super.onCreateOptionsMenu(menu);
-        getMenuInflater().inflate(R.menu.pattern_list_menu, menu);
-
-        return true;
-    }
+    private ActivityResultLauncher<Void> qrScanLauncher;
+    private FabManager fabManager;
+    //    @Override
+//    public boolean onCreateOptionsMenu(Menu menu) {
+//        super.onCreateOptionsMenu(menu);
+//        getMenuInflater().inflate(R.menu.template_list_menu, menu);
+//
+//        return true;
+//    }
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        b = ActivityPatternsBinding.inflate(getLayoutInflater());
+        b = ActivityTemplatesBinding.inflate(getLayoutInflater());
         setContentView(b.getRoot());
         setSupportActionBar(b.toolbar);
         // Show the Up button in the action bar.
@@ -63,28 +78,35 @@ public class PatternsActivity extends CrashReportingActivity
         navController = navHostFragment.getNavController();
 
         navController.addOnDestinationChangedListener((controller, destination, arguments) -> {
-            if (destination.getId() == R.id.patternListFragment) {
-                b.fabAdd.show();
-                b.fabSave.hide();
-                b.toolbarLayout.setTitle(getString(R.string.title_activity_patterns));
+            if (destination.getId() == R.id.templateListFragment) {
+                b.toolbarLayout.setTitle(getString(R.string.title_activity_templates));
+                b.fab.setImageResource(R.drawable.ic_add_white_24dp);
             }
-            if (destination.getId() == R.id.patternDetailsFragment) {
-                b.fabAdd.hide();
-                b.fabSave.show();
+            else {
+                b.fab.setImageResource(R.drawable.ic_save_white_24dp);
             }
         });
 
-        b.toolbarLayout.setTitle(getString(R.string.title_activity_patterns));
+        b.toolbarLayout.setTitle(getString(R.string.title_activity_templates));
+
+        b.fab.setOnClickListener(v -> {
+            if (navController.getCurrentDestination()
+                             .getId() == R.id.templateListFragment)
+                onEditTemplate(null);
+            else
+                onSaveTemplate();
+        });
 
-        b.fabAdd.setOnClickListener(v -> onEditPattern(null));
-        b.fabSave.setOnClickListener(v -> onSavePattern());
+        qrScanLauncher = QR.registerLauncher(this, this);
+
+        fabManager = new FabManager(b.fab);
     }
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         if (item.getItemId() == android.R.id.home) {
             final NavDestination currentDestination = navController.getCurrentDestination();
             if (currentDestination != null &&
-                currentDestination.getId() == R.id.patternDetailsFragment)
+                currentDestination.getId() == R.id.templateDetailsFragment)
                 navController.popBackStack();
             else
                 finish();
@@ -93,32 +115,80 @@ public class PatternsActivity extends CrashReportingActivity
         }
         return super.onOptionsItemSelected(item);
     }
-
     @Override
-    public void onEditPattern(Long id) {
+    public void onDuplicateTemplate(long id) {
+        DB.get()
+          .getTemplateDAO()
+          .duplicateTemplateWitAccounts(id, null);
+    }
+    @Override
+    public void onEditTemplate(Long id) {
         if (id == null) {
-            navController.navigate(R.id.action_patternListFragment_to_patternDetailsFragment);
-            b.toolbarLayout.setTitle(getString(R.string.title_new_pattern));
+            navController.navigate(R.id.action_templateListFragment_to_templateDetailsFragment);
+            b.toolbarLayout.setTitle(getString(R.string.title_new_template));
         }
         else {
             Bundle bundle = new Bundle();
-            bundle.putLong(PatternDetailsFragment.ARG_PATTERN_ID, id);
-            navController.navigate(R.id.action_patternListFragment_to_patternDetailsFragment,
+            bundle.putLong(TemplateDetailsFragment.ARG_TEMPLATE_ID, id);
+            navController.navigate(R.id.action_templateListFragment_to_templateDetailsFragment,
                     bundle);
-            b.toolbarLayout.setTitle(getString(R.string.title_edit_pattern));
+            b.toolbarLayout.setTitle(getString(R.string.title_edit_template));
         }
     }
     @Override
-    public void onSavePattern() {
+    public void onSaveTemplate() {
         final ViewModelStoreOwner viewModelStoreOwner =
-                navController.getViewModelStoreOwner(R.id.pattern_list_navigation);
-        PatternDetailsViewModel model =
-                new ViewModelProvider(viewModelStoreOwner).get(PatternDetailsViewModel.class);
-        Logger.debug("flow", "PatternsActivity.onSavePattern(): model=" + model);
-        model.onSavePattern();
+                navController.getViewModelStoreOwner(R.id.template_list_navigation);
+        TemplateDetailsViewModel model =
+                new ViewModelProvider(viewModelStoreOwner).get(TemplateDetailsViewModel.class);
+        Logger.debug("flow", "TemplatesActivity.onSavePattern(): model=" + model);
+        model.onSaveTemplate();
         navController.navigateUp();
     }
     public NavController getNavController() {
         return navController;
     }
+    @Override
+    public void onDeleteTemplate(@NonNull Long templateId) {
+        Objects.requireNonNull(templateId);
+        TemplateHeaderDAO dao = DB.get()
+                                  .getTemplateDAO();
+
+        dao.getTemplateWithAccountsAsync(templateId, template -> {
+            TemplateWithAccounts copy = TemplateWithAccounts.from(template);
+            dao.deleteAsync(template.header, () -> {
+                navController.popBackStack(R.id.templateListFragment, false);
+
+                Snackbar.make(b.getRoot(), String.format(
+                        TemplatesActivity.this.getString(R.string.template_xxx_deleted),
+                        template.header.getName()), BaseTransientBottomBar.LENGTH_LONG)
+                        .setAction(R.string.action_undo, v -> dao.insertAsync(copy, null))
+                        .show();
+            });
+        });
+    }
+    @Override
+    public void onQRScanResult(String scanned) {
+        Logger.debug("PatDet_fr", String.format("Got scanned text '%s'", scanned));
+        TemplateDetailsViewModel model = new ViewModelProvider(
+                navController.getViewModelStoreOwner(R.id.template_list_navigation)).get(
+                TemplateDetailsViewModel.class);
+        model.setTestText(scanned);
+    }
+    @Override
+    public void triggerQRScan() {
+        qrScanLauncher.launch(null);
+    }
+    @Override
+    public Context getContext() {
+        return this;
+    }
+    @Override
+    public void showManagedFab() {
+        fabManager.showFab();
+    }
+    @Override
+    public void hideManagedFab() {
+        fabManager.hideFab();
+    }
 }
\ No newline at end of file