diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java index 7e32be22..c7116656 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java @@ -132,6 +132,8 @@ import it.integry.integrywmsnative.view.dialogs.basket_lu.DialogBasketLUComponen import it.integry.integrywmsnative.view.dialogs.basket_lu.DialogBasketLUModule; import it.integry.integrywmsnative.view.dialogs.bind_product_barcode_with_package.DialogBindProductBarcodeWithPackageComponent; import it.integry.integrywmsnative.view.dialogs.bind_product_barcode_with_package.DialogBindProductBarcodeWithPackageModule; +import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArtsComponent; +import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArtsModule; import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromMtbAartListComponent; import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromMtbAartListModule; import it.integry.integrywmsnative.view.dialogs.choose_arts_from_mtbcolr_list.DialogChooseArtsFromMtbColrListComponent; @@ -248,7 +250,8 @@ import it.integry.integrywmsnative.view.dialogs.update_available.DialogUpdateAva DialogAskLivelloPosizioneModule.class, VerificaGiacenzeModule.class, DialogExtraInfoModule.class, - DialogAskDepositoModule.class + DialogAskDepositoModule.class, + DialogChooseArtFromListaArtsModule.class }) public interface MainApplicationComponent { @@ -417,6 +420,8 @@ public interface MainApplicationComponent { DialogAskDepositoComponent.Factory dialogAskDepositoComponent(); + DialogChooseArtFromListaArtsComponent.Factory dialogChooseArtFromListaArtsComponent(); + void inject(MainApplication mainApplication); void inject(AppContext mainApplication); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java index bc1002d7..749b2792 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java @@ -329,8 +329,8 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr @Override public void onArtListLoaded(ArrayList artList, RunnableArgs onArtChoosed) { - new DialogChooseArtFromListaArtsView(true, artList, onArtChoosed) - .show(requireActivity().getSupportFragmentManager(), "tag"); + DialogChooseArtFromListaArtsView.newInstance(true, artList, onArtChoosed) + .show(requireActivity().getSupportFragmentManager(), "dialog-choose-art"); } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java index 29c43d92..70b10dee 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java @@ -1173,8 +1173,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo @Override public void onChooseArtRequest(List artsList, RunnableArgs onComplete) { - new DialogChooseArtFromListaArtsView(true, artsList, onComplete) - .show(getSupportFragmentManager(), "tag"); + DialogChooseArtFromListaArtsView.newInstance(true, artsList, onComplete) + .show(getSupportFragmentManager(), "dialog-choose-art"); } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java index c7e8cd05..6c40c773 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java @@ -367,8 +367,23 @@ public class SpedizioneViewModel { if (this.mListener != null) mListener.onCreateDocsRequest(); } - private void sendChooseArtRequest(List mtbAarts, RunnableArgs onComplete) { - if (this.mListener != null) mListener.onChooseArtRequest(mtbAarts, onComplete); + private MtbAart sendChooseArtRequest(List mtbAarts) { + final CountDownLatch latch = new CountDownLatch(1); + AtomicReference result = new AtomicReference<>(); + + mListener.onChooseArtRequest(mtbAarts, data -> { + result.set(data); + latch.countDown(); + }); + + try { + latch.await(); // Attende che il dialog venga chiuso + return result.get(); + } catch (InterruptedException e) { + this.sendError(e); + } + + return null; } private List sendChooseArtsRequest(List mtbAarts) { @@ -755,13 +770,9 @@ public class SpedizioneViewModel { if (mtbAartList.size() == 1) { this.searchArtFromAnag(mtbAartList.get(0), pickData); } else { - this.sendChooseArtRequest(mtbAartList, art -> { - try { - this.searchArtFromAnag(art, pickData); - } catch (Exception e) { - this.sendError(e); - } - }); + var art = this.sendChooseArtRequest(mtbAartList); + if (art == null) return; + this.searchArtFromAnag(art, pickData); } } else { throw new NoResultFromBarcodeException(barcodeProd); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsAdapter.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsAdapter.java deleted file mode 100644 index c522e3eb..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsAdapter.java +++ /dev/null @@ -1,77 +0,0 @@ -package it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.ViewGroup; - -import androidx.databinding.DataBindingUtil; -import androidx.recyclerview.widget.RecyclerView; - -import java.util.List; - -import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; -import it.integry.integrywmsnative.core.model.MtbAart; -import it.integry.integrywmsnative.databinding.DialogChooseArtFromListaArtItemModelBinding; - -public class DialogChooseArtFromListaArtsAdapter extends RecyclerView.Adapter { - - protected Context mContext; - - private List mDataset; - private final IRecyclerItemClicked mOnItemClickListener; - - public static class ViewHolder extends RecyclerView.ViewHolder { - protected DialogChooseArtFromListaArtItemModelBinding mViewDataBinding; - - - public ViewHolder(DialogChooseArtFromListaArtItemModelBinding v) { - super(v.getRoot()); - mViewDataBinding = v; - } - - public void bind(MtbAart mtbAart) { - mViewDataBinding.setItem(mtbAart); - mViewDataBinding.executePendingBindings(); - } - } - - public DialogChooseArtFromListaArtsAdapter(Context context, List myDataset, IRecyclerItemClicked onItemClickListener) { - mContext = context; - mDataset = myDataset; - mOnItemClickListener = onItemClickListener; - } - - @Override - public DialogChooseArtFromListaArtsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - // create a new view - DialogChooseArtFromListaArtItemModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.dialog_choose_art_from_lista_art__item_model, parent, false); - - return new ViewHolder(viewDataBinding); - } - - @Override - public void onBindViewHolder(DialogChooseArtFromListaArtsAdapter.ViewHolder holder, int position) { - MtbAart item = mDataset.get(position); - holder.bind(item); - - holder.mViewDataBinding.getRoot().setOnClickListener(x -> { - if(mOnItemClickListener != null) { - mOnItemClickListener.onItemClick(item, position); - } - }); - } - - @Override - public void onViewRecycled(DialogChooseArtFromListaArtsAdapter.ViewHolder holder) { - super.onViewRecycled(holder); - } - - @Override - public int getItemCount() { - return mDataset.size(); - } - - - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsComponent.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsComponent.java new file mode 100644 index 00000000..e972c960 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsComponent.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts; + +import dagger.Subcomponent; + +@Subcomponent +public interface DialogChooseArtFromListaArtsComponent { + + @Subcomponent.Factory + interface Factory { + DialogChooseArtFromListaArtsComponent create(); + } + + void inject(DialogChooseArtFromListaArtsView dialogChooseArtFromListaArtsView); +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsModule.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsModule.java new file mode 100644 index 00000000..c38d4ccd --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsModule.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts; + +import dagger.Module; +import dagger.Provides; + +@Module(subcomponents = DialogChooseArtFromListaArtsComponent.class) +public class DialogChooseArtFromListaArtsModule { + + @Provides + DialogChooseArtFromListaArtsViewModel providesDialogChooseArtFromListaArtsViewModel() { + return new DialogChooseArtFromListaArtsViewModel(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsView.java index eed2e817..5b2b1319 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsView.java @@ -1,6 +1,8 @@ package it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts; import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; import android.os.Bundle; import android.view.LayoutInflater; @@ -10,76 +12,116 @@ import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.LinearLayoutManager; import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import com.ravikoradiya.liveadapter.LiveAdapter; +import com.ravikoradiya.liveadapter.Type; import java.util.List; +import java.util.Objects; +import javax.inject.Inject; + +import it.integry.integrywmsnative.BR; +import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; import it.integry.integrywmsnative.core.model.MtbAart; -import it.integry.integrywmsnative.databinding.DialogChooseArtFromListaArtBinding; +import it.integry.integrywmsnative.databinding.DialogChooseArtFromListaArtItemModelBinding; +import it.integry.integrywmsnative.databinding.DialogChooseArtFromListaArtsBinding; import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; +import kotlin.Unit; public class DialogChooseArtFromListaArtsView extends BaseDialogFragment { + @Inject + DialogChooseArtFromListaArtsViewModel mViewModel; - + private DialogChooseArtFromListaArtsBinding mBindings; + private Context mContext; + private final RunnableArgs onComplete; private final boolean mEnableSelection; private final List mListaArts; - private final RunnableArgs mOnItemChoosed; + //Pass here all external parameters + public static DialogChooseArtFromListaArtsView newInstance(boolean enableSelection, List listaArts, RunnableArgs onComplete) { + return new DialogChooseArtFromListaArtsView(enableSelection, listaArts, onComplete); + } - public DialogChooseArtFromListaArtsView(boolean enableSelection, List listaArts, RunnableArgs onItemChoosed) { + private DialogChooseArtFromListaArtsView(boolean enableSelection, List listaArts, RunnableArgs onComplete) { super(); - + this.onComplete = onComplete; this.mEnableSelection = enableSelection; this.mListaArts = listaArts; - this.mOnItemChoosed = onItemChoosed; + + MainApplication.appComponent + .dialogChooseArtFromListaArtsComponent() + .create() + .inject(this); } @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { - var binding = DialogChooseArtFromListaArtBinding.inflate(LayoutInflater.from(requireContext())); + this.mContext = requireContext(); - binding.titleText.setText(this.mEnableSelection ? R.string.dialog_choose_art_from_lista_art : + mBindings = DialogChooseArtFromListaArtsBinding.inflate(LayoutInflater.from(this.mContext), null, false); + mBindings.setLifecycleOwner(this); + + mBindings.titleText.setText(this.mEnableSelection ? R.string.dialog_choose_art_from_lista_art : R.string.articoli_disponibili); - initRecyclerView(binding, mListaArts); + initRecyclerView(mBindings, mListaArts); - setCancelable(false); + setCancelable(true); - var alertDialog = new MaterialAlertDialogBuilder(requireContext()) - .setView(binding.getRoot()) + var alertDialog = new MaterialAlertDialogBuilder(this.mContext) + .setView(mBindings.getRoot()) .setCancelable(isCancelable()) .create(); alertDialog.setCanceledOnTouchOutside(isCancelable()); alertDialog.setOnShowListener(this); + alertDialog.setOnDismissListener(this); return alertDialog; } - private void initRecyclerView(DialogChooseArtFromListaArtBinding binding, List dataset) { + @Override + public void dismiss() { + dismiss(null); + } + + @Override + public void onDismiss(@NonNull DialogInterface dialog) { + dismiss(); + } + + public void dismiss(MtbAart item) { + if (getDialog() != null) getDialog().dismiss(); + onComplete.run(item); + } + + private void initRecyclerView(DialogChooseArtFromListaArtsBinding binding, List dataset) { binding.itemsList.setNestedScrollingEnabled(false); binding.itemsList.setHasFixedSize(true); binding.itemsList.setLayoutManager(new LinearLayoutManager(requireContext())); SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(requireContext(), SimpleDividerItemDecoration.VERTICAL); - itemDecorator.setDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.divider)); + itemDecorator.setDrawable(Objects.requireNonNull(ContextCompat.getDrawable(requireContext(), R.drawable.divider))); binding.itemsList.addItemDecoration(itemDecorator); - IRecyclerItemClicked onItemClickListener = (item, position) -> { - if (mOnItemChoosed != null) { - mOnItemChoosed.run(item); - } + var itemType = new Type(R.layout.dialog_choose_art_from_lista_art__item_model, BR.item); - dismiss(); - }; + itemType.onClick(x -> { + dismiss(x.getBinding().getItem()); + return null; + }); - DialogChooseArtFromListaArtsAdapter mCurrentAdapter = new DialogChooseArtFromListaArtsAdapter( - requireContext(), dataset, this.mEnableSelection ? onItemClickListener : null); - binding.itemsList.setAdapter(mCurrentAdapter); + new LiveAdapter(dataset, BR.item) + .map(MtbAart.class, itemType) + .onNoData(noData -> { +// mBindings.emptyView.setVisibility(noData ? View.VISIBLE : View.GONE); + return Unit.INSTANCE; + }) + .into(this.mBindings.itemsList); } - -} +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsViewModel.java new file mode 100644 index 00000000..1580e077 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsViewModel.java @@ -0,0 +1,5 @@ +package it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts; + +public class DialogChooseArtFromListaArtsViewModel { + +} \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_choose_art_from_lista_arts.xml b/app/src/main/res/layout/dialog_choose_art_from_lista_arts.xml new file mode 100644 index 00000000..4ff53faf --- /dev/null +++ b/app/src/main/res/layout/dialog_choose_art_from_lista_arts.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file