Implementazione dagger

This commit is contained in:
Giuseppe Scorrano 2020-02-27 17:29:59 +01:00
parent 82dc4e73ee
commit ac899f7f8d
12 changed files with 392 additions and 21 deletions

View File

@ -14,7 +14,6 @@ apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'com.google.gms.google-services'
android {
def appVersionCode = 132
@ -117,11 +116,17 @@ dependencies {
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'androidx.lifecycle:lifecycle-common-java8:2.2.0'
implementation 'org.apache.commons:commons-text:1.8'
//kapt "androidx.lifecycle:lifecycle-compiler:2.0.0"
//MVVM
def dagger2_version = "2.26"
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation "androidx.lifecycle:lifecycle-common-java8:2.2.0"
api "com.google.dagger:dagger:$dagger2_version"
annotationProcessor "com.google.dagger:dagger-compiler:$dagger2_version"
api "com.google.dagger:dagger-android:$dagger2_version"
api "com.google.dagger:dagger-android-support:$dagger2_version" // if you use the support libraries
annotationProcessor "com.google.dagger:dagger-android-processor:$dagger2_version"
//FAB
implementation 'com.github.clans:fab:1.6.4'
//CUSTOM VIEWS

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="it.integry.integrywmsnative">
<uses-permission android:name="android.permission.INTERNET" />
@ -18,7 +17,6 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:replace="android:debuggable"
android:usesCleartextTraffic="true">
<activity android:name=".gest.spedizione_new.SpedizioneActivity"></activity>
<activity android:name=".gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity" />

View File

@ -4,6 +4,8 @@ import android.app.Application;
import android.content.res.Configuration;
import android.content.res.Resources;
import dagger.Component;
import dagger.android.DaggerApplication;
import it.integry.integrywmsnative.core.context.AppContext;
import it.integry.integrywmsnative.core.data_store.db.AppDatabase;
import it.integry.integrywmsnative.core.data_store.db.dao.ArticoloGrigliaDao;
@ -11,10 +13,15 @@ import it.integry.integrywmsnative.core.data_store.db.dao.ArticoloOrdineDao;
import it.integry.integrywmsnative.core.data_store.db.dao.GrigliaDao;
import it.integry.integrywmsnative.core.data_store.db.dao.OrdineDao;
public class MainApplication extends Application {
public static Resources res;
// Reference to the application graph that is used across the whole app
public static MainApplicationComponent appComponent;
public static MainApplicationModule appModule;
private AppContext appContext = new AppContext(this);
private static AppDatabase appDb;
@ -26,11 +33,16 @@ public class MainApplication extends Application {
public void onCreate() {
super.onCreate();
appContext.init();
appModule = new MainApplicationModule(MainApplication.this);
appComponent = DaggerMainApplicationComponent.create();
// .builder()
// .mainApplicationModule(new MainApplicationModule(MainApplication.this))
// .build();
appContext.init();
appDb = AppDatabase.getDatabase(this);
//Stash.init(this);
res = getResources();
}

View File

@ -0,0 +1,14 @@
package it.integry.integrywmsnative;
import android.content.Context;
import javax.inject.Singleton;
import dagger.Component;
import it.integry.integrywmsnative.gest.spedizione_new.SpedizioneActivity;
// Definition of the Application graph
@Component(modules = {MainApplicationModule.class})
public interface MainApplicationComponent {
}

View File

@ -0,0 +1,27 @@
package it.integry.integrywmsnative;
import android.content.Context;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
@Module
public class MainApplicationModule {
private final Context mContext;
public MainApplicationModule(Context context) {
this.mContext = context;
}
@Provides
@Singleton
ColliDataRecoverService provideColliDataRecoverService() {
return new ColliDataRecoverService(mContext);
}
}

View File

@ -0,0 +1,91 @@
package it.integry.integrywmsnative.core.data_recover;
import java.util.List;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO;
public class ColliDataRecoverDTO {
private int id;
private int numCollo;
private String serCollo;
private String dataCollo;
private String gestioneCollo;
private String filtro;
private List<OrdineVenditaInevasoDTO> testateOrdini;
public int getId() {
return id;
}
public ColliDataRecoverDTO setId(int id) {
this.id = id;
return this;
}
public int getNumCollo() {
return numCollo;
}
public ColliDataRecoverDTO setNumCollo(int numCollo) {
this.numCollo = numCollo;
return this;
}
public String getSerCollo() {
return serCollo;
}
public ColliDataRecoverDTO setSerCollo(String serCollo) {
this.serCollo = serCollo;
return this;
}
public String getDataCollo() {
return dataCollo;
}
public ColliDataRecoverDTO setDataCollo(String dataCollo) {
this.dataCollo = dataCollo;
return this;
}
public String getGestioneCollo() {
return gestioneCollo;
}
public ColliDataRecoverDTO setGestioneCollo(String gestioneCollo) {
this.gestioneCollo = gestioneCollo;
return this;
}
public String getFiltro() {
return filtro;
}
public ColliDataRecoverDTO setFiltro(String filtro) {
this.filtro = filtro;
return this;
}
public List<OrdineVenditaInevasoDTO> getTestateOrdini() {
return testateOrdini;
}
public ColliDataRecoverDTO setTestateOrdini(List<OrdineVenditaInevasoDTO> testateOrdini) {
this.testateOrdini = testateOrdini;
return this;
}
public MtbColt getMtbColt() {
return new MtbColt()
.setNumCollo(getNumCollo())
.setSerCollo(getSerCollo())
.setGestione(getGestioneCollo())
.setDataCollo(getDataCollo())
.setFiltroOrdini(getFiltro());
}
}

View File

@ -0,0 +1,152 @@
package it.integry.integrywmsnative.core.data_recover;
import android.content.Context;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import com.google.android.gms.common.util.IOUtils;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.inject.Inject;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO;
@Singleton
public class ColliDataRecoverService {
private final Context mContext;
private List<ColliDataRecoverDTO> mtbColtsSessions = new ArrayList<>();
@Inject
public ColliDataRecoverService(Context context) {
this.mContext = context;
if(isFilePresent(CommonConst.Files.RECOVER_COLLO_FILE)) {
loadLocalFile();
}
}
public boolean thereIsAnExistantSession() {
return mtbColtsSessions.size() > 0;
}
public List<Integer> getAllSessionIDs() {
if(thereIsAnExistantSession()) {
return Stream.of(mtbColtsSessions)
.map(ColliDataRecoverDTO::getId)
.toList();
} else return null;
}
public ColliDataRecoverDTO getSession(Integer sessionID) {
if(sessionID == null) return null;
return getIfExists(sessionID);
}
private ColliDataRecoverDTO getIfExists(int id) {
Optional<ColliDataRecoverDTO> recoverDTOOptional = Stream.of(mtbColtsSessions)
.filter(x -> x.getId() == id)
.findSingle();
return recoverDTOOptional.isPresent() ? recoverDTOOptional.get() : null;
}
public int startNewSession(MtbColt mtbColtSession, List<OrdineVenditaInevasoDTO> testateOrdini) {
Integer newId = null;
while(newId == null) {
int randomId = new Random().nextInt(1000);
ColliDataRecoverDTO dto = getIfExists(randomId);
if(dto == null) newId = randomId;
}
ColliDataRecoverDTO recoverDTO = new ColliDataRecoverDTO()
.setId(newId)
.setDataCollo(mtbColtSession.getDataColloS())
.setNumCollo(mtbColtSession.getNumCollo())
.setSerCollo(mtbColtSession.getSerCollo())
.setGestioneCollo(mtbColtSession.getGestione())
.setFiltro(mtbColtSession.getFiltroOrdini())
.setTestateOrdini(testateOrdini);
mtbColtsSessions.add(recoverDTO);
updateLocalFile();
return newId;
}
public void closeSession(int ID) {
ColliDataRecoverDTO dto = getIfExists(ID);
if(dto != null) {
mtbColtsSessions.remove(dto);
updateLocalFile();
}
}
private void loadLocalFile() {
InputStream inputStream;
Gson gson = new Gson();
try {
inputStream = mContext.openFileInput(CommonConst.Files.RECOVER_COLLO_FILE);
byte[] bytes = IOUtils.readInputStreamFully(inputStream);
String jsonString = new String(bytes);
Type listType = new TypeToken<ArrayList<ColliDataRecoverDTO>>(){}.getType();
mtbColtsSessions = gson.fromJson(jsonString, listType);
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
UtilityExceptions.defaultException(mContext, e);
}
}
private void updateLocalFile() {
FileOutputStream outputStream;
Gson gson = new Gson();
String jsonText = gson.toJson(mtbColtsSessions);
try {
outputStream = mContext.openFileOutput(CommonConst.Files.RECOVER_COLLO_FILE, Context.MODE_PRIVATE);
outputStream.write(jsonText.getBytes());
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
UtilityExceptions.defaultException(mContext, e);
}
}
private boolean isFilePresent(String fileName) {
String path = mContext.getFilesDir().getAbsolutePath() + "/" + fileName;
File file = new File(path);
return file.exists();
}
}

View File

@ -730,8 +730,6 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
this.loadMatchedRows(matchPickingObject);
}
private void loadMatchedRows(List<PickingObjectDTO> matchedRows) {
if(matchedRows == null || matchedRows.size() == 0) {
DialogCommon.showNoArtFoundDialog(mActivity, null);
@ -777,6 +775,8 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
}
public void createNewUL() {
this.createNewUL(null, null, null, false, true, null);
}

View File

@ -15,8 +15,11 @@ import com.tfb.fbtoast.FBToast;
import java.util.ArrayList;
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.BarcodeType;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
@ -25,6 +28,7 @@ import it.integry.integrywmsnative.core.class_router.ClassRouter;
import it.integry.integrywmsnative.core.class_router.interfaces.ICustomConfiguration;
import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecover;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColt;
@ -43,7 +47,8 @@ public class SpedizioneActivity extends AppCompatActivity implements SpedizioneV
private ActivitySpedizioneBinding mBindings;
private SpedizioneViewModel mViewmodel;
@Inject
SpedizioneViewModel mViewmodel;
private ObservableArrayList<SpedizioneListModel> mSpedizioneMutableData = new ObservableArrayList();
@ -55,7 +60,6 @@ public class SpedizioneActivity extends AppCompatActivity implements SpedizioneV
private boolean mFlashShowCodForn;
private int barcodeScannerIstanceID = -1;
private Integer mMtbColtSessionID;
private ArrayList<PickingObjectDTO> mPickingList;
private ArrayList<OrdineVenditaInevasoDTO> mTestateOrdini;
@ -72,7 +76,15 @@ public class SpedizioneActivity extends AppCompatActivity implements SpedizioneV
mColliRegistrati = DataCache.retrieveItem(getIntent().getStringExtra("keyColliRegistrati"));
mBindings = DataBindingUtil.setContentView(this, R.layout.activity_spedizione);
mViewmodel = new ViewModelProvider(this).get(SpedizioneViewModel.class);
// ((MainApplication) getApplicationContext()).appComponent.inject(this);
SpedizioneComponent spedizioneComponent = DaggerSpedizioneComponent.builder()
.mainApplicationModule(MainApplication.appModule)
.mainApplicationComponent(MainApplication.appComponent)
.build();
spedizioneComponent.inject(this);
mViewmodel.addListeners(this);
setSupportActionBar(mBindings.toolbar);
@ -238,8 +250,6 @@ public class SpedizioneActivity extends AppCompatActivity implements SpedizioneV
public void onLUCreated(MtbColt mtbColt) {
noLUPresent.set(false);
mMtbColtSessionID = ColliDataRecover.startNewSession(mtbColt, mTestateOrdini);
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
}
@ -247,7 +257,12 @@ public class SpedizioneActivity extends AppCompatActivity implements SpedizioneV
public void onLUClosed() {
noLUPresent.set(true);
if(mMtbColtSessionID != null) ColliDataRecover.closeSession(mMtbColtSessionID);
// if(mMtbColtSessionID != null) ColliDataRecover.closeSession(mMtbColtSessionID);
}
@Override
public void onFilterChanged(String newValue) {
}
@Override

View File

@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.spedizione_new;
import javax.inject.Singleton;
import dagger.Component;
import it.integry.integrywmsnative.MainApplicationComponent;
@Singleton
@Component(modules = {SpedizioneModule.class}, dependencies = {MainApplicationComponent.class})
public interface SpedizioneComponent {
void inject(SpedizioneActivity spedizioneActivity);
}

View File

@ -0,0 +1,19 @@
package it.integry.integrywmsnative.gest.spedizione_new;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.MainApplicationModule;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
@Module(includes = {MainApplicationModule.class})
public class SpedizioneModule {
@Provides
@Singleton
SpedizioneViewModel providesSpedizioneViewModel(ColliDataRecoverService colliDataRecoverService) {
return new SpedizioneViewModel(colliDataRecoverService);
}
}

View File

@ -7,14 +7,20 @@ import androidx.lifecycle.ViewModel;
import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecover;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
import it.integry.integrywmsnative.core.expansion.AtomicBigDecimal;
import it.integry.integrywmsnative.core.model.CommonModelConsts;
import it.integry.integrywmsnative.core.model.FiltroOrdineDTO;
import it.integry.integrywmsnative.core.model.MtbAart;
@ -41,7 +47,7 @@ import it.integry.integrywmsnative.gest.spedizione_new.exceptions.ScannedPositio
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO;
import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO;
public class SpedizioneViewModel extends ViewModel {
public class SpedizioneViewModel {
private List<OrdineVenditaInevasoDTO> mTestateOrdini;
private MutableLiveData<List<PickingObjectDTO>> mPickingList = new MutableLiveData<>();
@ -60,6 +66,16 @@ public class SpedizioneViewModel extends ViewModel {
private MtbColt mCurrentMtbColt = null;
private Integer mMtbColtSessionID;
private final ColliDataRecoverService mColliDataRecoverService;
@Inject
public SpedizioneViewModel(ColliDataRecoverService colliDataRecoverService) {
this.mColliDataRecoverService = colliDataRecoverService;
}
public void setDataset(String codMdep, List<PickingObjectDTO> pickingList, List<OrdineVenditaInevasoDTO> testateOrdini) {
this.mDefaultCodMdep = codMdep;
this.mPickingList.postValue(pickingList);
@ -552,6 +568,15 @@ public class SpedizioneViewModel extends ViewModel {
private void dispatchOrdineRow(final PickingObjectDTO pickingObjectDTO) {
AtomicBigDecimal numCnfWithdrawRows = new AtomicBigDecimal();
AtomicBigDecimal qtaColWithdrawRows = new AtomicBigDecimal();
Stream.of(pickingObjectDTO.getWithdrawRows())
.forEach(row -> {
numCnfWithdrawRows.addAndGet(row.getNumCnf());
qtaColWithdrawRows.addAndGet(row.getQtaCol());
});
}
@ -582,14 +607,13 @@ public class SpedizioneViewModel extends ViewModel {
.setDataCollo(value.getDataColloS())
.setMtbColr(new ObservableArrayList<>());
// value
// .setDisablePrint(disablePrint)
// .setMtbColr(new ObservableArrayList<>());
// setULToCurrentContext(value);
this.mCurrentMtbColt = mtbColt;
mMtbColtSessionID = this.mColliDataRecoverService.startNewSession(mtbColt, mTestateOrdini);
if (onComplete != null) onComplete.run();
this.sendLUCreated(mtbColt);
}, this::sendError);