Refactoring DialogChooseArtsFromMtbColr

This commit is contained in:
2023-02-06 10:46:46 +01:00
parent 92e9529cc5
commit e25cc9e825
10 changed files with 303 additions and 545 deletions

View File

@@ -60,8 +60,4 @@ public class CheckableMtbColr {
this.hidden = hidden;
return this;
}
public void toggleCheck() {
this.checked.set(!this.checked.get());
}
}

View File

@@ -1,28 +1,27 @@
package it.integry.integrywmsnative.view.dialogs.choose_arts_from_mtbcolr_list;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.SearchView;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Stream;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.ravikoradiya.liveadapter.LiveAdapter;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.BR;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
@@ -35,33 +34,34 @@ import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.Ean128Model;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogChooseArtsFromMtbColrListLayoutBinding;
import it.integry.integrywmsnative.view.dialogs.DialogCommon;
import kotlin.Unit;
public class DialogChooseArtsFromMtbColrList extends BaseDialogFragment {
public class DialogChooseArtsFromMtbColrList extends BaseDialogFragment implements DialogInterface.OnShowListener {
@Inject
DialogChooseArtsFromMtbColrListViewModel mViewModel;
@Inject
BarcodeRESTConsumer barcodeRESTConsumer;
@Inject
ArticoloRESTConsumer articoloRESTConsumer;
private Context context;
private int mBarcodeScannerIstanceID;
private final List<MtbColr> inputMtbColrList;
private MtbAart selectedArt;
private final RunnableArgs<List<MtbColr>> onConfirmed;
private final Runnable onAbort;
private DialogChooseArtsFromMtbColrListLayoutBinding mBindings;
private DialogChooseArtsFromMtbColrListAdapter currentAdapter;
private final RunnableArgs<List<MtbColr>> mOnItemsChoosed;
private final Runnable mOnAbort;
private final List<DialogChooseArtsFromMtbColrListItemModel> mDataset;
private int mBarcodeScannerIstanceID;
private MtbAart selectedArt;
private List<DialogChooseArtsFromMtbColrListItemModel> mtbColrItemModels;
private final MutableLiveData<List<DialogChooseArtsFromMtbColrListItemModel>> hiddenMtbColrItemModels = new MutableLiveData<>();
private Context mContext;
public static DialogChooseArtsFromMtbColrList newInstance(List<MtbColr> listaMtbColr, RunnableArgs<List<MtbColr>> onItemsChoosed, Runnable onAbort) {
return new DialogChooseArtsFromMtbColrList(listaMtbColr, onItemsChoosed, onAbort);
@@ -77,80 +77,99 @@ public class DialogChooseArtsFromMtbColrList extends BaseDialogFragment {
this.selectedArt = mtbAart;
}
private DialogChooseArtsFromMtbColrList(List<MtbColr> listaMtbColr, RunnableArgs<List<MtbColr>> onItemsChoosed, Runnable onAbort) {
private DialogChooseArtsFromMtbColrList(List<MtbColr> listaMtbColr, RunnableArgs<List<MtbColr>> onConfirmed, Runnable onAbort) {
super();
mOnItemsChoosed = onItemsChoosed;
mOnAbort = onAbort;
this.inputMtbColrList = listaMtbColr;
mDataset = new ArrayList<>();
this.onConfirmed = onConfirmed;
this.onAbort = onAbort;
if (listaMtbColr != null) {
for (MtbColr mtbColr : listaMtbColr) {
if (UtilityString.isNullOrEmpty(mtbColr.getUntMis()) && mtbColr.getMtbAart() != null) {
mtbColr.setUntMis(mtbColr.getMtbAart().getUntMis());
}
// mDataset = new ArrayList<>();
mDataset.add(new DialogChooseArtsFromMtbColrListItemModel().setMtbColr(mtbColr));
}
}
// if (listaMtbColr != null) {
// for (MtbColr mtbColr : listaMtbColr) {
// if (UtilityString.isNullOrEmpty(mtbColr.getUntMis()) && mtbColr.getMtbAart() != null) {
// mtbColr.setUntMis(mtbColr.getMtbAart().getUntMis());
// }
//
// mDataset.add(new DialogChooseArtsFromMtbColrListItemModel().setMtbColr(mtbColr));
// }
// }
}
@Nullable
@NonNull
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
this.mContext = requireContext();
this.context = getActivity();
mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_choose_arts_from_mtb_colr_list_layout, null, false);
mBindings.setLifecycleOwner(getViewLifecycleOwner());
mBindings = DialogChooseArtsFromMtbColrListLayoutBinding.inflate(LayoutInflater.from(this.mContext), null, false);
mBindings.setLifecycleOwner(this);
MainApplication.appComponent
.dialogChooseArtsFromListaArtsComponent()
.create()
.inject(this);
UtilityDialog.setTo90PercentWidth(context, this);
var cancelable = false;
mBindings.emptyView.setVisibility(mDataset != null && mDataset.size() > 0 ? View.GONE : View.VISIBLE);
var alertDialog = new MaterialAlertDialogBuilder(this.mContext)
.setView(mBindings.getRoot())
.setCancelable(cancelable)
.setPositiveButton(R.string.ok, (dialog, which) -> {
var selectedArts = Stream.of(this.mtbColrItemModels)
.filter(x -> x.getChecked().get())
.map(DialogChooseArtsFromMtbColrListItemModel::getMtbColr)
.toList();
if (selectedArts.isEmpty()) {
if (this.onAbort != null) this.onAbort.run();
return;
}
if (this.onConfirmed != null)
this.onConfirmed.run(selectedArts);
})
.setNegativeButton(R.string.abort, (dialog, which) -> {
if (this.onAbort != null) this.onAbort.run();
})
.create();
initRecyclerView();
initFilter();
setupBarcode();
mBindings.positiveButton.setOnClickListener(v -> {
dismiss();
onPositiveClick();
});
mBindings.negativeButton.setOnClickListener(v -> {
dismiss();
onNegativeClick();
});
getDialog().setCanceledOnTouchOutside(false);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
return mBindings.getRoot();
alertDialog.setOnShowListener(this);
alertDialog.setCanceledOnTouchOutside(cancelable);
return alertDialog;
}
@Override
public void onStart() {
super.onStart();
public void onShow(DialogInterface dialogInterface) {
this.initList();
this.initFilter();
this.setupBarcode();
if (selectedArt != null) {
this.loadArticolo(selectedArt.getBarCode(), null);
}
}
private void initRecyclerView() {
mBindings.listaArts.setNestedScrollingEnabled(false);
private void initList() {
mBindings.listaArts.setHasFixedSize(true);
mBindings.listaArts.setLayoutManager(new LinearLayoutManager(context));
currentAdapter = new DialogChooseArtsFromMtbColrListAdapter(context, mDataset);
mBindings.listaArts.setAdapter(currentAdapter);
this.mtbColrItemModels = Stream.of(this.inputMtbColrList)
.map(x -> new DialogChooseArtsFromMtbColrListItemModel()
.setMtbColr(x))
.toList();
this.hiddenMtbColrItemModels.setValue(this.mtbColrItemModels);
new LiveAdapter(this.hiddenMtbColrItemModels, this, BR.item)
.map(DialogChooseArtsFromMtbColrListItemModel.class, R.layout.dialog_choose_arts_from_mtb_colr_list__item_model)
.onNoData(noData -> {
mBindings.emptyView.setVisibility(noData ? View.VISIBLE : View.GONE);
return Unit.INSTANCE;
})
.into(this.mBindings.listaArts);
}
@@ -163,97 +182,63 @@ public class DialogChooseArtsFromMtbColrList extends BaseDialogFragment {
mBindings.mainSearch.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
// removeListFilter();
//
// if (!UtilityString.isNullOrEmpty(query) && query.trim().length() > 3) {
// List<DialogChooseArtsFromListaArtsItemModel> foundRowsList = Stream.of(mDataset)
// .filter(x -> {
// String codMart = x.getMtbColr().getMtbAart().getCodMart();
// String descrizioneArt = x.getMtbColr().getMtbAart().getDescrizioneEstesa();
// String diacod = x.getMtbColr().getMtbAart().getDiacod();
//
// return ((codMart.startsWith(query) ||
// codMart.endsWith(query) ||
// codMart.contains(query) ||
// codMart.equalsIgnoreCase(query)) ||
// (descrizioneArt.startsWith(query) ||
// descrizioneArt.endsWith(query) ||
// descrizioneArt.contains(query) ||
// descrizioneArt.equalsIgnoreCase(query)) ||
// (diacod.startsWith(query) ||
// diacod.endsWith(query) ||
// diacod.contains(query) ||
// diacod.equalsIgnoreCase(query))) &&
// !x.isHidden();
// })
// .toList();
//
// for (int i = 0; i < mDataset.size(); i++) {
// mDataset.get(i).setHidden(!foundRowsList.contains(mDataset.get(i)));
// }
// }
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
removeListFilter();
newText = newText.toLowerCase();
if (!UtilityString.isNullOrEmpty(newText) && newText.trim().length() > 2) {
String finalNewText = newText;
List<DialogChooseArtsFromMtbColrListItemModel> foundRowsList = Stream.of(mDataset)
.filter(x -> {
String codMart = x.getMtbColr().getMtbAart().getCodMart().toLowerCase();
String descrizioneArt = x.getMtbColr().getMtbAart().getDescrizioneEstesa().toLowerCase();
String diacod = x.getMtbColr().getMtbAart().getDiacod();
if (!UtilityString.isNullOrEmpty(diacod)) {
diacod = diacod.toLowerCase();
}
String finalNewText = newText;
final List<DialogChooseArtsFromMtbColrListItemModel> filtered = Stream.of(mtbColrItemModels)
.filter(x -> {
String codMart = x.getMtbColr().getMtbAart().getCodMart().toLowerCase();
String descrizioneArt = x.getMtbColr().getMtbAart().getDescrizioneEstesa().toLowerCase();
String diacod = x.getMtbColr().getMtbAart().getDiacod();
if (!UtilityString.isNullOrEmpty(diacod)) {
diacod = diacod.toLowerCase();
}
return ((codMart.startsWith(finalNewText) ||
codMart.endsWith(finalNewText) ||
codMart.contains(finalNewText) ||
codMart.equalsIgnoreCase(finalNewText)) ||
(descrizioneArt.startsWith(finalNewText) ||
descrizioneArt.endsWith(finalNewText) ||
descrizioneArt.contains(finalNewText) ||
descrizioneArt.equalsIgnoreCase(finalNewText)) ||
(!UtilityString.isNullOrEmpty(diacod) && (diacod.startsWith(finalNewText) ||
diacod.endsWith(finalNewText) ||
diacod.contains(finalNewText) ||
diacod.equalsIgnoreCase(finalNewText)))) &&
!x.isHidden();
})
.toList();
for (int i = 0; i < mDataset.size(); i++) {
mDataset.get(i).setHidden(!foundRowsList.contains(mDataset.get(i)));
}
}
return ((codMart.startsWith(finalNewText) ||
codMart.endsWith(finalNewText) ||
codMart.contains(finalNewText) ||
codMart.equalsIgnoreCase(finalNewText)) ||
(descrizioneArt.startsWith(finalNewText) ||
descrizioneArt.endsWith(finalNewText) ||
descrizioneArt.contains(finalNewText) ||
descrizioneArt.equalsIgnoreCase(finalNewText)) ||
(!UtilityString.isNullOrEmpty(diacod) && (diacod.startsWith(finalNewText) ||
diacod.endsWith(finalNewText) ||
diacod.contains(finalNewText) ||
diacod.equalsIgnoreCase(finalNewText))));
})
.toList();
hiddenMtbColrItemModels.postValue(filtered);
return true;
}
});
}
private void removeListFilter() {
for (DialogChooseArtsFromMtbColrListItemModel itemModel : mtbColrItemModels) {
itemModel.setHidden(false);
}
}
private void setupBarcode() {
BarcodeManager.enable();
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(onScanSuccessfull)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(context, ex, false)));
.setOnScanFailed(ex -> UtilityExceptions.defaultException(mContext, ex, false)));
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
BarcodeManager.removeCallback(mBarcodeScannerIstanceID);
this.mOnAbort.run();
this.onAbort.run();
super.onDismiss(dialog);
}
@@ -290,18 +275,14 @@ public class DialogChooseArtsFromMtbColrList extends BaseDialogFragment {
if (!UtilityString.isNullOrEmpty(ean128Model.Gtin) || !UtilityString.isNullOrEmpty(ean128Model.Content)) {
this.loadArticolo(barcodeProd, ean128Model);
} else {
DialogCommon.showNoArtFoundDialog(context, () -> {
onLoadingEnded();
});
DialogCommon.showNoArtFoundDialog(mContext, this::onLoadingEnded);
}
} else {
//EAN 128 non completo o comunque mancano i riferimenti al prodotto
DialogCommon.showNoArtFoundDialog(context, () -> {
onLoadingEnded();
});
DialogCommon.showNoArtFoundDialog(mContext, this::onLoadingEnded);
}
}, this::onError);
@@ -320,9 +301,7 @@ public class DialogChooseArtsFromMtbColrList extends BaseDialogFragment {
} else {
DialogCommon.showNoArtFoundDialog(context, () -> {
onLoadingEnded();
});
DialogCommon.showNoArtFoundDialog(mContext, this::onLoadingEnded);
}
}, this::onError);
@@ -332,38 +311,20 @@ public class DialogChooseArtsFromMtbColrList extends BaseDialogFragment {
private void searchArtInList(MtbAart mtbAart, Ean128Model ean128Model) {
removeListFilter();
List<DialogChooseArtsFromMtbColrListItemModel> foundRowsList = Stream.of(mDataset)
List<DialogChooseArtsFromMtbColrListItemModel> foundRowsList = Stream.of(mtbColrItemModels)
.filter(x -> x.getMtbColr().getMtbAart().getCodMart().equalsIgnoreCase(mtbAart.getCodMart()) &&
!x.isHidden())
.toList();
if (foundRowsList.size() == 0) {
DialogCommon.showNoArtFoundDialog(context, null);
DialogCommon.showNoArtFoundDialog(mContext, null);
} else {
for (int i = 0; i < mDataset.size(); i++) {
mDataset.get(i).setHidden(!foundRowsList.contains(mDataset.get(i)));
for (int i = 0; i < mtbColrItemModels.size(); i++) {
mtbColrItemModels.get(i).setHidden(!foundRowsList.contains(mtbColrItemModels.get(i)));
}
}
}
private void removeListFilter() {
for (DialogChooseArtsFromMtbColrListItemModel itemModel : mDataset) {
itemModel.setHidden(false);
}
}
private void onPositiveClick() {
if (mOnItemsChoosed != null) {
mOnItemsChoosed.run(currentAdapter.getSelectedItems());
}
}
private void onNegativeClick() {
this.dismiss();
}
}

View File

@@ -1,131 +0,0 @@
package it.integry.integrywmsnative.view.dialogs.choose_arts_from_mtbcolr_list;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.Observable;
import androidx.recyclerview.widget.RecyclerView;
import com.annimon.stream.Stream;
import java.util.HashMap;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.model.CheckableMtbColr;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityNumber;
import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogChooseArtsFromMtbColrListItemModelBinding;
public class DialogChooseArtsFromMtbColrListAdapter extends RecyclerView.Adapter<DialogChooseArtsFromMtbColrListAdapter.ViewHolder> {
protected Context mContext;
private List<CheckableMtbColr> mDataset;
private HashMap<CheckableMtbColr, Integer> mDatasetPositions = new HashMap<>();
public DialogChooseArtsFromMtbColrListAdapter(Context context, List<DialogChooseArtsFromMtbColrListItemModel> myDataset) {
mContext = context;
if(myDataset != null) {
mDataset = Stream.of(myDataset)
.withoutNulls()
.map(CheckableMtbColr::new).toList();
for(int i = 0; i < mDataset.size(); i++) {
final CheckableMtbColr itemModel = mDataset.get(i);
mDatasetPositions.put(itemModel, i);
itemModel.getHidden().addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(Observable sender, int propertyId) {
onItemHidden(itemModel);
}
});
}
}
}
private void onItemHidden(CheckableMtbColr itemModel) {
if(itemModel.isHidden()) {
mDataset.remove(itemModel);
} else {
mDataset.add(mDatasetPositions.get(itemModel) , itemModel);
}
notifyDataSetChanged();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private DialogChooseArtsFromMtbColrListItemModelBinding mViewDataBinding;
public ViewHolder(DialogChooseArtsFromMtbColrListItemModelBinding v) {
super(v.getRoot());
mViewDataBinding = v;
}
public void bind(CheckableMtbColr checkableMtbColr) {
mViewDataBinding.setCheckableMtbColr(checkableMtbColr);
MtbColr mtbColr = checkableMtbColr.getItem().getMtbColr();
//Setting qty with unt_mis
if(!SettingsManager.iDB().isFlagForceAllToColli() && (mtbColr.getMtbAart() == null || mtbColr.getMtbAart().isFlagQtaCnfFissaBoolean())){
String text = UtilityNumber.decimalToString(mtbColr.getQtaCol());
if(mtbColr.getMtbAart() != null) {
text += !UtilityString.isNullOrEmpty(mtbColr.getMtbAart().getUntMis()) ? "\n" + mtbColr.getMtbAart().getUntMis() : "";
}
mViewDataBinding.qtaTextview.setText(text);
} else {
mViewDataBinding.qtaTextview.setText(UtilityNumber.decimalToString(mtbColr.getNumCnf()) + "\n" + UtilityResources.getString(R.string.unt_mis_col));
}
mViewDataBinding.executePendingBindings();
}
}
@Override
public DialogChooseArtsFromMtbColrListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
DialogChooseArtsFromMtbColrListItemModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.dialog_choose_arts_from_mtb_colr_list__item_model, parent, false);
return new ViewHolder(viewDataBinding);
}
@Override
public void onBindViewHolder(DialogChooseArtsFromMtbColrListAdapter.ViewHolder holder, int position) {
CheckableMtbColr item = mDataset.get(position);
holder.bind(item);
}
@Override
public void onViewRecycled(DialogChooseArtsFromMtbColrListAdapter.ViewHolder holder) {
super.onViewRecycled(holder);
}
@Override
public int getItemCount() {
return mDataset.size();
}
public List<MtbColr> getSelectedItems() {
return Stream.of(mDataset)
.filter(y -> y.getChecked().get())
.map(x -> x.getItem().getMtbColr()).toList();
}
}

