package net.ktnx.mobileledger.ui.activity;
-import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.renderscript.RSInvalidStateException;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
-import androidx.lifecycle.ViewModelProviders;
+import androidx.fragment.app.FragmentActivity;
+import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import net.ktnx.mobileledger.model.LedgerTransaction;
import net.ktnx.mobileledger.model.LedgerTransactionAccount;
import net.ktnx.mobileledger.model.MobileLedgerProfile;
+import net.ktnx.mobileledger.utils.Logger;
+import net.ktnx.mobileledger.utils.Misc;
import org.jetbrains.annotations.NotNull;
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- Activity activity = getActivity();
+ FragmentActivity activity = getActivity();
if (activity == null)
throw new RSInvalidStateException(
"getActivity() returned null within onActivityCreated()");
list = activity.findViewById(R.id.new_transaction_accounts);
- viewModel = ViewModelProviders.of(this)
- .get(NewTransactionModel.class);
+ viewModel = new ViewModelProvider(activity).get(NewTransactionModel.class);
mProfile = Data.profile.getValue();
listAdapter = new NewTransactionItemsAdapter(viewModel, mProfile);
list.setAdapter(listAdapter);
list.setLayoutManager(new LinearLayoutManager(activity));
- Data.profile.observe(this, profile -> {
+ Data.profile.observe(getViewLifecycleOwner(), profile -> {
mProfile = profile;
listAdapter.setProfile(profile);
});
}).attachToRecyclerView(list);
viewModel.isSubmittable()
- .observe(this, isSubmittable -> {
+ .observe(getViewLifecycleOwner(), isSubmittable -> {
if (isSubmittable) {
if (fab != null) {
fab.show();
fab = activity.findViewById(R.id.fab);
fab.setOnClickListener(v -> onFabPressed());
+ boolean keep = false;
+
Bundle args = getArguments();
if (args != null) {
String error = args.getString("error");
if (error != null) {
- // TODO display error
- }
- else {
- viewModel.reset();
+ Logger.debug("new-trans-f", String.format("Got error: %s", error));
+ Snackbar.make(list, error, Snackbar.LENGTH_LONG)
+ .show();
+ keep = true;
}
}
+
+ int focused = 0;
+ if (savedInstanceState != null) {
+ keep |= savedInstanceState.getBoolean("keep", true);
+ focused = savedInstanceState.getInt("focused", 0);
+ }
+
+ if (!keep)
+ viewModel.reset();
+ else {
+ viewModel.setFocusedItem(focused);
+ }
+ }
+ @Override
+ public void onSaveInstanceState(@NonNull Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putBoolean("keep", true);
+ final int focusedItem = viewModel.getFocusedItem();
+ outState.putInt("focused", focusedItem);
}
private void onFabPressed() {
fab.setEnabled(false);
+ Misc.hideSoftKeyboard(this);
if (mListener != null) {
Date date = viewModel.getDate();
LedgerTransaction tr =
LedgerTransactionAccount emptyAmountAccount = null;
float emptyAmountAccountBalance = 0;
for (int i = 0; i < viewModel.getAccountCount(); i++) {
- LedgerTransactionAccount acc = viewModel.getAccount(i);
+ LedgerTransactionAccount acc =
+ new LedgerTransactionAccount(viewModel.getAccount(i));
if (acc.getAccountName()
.trim()
.isEmpty())