Refactoring activity lista bancali

This commit is contained in:
Giuseppe Scorrano 2021-08-06 11:37:26 +02:00
parent 8d87970a75
commit 627d3646a6
8 changed files with 223 additions and 218 deletions

View File

@ -11,6 +11,8 @@ import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePicking
import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingModule; import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingModule;
import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleComponent; import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleComponent;
import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleModule; import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleModule;
import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliComponent;
import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliModule;
import it.integry.integrywmsnative.gest.main.MainActivityComponent; import it.integry.integrywmsnative.gest.main.MainActivityComponent;
import it.integry.integrywmsnative.gest.main.MainActivityModule; import it.integry.integrywmsnative.gest.main.MainActivityModule;
import it.integry.integrywmsnative.gest.main.MainFragmentComponent; import it.integry.integrywmsnative.gest.main.MainFragmentComponent;
@ -63,6 +65,7 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
MainActivityModule.class, MainActivityModule.class,
MainFragmentModule.class, MainFragmentModule.class,
MainAccettazioneModule.class, MainAccettazioneModule.class,
ListaBancaliModule.class,
ContenutoBancaleModule.class, ContenutoBancaleModule.class,
PVOrdineAcquistoGrigliaModule.class, PVOrdineAcquistoGrigliaModule.class,
PVOrdineAcquistoEditModule.class, PVOrdineAcquistoEditModule.class,
@ -90,6 +93,7 @@ public interface MainApplicationComponent {
MainActivityComponent.Factory mainActivityComponent(); MainActivityComponent.Factory mainActivityComponent();
MainFragmentComponent.Factory mainFragmentComponent(); MainFragmentComponent.Factory mainFragmentComponent();
MainAccettazioneComponent.Factory mainAccettazioneComponent(); MainAccettazioneComponent.Factory mainAccettazioneComponent();
ListaBancaliComponent.Factory listaBancaliComponent();
ContenutoBancaleComponent.Factory contenutoBancaleComponent(); ContenutoBancaleComponent.Factory contenutoBancaleComponent();
PVOrdineAcquistoGrigliaComponent.Factory pvOrdineAcquistoGrigliaComponent(); PVOrdineAcquistoGrigliaComponent.Factory pvOrdineAcquistoGrigliaComponent();
PVOrdineAcquistoEditComponent.Factory pvOrdineAcquistoEditComponent(); PVOrdineAcquistoEditComponent.Factory pvOrdineAcquistoEditComponent();

View File

@ -4,10 +4,16 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.LinearLayoutManager;
import java.util.List; import java.util.List;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.data_cache.DataCache; import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.expansion.BaseActivity; import it.integry.integrywmsnative.core.expansion.BaseActivity;
@ -16,9 +22,10 @@ import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.databinding.ActivityListaBancaliBinding; import it.integry.integrywmsnative.databinding.ActivityListaBancaliBinding;
import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleActivity; import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleActivity;
import it.integry.integrywmsnative.gest.lista_bancali.viewmodel.ListaBancaliViewModel; import it.integry.integrywmsnative.gest.lista_bancali.ui.ListaColliMainListAdapter;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
public class ListaBancaliActivity extends BaseActivity { public class ListaBancaliActivity extends BaseActivity implements ListaBancaliViewModel.Listener{
private static class Key { private static class Key {
private static final String MtbColtsKey = "mtbColtsKey"; private static final String MtbColtsKey = "mtbColtsKey";
@ -28,9 +35,12 @@ public class ListaBancaliActivity extends BaseActivity {
private static final String FlagOnlyResiduo = "flagOnlyResiduo"; private static final String FlagOnlyResiduo = "flagOnlyResiduo";
} }
public ActivityListaBancaliBinding bindings; public ActivityListaBancaliBinding mBindings;
private ListaBancaliViewModel mViewModel; @Inject
ListaBancaliViewModel mViewModel;
private final ObservableArrayList<MtbColt> mtbColts = new ObservableArrayList<>();
private RunnableArgsWithReturn<MtbColt, Boolean> mCanRecoverUl; private RunnableArgsWithReturn<MtbColt, Boolean> mCanRecoverUl;
private PrinterRESTConsumer.Type mPrinterType; private PrinterRESTConsumer.Type mPrinterType;
@ -78,7 +88,12 @@ public class ListaBancaliActivity extends BaseActivity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
bindings = DataBindingUtil.setContentView(this, R.layout.activity_lista_bancali); mBindings = DataBindingUtil.setContentView(this, R.layout.activity_lista_bancali);
MainApplication.appComponent
.listaBancaliComponent()
.create()
.inject(this);
mCanRecoverUl = DataCache.retrieveItem(getIntent().getStringExtra(Key.CanRecoverUL)); mCanRecoverUl = DataCache.retrieveItem(getIntent().getStringExtra(Key.CanRecoverUL));
@ -86,16 +101,36 @@ public class ListaBancaliActivity extends BaseActivity {
mReportName = DataCache.retrieveItem(getIntent().getStringExtra(Key.ReportName)); mReportName = DataCache.retrieveItem(getIntent().getStringExtra(Key.ReportName));
mFlagOnlyResiduo = DataCache.retrieveItem(getIntent().getStringExtra(Key.FlagOnlyResiduo)); mFlagOnlyResiduo = DataCache.retrieveItem(getIntent().getStringExtra(Key.FlagOnlyResiduo));
List<MtbColt> mtbColts = DataCache.retrieveItem(getIntent().getStringExtra(Key.MtbColtsKey)); mtbColts.addAll(DataCache.retrieveItem(getIntent().getStringExtra(Key.MtbColtsKey)));
mViewModel = new ListaBancaliViewModel(this, mtbColts, mFlagOnlyResiduo);
this.initRecyclerView();
setSupportActionBar(this.bindings.toolbar); setSupportActionBar(this.mBindings.toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
} }
public void initRecyclerView() {
mBindings.listaColliMainList.setHasFixedSize(true);
mBindings.listaColliMainList.setLayoutManager(new LinearLayoutManager(this));
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(this, SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(this, R.drawable.divider));
mBindings.listaColliMainList.addItemDecoration(itemDecorator);
ListaColliMainListAdapter adapter = new ListaColliMainListAdapter(mtbColts)
.setOnItemClickListener(mtbColtSelected -> {
this.mViewModel.dispatchMtbColt(mtbColtSelected, mFlagOnlyResiduo, this::startContenutoBancaleActivity);
});
adapter.setEmptyView(mBindings.listaBancaliEmptyView);
mBindings.listaColliMainList.setAdapter(adapter);
mBindings.elevatedToolbar.setRecyclerView(mBindings.listaColliMainList);
}
@Override @Override
public boolean onSupportNavigateUp() { public boolean onSupportNavigateUp() {
onBackPressed(); onBackPressed();

View File

@ -0,0 +1,15 @@
package it.integry.integrywmsnative.gest.lista_bancali;
import dagger.Subcomponent;
@Subcomponent
public interface ListaBancaliComponent {
@Subcomponent.Factory
interface Factory {
ListaBancaliComponent create();
}
void inject(ListaBancaliActivity listaBancaliActivity);
}

View File

@ -0,0 +1,16 @@
package it.integry.integrywmsnative.gest.lista_bancali;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
@Module(subcomponents = ListaBancaliComponent.class)
public class ListaBancaliModule {
@Provides
ListaBancaliViewModel providesListaBancaliViewModel(ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) {
return new ListaBancaliViewModel(colliMagazzinoRESTConsumer);
}
}

View File

@ -0,0 +1,67 @@
package it.integry.integrywmsnative.gest.lista_bancali;
import androidx.databinding.ObservableArrayList;
import javax.inject.Inject;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
public class ListaBancaliViewModel {
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
private Listener mListener;
@Inject
public ListaBancaliViewModel(ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) {
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
}
public void dispatchMtbColt(MtbColt mtbColtToDispatch, boolean onlyResiduo, RunnableArgs<MtbColt> onComplete) {
this.sendOnLoadingStarted();
new Thread(() -> {
mColliMagazzinoRESTConsumer.getByTestata(mtbColtToDispatch, onlyResiduo, false, mtbColt -> {
this.sendOnLoadingEnded();
ObservableArrayList<MtbColr> mtbColrObservableArrayList = new ObservableArrayList<>();
if(mtbColt != null && mtbColt.getMtbColr() != null) mtbColrObservableArrayList.addAll(mtbColt.getMtbColr());
mtbColtToDispatch.setMtbColr(mtbColrObservableArrayList);
onComplete.run(mtbColtToDispatch);
}, this::sendError);
}).start();
}
private void sendOnLoadingStarted() {
if (this.mListener != null) mListener.onLoadingStarted();
}
private void sendOnLoadingEnded() {
if (this.mListener != null) mListener.onLoadingEnded();
}
private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex);
}
public ListaBancaliViewModel setListener(Listener listener) {
this.mListener = listener;
return this;
}
public interface Listener extends ILoadingListener {
void onError(Exception ex);
}
}

View File

@ -0,0 +1,76 @@
package it.integry.integrywmsnative.gest.lista_bancali.ui;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.RecyclerView;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.view.ExtendedRecyclerView;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.databinding.ListaBancaliListModelBinding;
public class ListaColliMainListAdapter extends ExtendedRecyclerView<MtbColt, ListaColliMainListAdapter.ViewHolder> {
private RunnableArgs<MtbColt> mOnItemClickListener;
public static class ViewHolder extends RecyclerView.ViewHolder {
protected ListaBancaliListModelBinding mViewDataBinding;
public ViewHolder(ListaBancaliListModelBinding v) {
super(v.getRoot());
mViewDataBinding = v;
}
public void bind(MtbColt mtbColt) {
mViewDataBinding.setMtbColt(mtbColt);
mViewDataBinding.executePendingBindings();
}
}
public ListaColliMainListAdapter(ObservableArrayList<MtbColt> myDataset) {
super(myDataset);
}
@Override
public ListaColliMainListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
ListaBancaliListModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.lista_bancali_list_model, parent, false);
return new ViewHolder(viewDataBinding);
}
@Override
public void onBindViewHolder(ListaColliMainListAdapter.ViewHolder holder, int position) {
MtbColt item = mDataset.get(position);
holder.bind(item);
holder.mViewDataBinding.getRoot().setOnClickListener(x -> {
if(mOnItemClickListener != null) {
mOnItemClickListener.run(item);
}
});
}
@Override
public void onViewRecycled(ListaColliMainListAdapter.ViewHolder holder) {
super.onViewRecycled(holder);
}
public ListaColliMainListAdapter setOnItemClickListener(RunnableArgs<MtbColt> onItemClickListener) {
this.mOnItemClickListener = onItemClickListener;
return this;
}
}

View File

@ -1,126 +0,0 @@
package it.integry.integrywmsnative.gest.lista_bancali.ui;
import android.content.Context;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableList;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.view.View;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.databinding.ListaBancaliListModelBinding;
public class MainListListaColliAdapter extends RecyclerView.Adapter<MainListListaColliAdapter.ViewHolder> {
protected Context mContext;
protected ObservableArrayList<MtbColt> mDataset;
private View mEmptyView;
private IRecyclerItemClicked<MtbColt> mOnItemClickListener;
public static class ViewHolder extends RecyclerView.ViewHolder {
protected ListaBancaliListModelBinding mViewDataBinding;
public ViewHolder(ListaBancaliListModelBinding v) {
super(v.getRoot());
mViewDataBinding = v;
}
public void bind(MtbColt mtbColt) {
mViewDataBinding.setMtbColt(mtbColt);
mViewDataBinding.executePendingBindings();
}
}
public MainListListaColliAdapter(Context context, ObservableArrayList<MtbColt> myDataset, IRecyclerItemClicked<MtbColt> onItemClickListener, View emptyView) {
mContext = context;
mDataset = myDataset;
mEmptyView = emptyView;
mOnItemClickListener = onItemClickListener;
myDataset.addOnListChangedCallback(onListChangedCallback);
checkIfEmpty();
}
@Override
public MainListListaColliAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
ListaBancaliListModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.lista_bancali_list_model, parent, false);
return new ViewHolder(viewDataBinding);
}
@Override
public void onBindViewHolder(MainListListaColliAdapter.ViewHolder holder, int position) {
MtbColt item = mDataset.get(position);
holder.bind(item);
holder.mViewDataBinding.getRoot().setOnClickListener(x -> {
if(mOnItemClickListener != null) {
mOnItemClickListener.onItemClick(item, position);
}
});
}
@Override
public void onViewRecycled(MainListListaColliAdapter.ViewHolder holder) {
super.onViewRecycled(holder);
}
@Override
public int getItemCount() {
return mDataset.size();
}
void checkIfEmpty() {
if (mEmptyView != null) {
final boolean emptyViewVisible = getItemCount() == 0;
mEmptyView.setVisibility(emptyViewVisible ? View.VISIBLE : View.GONE);
}
}
private ObservableList.OnListChangedCallback onListChangedCallback = new ObservableList.OnListChangedCallback<ObservableList<MtbColt>>() {
@Override
public void onChanged(ObservableList<MtbColt> sender) {
notifyDataSetChanged();
checkIfEmpty();
}
@Override
public void onItemRangeChanged(ObservableList<MtbColt> sender, int positionStart, int itemCount) {
notifyDataSetChanged();
checkIfEmpty();
}
@Override
public void onItemRangeInserted(ObservableList<MtbColt> sender, int positionStart, int itemCount) {
notifyDataSetChanged();
checkIfEmpty();
}
@Override
public void onItemRangeMoved(ObservableList<MtbColt> sender, int fromPosition, int toPosition, int itemCount) {
notifyDataSetChanged();
checkIfEmpty();
}
@Override
public void onItemRangeRemoved(ObservableList<MtbColt> sender, int positionStart, int itemCount) {
notifyDataSetChanged();
checkIfEmpty();
}
};
}

