X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2Fnew_transaction%2FNewTransactionActivity.java;h=11d014d369bd983144220d76a6267846a92e6d9e;hb=fac0809065787fb473646db5770f4f2fae0d1e8f;hp=ab28ca16d05a2ff43d5d57404692c17a8f021177;hpb=346b3c8e74a12b1822239481f807479fa81fc706;p=mobile-ledger.git diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionActivity.java b/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionActivity.java index ab28ca16..11d014d3 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionActivity.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionActivity.java @@ -17,6 +17,7 @@ package net.ktnx.mobileledger.ui.new_transaction; +import android.content.Context; import android.content.Intent; import android.database.AbstractCursor; import android.database.Cursor; @@ -30,6 +31,7 @@ import android.view.View; 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; @@ -50,6 +52,7 @@ import net.ktnx.mobileledger.db.TemplateHeader; 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; @@ -67,11 +70,14 @@ import static net.ktnx.mobileledger.utils.Logger.debug; public class NewTransactionActivity extends ProfileThemedActivity implements TaskCallback, NewTransactionFragment.OnNewTransactionFragmentInteractionListener, - QR.QRScanTrigger, QR.QRScanResultReceiver, DescriptionSelectedCallback { + QR.QRScanTrigger, QR.QRScanResultReceiver, DescriptionSelectedCallback, + FabManager.FabHandler { + final String TAG = "new-t-a"; private NavController navController; private NewTransactionModel model; private ActivityResultLauncher qrScanLauncher; private ActivityNewTransactionBinding b; + private FabManager fabManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -93,33 +99,40 @@ public class NewTransactionActivity extends ProfileThemedActivity 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(PARAM_PROFILE_ID, 0); + int profileHue = getIntent().getIntExtra(PARAM_THEME, -1); - if (profileUUID != null) { - mProfile = Data.getProfile(profileUUID); - if (mProfile == null) - finish(); - Data.setCurrentProfile(mProfile); + if (profileHue < 0) { + Logger.debug(TAG, "Started with invalid/missing theme; quitting"); + finish(); + return; } - else - super.initProfile(); + + if (profileId <= 0) { + Logger.debug(TAG, "Started with invalid/missing profile_id; quitting"); + finish(); + return; + } + + setupProfileColors(profileHue); + initProfile(profileId); } @Override public void finish() { @@ -150,20 +163,26 @@ public class NewTransactionActivity extends ProfileThemedActivity 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 -> { @@ -190,8 +209,9 @@ public class NewTransactionActivity extends ProfileThemedActivity else navController.navigate(R.id.action_newTransactionSavingFragment_Success, b); } - public void toggleSimulateSave(MenuItem item) { + public boolean onToggleSimulateSaveMenuItemClicked(MenuItem item) { model.toggleSimulateSave(); + return true; } @Override @@ -366,9 +386,9 @@ public class NewTransactionActivity extends ProfileThemedActivity } @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 @@ -397,9 +417,9 @@ public class NewTransactionActivity extends ProfileThemedActivity } @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; } @@ -412,11 +432,25 @@ public class NewTransactionActivity extends ProfileThemedActivity }); } 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(); + } }