]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/CurrencySelectorFragment.java
make transaction header row always have Id of 0
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / CurrencySelectorFragment.java
index 57c602b433be96ac73d9913966227ac184e9c472..e86d5015f77607302ffd0c1b367b7332235302ed 100644 (file)
@@ -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,6 +33,8 @@ import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
+import com.google.android.material.switchmaterial.SwitchMaterial;
+
 import net.ktnx.mobileledger.App;
 import net.ktnx.mobileledger.R;
 import net.ktnx.mobileledger.model.Currency;
@@ -55,10 +56,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 +72,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 +93,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 +107,13 @@ 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);
+        MobileLedgerProfile profile = Objects.requireNonNull(Data.getProfile());
 
         model.currencies.setValue(new CopyOnWriteArrayList<>(profile.getCurrencies()));
         CurrencySelectorRecyclerViewAdapter adapter = new CurrencySelectorRecyclerViewAdapter();
-        model.currencies.observe(this, list -> adapter.submitList(list));
+        model.currencies.observe(this, adapter::submitList);
 
         recyclerView.setAdapter(adapter);
         adapter.setCurrencySelectedListener(this);
@@ -174,26 +181,37 @@ public class CurrencySelectorFragment extends AppCompatDialogFragment
                 Data.currencySymbolPosition.setValue(Currency.Position.after);
         });
 
-        Switch gap = csd.findViewById(R.id.currency_gap);
+        SwitchMaterial 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));
+
+        if ((savedInstanceState != null) ? savedInstanceState.getBoolean(ARG_SHOW_PARAMS,
+                DEFAULT_SHOW_PARAMS) : DEFAULT_SHOW_PARAMS)
+            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);
+        model.triggerOnCurrencySelectedListener(item);
 
         dismiss();
     }
@@ -206,4 +224,10 @@ public class CurrencySelectorFragment extends AppCompatDialogFragment
         list.remove(item);
         model.currencies.setValue(list);
     }
+    public void showPositionAndPadding() {
+        deferredShowPositionAndPadding = true;
+    }
+    public void hidePositionAndPadding() {
+        deferredShowPositionAndPadding = false;
+    }
 }