/*
- * Copyright © 2019 Damyan Ivanov.
+ * Copyright © 2021 Damyan Ivanov.
* This file is part of MoLe.
* MoLe is free software: you can distribute it and/or modify it
* under the term of the GNU General Public License as published by
import android.view.View;
import android.widget.RadioButton;
import android.widget.RadioGroup;
-import android.widget.Switch;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
-import net.ktnx.mobileledger.App;
+import com.google.android.material.switchmaterial.SwitchMaterial;
+
import net.ktnx.mobileledger.R;
+import net.ktnx.mobileledger.dao.CurrencyDAO;
+import net.ktnx.mobileledger.db.DB;
+import net.ktnx.mobileledger.db.Profile;
import net.ktnx.mobileledger.model.Currency;
import net.ktnx.mobileledger.model.Data;
-import net.ktnx.mobileledger.model.MobileLedgerProfile;
import java.util.ArrayList;
import java.util.List;
-import java.util.Objects;
-import java.util.concurrent.CopyOnWriteArrayList;
/**
* A fragment representing a list of Items.
implements OnCurrencySelectedListener, OnCurrencyLongClickListener {
public static final int DEFAULT_COLUMN_COUNT = 2;
- private static final String ARG_COLUMN_COUNT = "column-count";
+ public static final String ARG_COLUMN_COUNT = "column-count";
+ public static final String ARG_SHOW_PARAMS = "show-params";
+ public static final boolean DEFAULT_SHOW_PARAMS = true;
private int mColumnCount = DEFAULT_COLUMN_COUNT;
- private OnCurrencySelectedListener mListener;
private CurrencySelectorModel model;
+ private boolean deferredShowPositionAndPadding;
+ private OnCurrencySelectedListener onCurrencySelectedListener;
/**
* Mandatory empty constructor for the fragment manager to instantiate the
}
@SuppressWarnings("unused")
public static CurrencySelectorFragment newInstance() {
- return newInstance(DEFAULT_COLUMN_COUNT);
+ return newInstance(DEFAULT_COLUMN_COUNT, DEFAULT_SHOW_PARAMS);
}
- public static CurrencySelectorFragment newInstance(int columnCount) {
+ public static CurrencySelectorFragment newInstance(int columnCount, boolean showParams) {
CurrencySelectorFragment fragment = new CurrencySelectorFragment();
Bundle args = new Bundle();
args.putInt(ARG_COLUMN_COUNT, columnCount);
+ args.putBoolean(ARG_SHOW_PARAMS, showParams);
fragment.setArguments(args);
return fragment;
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
- Context context = Objects.requireNonNull(getContext());
+ Context context = requireContext();
Dialog csd = new Dialog(context);
csd.setContentView(R.layout.fragment_currency_selector_list);
csd.setTitle(R.string.choose_currency_label);
recyclerView.setLayoutManager(new GridLayoutManager(context, mColumnCount));
}
model = new ViewModelProvider(this).get(CurrencySelectorModel.class);
- MobileLedgerProfile profile = Objects.requireNonNull(Data.profile.getValue());
+ if (onCurrencySelectedListener != null)
+ model.setOnCurrencySelectedListener(onCurrencySelectedListener);
+ Profile profile = Data.getProfile();
- model.currencies.setValue(new CopyOnWriteArrayList<>(profile.getCurrencies()));
CurrencySelectorRecyclerViewAdapter adapter = new CurrencySelectorRecyclerViewAdapter();
- model.currencies.observe(this, list -> adapter.submitList(list));
+ DB.get()
+ .getCurrencyDAO()
+ .getAll()
+ .observe(this, list -> {
+ List<String> strings = new ArrayList<>();
+ for (net.ktnx.mobileledger.db.Currency c : list) {
+ strings.add(c.getName());
+ }
+ adapter.submitList(strings);
+ });
recyclerView.setAdapter(adapter);
adapter.setCurrencySelectedListener(this);
final TextView tvNoCurrBtn = csd.findViewById(R.id.btn_no_currency);
final TextView tvAddCurrOkBtn = csd.findViewById(R.id.btn_add_currency);
final TextView tvAddCurrBtn = csd.findViewById(R.id.btn_add_new);
+ final SwitchMaterial gap = csd.findViewById(R.id.currency_gap);
+ final RadioGroup rgPosition = csd.findViewById(R.id.position_radio_group);
tvNewCurrName.setVisibility(View.GONE);
tvAddCurrOkBtn.setVisibility(View.GONE);
});
tvAddCurrOkBtn.setOnClickListener(v -> {
-
-
String currName = String.valueOf(tvNewCurrName.getText());
if (!currName.isEmpty()) {
- List<Currency> list = new ArrayList<>( model.currencies.getValue());
- // FIXME hardcoded position and gap setting
- list.add(new Currency(profile, String.valueOf(tvNewCurrName.getText()),
- Currency.Position.after, false));
- model.currencies.setValue(list);
+ DB.get()
+ .getCurrencyDAO()
+ .insert(new net.ktnx.mobileledger.db.Currency(0,
+ String.valueOf(tvNewCurrName.getText()),
+ (rgPosition.getCheckedRadioButtonId() == R.id.currency_position_left)
+ ? "before" : "after", gap.isChecked()));
}
tvNewCurrName.setVisibility(View.GONE);
else
rbPositionRight.toggle();
- RadioGroup rgPosition = csd.findViewById(R.id.position_radio_group);
rgPosition.setOnCheckedChangeListener((group, checkedId) -> {
if (checkedId == R.id.currency_position_left)
Data.currencySymbolPosition.setValue(Currency.Position.before);
Data.currencySymbolPosition.setValue(Currency.Position.after);
});
- Switch gap = csd.findViewById(R.id.currency_gap);
-
gap.setChecked(Data.currencyGap.getValue());
- gap.setOnCheckedChangeListener((v, checked) -> {
- Data.currencyGap.setValue(checked);
- });
+ gap.setOnCheckedChangeListener((v, checked) -> Data.currencyGap.setValue(checked));
+
+ model.observePositionAndPaddingVisible(this, visible -> csd.findViewById(R.id.params_panel)
+ .setVisibility(
+ visible ? View.VISIBLE
+ : View.GONE));
+
+ final boolean showParams;
+ if (getArguments() == null)
+ showParams = DEFAULT_SHOW_PARAMS;
+ else
+ showParams = getArguments().getBoolean(ARG_SHOW_PARAMS, DEFAULT_SHOW_PARAMS);
+
+ if (showParams)
+ model.showPositionAndPadding();
+ else
+ model.hidePositionAndPadding();
return csd;
}
public void setOnCurrencySelectedListener(OnCurrencySelectedListener listener) {
- mListener = listener;
+ onCurrencySelectedListener = listener;
+
+ if (model != null)
+ model.setOnCurrencySelectedListener(listener);
}
public void resetOnCurrencySelectedListener() {
- mListener = null;
+ model.resetOnCurrencySelectedListener();
}
@Override
- public void onCurrencySelected(Currency item) {
- if (mListener != null)
- mListener.onCurrencySelected(item);
+ public void onCurrencySelected(String item) {
+ model.triggerOnCurrencySelectedListener(item);
dismiss();
}
@Override
- public void onCurrencyLongClick(Currency item) {
- ArrayList<Currency> list = new ArrayList<>(model.currencies.getValue());
- App.getDatabase().execSQL("delete from currencies where id=?", new Object[]{item.getId()});
- list.remove(item);
- model.currencies.setValue(list);
+ public void onCurrencyLongClick(String item) {
+ CurrencyDAO dao = DB.get()
+ .getCurrencyDAO();
+ dao.getByName(item)
+ .observe(this, dao::deleteSync);
+ }
+ public void showPositionAndPadding() {
+ deferredShowPositionAndPadding = true;
+ }
+ public void hidePositionAndPadding() {
+ deferredShowPositionAndPadding = false;
}
}