]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/templates/TemplateDetailsFragment.java
separate FAB management in a helper class
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / templates / TemplateDetailsFragment.java
index 94e6989e6227bbdc3494fbfcea5ec4ab31b31df9..ac72d890e54811c8e81de420dffafec4ff986804 100644 (file)
@@ -20,31 +20,35 @@ package net.ktnx.mobileledger.ui.templates;
 import android.content.Context;
 import android.os.Bundle;
 import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
 import androidx.lifecycle.ViewModelProvider;
 import androidx.lifecycle.ViewModelStoreOwner;
 import androidx.navigation.NavController;
 import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.LinearLayoutManager;
 
-import com.google.android.material.snackbar.Snackbar;
-
 import net.ktnx.mobileledger.R;
 import net.ktnx.mobileledger.databinding.TemplateDetailsFragmentBinding;
-import net.ktnx.mobileledger.ui.QRScanCapableFragment;
+import net.ktnx.mobileledger.ui.FabManager;
 import net.ktnx.mobileledger.utils.Logger;
 
-public class TemplateDetailsFragment extends QRScanCapableFragment {
+public class TemplateDetailsFragment extends Fragment {
     static final String ARG_TEMPLATE_ID = "pattern-id";
     private static final String ARG_COLUMN_COUNT = "column-count";
-    TemplateDetailsFragmentBinding b;
+    private TemplateDetailsFragmentBinding b;
     private TemplateDetailsViewModel mViewModel;
     private int mColumnCount = 1;
     private Long mPatternId;
+    private InteractionListener interactionListener;
     public TemplateDetailsFragment() {
     }
     public static TemplateDetailsFragment newInstance(int columnCount, int patternId) {
@@ -57,6 +61,24 @@ public class TemplateDetailsFragment extends QRScanCapableFragment {
         return fragment;
     }
     @Override
+    public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
+        super.onCreateOptionsMenu(menu, inflater);
+        inflater.inflate(R.menu.template_details_menu, menu);
+    }
+    @Override
+    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
+        if (item.getItemId() == R.id.delete_template) {
+            signalDeleteTemplateInteraction();
+            return true;
+        }
+
+        return super.onOptionsItemSelected(item);
+    }
+    private void signalDeleteTemplateInteraction() {
+        if (interactionListener != null)
+            interactionListener.onDeleteTemplate(mPatternId);
+    }
+    @Override
     public void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
@@ -67,15 +89,23 @@ public class TemplateDetailsFragment extends QRScanCapableFragment {
             if (mPatternId == -1)
                 mPatternId = null;
         }
+
+        setHasOptionsMenu(mPatternId != null);
     }
     @Override
     public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                              @Nullable Bundle savedInstanceState) {
+        if (!(getActivity() instanceof InteractionListener))
+            throw new IllegalStateException(
+                    "Containing activity must implement TemplateDetailsFragment" +
+                    ".InteractionListener");
+        interactionListener = (InteractionListener) getActivity();
+
         NavController controller = ((TemplatesActivity) requireActivity()).getNavController();
         final ViewModelStoreOwner viewModelStoreOwner =
                 controller.getViewModelStoreOwner(R.id.template_list_navigation);
         mViewModel = new ViewModelProvider(viewModelStoreOwner).get(TemplateDetailsViewModel.class);
-        mViewModel.setDefaultPatternName(getString(R.string.unnamed_pattern));
+        mViewModel.setDefaultPatternName(getString(R.string.unnamed_template));
         Logger.debug("flow", "PatternDetailsFragment.onCreateView(): model=" + mViewModel);
 
         b = TemplateDetailsFragmentBinding.inflate(inflater);
@@ -89,25 +119,18 @@ public class TemplateDetailsFragment extends QRScanCapableFragment {
         }
 
 
-        TemplateDetailsAdapter adapter = new TemplateDetailsAdapter();
+        TemplateDetailsAdapter adapter = new TemplateDetailsAdapter(mViewModel);
         b.patternDetailsRecyclerView.setAdapter(adapter);
         mViewModel.getItems(mPatternId)
                   .observe(getViewLifecycleOwner(), adapter::setItems);
 
+        FragmentActivity activity = requireActivity();
+        if (activity instanceof FabManager.FabHandler)
+            FabManager.handle((FabManager.FabHandler) activity, b.patternDetailsRecyclerView);
+
         return b.getRoot();
     }
-    @Override
-    protected void onQrScanned(String text) {
-        Logger.debug("PatDet_fr", String.format("Got scanned text '%s'", text));
-        if (text != null)
-            mViewModel.setTestText(text);
-    }
-    public void onSavePattern() {
-        mViewModel.onSaveTemplate();
-        final Snackbar snackbar = Snackbar.make(b.getRoot(),
-                "One Save pattern action coming up soon in a fragment near you",
-                Snackbar.LENGTH_INDEFINITE);
-//        snackbar.setAction("Action", v -> snackbar.dismiss());
-        snackbar.show();
+    interface InteractionListener {
+        void onDeleteTemplate(@NonNull Long templateId);
     }
 }
\ No newline at end of file