Rimosso vecchio MainListVenditaAdapter
This commit is contained in:
parent
08cffacc90
commit
637cd659ec
@ -41,7 +41,7 @@ import it.integry.integrywmsnative.core.utility.UtilityExceptions;
|
|||||||
import it.integry.integrywmsnative.core.utility.UtilityToast;
|
import it.integry.integrywmsnative.core.utility.UtilityToast;
|
||||||
import it.integry.integrywmsnative.databinding.FragmentMainVenditaBinding;
|
import it.integry.integrywmsnative.databinding.FragmentMainVenditaBinding;
|
||||||
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
|
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
|
||||||
import it.integry.integrywmsnative.gest.vendita.core.MainListVenditaAdapterNew;
|
import it.integry.integrywmsnative.gest.vendita.core.MainListVenditaAdapter;
|
||||||
import it.integry.integrywmsnative.gest.vendita.core.VenditaHelper;
|
import it.integry.integrywmsnative.gest.vendita.core.VenditaHelper;
|
||||||
import it.integry.integrywmsnative.gest.vendita.dialogs.DialogVenditaFiltroAvanzato;
|
import it.integry.integrywmsnative.gest.vendita.dialogs.DialogVenditaFiltroAvanzato;
|
||||||
import it.integry.integrywmsnative.gest.vendita.dialogs.DialogVenditaFiltroAvanzatoViewModel;
|
import it.integry.integrywmsnative.gest.vendita.dialogs.DialogVenditaFiltroAvanzatoViewModel;
|
||||||
@ -61,7 +61,7 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS
|
|||||||
private FragmentMainVenditaBinding mBinding = null;
|
private FragmentMainVenditaBinding mBinding = null;
|
||||||
private VenditaViewModel mViewModel;
|
private VenditaViewModel mViewModel;
|
||||||
|
|
||||||
private MainListVenditaAdapterNew mAdapter;
|
private MainListVenditaAdapter mAdapter;
|
||||||
|
|
||||||
private List<OrdineVenditaInevasoDTO> mOriginalOrderList;
|
private List<OrdineVenditaInevasoDTO> mOriginalOrderList;
|
||||||
private List<OrdineVenditaInevasoDTO> mRenderedOrderList = new ArrayList<>();
|
private List<OrdineVenditaInevasoDTO> mRenderedOrderList = new ArrayList<>();
|
||||||
@ -273,7 +273,7 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS
|
|||||||
|
|
||||||
private void initRecyclerView() {
|
private void initRecyclerView() {
|
||||||
// mAdapter = new MainListVenditaAdapter(getActivity(), mRenderedOrderList, onGroupSelectionChanged, onSingleSelectionChanged);
|
// mAdapter = new MainListVenditaAdapter(getActivity(), mRenderedOrderList, onGroupSelectionChanged, onSingleSelectionChanged);
|
||||||
mAdapter = new MainListVenditaAdapterNew(getActivity(), mRenderedOrderList, onSingleSelectionChanged);
|
mAdapter = new MainListVenditaAdapter(getActivity(), mRenderedOrderList, onSingleSelectionChanged);
|
||||||
mBinding.venditaMainList.setAdapter(mAdapter);
|
mBinding.venditaMainList.setAdapter(mAdapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,250 +1,248 @@
|
|||||||
package it.integry.integrywmsnative.gest.vendita.core;
|
package it.integry.integrywmsnative.gest.vendita.core;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
import androidx.core.util.Pools;
|
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
|
||||||
|
|
||||||
import android.graphics.Color;
|
|
||||||
import android.text.Html;
|
import android.text.Html;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.LinearLayout;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import androidx.core.content.res.ResourcesCompat;
|
||||||
|
import androidx.databinding.DataBindingUtil;
|
||||||
|
import androidx.databinding.Observable;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import com.annimon.stream.Stream;
|
||||||
|
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import it.integry.integrywmsnative.R;
|
import it.integry.integrywmsnative.R;
|
||||||
|
import it.integry.integrywmsnative.core.di.BindableBoolean;
|
||||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||||
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
||||||
|
import it.integry.integrywmsnative.databinding.VenditaMainListGroupModelBinding;
|
||||||
|
import it.integry.integrywmsnative.databinding.VenditaMainListModelBinding;
|
||||||
|
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO;
|
||||||
|
import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider;
|
||||||
|
|
||||||
public class MainListVenditaAdapter extends RecyclerView.Adapter<MainListVenditaAdapter.ViewHolder> {
|
public class MainListVenditaAdapter extends SectionedRecyclerViewAdapter<MainListVenditaAdapter.SubheaderHolder, MainListVenditaAdapter.SingleItemViewHolder> implements SectionTitleProvider {
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private List<OrdineVenditaGroupedInevasoDTO> mDataset;
|
|
||||||
private RunnableArgs<OrdineVenditaGroupedInevasoDTO> mOnGroupSelected;
|
|
||||||
private RunnableArgs<OrdineVenditaGroupedInevasoDTO.Ordine> mOnSingleSelectionChanged;
|
|
||||||
|
|
||||||
private Pools.SynchronizedPool sPool = new Pools.SynchronizedPool(2000);
|
private HashMap<BindableBoolean, Observable.OnPropertyChangedCallback> mCallbacksDictionary = new HashMap<>();
|
||||||
private Pools.SynchronizedPool sPoolClienti = new Pools.SynchronizedPool(3000);
|
|
||||||
|
|
||||||
public static class ViewHolder extends RecyclerView.ViewHolder {
|
private List<OrdineVenditaInevasoDTO> mDataset;
|
||||||
// each data item is just a string in this case
|
private RunnableArgs<OrdineVenditaInevasoDTO> mOnSingleSelectionChanged;
|
||||||
private TextView mTextViewGroupHeader;
|
|
||||||
private LinearLayout mLinearLayoutGroupItemContainer;
|
|
||||||
|
|
||||||
private List<View> views = new ArrayList<>();
|
|
||||||
|
|
||||||
public ViewHolder(View v) {
|
static class SubheaderHolder extends RecyclerView.ViewHolder {
|
||||||
super(v);
|
|
||||||
|
VenditaMainListModelBinding binding;
|
||||||
|
|
||||||
|
SubheaderHolder(VenditaMainListModelBinding binding) {
|
||||||
|
super(binding.getRoot());
|
||||||
|
this.binding = binding;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static class SingleItemViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
|
||||||
|
VenditaMainListGroupModelBinding binding;
|
||||||
|
|
||||||
|
SingleItemViewHolder(VenditaMainListGroupModelBinding binding) {
|
||||||
|
super(binding.getRoot());
|
||||||
|
this.binding = binding;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Provide a suitable constructor (depends on the kind of dataset)
|
|
||||||
public MainListVenditaAdapter(Context context, List<OrdineVenditaGroupedInevasoDTO> myDataset, RunnableArgs<OrdineVenditaGroupedInevasoDTO> onGroupSelected, RunnableArgs<OrdineVenditaGroupedInevasoDTO.Ordine> onSingleSelectionChanged) {
|
public MainListVenditaAdapter(Context context, List<OrdineVenditaInevasoDTO> myDataset, RunnableArgs<OrdineVenditaInevasoDTO> onSingleSelectionChanged) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mDataset = myDataset;
|
mDataset = orderItems(myDataset);
|
||||||
mOnGroupSelected = onGroupSelected;
|
|
||||||
mOnSingleSelectionChanged = onSingleSelectionChanged;
|
mOnSingleSelectionChanged = onSingleSelectionChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateItems(List<OrdineVenditaGroupedInevasoDTO> updatedDataset) {
|
public void updateItems(List<OrdineVenditaInevasoDTO> updatedDataset) {
|
||||||
mDataset.clear();
|
mDataset.clear();
|
||||||
mDataset.addAll(updatedDataset);
|
mDataset.addAll(orderItems(updatedDataset));
|
||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
|
notifyDataChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Create new views (invoked by the layout manager)
|
private List<OrdineVenditaInevasoDTO> orderItems(List<OrdineVenditaInevasoDTO> dataset) {
|
||||||
|
return Stream.of(dataset)
|
||||||
|
.sortBy(OrdineVenditaInevasoDTO::getRagSocOrd)
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MainListVenditaAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
|
public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {
|
||||||
int viewType) {
|
VenditaMainListModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.vendita_main_list_model, parent, false);
|
||||||
// create a new view
|
return new SubheaderHolder(binding);
|
||||||
View v = LayoutInflater.from(parent.getContext())
|
|
||||||
.inflate(R.layout.vendita_main_list_model, parent, false);
|
|
||||||
|
|
||||||
ViewHolder vh = new ViewHolder(v);
|
|
||||||
|
|
||||||
TextView groupHeader = v.findViewById(R.id.vendita_main_list_group_header);
|
|
||||||
vh.mTextViewGroupHeader = groupHeader;
|
|
||||||
|
|
||||||
LinearLayout groupItemContainer = v.findViewById(R.id.vendita_main_list_group_item_container);
|
|
||||||
vh.mLinearLayoutGroupItemContainer = groupItemContainer;
|
|
||||||
|
|
||||||
return vh;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Replace the contents of a view (invoked by the layout manager)
|
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
|
||||||
// - get element from your dataset at this position
|
VenditaMainListGroupModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.vendita_main_list_group_model, parent, false);
|
||||||
// - replace the contents of the view with that element
|
return new SingleItemViewHolder(binding);
|
||||||
|
|
||||||
final List<OrdineVenditaGroupedInevasoDTO.Ordine> subGroup = mDataset.get(position).ordini;
|
|
||||||
final int finalPosition = position;
|
|
||||||
|
|
||||||
holder.mTextViewGroupHeader.setText(mDataset.get(position).nomeCliente);
|
|
||||||
holder.itemView.setOnClickListener(view -> {
|
|
||||||
boolean newValue = true;
|
|
||||||
|
|
||||||
for(int i = 0; i < subGroup.size(); i++){
|
|
||||||
if(subGroup.get(i).checkBox) newValue = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int i = 0; i < subGroup.size(); i++){
|
|
||||||
subGroup.get(i).setCheckbox(newValue);
|
@Override
|
||||||
|
public void onBindSubheaderViewHolder(SubheaderHolder subheaderHolder, int nextItemPosition) {
|
||||||
|
subheaderHolder.binding.venditaMainListGroupHeader.setText(mDataset.get(nextItemPosition).getRagSocOrd());
|
||||||
|
|
||||||
|
subheaderHolder.binding.getRoot().setOnClickListener(v -> {
|
||||||
|
|
||||||
|
boolean anySelected = Stream.of(mDataset)
|
||||||
|
.filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd()))
|
||||||
|
.anyMatch(OrdineVenditaInevasoDTO::isSelected);
|
||||||
|
|
||||||
|
Stream.of(mDataset)
|
||||||
|
.filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd()))
|
||||||
|
.forEach(x -> x.setSelected(!anySelected));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
mOnGroupSelected.run(mDataset.get(finalPosition));
|
@Override
|
||||||
|
public void onBindItemViewHolder(SingleItemViewHolder holder, int itemPosition) {
|
||||||
|
OrdineVenditaInevasoDTO ordine = mDataset.get(itemPosition);
|
||||||
|
|
||||||
|
holder.binding.venditaMainListGroupItemContainerCheckBox.setOnCheckedChangeListener(null);
|
||||||
|
|
||||||
|
if (mCallbacksDictionary.containsKey(ordine.selected)) {
|
||||||
|
ordine.selected.removeOnPropertyChangedCallback(mCallbacksDictionary.get(ordine.selected));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
holder.binding.emptyView.setBackgroundColor(ResourcesCompat.getColor(mContext.getResources(), ordine.flagExistCollo() ? R.color.colorPrimary : android.R.color.transparent, null));
|
||||||
|
|
||||||
|
String testataOrdString = String.format(mContext.getString(R.string.ord_ven_testata), String.valueOf(ordine.getNumOrd()), UtilityDate.formatDate(ordine.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
|
||||||
|
holder.binding.venditaMainListGroupItemContainerTestataOrd.setText(Html.fromHtml(testataOrdString));
|
||||||
|
|
||||||
|
String testataDataConsString = String.format(mContext.getString(R.string.ord_ven_testata_data_cons), UtilityDate.formatDate(ordine.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
|
||||||
|
holder.binding.venditaMainListGroupItemContainerTestataDataCons.setText(Html.fromHtml(testataDataConsString));
|
||||||
|
|
||||||
|
holder.binding.venditaMainListGroupItemContainerDetailOrd.setText(ordine.getRifOrd());
|
||||||
|
|
||||||
|
holder.binding.setCheckboxValue(ordine.selected);
|
||||||
|
|
||||||
|
holder.binding.getRoot().setOnClickListener(v -> {
|
||||||
|
ordine.setSelected(!ordine.isSelected());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
holder.binding.venditaMainListGroupItemContainerCheckBox.setChecked(ordine.isSelected());
|
||||||
|
|
||||||
// final View existColloView = ordineView.findViewById(R.id.exist_collo);
|
mCallbacksDictionary.put(ordine.selected, new Observable.OnPropertyChangedCallback() {
|
||||||
|
@Override
|
||||||
|
public void onPropertyChanged(Observable sender, int propertyId) {
|
||||||
|
holder.binding.venditaMainListGroupItemContainerCheckBox.setChecked(((BindableBoolean) sender).get());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// existColloView.setAlpha(ordine.isExistCollo() ? 1 : 0);
|
holder.binding.venditaMainListGroupItemContainerCheckBox.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
||||||
|
ordine.setSelected(isChecked);
|
||||||
|
mOnSingleSelectionChanged.run(ordine);
|
||||||
|
});
|
||||||
|
|
||||||
for (int i = 0; i < subGroup.size(); i++) {
|
ordine.selected.addOnPropertyChangedCallback(mCallbacksDictionary.get(ordine.selected));
|
||||||
final OrdineVenditaGroupedInevasoDTO.Ordine ordine = subGroup.get(i);
|
|
||||||
|
|
||||||
ordine.checkBoxCallback = new ArrayList<>();
|
|
||||||
|
|
||||||
View groupModelViewPool = (View) sPool.acquire();
|
|
||||||
if(groupModelViewPool == null){
|
|
||||||
groupModelViewPool = LayoutInflater.from(mContext)
|
|
||||||
.inflate(R.layout.vendita_main_list_group_model, holder.mLinearLayoutGroupItemContainer, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
View ordineView = groupModelViewPool;
|
|
||||||
holder.views.add(ordineView);
|
|
||||||
|
|
||||||
View emptyView = groupModelViewPool.findViewById(R.id.empty_view);
|
|
||||||
emptyView.setBackgroundColor(Color.GREEN);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ordineView.setVisibility(View.VISIBLE);
|
|
||||||
|
|
||||||
if (i % 2 == 1) {
|
|
||||||
ordineView.setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG));
|
|
||||||
} else {
|
|
||||||
ordineView.setBackgroundColor(mContext.getResources().getColor(R.color.white));
|
|
||||||
}
|
|
||||||
|
|
||||||
// final CheckBox checkBox = ordineView.findViewById(R.id.vendita_main_list_group_item_container_checkBox);
|
|
||||||
// checkBox.setChecked(ordine.checkBox);
|
|
||||||
//
|
|
||||||
// checkBox.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
|
||||||
// ordine.checkBox = checkBox.isChecked();
|
|
||||||
// mOnSingleSelectionChanged.run(ordine);
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// ordine.checkBoxCallback.add(checkBox::setChecked);
|
|
||||||
//
|
|
||||||
// ordineView.setOnClickListener(view -> {
|
|
||||||
// checkBox.toggle();
|
|
||||||
// //ordine.checkBox = checkBox.isChecked();
|
|
||||||
// //mOnGroupSelected.run(mDataset.get(finalPosition));
|
|
||||||
// });
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
TextView testataOrdTextView = ordineView.findViewById(R.id.vendita_main_list_group_item_container_testata_ord);
|
|
||||||
String testataOrdString = String.format(mContext.getString(R.string.ord_ven_testata), String.valueOf(ordine.getNumero()), UtilityDate.formatDate(ordine.getData(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
|
|
||||||
testataOrdTextView.setText(Html.fromHtml(testataOrdString));
|
|
||||||
|
|
||||||
TextView testataDataConsTextView = ordineView.findViewById(R.id.vendita_main_list_group_item_container_testata_data_cons);
|
|
||||||
String testataDataConsString = String.format(mContext.getString(R.string.ord_ven_testata_data_cons), UtilityDate.formatDate(ordine.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
|
|
||||||
testataDataConsTextView.setText(Html.fromHtml(testataDataConsString));
|
|
||||||
|
|
||||||
/*
|
|
||||||
LinearLayout clientLinearLayout = ordineView.findViewById(R.id.vendita_main_list_group_item_container_clienti_ord);
|
|
||||||
List<OrdineVenditaGroupedInevasoDTO.Cliente> subGroupClienti = ordine.clienti;
|
|
||||||
|
|
||||||
clientLinearLayout.removeAllViews();
|
|
||||||
|
|
||||||
for (int k = 0; k < subGroupClienti.size(); k++) {
|
|
||||||
|
|
||||||
|
|
||||||
View groupClienteModelViewPool = (View) sPoolClienti.acquire();
|
|
||||||
if(groupClienteModelViewPool == null){
|
|
||||||
groupClienteModelViewPool = LayoutInflater.from(mContext)
|
|
||||||
.inflate(R.layout.vendita_main_list_group_clienti, clientLinearLayout, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
View groupClienteModelView = groupClienteModelViewPool;
|
|
||||||
|
|
||||||
|
|
||||||
TextView clienteComm = groupClienteModelView.findViewById(R.id.vendita_main_list_group_clienti_comm);
|
|
||||||
String clienteText;
|
|
||||||
clienteText = subGroupClienti.get(k).rifOrd;
|
|
||||||
clienteComm.setText(clienteText);
|
|
||||||
|
|
||||||
// TextView dataCons = groupClienteModelView.findViewById(R.id.vendita_main_list_group_clienti_datacons);
|
|
||||||
// if (subGroupClienti.get(k).getDataCons() != null) {
|
|
||||||
// dataCons.setText(UtilityDate.formatDate(subGroupClienti.get(k).getDataCons(), UtilityDate.COMMONS_DATE_FORMATS.DMY_SLASH));
|
|
||||||
// } else {
|
|
||||||
// dataCons.setText("");
|
|
||||||
// }
|
|
||||||
|
|
||||||
clientLinearLayout.addView(groupClienteModelView);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
holder.mLinearLayoutGroupItemContainer.addView(ordineView);
|
|
||||||
|
|
||||||
|
|
||||||
// Gets the layout params that will allow you to resize the layout
|
|
||||||
ViewGroup.LayoutParams params = emptyView.getLayoutParams();
|
|
||||||
// Changes the height and width to the specified *pixels*
|
|
||||||
params.height = holder.itemView.getHeight();
|
|
||||||
emptyView.setLayoutParams(params);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onViewRecycled(ViewHolder holder){
|
public boolean onPlaceSubheaderBetweenItems(int position) {
|
||||||
if(holder != null){
|
return !this.mDataset.get(position).getRagSocOrd().equalsIgnoreCase(this.mDataset.get(position + 1).getRagSocOrd());
|
||||||
for(int i = 0; i < holder.views.size(); i++){
|
|
||||||
View groupModelView = holder.views.get(i);
|
|
||||||
/*
|
|
||||||
LinearLayout clientLinearLayout = groupModelView.findViewById(R.id.vendita_main_list_group_item_container_clienti_ord);
|
|
||||||
|
|
||||||
for(int k = 0; k < clientLinearLayout.getChildCount(); k++){
|
|
||||||
View cliente = clientLinearLayout.getChildAt(k);
|
|
||||||
((ViewGroup) cliente.getParent()).removeView(cliente);
|
|
||||||
|
|
||||||
sPoolClienti.release(cliente);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
((ViewGroup) groupModelView.getParent()).removeView(groupModelView);
|
|
||||||
sPool.release(groupModelView);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
holder.views.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
super.onViewRecycled(holder);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return the size of your dataset (invoked by the layout manager)
|
|
||||||
@Override
|
@Override
|
||||||
public int getItemCount() {
|
public int getItemSize() {
|
||||||
return mDataset.size();
|
return mDataset.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFilter(List<OrdineVenditaGroupedInevasoDTO> newDataset) {
|
@Override
|
||||||
mDataset = new ArrayList<>();
|
public String getSectionTitle(int position) {
|
||||||
mDataset.addAll(newDataset);
|
return null;
|
||||||
notifyDataSetChanged();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static class OrdineListModel {
|
||||||
|
private String data;
|
||||||
|
private Integer numero;
|
||||||
|
private String gestione;
|
||||||
|
private String dataCons;
|
||||||
|
|
||||||
|
public static OrdineListModel fromOrdine(OrdineVenditaInevasoDTO ordine) {
|
||||||
|
return new OrdineListModel()
|
||||||
|
.setData(ordine.getDataOrdS())
|
||||||
|
.setDataCons(ordine.getDataConsS())
|
||||||
|
.setGestione(ordine.getGestione())
|
||||||
|
.setNumero(ordine.getNumOrd());
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getData() {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OrdineListModel setData(String data) {
|
||||||
|
this.data = data;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getNumero() {
|
||||||
|
return numero;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OrdineListModel setNumero(Integer numero) {
|
||||||
|
this.numero = numero;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGestione() {
|
||||||
|
return gestione;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OrdineListModel setGestione(String gestione) {
|
||||||
|
this.gestione = gestione;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDataCons() {
|
||||||
|
return dataCons;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OrdineListModel setDataCons(String dataCons) {
|
||||||
|
this.dataCons = dataCons;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
|
||||||
|
OrdineListModel that = (OrdineListModel) o;
|
||||||
|
|
||||||
|
if (!getData().equals(that.getData())) return false;
|
||||||
|
if (!getNumero().equals(that.getNumero())) return false;
|
||||||
|
if (!getGestione().equals(that.getGestione())) return false;
|
||||||
|
return getDataCons() != null ? getDataCons().equals(that.getDataCons()) : that.getDataCons() == null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = getData().hashCode();
|
||||||
|
result = 31 * result + getNumero().hashCode();
|
||||||
|
result = 31 * result + getGestione().hashCode();
|
||||||
|
result = 31 * result + (getDataCons() != null ? getDataCons().hashCode() : 0);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,248 +0,0 @@
|
|||||||
package it.integry.integrywmsnative.gest.vendita.core;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.text.Html;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
|
|
||||||
import androidx.core.content.res.ResourcesCompat;
|
|
||||||
import androidx.databinding.DataBindingUtil;
|
|
||||||
import androidx.databinding.Observable;
|
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
|
||||||
|
|
||||||
import com.annimon.stream.Stream;
|
|
||||||
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import it.integry.integrywmsnative.R;
|
|
||||||
import it.integry.integrywmsnative.core.di.BindableBoolean;
|
|
||||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
|
||||||
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
|
||||||
import it.integry.integrywmsnative.databinding.VenditaMainListGroupModelBinding;
|
|
||||||
import it.integry.integrywmsnative.databinding.VenditaMainListModelBinding;
|
|
||||||
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO;
|
|
||||||
import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider;
|
|
||||||
|
|
||||||
public class MainListVenditaAdapterNew extends SectionedRecyclerViewAdapter<MainListVenditaAdapterNew.SubheaderHolder, MainListVenditaAdapterNew.SingleItemViewHolder> implements SectionTitleProvider {
|
|
||||||
|
|
||||||
private Context mContext;
|
|
||||||
|
|
||||||
private HashMap<BindableBoolean, Observable.OnPropertyChangedCallback> mCallbacksDictionary = new HashMap<>();
|
|
||||||
|
|
||||||
private List<OrdineVenditaInevasoDTO> mDataset;
|
|
||||||
private RunnableArgs<OrdineVenditaInevasoDTO> mOnSingleSelectionChanged;
|
|
||||||
|
|
||||||
|
|
||||||
static class SubheaderHolder extends RecyclerView.ViewHolder {
|
|
||||||
|
|
||||||
VenditaMainListModelBinding binding;
|
|
||||||
|
|
||||||
SubheaderHolder(VenditaMainListModelBinding binding) {
|
|
||||||
super(binding.getRoot());
|
|
||||||
this.binding = binding;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
static class SingleItemViewHolder extends RecyclerView.ViewHolder {
|
|
||||||
|
|
||||||
VenditaMainListGroupModelBinding binding;
|
|
||||||
|
|
||||||
SingleItemViewHolder(VenditaMainListGroupModelBinding binding) {
|
|
||||||
super(binding.getRoot());
|
|
||||||
this.binding = binding;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public MainListVenditaAdapterNew(Context context, List<OrdineVenditaInevasoDTO> myDataset, RunnableArgs<OrdineVenditaInevasoDTO> onSingleSelectionChanged) {
|
|
||||||
mContext = context;
|
|
||||||
mDataset = orderItems(myDataset);
|
|
||||||
mOnSingleSelectionChanged = onSingleSelectionChanged;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateItems(List<OrdineVenditaInevasoDTO> updatedDataset) {
|
|
||||||
mDataset.clear();
|
|
||||||
mDataset.addAll(orderItems(updatedDataset));
|
|
||||||
notifyDataSetChanged();
|
|
||||||
notifyDataChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private List<OrdineVenditaInevasoDTO> orderItems(List<OrdineVenditaInevasoDTO> dataset) {
|
|
||||||
return Stream.of(dataset)
|
|
||||||
.sortBy(OrdineVenditaInevasoDTO::getRagSocOrd)
|
|
||||||
.toList();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {
|
|
||||||
VenditaMainListModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.vendita_main_list_model, parent, false);
|
|
||||||
return new SubheaderHolder(binding);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
|
|
||||||
VenditaMainListGroupModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.vendita_main_list_group_model, parent, false);
|
|
||||||
return new SingleItemViewHolder(binding);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onBindSubheaderViewHolder(SubheaderHolder subheaderHolder, int nextItemPosition) {
|
|
||||||
subheaderHolder.binding.venditaMainListGroupHeader.setText(mDataset.get(nextItemPosition).getRagSocOrd());
|
|
||||||
|
|
||||||
subheaderHolder.binding.getRoot().setOnClickListener(v -> {
|
|
||||||
|
|
||||||
boolean anySelected = Stream.of(mDataset)
|
|
||||||
.filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd()))
|
|
||||||
.anyMatch(OrdineVenditaInevasoDTO::isSelected);
|
|
||||||
|
|
||||||
Stream.of(mDataset)
|
|
||||||
.filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd()))
|
|
||||||
.forEach(x -> x.setSelected(!anySelected));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onBindItemViewHolder(SingleItemViewHolder holder, int itemPosition) {
|
|
||||||
OrdineVenditaInevasoDTO ordine = mDataset.get(itemPosition);
|
|
||||||
|
|
||||||
holder.binding.venditaMainListGroupItemContainerCheckBox.setOnCheckedChangeListener(null);
|
|
||||||
|
|
||||||
if (mCallbacksDictionary.containsKey(ordine.selected)) {
|
|
||||||
ordine.selected.removeOnPropertyChangedCallback(mCallbacksDictionary.get(ordine.selected));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
holder.binding.emptyView.setBackgroundColor(ResourcesCompat.getColor(mContext.getResources(), ordine.flagExistCollo() ? R.color.colorPrimary : android.R.color.transparent, null));
|
|
||||||
|
|
||||||
String testataOrdString = String.format(mContext.getString(R.string.ord_ven_testata), String.valueOf(ordine.getNumOrd()), UtilityDate.formatDate(ordine.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
|
|
||||||
holder.binding.venditaMainListGroupItemContainerTestataOrd.setText(Html.fromHtml(testataOrdString));
|
|
||||||
|
|
||||||
String testataDataConsString = String.format(mContext.getString(R.string.ord_ven_testata_data_cons), UtilityDate.formatDate(ordine.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
|
|
||||||
holder.binding.venditaMainListGroupItemContainerTestataDataCons.setText(Html.fromHtml(testataDataConsString));
|
|
||||||
|
|
||||||
holder.binding.venditaMainListGroupItemContainerDetailOrd.setText(ordine.getRifOrd());
|
|
||||||
|
|
||||||
holder.binding.setCheckboxValue(ordine.selected);
|
|
||||||
|
|
||||||
holder.binding.getRoot().setOnClickListener(v -> {
|
|
||||||
ordine.setSelected(!ordine.isSelected());
|
|
||||||
});
|
|
||||||
|
|
||||||
holder.binding.venditaMainListGroupItemContainerCheckBox.setChecked(ordine.isSelected());
|
|
||||||
|
|
||||||
mCallbacksDictionary.put(ordine.selected, new Observable.OnPropertyChangedCallback() {
|
|
||||||
@Override
|
|
||||||
public void onPropertyChanged(Observable sender, int propertyId) {
|
|
||||||
holder.binding.venditaMainListGroupItemContainerCheckBox.setChecked(((BindableBoolean) sender).get());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
holder.binding.venditaMainListGroupItemContainerCheckBox.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
|
||||||
ordine.setSelected(isChecked);
|
|
||||||
mOnSingleSelectionChanged.run(ordine);
|
|
||||||
});
|
|
||||||
|
|
||||||
ordine.selected.addOnPropertyChangedCallback(mCallbacksDictionary.get(ordine.selected));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onPlaceSubheaderBetweenItems(int position) {
|
|
||||||
return !this.mDataset.get(position).getRagSocOrd().equalsIgnoreCase(this.mDataset.get(position + 1).getRagSocOrd());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getItemSize() {
|
|
||||||
return mDataset.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getSectionTitle(int position) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private static class OrdineListModel {
|
|
||||||
private String data;
|
|
||||||
private Integer numero;
|
|
||||||
private String gestione;
|
|
||||||
private String dataCons;
|
|
||||||
|
|
||||||
public static OrdineListModel fromOrdine(OrdineVenditaInevasoDTO ordine) {
|
|
||||||
return new OrdineListModel()
|
|
||||||
.setData(ordine.getDataOrdS())
|
|
||||||
.setDataCons(ordine.getDataConsS())
|
|
||||||
.setGestione(ordine.getGestione())
|
|
||||||
.setNumero(ordine.getNumOrd());
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getData() {
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
public OrdineListModel setData(String data) {
|
|
||||||
this.data = data;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getNumero() {
|
|
||||||
return numero;
|
|
||||||
}
|
|
||||||
|
|
||||||
public OrdineListModel setNumero(Integer numero) {
|
|
||||||
this.numero = numero;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getGestione() {
|
|
||||||
return gestione;
|
|
||||||
}
|
|
||||||
|
|
||||||
public OrdineListModel setGestione(String gestione) {
|
|
||||||
this.gestione = gestione;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDataCons() {
|
|
||||||
return dataCons;
|
|
||||||
}
|
|
||||||
|
|
||||||
public OrdineListModel setDataCons(String dataCons) {
|
|
||||||
this.dataCons = dataCons;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (this == o) return true;
|
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
|
||||||
|
|
||||||
OrdineListModel that = (OrdineListModel) o;
|
|
||||||
|
|
||||||
if (!getData().equals(that.getData())) return false;
|
|
||||||
if (!getNumero().equals(that.getNumero())) return false;
|
|
||||||
if (!getGestione().equals(that.getGestione())) return false;
|
|
||||||
return getDataCons() != null ? getDataCons().equals(that.getDataCons()) : that.getDataCons() == null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
int result = getData().hashCode();
|
|
||||||
result = 31 * result + getNumero().hashCode();
|
|
||||||
result = 31 * result + getGestione().hashCode();
|
|
||||||
result = 31 * result + (getDataCons() != null ? getDataCons().hashCode() : 0);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user