import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
+import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
-import androidx.lifecycle.ViewModelProviders;
-import androidx.recyclerview.widget.ItemTouchHelper;
+import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
* {@link OnNewTransactionFragmentInteractionListener} interface
* to handle interaction events.
*/
+
+// TODO: offer to undo account remove-on-swipe
+
public class NewTransactionFragment extends Fragment {
private NewTransactionItemsAdapter listAdapter;
private NewTransactionModel viewModel;
listAdapter.reset();
return true;
});
+ final MenuItem toggleCurrencyItem = menu.findItem(R.id.toggle_currency);
+ toggleCurrencyItem.setOnMenuItemClickListener(item -> {
+ viewModel.toggleCurrencyVisible();
+ return true;
+ });
+ final FragmentActivity activity = getActivity();
+ if (activity != null)
+ viewModel.showCurrency.observe(activity, toggleCurrencyItem::setChecked);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
"getActivity() returned null within onActivityCreated()");
list = activity.findViewById(R.id.new_transaction_accounts);
- viewModel = ViewModelProviders.of(activity)
- .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);
});
listAdapter.notifyDataSetChanged();
- new ItemTouchHelper(new ItemTouchHelper.Callback() {
- @Override
- public int getMovementFlags(@NonNull RecyclerView recyclerView,
- @NonNull RecyclerView.ViewHolder viewHolder) {
- int flags = makeFlag(ItemTouchHelper.ACTION_STATE_IDLE, ItemTouchHelper.END);
- // the top item is always there (date and description)
- if (viewHolder.getAdapterPosition() > 0) {
- if (viewModel.getAccountCount() > 2) {
- flags |= makeFlag(ItemTouchHelper.ACTION_STATE_SWIPE,
- ItemTouchHelper.START | ItemTouchHelper.END);
- }
- }
-
- return flags;
- }
- @Override
- public boolean onMove(@NonNull RecyclerView recyclerView,
- @NonNull RecyclerView.ViewHolder viewHolder,
- @NonNull RecyclerView.ViewHolder target) {
- return false;
- }
- @Override
- public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
- if (viewModel.getAccountCount() == 2)
- Snackbar.make(list, R.string.msg_at_least_two_accounts_are_required,
- Snackbar.LENGTH_LONG)
- .setAction("Action", null)
- .show();
- else {
- int pos = viewHolder.getAdapterPosition();
- viewModel.removeItem(pos - 1);
- listAdapter.notifyItemRemoved(pos);
- viewModel.sendCountNotifications(); // needed after items re-arrangement
- viewModel.checkTransactionSubmittable(listAdapter);
- }
- }
- }).attachToRecyclerView(list);
-
viewModel.isSubmittable()
- .observe(this, isSubmittable -> {
+ .observe(getViewLifecycleOwner(), isSubmittable -> {
if (isSubmittable) {
if (fab != null) {
fab.show();
}
}
});
- viewModel.checkTransactionSubmittable(listAdapter);
+// viewModel.checkTransactionSubmittable(listAdapter);
fab = activity.findViewById(R.id.fab);
fab.setOnClickListener(v -> onFabPressed());
if (args != null) {
String error = args.getString("error");
if (error != null) {
- // TODO display error
Logger.debug("new-trans-f", String.format("Got error: %s", error));
Snackbar.make(list, error, Snackbar.LENGTH_LONG)
.show();