]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/CurrencySelectorFragment.java
more pronounced day/month delimiters in the transaction list
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / CurrencySelectorFragment.java
index 57c602b433be96ac73d9913966227ac184e9c472..759cd90e78451d01887dbb488cb1910d2967ace0 100644 (file)
@@ -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.
@@ -55,10 +55,13 @@ public class CurrencySelectorFragment extends AppCompatDialogFragment
         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
@@ -68,12 +71,13 @@ public class CurrencySelectorFragment extends AppCompatDialogFragment
     }
     @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;
     }
@@ -88,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);
@@ -102,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<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);
@@ -116,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);
@@ -135,15 +151,14 @@ public class CurrencySelectorFragment extends AppCompatDialogFragment
         });
 
         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);
@@ -166,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);
@@ -174,36 +188,55 @@ 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));
+
+        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;
     }
 }