X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2Ftemplates%2FTemplatesActivity.java;h=7bc722203fa405eec10572791e111102123106d7;hp=0f1d20f451debb3a6d6102dfb19224ecae8638f8;hb=d63a611dce420b30fa0c0711eea1d02603945a43;hpb=1688588d70ab1f75c0369080087af46958aacbbe diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/templates/TemplatesActivity.java b/app/src/main/java/net/ktnx/mobileledger/ui/templates/TemplatesActivity.java index 0f1d20f4..7bc72220 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/templates/TemplatesActivity.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/templates/TemplatesActivity.java @@ -15,41 +15,56 @@ * along with MoLe. If not, see . */ -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 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