X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2FCurrencySelectorFragment.java;h=759cd90e78451d01887dbb488cb1910d2967ace0;hb=HEAD;hp=d25db493f7b05b659bd6cb6c21f0989570737564;hpb=d2409f5625f84f811a323dbd1e0358dd7993e4da;p=mobile-ledger.git diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/CurrencySelectorFragment.java b/app/src/main/java/net/ktnx/mobileledger/ui/CurrencySelectorFragment.java index d25db493..759cd90e 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/CurrencySelectorFragment.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/CurrencySelectorFragment.java @@ -1,5 +1,5 @@ /* - * 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 @@ -23,7 +23,6 @@ import android.os.Bundle; import android.view.View; import android.widget.RadioButton; import android.widget.RadioGroup; -import android.widget.Switch; import android.widget.TextView; import androidx.annotation.NonNull; @@ -34,16 +33,17 @@ import androidx.recyclerview.widget.GridLayoutManager; 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. @@ -59,9 +59,9 @@ public class CurrencySelectorFragment extends AppCompatDialogFragment 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 @@ -92,7 +92,7 @@ public class CurrencySelectorFragment extends AppCompatDialogFragment @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); @@ -106,11 +106,21 @@ public class CurrencySelectorFragment extends AppCompatDialogFragment 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 strings = new ArrayList<>(); + for (net.ktnx.mobileledger.db.Currency c : list) { + strings.add(c.getName()); + } + adapter.submitList(strings); + }); recyclerView.setAdapter(adapter); adapter.setCurrencySelectedListener(this); @@ -120,6 +130,8 @@ public class CurrencySelectorFragment extends AppCompatDialogFragment 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); @@ -139,15 +151,14 @@ public class CurrencySelectorFragment extends AppCompatDialogFragment }); tvAddCurrOkBtn.setOnClickListener(v -> { - - String currName = String.valueOf(tvNewCurrName.getText()); if (!currName.isEmpty()) { - List 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); @@ -170,7 +181,6 @@ public class CurrencySelectorFragment extends AppCompatDialogFragment 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); @@ -178,21 +188,22 @@ public class CurrencySelectorFragment extends AppCompatDialogFragment 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); - }); + 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 ((savedInstanceState != null) ? savedInstanceState.getBoolean(ARG_SHOW_PARAMS, - DEFAULT_SHOW_PARAMS) : DEFAULT_SHOW_PARAMS) + if (showParams) model.showPositionAndPadding(); else model.hidePositionAndPadding(); @@ -200,26 +211,27 @@ public class CurrencySelectorFragment extends AppCompatDialogFragment 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 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;