]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/patterns/PatternsActivity.java
rework pattern management machinery
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / patterns / PatternsActivity.java
index 8e57a2e751730f506f3aebf41c07a17670832760..c9a41280f2049f9351325a87a76d2603d3c1f857 100644 (file)
@@ -19,19 +19,27 @@ package net.ktnx.mobileledger.ui.patterns;
 
 import android.os.Bundle;
 import android.view.Menu;
-import android.view.View;
 
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.google.android.material.snackbar.Snackbar;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+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 net.ktnx.mobileledger.R;
 import net.ktnx.mobileledger.databinding.ActivityPatternsBinding;
 import net.ktnx.mobileledger.ui.activity.CrashReportingActivity;
+import net.ktnx.mobileledger.utils.Logger;
 
-public class PatternsActivity extends CrashReportingActivity {
+import java.util.Objects;
 
+public class PatternsActivity extends CrashReportingActivity
+        implements PatternListFragment.OnPatternListFragmentInteractionListener {
+    private ActivityPatternsBinding b;
+    private NavController navController;
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
         super.onCreateOptionsMenu(menu);
@@ -42,24 +50,63 @@ public class PatternsActivity extends CrashReportingActivity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        ActivityPatternsBinding b = ActivityPatternsBinding.inflate(getLayoutInflater());
+        b = ActivityPatternsBinding.inflate(getLayoutInflater());
         setContentView(b.getRoot());
         setSupportActionBar(b.toolbar);
-        b.toolbarLayout.setTitle(getTitle());
+        // Show the Up button in the action bar.
+        ActionBar actionBar = getSupportActionBar();
+        if (actionBar != null) {
+            actionBar.setDisplayHomeAsUpEnabled(true);
+        }
+
+        NavHostFragment navHostFragment = (NavHostFragment) Objects.requireNonNull(
+                getSupportFragmentManager().findFragmentById(R.id.fragment_container));
+        navController = navHostFragment.getNavController();
 
-        b.fab.setOnClickListener(this::fabClicked);
+        navController.addOnDestinationChangedListener(
+                new NavController.OnDestinationChangedListener() {
+                    @Override
+                    public void onDestinationChanged(@NonNull NavController controller,
+                                                     @NonNull NavDestination destination,
+                                                     @Nullable Bundle arguments) {
+                        if (destination.getId() == R.id.patternListFragment) {
+                            b.fabAdd.show();
+                            b.fabSave.hide();
+                        }
+                        if (destination.getId() == R.id.patternDetailsFragment) {
+                            b.fabAdd.hide();
+                            b.fabSave.show();
+                        }
+                    }
+                });
 
-        PatternsRecyclerViewAdapter modelAdapter = new PatternsRecyclerViewAdapter();
+        b.toolbarLayout.setTitle(getString(R.string.title_activity_patterns));
 
-        b.patternList.setAdapter(modelAdapter);
-        PatternsModel.retrievePatterns(modelAdapter);
-        LinearLayoutManager llm = new LinearLayoutManager(this);
-        llm.setOrientation(RecyclerView.VERTICAL);
-        b.patternList.setLayoutManager(llm);
+        b.fabAdd.setOnClickListener(v -> onEditPattern(null));
+        b.fabSave.setOnClickListener(v -> onSavePattern());
+    }
+    @Override
+    public void onEditPattern(Long id) {
+        if (id == null){
+            navController.navigate(R.id.action_patternListFragment_to_patternDetailsFragment);
+        }
+        else{
+            Bundle bundle = new Bundle();
+            bundle.putLong(PatternDetailsFragment.ARG_PATTERN_ID, id);
+            navController.navigate(R.id.action_patternListFragment_to_patternDetailsFragment, bundle);
+        }
+    }
+    @Override
+    public void onSavePattern() {
+        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.navigate(R.id.patternListFragment);
     }
-    private void fabClicked(View view) {
-        Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_INDEFINITE)
-                .setAction("Action", null)
-                .show();
+    public NavController getNavController() {
+        return navController;
     }
 }
\ No newline at end of file