Merge branch 'develop' into feature/FastPickingSpedizione

# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_position_of_lu/DialogAskPositionOfLUView.java
#	app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUView.java
This commit is contained in:
Giuseppe Scorrano 2025-03-04 10:58:15 +01:00
commit 53ba5a962b
22 changed files with 400 additions and 282 deletions

View File

@ -122,5 +122,10 @@ Create the following layout resource file [dialog_${dashName}.xml]
alertDialog.setOnShowListener(this); alertDialog.setOnShowListener(this);
return alertDialog; return alertDialog;
} }
@Override
public void dismiss() {
if(getDialog() != null) getDialog().dismiss();
}
} }

View File

@ -116,6 +116,10 @@ import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskClienteModu
import it.integry.integrywmsnative.view.dialogs.ask_commessa.DialogAskCommessaComponent; import it.integry.integrywmsnative.view.dialogs.ask_commessa.DialogAskCommessaComponent;
import it.integry.integrywmsnative.view.dialogs.ask_linea_prod.DialogAskLineaProdComponent; import it.integry.integrywmsnative.view.dialogs.ask_linea_prod.DialogAskLineaProdComponent;
import it.integry.integrywmsnative.view.dialogs.ask_linea_prod.DialogAskLineaProdModule; import it.integry.integrywmsnative.view.dialogs.ask_linea_prod.DialogAskLineaProdModule;
import it.integry.integrywmsnative.view.dialogs.ask_livello_posizione.DialogAskLivelloPosizioneComponent;
import it.integry.integrywmsnative.view.dialogs.ask_livello_posizione.DialogAskLivelloPosizioneModule;
import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLUComponent;
import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLUModule;
import it.integry.integrywmsnative.view.dialogs.ask_unknown_barcode_notes.DialogAskUnknownBarcodeNotesComponent; import it.integry.integrywmsnative.view.dialogs.ask_unknown_barcode_notes.DialogAskUnknownBarcodeNotesComponent;
import it.integry.integrywmsnative.view.dialogs.ask_unknown_barcode_notes.DialogAskUnknownBarcodeNotesModule; import it.integry.integrywmsnative.view.dialogs.ask_unknown_barcode_notes.DialogAskUnknownBarcodeNotesModule;
import it.integry.integrywmsnative.view.dialogs.ask_vettore.DialogAskVettoreComponent; import it.integry.integrywmsnative.view.dialogs.ask_vettore.DialogAskVettoreComponent;
@ -233,7 +237,9 @@ import it.integry.integrywmsnative.view.dialogs.update_available.DialogUpdateAva
DialogAskVettoreModule.class, DialogAskVettoreModule.class,
DialogCreateNewArtModule.class, DialogCreateNewArtModule.class,
DialogSwitchUserDepoModule.class, DialogSwitchUserDepoModule.class,
DialogUpdateAvailableModule.class DialogUpdateAvailableModule.class,
DialogAskPositionOfLUModule.class,
DialogAskLivelloPosizioneModule.class
}) })
public interface MainApplicationComponent { public interface MainApplicationComponent {
@ -392,6 +398,11 @@ public interface MainApplicationComponent {
DialogUpdateAvailableComponent.Factory dialogUpdateAvailableComponent(); DialogUpdateAvailableComponent.Factory dialogUpdateAvailableComponent();
DialogAskPositionOfLUComponent.Factory dialogAskPositionOfLUComponent();
DialogAskLivelloPosizioneComponent.Factory dialogAskLivelloPosizioneComponent();
void inject(MainApplication mainApplication); void inject(MainApplication mainApplication);
void inject(AppContext mainApplication); void inject(AppContext mainApplication);

View File

@ -99,7 +99,7 @@ public class ArticoliInGiacenzaFragment extends BaseFragment implements ITitledF
} }
private void choosePosition(RunnableArgs<MtbDepoPosizione> onComplete) { private void choosePosition(RunnableArgs<MtbDepoPosizione> onComplete) {
DialogAskPositionOfLUView.makeBase(false, (status, mtbDepoPosizione) -> { DialogAskPositionOfLUView.newInstance(false, (status, mtbDepoPosizione) -> {
if (status == DialogConsts.Results.ABORT) { if (status == DialogConsts.Results.ABORT) {
popMe(); popMe();
@ -107,7 +107,7 @@ public class ArticoliInGiacenzaFragment extends BaseFragment implements ITitledF
onComplete.run(mtbDepoPosizione); onComplete.run(mtbDepoPosizione);
} }
}, this::onError) })
.show(requireActivity().getSupportFragmentManager(), "tag"); .show(requireActivity().getSupportFragmentManager(), "tag");
} }

View File

@ -252,7 +252,7 @@ public class ProdRiposizionamentoDaProdFragment extends BaseFragment implements
}; };
private void choosePosition(RunnableArgs<MtbDepoPosizione> onComplete) { private void choosePosition(RunnableArgs<MtbDepoPosizione> onComplete) {
DialogAskPositionOfLUView.makeBase(false, (status, mtbDepoPosizione) -> { DialogAskPositionOfLUView.newInstance(false, (status, mtbDepoPosizione) -> {
if (status == DialogConsts.Results.ABORT) { if (status == DialogConsts.Results.ABORT) {
popMe(); popMe();
@ -260,7 +260,7 @@ public class ProdRiposizionamentoDaProdFragment extends BaseFragment implements
onComplete.run(mtbDepoPosizione); onComplete.run(mtbDepoPosizione);
} }
}, this::onError) })
.show(requireActivity().getSupportFragmentManager(), "tag"); .show(requireActivity().getSupportFragmentManager(), "tag");
} }