View File

@ -1,82 +0,0 @@
package it.integry.integrywmsnative.gest.lista_bancali.viewmodel;
import android.app.Dialog;
import androidx.core.content.ContextCompat;
import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.LinearLayoutManager;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity;
import it.integry.integrywmsnative.gest.lista_bancali.ui.MainListListaColliAdapter;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
public class ListaBancaliViewModel implements IRecyclerItemClicked<MtbColt> {
private ListaBancaliActivity mContext;
private ObservableArrayList<MtbColt> mMtbColts;
private MainListListaColliAdapter mAdapter;
private boolean mLoadOnlyResiduo;
public ListaBancaliViewModel(ListaBancaliActivity context, List<MtbColt> mtbColts, boolean loadOnlyResiduo){
mContext = context;
mMtbColts = new ObservableArrayList<>();
mMtbColts.addAll(mtbColts);
this.mLoadOnlyResiduo = loadOnlyResiduo;
initRecyclerView();
}
public void initRecyclerView() {
mContext.bindings.listaColliMainList.setHasFixedSize(true);
mContext.bindings.listaColliMainList.setLayoutManager(new LinearLayoutManager(mContext));
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(mContext, SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(mContext, R.drawable.divider));
mContext.bindings.listaColliMainList.addItemDecoration(itemDecorator);
mAdapter = new MainListListaColliAdapter(mContext, mMtbColts, this, mContext.bindings.listaBancaliEmptyView);
mContext.bindings.listaColliMainList.setAdapter(mAdapter);
mContext.bindings.elevatedToolbar.setRecyclerView(mContext.bindings.listaColliMainList);
}
@Override
public void onItemClick(MtbColt item, int position) {
final Dialog progress = UtilityProgress.createDefaultProgressDialog(mContext);
try {
ColliMagazzinoRESTConsumer.getByTestataStatic(item, mLoadOnlyResiduo, false, mtbColt -> {
ObservableArrayList<MtbColr> mtbColrObservableArrayList = new ObservableArrayList<>();
if(mtbColt != null && mtbColt.getMtbColr() != null) mtbColrObservableArrayList.addAll(mtbColt.getMtbColr());
item.setMtbColr(mtbColrObservableArrayList);
progress.dismiss();
mContext.startContenutoBancaleActivity(item);
}, ex -> UtilityExceptions.defaultException(mContext, ex, progress));
} catch (Exception e) {
e.printStackTrace();
UtilityExceptions.defaultException(mContext, e, progress);
}
}
}