package it.integry.integrywmsnative; import android.app.Application; import android.os.Handler; import androidx.core.os.HandlerCompat; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import javax.inject.Singleton; import dagger.Module; import dagger.Provides; import it.integry.integrywmsnative.core.context.AppContext; import it.integry.integrywmsnative.core.context.MainContext; import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService; import it.integry.integrywmsnative.core.data_store.db.AppDatabase; import it.integry.integrywmsnative.core.ean128.Ean128Service; import it.integry.integrywmsnative.core.menu.MenuRESTConsumer; import it.integry.integrywmsnative.core.menu.MenuService; import it.integry.integrywmsnative.core.rest.AuthInterceptor; import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.AziendaRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliAccettazioneRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliLavorazioneRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliSpedizioneRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.CommessaRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.DepositoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.DocumentRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.EntityRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.GestSetupRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.GiacenzaRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ImballiRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.MagazzinoAutomaticoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.MagazzinoBufferRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.MaterialiRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ProduzioneRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.VettoriRESTConsumer; import it.integry.integrywmsnative.core.services.inventario.InventarioService; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.sound.SoundAlertService; import it.integry.integrywmsnative.core.update.UpdatesManager; import it.integry.integrywmsnative.gest.contab_doc_interni.rest.DocInterniRESTConsumer; import it.integry.integrywmsnative.gest.login.rest.AuthenticationRESTConsumer; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.rest.ProdFabbisognoLineeProdRESTConsumer; import it.integry.integrywmsnative.view.dialogs.DialogProgressView; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; @Module public class MainApplicationModule { private final Application mApplication; public MainApplicationModule(Application application) { this.mApplication = application; } @Provides @Singleton Application providesApplication() { return mApplication; } @Provides @Singleton public ExecutorService providesExecutorService() { return Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); } @Provides @Singleton public Handler providesMainThreadHandler() { return HandlerCompat.createAsync(mApplication.getApplicationContext().getMainLooper()); } @Provides @Singleton public SettingsManager provideSettingsManager(SystemRESTConsumer systemRESTConsumer, ImballiRESTConsumer imballiRESTConsumer, AziendaRESTConsumer aziendaRESTConsumer, PosizioniRESTConsumer posizioniRESTConsumer, GestSetupRESTConsumer gestSetupRESTConsumer) { return new SettingsManager(mApplication, systemRESTConsumer, imballiRESTConsumer, aziendaRESTConsumer, gestSetupRESTConsumer, posizioniRESTConsumer); } @Provides @Singleton AppContext providesAppContext() { return new AppContext(mApplication); } @Provides @Singleton MainContext providesMainContextNew(MenuService menuService, AppDatabase appDatabase, SystemRESTConsumer systemRESTConsumer, AuthenticationRESTConsumer authenticationRESTConsumer) { return new MainContext(mApplication.getApplicationContext(), menuService, appDatabase, systemRESTConsumer, authenticationRESTConsumer); } @Provides @Singleton ColliDataRecoverService provideColliDataRecoverService() { ColliDataRecoverService colliDataRecoverService = new ColliDataRecoverService(mApplication.getApplicationContext()); colliDataRecoverService.init(); return colliDataRecoverService; } @Provides @Singleton Ean128Service provideEan128Service() { return new Ean128Service(); } @Provides @Singleton RESTBuilder providesRESTBuilder(AuthInterceptor authInterceptor) { return new RESTBuilder(authInterceptor); } @Provides @Singleton MenuService provideMenuService(MenuRESTConsumer menuRESTConsumer) { return new MenuService(menuRESTConsumer); } @Provides @Singleton UpdatesManager provideUpdatesManager() { return new UpdatesManager(); } @Provides @Singleton DialogProgressView providesDialogProgressView() { return DialogProgressView.newInstance(); } @Provides @Singleton DialogInputQuantityV2View providesDialogInputQuantityV2View() { return new DialogInputQuantityV2View(); } @Provides @Singleton OrdiniRESTConsumer provideOrdiniRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer, EntityRESTConsumer entityRESTConsumer) { return new OrdiniRESTConsumer(restBuilder, systemRESTConsumer, entityRESTConsumer); } @Provides @Singleton GestSetupRESTConsumer provideGestSetupRESTConsumer(RESTBuilder restBuilder) { return new GestSetupRESTConsumer(restBuilder); } @Provides @Singleton ArticoloRESTConsumer provideArticoloRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer) { return new ArticoloRESTConsumer(restBuilder, systemRESTConsumer); } @Provides @Singleton CommessaRESTConsumer provideCommessaRESTConsumer(SystemRESTConsumer systemRESTConsumer) { return new CommessaRESTConsumer(systemRESTConsumer); } @Provides @Singleton DepositoRESTConsumer provideDepositoRESTConsumer(EntityRESTConsumer entityRESTConsumer, SystemRESTConsumer systemRESTConsumer) { return new DepositoRESTConsumer(entityRESTConsumer, systemRESTConsumer); } @Provides @Singleton MenuRESTConsumer provideMenuRESTConsumer(RESTBuilder restBuilder) { return new MenuRESTConsumer(restBuilder); } @Provides @Singleton MagazzinoRESTConsumer provideMagazzinoRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService, SystemRESTConsumer systemRESTConsumer) { return new MagazzinoRESTConsumer(restBuilder, executorService, systemRESTConsumer); } @Provides @Singleton MesRESTConsumer provideMesRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer) { return new MesRESTConsumer(restBuilder, systemRESTConsumer); } @Provides @Singleton EntityRESTConsumer provideEntityRESTConsumer(RESTBuilder restBuilder) { return new EntityRESTConsumer(restBuilder); } @Provides @Singleton ColliMagazzinoRESTConsumer provideColliMagazzinoRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer, ArticoloRESTConsumer articoloRESTConsumer, EntityRESTConsumer entityRESTConsumer, SettingsManager settingsManager) { return new ColliMagazzinoRESTConsumer(restBuilder, systemRESTConsumer, articoloRESTConsumer, entityRESTConsumer, settingsManager); } @Provides @Singleton AziendaRESTConsumer provideAziendaRESTConsumer(RESTBuilder restBuilder) { return new AziendaRESTConsumer(restBuilder); } @Provides @Singleton ProduzioneRESTConsumer provideProduzioneRESTConsumer(RESTBuilder restBuilder) { return new ProduzioneRESTConsumer(restBuilder); } @Provides @Singleton BarcodeRESTConsumer provideBarcodeRESTConsumer(Ean128Service ean128Service) { return new BarcodeRESTConsumer(ean128Service); } @Provides @Singleton PrinterRESTConsumer providePrinterRESTConsumer(RESTBuilder restBuilder) { return new PrinterRESTConsumer(restBuilder); } @Provides @Singleton SystemRESTConsumer provideSystemRESTConsumer(RESTBuilder restBuilder) { return new SystemRESTConsumer(restBuilder); } @Provides @Singleton PVOrdiniAcquistoRESTConsumer providesPVOrdiniAcquistoRESTConsumer(RESTBuilder restBuilder, MagazzinoRESTConsumer magazzinoRESTConsumer) { return new PVOrdiniAcquistoRESTConsumer(restBuilder, magazzinoRESTConsumer); } @Provides @Singleton PosizioniRESTConsumer providesPosizioniRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer) { return new PosizioniRESTConsumer(restBuilder, systemRESTConsumer); } @Provides @Singleton ProdFabbisognoLineeProdRESTConsumer providesProdFabbisognoLineeProdRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer) { return new ProdFabbisognoLineeProdRESTConsumer(restBuilder, systemRESTConsumer); } @Provides @Singleton DocInterniRESTConsumer provideDocInterniRESTConsumer(RESTBuilder restBuilder, MagazzinoRESTConsumer magazzinoRESTConsumer) { return new DocInterniRESTConsumer(restBuilder, magazzinoRESTConsumer); } @Provides @Singleton GiacenzaRESTConsumer provideGiacenzaRESTConsumer(RESTBuilder restBuilder, ArticoloRESTConsumer articoloRESTConsumer) { return new GiacenzaRESTConsumer(restBuilder, articoloRESTConsumer); } @Provides @Singleton ImballiRESTConsumer provideImballiRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService) { return new ImballiRESTConsumer(restBuilder, executorService); } @Provides @Singleton VettoriRESTConsumer provideVettoriRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService) { return new VettoriRESTConsumer(restBuilder, executorService); } @Provides @Singleton InventarioService provideInventarioService(GiacenzaRESTConsumer giacenzaRESTConsumer) { return new InventarioService(giacenzaRESTConsumer); } @Provides @Singleton ProductionLinesRESTConsumer provideProductionLinesRESTConsumer(RESTBuilder restBuilder) { return new ProductionLinesRESTConsumer(restBuilder); } @Provides @Singleton DocumentRESTConsumer provideDocumentiRESTConsumer(RESTBuilder restBuilder) { return new DocumentRESTConsumer(restBuilder); } @Provides @Singleton ColliAccettazioneRESTConsumer provideColliAccettazioneRESTConsumer(RESTBuilder restBuilder) { return new ColliAccettazioneRESTConsumer(restBuilder); } @Provides @Singleton ColliSpedizioneRESTConsumer provideColliSpedizioneRESTConsumer(RESTBuilder restBuilder) { return new ColliSpedizioneRESTConsumer(restBuilder); } @Provides @Singleton ColliLavorazioneRESTConsumer provideColliLavorazioneRESTConsumer(RESTBuilder restBuilder, SettingsManager settingsManager) { return new ColliLavorazioneRESTConsumer(restBuilder, settingsManager); } @Provides @Singleton MagazzinoAutomaticoRESTConsumer provideMagazzinoAutomaticoRESTConsumer(RESTBuilder restBuilder) { return new MagazzinoAutomaticoRESTConsumer(restBuilder); } @Provides @Singleton MagazzinoBufferRESTConsumer provideMagazzinoBufferRESTConsumer(RESTBuilder restBuilder) { return new MagazzinoBufferRESTConsumer(restBuilder); } @Provides @Singleton MaterialiRESTConsumer provideMaterialiRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService) { return new MaterialiRESTConsumer(restBuilder, executorService); } @Provides @Singleton SoundAlertService provideSoundAlertService() { SoundAlertService soundAlertService = new SoundAlertService(mApplication.getApplicationContext()); soundAlertService.init(); return soundAlertService; } }