View File

@ -224,7 +224,7 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
// } // }
private void choosePosition(RunnableArgs<MtbDepoPosizione> onComplete) { private void choosePosition(RunnableArgs<MtbDepoPosizione> onComplete) {
DialogAskPositionOfLUView.makeBase(false, (status, mtbDepoPosizione) -> { DialogAskPositionOfLUView.newInstance(false, (status, mtbDepoPosizione) -> {
if (status == DialogConsts.Results.ABORT) { if (status == DialogConsts.Results.ABORT) {
popMe(); popMe();
@ -232,7 +232,7 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
onComplete.run(mtbDepoPosizione); onComplete.run(mtbDepoPosizione);
} }
}, this::onError) })
.show(requireActivity().getSupportFragmentManager(), "tag"); .show(requireActivity().getSupportFragmentManager(), "tag");
} }

View File

@ -95,7 +95,7 @@ public class ProdVersamentoMaterialeInBufferFragment extends BaseFragment implem
private void choosePosition() { private void choosePosition() {
DialogAskPositionOfLUView.makeBase(true, (status, mtbDepoPosizione) -> { DialogAskPositionOfLUView.newInstance(true, (status, mtbDepoPosizione) -> {
if (status == DialogConsts.Results.ABORT) { if (status == DialogConsts.Results.ABORT) {
popMe(); popMe();
@ -105,7 +105,7 @@ public class ProdVersamentoMaterialeInBufferFragment extends BaseFragment implem
}); });
} }
}, this::onError) })
.show(requireActivity().getSupportFragmentManager(), "tag"); .show(requireActivity().getSupportFragmentManager(), "tag");
} }

View File