View File

@@ -6,7 +6,8 @@ import it.integry.integrywmsnative.core.model.MtbColr;
public class DialogChooseArtsFromMtbColrListItemModel {
private MtbColr mtbColr;
private BindableBoolean hidden = new BindableBoolean(false);
private final BindableBoolean checked = new BindableBoolean(false);
private final BindableBoolean hidden = new BindableBoolean(false);
public MtbColr getMtbColr() {
return mtbColr;
@@ -17,6 +18,10 @@ public class DialogChooseArtsFromMtbColrListItemModel {
return this;
}
public BindableBoolean getChecked() {
return checked;
}
public boolean isHidden() {
return hidden.get();
}

View File

@@ -1,7 +1,12 @@
package it.integry.integrywmsnative.view.dialogs.choose_arts_from_mtbcolr_list;
import dagger.Module;
import dagger.Provides;
@Module(subcomponents = DialogChooseArtsFromMtbColrListComponent.class)
public class DialogChooseArtsFromMtbColrListModule {
@Provides
DialogChooseArtsFromMtbColrListViewModel providesDialogChooseArtsFromMtbColrListViewModel() {
return new DialogChooseArtsFromMtbColrListViewModel();
}
}

View File

@@ -0,0 +1,4 @@
package it.integry.integrywmsnative.view.dialogs.choose_arts_from_mtbcolr_list;
public class DialogChooseArtsFromMtbColrListViewModel {
}