* 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.
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.toolbar.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.toolbar.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();
}
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.toolbar.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.toolbar.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