@ -531,7 +531,7 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
DialogYesNoView.newInstance(null, "Vuoi cambiare la posizione della UL corrente?", result -> { DialogYesNoView.newInstance(null, "Vuoi cambiare la posizione della UL corrente?", result -> {
switch (result) { switch (result) {
case YES: case YES:
DialogAskPositionOfLUView.makeBase(false, (status, mtbDepoPosizione) -> { DialogAskPositionOfLUView.newInstance(false, (status, mtbDepoPosizione) -> {
if (status == DialogConsts.Results.ABORT) { if (status == DialogConsts.Results.ABORT) {
onComplete.run(false, null); onComplete.run(false, null);
} else { } else {
@ -541,7 +541,7 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
onComplete.run(true, null); onComplete.run(true, null);
} }
} }
}, this::onError) })
.show(requireActivity().getSupportFragmentManager(), "tag"); .show(requireActivity().getSupportFragmentManager(), "tag");
break; break;

View File

@ -1035,13 +1035,13 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
DialogYesNoView.newInstance(null, "Vuoi cambiare la posizione della UL corrente?", result -> { DialogYesNoView.newInstance(null, "Vuoi cambiare la posizione della UL corrente?", result -> {
switch (result) { switch (result) {
case YES: case YES:
DialogAskPositionOfLUView.makeBase(false, (status, mtbDepoPosizione) -> { DialogAskPositionOfLUView.newInstance(false, (status, mtbDepoPosizione) -> {
if (status == DialogConsts.Results.ABORT) { if (status == DialogConsts.Results.ABORT) {
onComplete.run(false, null); onComplete.run(false, null);
} else { } else {
onComplete.run(true, mtbDepoPosizione); onComplete.run(true, mtbDepoPosizione);
} }
}, this::onError).show(getSupportFragmentManager(), "tag"); }).show(getSupportFragmentManager(), "tag");
break; break;
case NO: case NO:

View File

@ -2,6 +2,7 @@ package it.integry.integrywmsnative.gest.versamento_merce;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.text.Html; import android.text.Html;
import android.text.SpannableString; import android.text.SpannableString;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -34,8 +35,8 @@ import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.FragmentMainVersamentoMerceBinding; import it.integry.integrywmsnative.databinding.FragmentMainVersamentoMerceBinding;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.view.dialogs.DialogAskLivelloPosizione;
import it.integry.integrywmsnative.view.dialogs.DialogCommon; import it.integry.integrywmsnative.view.dialogs.DialogCommon;
import it.integry.integrywmsnative.view.dialogs.ask_livello_posizione.DialogAskLivelloPosizioneView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_mtbcolr_list.DialogChooseArtsFromMtbColrList; import it.integry.integrywmsnative.view.dialogs.choose_arts_from_mtbcolr_list.DialogChooseArtsFromMtbColrList;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
@ -51,6 +52,9 @@ public class VersamentoMerceFragment extends BaseFragment implements ITitledFrag
@Inject @Inject
DialogInputQuantityV2View mDialogInputQuantityV2View; DialogInputQuantityV2View mDialogInputQuantityV2View;
@Inject
Handler handler;
private FragmentMainVersamentoMerceBinding mBindings = null; private FragmentMainVersamentoMerceBinding mBindings = null;
private final List<Runnable> mOnPreDestroyList = new ArrayList<>(); private final List<Runnable> mOnPreDestroyList = new ArrayList<>();
@ -151,25 +155,26 @@ public class VersamentoMerceFragment extends BaseFragment implements ITitledFrag
@Override @Override
public void onLivelloPosizioneRequired(MtbDepoPosizione posizione, RunnableArgs<MtbDepoPosizione> onComplete) { public void onLivelloPosizioneRequired(MtbDepoPosizione posizione, RunnableArgs<MtbDepoPosizione> onComplete) {
this.getActivity().runOnUiThread(() -> { handler.post(() -> {
DialogAskLivelloPosizione.make(getActivity(), posizione, false, onComplete, this::onError); DialogAskLivelloPosizioneView.newInstance(posizione, false, onComplete, this::onError)
.show(requireActivity().getSupportFragmentManager(), "ask-livello-posizione");
}); });
} }
@Override @Override
public void onSpostamentoTraDepConfirmRequired(String sourceCodMdep, String destinationCodMdep, RunnableArgs<Boolean> onComplete) { public void onSpostamentoTraDepConfirmRequired(String sourceCodMdep, String destinationCodMdep, RunnableArgs<Boolean> onComplete) {
this.getActivity().runOnUiThread(() -> { handler.post(() -> {
DialogSimpleMessageView.makeWarningDialog(Html.fromHtml("Stai spostando una UL dal deposito <b>" + sourceCodMdep + "</b> al deposito <b>" + destinationCodMdep + "</b>"), DialogSimpleMessageView.makeWarningDialog(Html.fromHtml("Stai spostando una UL dal deposito <b>" + sourceCodMdep + "</b> al deposito <b>" + destinationCodMdep + "</b>"),
null, null,
() -> onComplete.run(true), () -> onComplete.run(true),
() -> onComplete.run(false)) () -> onComplete.run(false))
.show(getActivity().getSupportFragmentManager(), "tag"); .show(requireActivity().getSupportFragmentManager(), "tag");
}); });
} }
@Override @Override
public void onArtsChooseRequired(List<MtbColr> mtbColrList, RunnableArgs<List<MtbColr>> onComplete, Runnable onAbort) { public void onArtsChooseRequired(List<MtbColr> mtbColrList, RunnableArgs<List<MtbColr>> onComplete, Runnable onAbort) {
this.requireActivity().runOnUiThread(() -> { handler.post(() -> {
DialogChooseArtsFromMtbColrList DialogChooseArtsFromMtbColrList
.newInstance(mtbColrList, data -> { .newInstance(mtbColrList, data -> {
if(data == null || data.isEmpty()) { if(data == null || data.isEmpty()) {

View File

@ -1,162 +0,0 @@
package it.integry.integrywmsnative.view.dialogs;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import androidx.fragment.app.FragmentActivity;
import com.google.android.material.textfield.TextInputLayout;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.core.utility.UtilityFocus;
import it.integry.integrywmsnative.core.utility.UtilityPosizione;
public class DialogAskLivelloPosizione {
private Context mContext;
private MtbDepoPosizione mtbDepoPosizione;
private Dialog mDialog;
private RunnableArgs<MtbDepoPosizione> onComplete;
private RunnableArgs<Exception> onFailed;
private TextInputLayout livelloTextInputLayout;
private boolean completedFLow = false;
public static void make(FragmentActivity activity, MtbDepoPosizione mtbDepoPosizione, boolean canAbort, RunnableArgs<MtbDepoPosizione> onComplete, RunnableArgs<Exception> onFailed) {
activity.runOnUiThread(() -> {
new DialogAskLivelloPosizione(activity, mtbDepoPosizione, canAbort, onComplete, onFailed).mDialog.show();
});
}
public DialogAskLivelloPosizione(Context context, MtbDepoPosizione mtbDepoPosizione, boolean canAbort, RunnableArgs<MtbDepoPosizione> onComplete, RunnableArgs<Exception> onFailed) {
mContext = context;
this.mtbDepoPosizione = mtbDepoPosizione;
this.onComplete = onComplete;
this.onFailed = onFailed;
LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
View currentView = inflater.inflate(R.layout.dialog_ask_livello_of_position, null, false);
mDialog = new Dialog(mContext);
mDialog.setContentView(currentView);
mDialog.setCanceledOnTouchOutside(false);
mDialog.setCancelable(false);
mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
UtilityDialog.setTo90PercentWidth(mContext, mDialog);
mDialog.setOnDismissListener(dialog -> {
if(!completedFLow) onComplete.run(null);
});
mDialog.setOnShowListener(dialog -> {
if(!canAbort) currentView.findViewById(R.id.button_abort).setVisibility(View.GONE);
currentView.findViewById(R.id.button_confirm).setOnClickListener(v -> {
String levelNumber = ((TextView)currentView.findViewById(R.id.level_number)).getText().toString();
onLevelConfirm(levelNumber);
});
currentView.findViewById(R.id.button_abort).setOnClickListener(v -> {
onLevelAbort();
});
livelloTextInputLayout = currentView.findViewById(R.id.level_number_layout);
UtilityFocus.focusTextBox(mContext, livelloTextInputLayout.getEditText());
livelloTextInputLayout.getEditText().addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(livelloTextInputLayout.getEditText().getText() != null) {
validateLevel(livelloTextInputLayout.getEditText().getText().toString());
} else resetLevelError();
}
@Override
public void afterTextChanged(Editable s) {
}
});
});
}
private void onLevelConfirm(String levelString) {
String newPosizione = mtbDepoPosizione.getPosizione().substring(0, mtbDepoPosizione.getPosizione().length()-1);
newPosizione += levelString;
MtbDepoPosizione foundPosizione = UtilityPosizione.getFromCache(newPosizione);
if(foundPosizione != null) {
resetLevelError();
completedFLow = true;
onComplete.run(foundPosizione);
mDialog.dismiss();
} else {
setLevelError(mContext.getResources().getString(R.string.not_valid));
}
}
private void validateLevel(String levelString) {
String newPosizione = mtbDepoPosizione.getPosizione().substring(0, mtbDepoPosizione.getPosizione().length()-1);
newPosizione += levelString;
if(UtilityPosizione.getFromCache(newPosizione) != null) {
resetLevelError();
} else setLevelError(mContext.getResources().getString(R.string.not_valid));
}
private void setLevelError(String message){
livelloTextInputLayout.setErrorEnabled(true);
livelloTextInputLayout.setError(message);
livelloTextInputLayout.setErrorIconDrawable(null);
}
private void resetLevelError() {
livelloTextInputLayout.setError(null);
}
private void onLevelAbort() {
completedFLow = true;
onComplete.run(null);
mDialog.dismiss();
}
}

View File

@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.ask_livello_posizione;
import dagger.Subcomponent;
@Subcomponent
public interface DialogAskLivelloPosizioneComponent {
@Subcomponent.Factory
interface Factory {
DialogAskLivelloPosizioneComponent create();
}
void inject(DialogAskLivelloPosizioneView dialogAskLivelloPosizioneView);
}

View File

@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.ask_livello_posizione;
import dagger.Module;
import dagger.Provides;
@Module(subcomponents = DialogAskLivelloPosizioneComponent.class)
public class DialogAskLivelloPosizioneModule {
@Provides
DialogAskLivelloPosizioneViewModel providesDialogAskLivelloPosizioneViewModel() {
return new DialogAskLivelloPosizioneViewModel();
}
}

View File

@ -0,0 +1,177 @@
package it.integry.integrywmsnative.view.dialogs.ask_livello_posizione;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import javax.inject.Inject;
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.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.utility.UtilityFocus;
import it.integry.integrywmsnative.core.utility.UtilityPosizione;
import it.integry.integrywmsnative.databinding.DialogAskLivelloPosizioneBinding;
public class DialogAskLivelloPosizioneView extends BaseDialogFragment {
@Inject
DialogAskLivelloPosizioneViewModel mViewModel;
private MtbDepoPosizione mtbDepoPosizione;
private boolean canAbort;
private RunnableArgs<MtbDepoPosizione> onComplete;
private RunnableArgs<Exception> onFailed;
private DialogAskLivelloPosizioneBinding mBindings;
private Context mContext;
private boolean completedFLow = false;
//Pass here all external parameters
public static DialogAskLivelloPosizioneView newInstance(MtbDepoPosizione mtbDepoPosizione, boolean canAbort, RunnableArgs<MtbDepoPosizione> onComplete, RunnableArgs<Exception> onFailed) {
return new DialogAskLivelloPosizioneView(mtbDepoPosizione, canAbort, onComplete, onFailed);
}
private DialogAskLivelloPosizioneView(MtbDepoPosizione mtbDepoPosizione, boolean canAbort, RunnableArgs<MtbDepoPosizione> onComplete, RunnableArgs<Exception> onFailed) {
super();
this.mtbDepoPosizione = mtbDepoPosizione;
this.onComplete = onComplete;
this.onFailed = onFailed;
this.canAbort = canAbort;
MainApplication.appComponent
.dialogAskLivelloPosizioneComponent()
.create()
.inject(this);
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
this.mContext = requireContext();
mBindings = DialogAskLivelloPosizioneBinding.inflate(LayoutInflater.from(this.mContext), null, false);
mBindings.setLifecycleOwner(this);
setCancelable(false);
var alertDialogBuilder = new MaterialAlertDialogBuilder(this.mContext)
.setView(mBindings.getRoot())
.setCancelable(isCancelable())
.setPositiveButton(R.string.confirm, (dialogInterface, i) -> {
String levelNumber = mBindings.levelNumber.getText().toString();
onLevelConfirm(levelNumber);
});
if (canAbort)
alertDialogBuilder.setNeutralButton(R.string.abort, ((dialogInterface, i) -> {
onLevelAbort();
}));
var alertDialog = alertDialogBuilder.create();
alertDialog.setCanceledOnTouchOutside(isCancelable());
alertDialog.setOnShowListener(this);
return alertDialog;
}
@Override
public void dismiss() {
if (getDialog() != null) getDialog().dismiss();
}
@Override
public void onShow(DialogInterface dialogInterface) {
UtilityFocus.focusTextBox(mContext, mBindings.levelNumberLayout.getEditText());
mBindings.levelNumberLayout.getEditText().addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (mBindings.levelNumberLayout.getEditText().getText() != null) {
validateLevel(mBindings.levelNumberLayout.getEditText().getText().toString());
} else resetLevelError();
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
super.onDismiss(dialog);
if(!completedFLow) onComplete.run(null);
}
private void onLevelConfirm(String levelString) {
String newPosizione = mtbDepoPosizione.getPosizione().substring(0, mtbDepoPosizione.getPosizione().length() - 1);
newPosizione += levelString;
MtbDepoPosizione foundPosizione = UtilityPosizione.getFromCache(newPosizione);
if (foundPosizione != null) {
resetLevelError();
completedFLow = true;
onComplete.run(foundPosizione);
dismiss();
} else {
setLevelError(mContext.getResources().getString(R.string.not_valid));
}
}
private void validateLevel(String levelString) {
String newPosizione = mtbDepoPosizione.getPosizione().substring(0, mtbDepoPosizione.getPosizione().length() - 1);
newPosizione += levelString;
if (UtilityPosizione.getFromCache(newPosizione) != null) {
resetLevelError();
} else setLevelError(mContext.getResources().getString(R.string.not_valid));
}
private void setLevelError(String message) {
mBindings.levelNumberLayout.setErrorEnabled(true);
mBindings.levelNumberLayout.setError(message);
mBindings.levelNumberLayout.setErrorIconDrawable(null);
}
private void resetLevelError() {
mBindings.levelNumberLayout.setError(null);
}
private void onLevelAbort() {
completedFLow = true;
onComplete.run(null);
dismiss();
}
}

View File

@ -0,0 +1,5 @@
package it.integry.integrywmsnative.view.dialogs.ask_livello_posizione;
public class DialogAskLivelloPosizioneViewModel {
}

View File

@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.ask_position_of_lu;
import dagger.Subcomponent;
@Subcomponent
public interface DialogAskPositionOfLUComponent {
@Subcomponent.Factory
interface Factory {
DialogAskPositionOfLUComponent create();
}
void inject(DialogAskPositionOfLUView dialogAskPositionOfLUView);
}

View File

@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.ask_position_of_lu;
import dagger.Module;
import dagger.Provides;
@Module(subcomponents = DialogAskPositionOfLUComponent.class)
public class DialogAskPositionOfLUModule {
@Provides
DialogAskPositionOfLUViewModel providesDialogAskPositionOfLUViewModel() {
return new DialogAskPositionOfLUViewModel();
}
}

View File

@ -1,6 +1,7 @@
package it.integry.integrywmsnative.view.dialogs.ask_position_of_lu; package it.integry.integrywmsnative.view.dialogs.ask_position_of_lu;
import android.app.Dialog; import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.os.Bundle; import android.os.Bundle;
import android.text.Editable; import android.text.Editable;
@ -20,7 +21,10 @@ import com.google.android.material.textfield.TextInputLayout;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO; import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
@ -33,41 +37,49 @@ import it.integry.integrywmsnative.core.utility.UtilityPosizione;
import it.integry.integrywmsnative.databinding.DialogAskPositionOfLuBinding; import it.integry.integrywmsnative.databinding.DialogAskPositionOfLuBinding;
import it.integry.integrywmsnative.view.dialogs.DialogConsts; import it.integry.integrywmsnative.view.dialogs.DialogConsts;
public class DialogAskPositionOfLUView extends BaseDialogFragment implements DialogInterface.OnShowListener { public class DialogAskPositionOfLUView extends BaseDialogFragment {
@Inject
DialogAskPositionOfLUViewModel mViewModel;
private DialogAskPositionOfLuBinding mBindings; private DialogAskPositionOfLuBinding mBindings;
private DialogAskPositionOfLUAdapter viewpagerAdapter; private DialogAskPositionOfLUAdapter viewpagerAdapter;
private Context mContext;
private int mBarcodeScannerInstanceID; private int mBarcodeScannerInstanceID;
private boolean mCheckForLineaProd;
private MtbDepoPosizione currentMtbDepoPosizione; private MtbDepoPosizione currentMtbDepoPosizione;
private RunnableArgss<DialogConsts.Results, MtbDepoPosizione> onComplete; private boolean mCheckForLineaProd = false;
private RunnableArgs<Exception> onFailed; private RunnableArgss<DialogConsts.Results, MtbDepoPosizione> onComplete = null;
private TextInputLayout livelloTextInputLayout;
private boolean completedFlow = false; private boolean completedFlow = false;
private TextInputLayout livelloTextInputLayout;
public static DialogAskPositionOfLUView makeBase(boolean checkForLineaProd, RunnableArgss<DialogConsts.Results, MtbDepoPosizione> onComplete, RunnableArgs<Exception> onFailed) { //Pass here all external parameters
return new DialogAskPositionOfLUView(checkForLineaProd, onComplete, onFailed); public static DialogAskPositionOfLUView newInstance(boolean checkForLineaProd, RunnableArgss<DialogConsts.Results, MtbDepoPosizione> onComplete) {
return new DialogAskPositionOfLUView(checkForLineaProd, onComplete);
} }
private DialogAskPositionOfLUView(boolean checkForLineaProd, RunnableArgss<DialogConsts.Results, MtbDepoPosizione> onComplete, RunnableArgs<Exception> onFailed) { private DialogAskPositionOfLUView(boolean checkForLineaProd, RunnableArgss<DialogConsts.Results, MtbDepoPosizione> onComplete) {
super(); super();
this.mCheckForLineaProd = checkForLineaProd; this.mCheckForLineaProd = checkForLineaProd;
this.onComplete = onComplete; this.onComplete = onComplete;
this.onFailed = onFailed;
MainApplication.appComponent
.dialogAskPositionOfLUComponent()
.create()
.inject(this);
} }
@NonNull @NonNull
@Override @Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
this.initBarcode(); this.mContext = requireContext();
mBindings = DialogAskPositionOfLuBinding.inflate(LayoutInflater.from(requireActivity()), null, false); mBindings = DialogAskPositionOfLuBinding.inflate(LayoutInflater.from(this.mContext), null, false);
mBindings.setLifecycleOwner(this); mBindings.setLifecycleOwner(this);
List<Integer> views = new ArrayList<>(); List<Integer> views = new ArrayList<>();
@ -78,11 +90,16 @@ public class DialogAskPositionOfLUView extends BaseDialogFragment implements Dia
mBindings.viewpager.setAdapter(viewpagerAdapter); mBindings.viewpager.setAdapter(viewpagerAdapter);
mBindings.viewpager.beginFakeDrag(); mBindings.viewpager.beginFakeDrag();
var alertDialog = new MaterialAlertDialogBuilder(requireContext()) this.initBarcode();
setCancelable(false);
var alertDialog = new MaterialAlertDialogBuilder(this.mContext)
.setView(mBindings.getRoot()) .setView(mBindings.getRoot())
.setCancelable(false) .setCancelable(isCancelable())
.create(); .create();
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.setCanceledOnTouchOutside(isCancelable());
alertDialog.setOnShowListener(this); alertDialog.setOnShowListener(this);
return alertDialog; return alertDialog;
} }
@ -97,6 +114,11 @@ public class DialogAskPositionOfLUView extends BaseDialogFragment implements Dia
} }
} }
@Override
public void dismiss() {
if (getDialog() != null) getDialog().dismiss();
}
@Override @Override
public void onShow(DialogInterface dialog) { public void onShow(DialogInterface dialog) {
((AppCompatTextView) viewpagerAdapter.getPage(0) ((AppCompatTextView) viewpagerAdapter.getPage(0)
@ -146,7 +168,7 @@ public class DialogAskPositionOfLUView extends BaseDialogFragment implements Dia
.setOnScanSuccessful(onScanSuccessfull) .setOnScanSuccessful(onScanSuccessfull)
.setOnScanFailed(this::onError)); .setOnScanFailed(this::onError));
BarcodeManager.enable(mBarcodeScannerInstanceID); BarcodeManager.enable();
} }
@Override @Override
@ -158,7 +180,7 @@ public class DialogAskPositionOfLUView extends BaseDialogFragment implements Dia
private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> { private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
BarcodeManager.disable(mBarcodeScannerInstanceID); BarcodeManager.disable();
if (!isOnLivelloPage()) { if (!isOnLivelloPage()) {
@ -169,11 +191,11 @@ public class DialogAskPositionOfLUView extends BaseDialogFragment implements Dia
if (!mCheckForLineaProd && !currentMtbDepoPosizione.isFlagLineaProduzione() && UtilityPosizione.isPosizioneWithLivello(foundPosizione)) { if (!mCheckForLineaProd && !currentMtbDepoPosizione.isFlagLineaProduzione() && UtilityPosizione.isPosizioneWithLivello(foundPosizione)) {
askLivello(); askLivello();
BarcodeManager.enable(mBarcodeScannerInstanceID); BarcodeManager.enable();
} else { } else {
completedFlow = true; completedFlow = true;
BarcodeManager.enable(mBarcodeScannerInstanceID); BarcodeManager.enable();
if (onComplete != null) if (onComplete != null)
onComplete.run(DialogConsts.Results.YES, foundPosizione); onComplete.run(DialogConsts.Results.YES, foundPosizione);
@ -181,14 +203,14 @@ public class DialogAskPositionOfLUView extends BaseDialogFragment implements Dia
} }
} else { } else {
BarcodeManager.enable(mBarcodeScannerInstanceID); BarcodeManager.enable();
Toast.makeText(requireContext(), "Barcode non riconosciuto", Toast.LENGTH_SHORT) Toast.makeText(requireContext(), "Barcode non riconosciuto", Toast.LENGTH_SHORT)
.show(); .show();
} }
} else { } else {
Toast.makeText(requireContext(), "Barcode non riconosciuto", Toast.LENGTH_SHORT) Toast.makeText(requireContext(), "Barcode non riconosciuto", Toast.LENGTH_SHORT)
.show(); .show();
BarcodeManager.enable(mBarcodeScannerInstanceID); BarcodeManager.enable();
} }
}; };
@ -237,4 +259,5 @@ public class DialogAskPositionOfLUView extends BaseDialogFragment implements Dia
onComplete.run(DialogConsts.Results.ABORT, null); onComplete.run(DialogConsts.Results.ABORT, null);
dismiss(); dismiss();
} }
}
}

View File

@ -0,0 +1,5 @@
package it.integry.integrywmsnative.view.dialogs.ask_position_of_lu;
public class DialogAskPositionOfLUViewModel {
}

View File

@ -109,15 +109,22 @@ public class DialogScanOrCreateLUView extends BaseDialogFragment implements Dial
.setView(mBindings.getRoot()) .setView(mBindings.getRoot())
.setCancelable(isCancelable()) .setCancelable(isCancelable())
.create(); .create();
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.setCanceledOnTouchOutside(isCancelable());
alertDialog.setOnShowListener(this); alertDialog.setOnShowListener(this);
alertDialog.setOnDismissListener(this);
return alertDialog; return alertDialog;
} }
@Override
public void dismiss() {
if(getDialog() != null) getDialog().dismiss();
}
@Override @Override
public void onDismiss(@NonNull DialogInterface dialog) { public void onDismiss(@NonNull DialogInterface dialog) {
BarcodeManager.removeCallback(mBarcodeScannerInstanceID); BarcodeManager.removeCallback(mBarcodeScannerInstanceID);
BarcodeManager.enable(mBarcodeScannerInstanceID);
if (openedMtbColt == null) { if (openedMtbColt == null) {
mOnComplete.run(null, false); mOnComplete.run(null, false);
} }
@ -125,11 +132,13 @@ public class DialogScanOrCreateLUView extends BaseDialogFragment implements Dial
} }
private void initBarcode() { private void initBarcode() {
mBarcodeScannerInstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() mBarcodeScannerInstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(onScanSuccessfull) .setOnScanSuccessful(onScanSuccessfull)
.setOnScanFailed(this::onError)); .setOnScanFailed(this::onError));
BarcodeManager.enable(mBarcodeScannerInstanceID); BarcodeManager.enable();
setBarcodeListener(true); setBarcodeListener(true);
} }
@ -165,6 +174,7 @@ public class DialogScanOrCreateLUView extends BaseDialogFragment implements Dial
public void onLUOpened(MtbColt mtbColt, boolean created) { public void onLUOpened(MtbColt mtbColt, boolean created) {
this.openedMtbColt = mtbColt; this.openedMtbColt = mtbColt;
mOnComplete.run(mtbColt, created); mOnComplete.run(mtbColt, created);
dismiss(); dismiss();
} }

View File

@ -1,68 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.text.Html" />
<import type="it.integry.integrywmsnative.R" />
<variable
name="mContext"
type="android.content.Context" />
</data>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
app:cardCornerRadius="12dp"
app:cardElevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/light_blue_300"
android:gravity="center_horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_error_white_24dp"
android:layout_margin="24dp"/>
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="24dp"
android:paddingLeft="24dp"
android:paddingRight="24dp">
<TextView
android:id="@+id/title_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/TextViewMaterial.Dialog.HeadlineText"
android:text="@string/placement"
android:gravity="center_horizontal"/>
<include
layout="@layout/dialog_ask_position_of_lu__page2" />
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
</layout>

View File

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
app:cardCornerRadius="16dp"
app:cardElevation="0dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="16dp"
android:paddingVertical="16dp">
<androidx.appcompat.widget.AppCompatImageView
style="@style/MaterialAlertDialog.Material3.Title.Icon.CenterStacked"
android:layout_width="36dp"
android:layout_height="36dp"
android:src="@drawable/ic_error_white_24dp"
app:tint="?colorPrimary" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title_text"
style="@style/MaterialAlertDialog.Material3.Title.Text.CenterStacked"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_marginBottom="16dp"
android:text="@string/placement" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/level_number_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/level_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/level"
android:inputType="number"
style="@style/TextInputEditText.OutlinePrimary"/>
</com.google.android.material.textfield.TextInputLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.cardview.widget.CardView>
</layout>

View File

@ -1,11 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"> <layout xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.text.Html" />
<import type="it.integry.integrywmsnative.R" />
</data>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent" android:orientation="vertical" android:layout_width="match_parent"
@ -50,5 +44,4 @@
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>
</layout> </layout>