package net.ktnx.mobileledger.ui.new_transaction;
+import android.content.Context;
import android.content.Intent;
import android.database.AbstractCursor;
import android.database.Cursor;
import androidx.activity.result.ActivityResultLauncher;
import androidx.annotation.NonNull;
+import androidx.core.view.MenuCompat;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.NavController;
import net.ktnx.mobileledger.model.Data;
import net.ktnx.mobileledger.model.LedgerTransaction;
import net.ktnx.mobileledger.model.MatchedTemplate;
+import net.ktnx.mobileledger.ui.FabManager;
import net.ktnx.mobileledger.ui.QR;
import net.ktnx.mobileledger.ui.activity.ProfileThemedActivity;
import net.ktnx.mobileledger.ui.templates.TemplatesActivity;
public class NewTransactionActivity extends ProfileThemedActivity
implements TaskCallback, NewTransactionFragment.OnNewTransactionFragmentInteractionListener,
- QR.QRScanTrigger, QR.QRScanResultReceiver, DescriptionSelectedCallback {
+ QR.QRScanTrigger, QR.QRScanResultReceiver, DescriptionSelectedCallback,
+ FabManager.FabHandler {
private NavController navController;
private NewTransactionModel model;
private ActivityResultLauncher<Void> qrScanLauncher;
private ActivityNewTransactionBinding b;
+ private FabManager fabManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
qrScanLauncher = QR.registerLauncher(this, this);
+ fabManager = new FabManager(b.fabAdd);
+
model.isSubmittable()
.observe(this, isSubmittable -> {
if (isSubmittable) {
- b.fabAdd.show();
+ fabManager.showFab();
}
else {
- b.fabAdd.hide();
+ fabManager.hideFab();
}
});
// viewModel.checkTransactionSubmittable(listAdapter);
b.fabAdd.setOnClickListener(v -> onFabPressed());
-
-
}
@Override
protected void initProfile() {
- String profileUUID = getIntent().getStringExtra("profile_uuid");
+ long profileId = getIntent().getLongExtra("profile_id", 0);
- if (profileUUID != null) {
- mProfile = Data.getProfile(profileUUID);
+ if (profileId != 0) {
+ mProfile = Data.getProfile(profileId);
if (mProfile == null)
finish();
Data.setCurrentProfile(mProfile);
navController.navigate(R.id.newTransactionFragment, b);
}
}
- public void simulateCrash(MenuItem item) {
+ public boolean onSimulateCrashMenuItemClicked(MenuItem item) {
debug("crash", "Will crash intentionally");
new AsyncCrasher().execute();
+ return true;
}
public boolean onCreateOptionsMenu(Menu menu) {
+ super.onCreateOptionsMenu(menu);
+
+ if (!BuildConfig.DEBUG)
+ return true;
+
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.new_transaction, menu);
- if (BuildConfig.DEBUG) {
- menu.findItem(R.id.action_simulate_crash)
- .setVisible(true);
- menu.findItem(R.id.action_simulate_save)
- .setVisible(true);
- }
+ MenuCompat.setGroupDividerEnabled(menu, true);
+
+ menu.findItem(R.id.action_simulate_save)
+ .setOnMenuItemClickListener(this::onToggleSimulateSaveMenuItemClicked);
+ menu.findItem(R.id.action_simulate_crash)
+ .setOnMenuItemClickListener(this::onSimulateCrashMenuItemClicked);
model.getSimulateSave()
.observe(this, state -> {
else
navController.navigate(R.id.action_newTransactionSavingFragment_Success, b);
}
- public void toggleSimulateSave(MenuItem item) {
+ public boolean onToggleSimulateSaveMenuItemClicked(MenuItem item) {
model.toggleSimulateSave();
+ return true;
}
@Override
}
@Override
public boolean onRow(@NonNull Cursor cursor) {
- final String profileUUID = cursor.getString(0);
+ final long profileId = cursor.getLong(0);
final int transactionId = cursor.getInt(1);
- runOnUiThread(() -> model.loadTransactionIntoModel(profileUUID, transactionId));
+ runOnUiThread(() -> model.loadTransactionIntoModel(profileId, transactionId));
return false; // limit 1, by the way
}
@Override
}
@Override
public boolean onRow(@NonNull Cursor cursor) {
- final String profileUUID = cursor.getString(0);
+ final long profileId = cursor.getLong(0);
final int transactionId = cursor.getInt(1);
- runOnUiThread(() -> model.loadTransactionIntoModel(profileUUID,
+ runOnUiThread(() -> model.loadTransactionIntoModel(profileId,
transactionId));
return false;
}
});
}
private void onFabPressed() {
- b.fabAdd.hide();
+ fabManager.hideFab();
Misc.hideSoftKeyboard(this);
LedgerTransaction tr = model.constructLedgerTransaction();
onTransactionSave(tr);
}
+ @Override
+ public Context getContext() {
+ return this;
+ }
+ @Override
+ public void showManagedFab() {
+ if (Objects.requireNonNull(model.isSubmittable()
+ .getValue()))
+ fabManager.showFab();
+ }
+ @Override
+ public void hideManagedFab() {
+ fabManager.hideFab();
+ }
}