@PerFeature public class ScannerStarterImpl implements ScannerStarter { @Inject public ScannerStarterImpl() { } @Override public void start(Context context) { Class<?> cls = ScannerActivity.class; Intent intent = new Intent(context, cls); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } }
@Subcomponent @PerScreen public interface MainScreenComponent { MainPresenter mainPresenter(); }
@PerFeature public class PurchaseRepositoryImpl implements PurchaseRepository { private final HttpClientApi mHttpClient; @Inject public PurchaseRepositoryImpl(HttpClientApi mHttpClient) { this.mHttpClient = mHttpClient; } @Override public Single<PurchaseModel> makePurchaseInStore() { return mHttpClient.doAnyRequest() .map(o -> new PurchaseModel()); } }
@Subcomponent @PerScreen public interface ScannerScreenComponent { ScannerPresenter scannerPresenter(); }
@PerFeature public class AntitheftStarterImpl implements AntitheftStarter { @Inject public AntitheftStarterImpl() { } @Override public void start(Context context) { Class<?> cls = AntitheftActivity.class; Intent intent = new Intent(context, cls); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } }
@Subcomponent @PerScreen public interface AntitheftScreenComponent { AntitheftPresenter antitheftPresenter(); }
@PerFeature public class AntitheftRepositoryImpl implements AntitheftRepository { private final HttpClientApi mHttpClient; private final DbClientApi mDbClient; @Inject public AntitheftRepositoryImpl(HttpClientApi httpClient, DbClientApi dbClient) { mHttpClient = httpClient; mDbClient = dbClient; } @Override public Single<AntitheftModel> doAntitheftLowLevelWork() { return mHttpClient.doAnyRequest() .map(o -> new AntitheftModel()); } }
@PerFeature public class ScannerInteractorImpl implements ScannerInteractor { private final ScannerRepository mScannerRepository; @Inject public ScannerInteractorImpl(ScannerRepository scannerRepository) { mScannerRepository = scannerRepository; } @Override public Single<ScannerModel> doScannerWork() { return mScannerRepository.doScannerLowLevelWork() .flatMap(this::doSomeLogic); } private Single<ScannerModel> doSomeLogic(ScannerModel scannerModel) { return Single.timer(3000, TimeUnit.MILLISECONDS) .map(aLong -> scannerModel); } }
@PerFeature public class ScannerRepositoryImpl implements ScannerRepository { private final HttpClientApi mHttpClient; private final DbClientApi mDbClient; private final SomeUtils mSomeUtils; @Inject public ScannerRepositoryImpl(HttpClientApi httpClient, DbClientApi dbClient, SomeUtils someUtils) { mHttpClient = httpClient; mDbClient = dbClient; mSomeUtils = someUtils; } @Override public Single<ScannerModel> doScannerLowLevelWork() { return mHttpClient.doAnyRequest() .map(o -> new ScannerModel()); } }
@PerFeature public class PurchaseInteractorImpl implements PurchaseInteractor { private final PurchaseRepository mPurchaseRepository; @Inject public PurchaseInteractorImpl(PurchaseRepository purchaseRepository) { mPurchaseRepository = purchaseRepository; } @Override public Single<PurchaseModel> makePurchase() { return mPurchaseRepository.makePurchaseInStore() .flatMap(this::doSomeLogic); } private Single<PurchaseModel> doSomeLogic(PurchaseModel purchaseModel) { return Single.timer(3000, TimeUnit.MILLISECONDS) .map(aLong -> purchaseModel); } }
@PerFeature public class AntitheftInteractorImpl implements AntitheftInteractor { private final AntitheftRepository mAntitheftRepository; @Inject public AntitheftInteractorImpl(AntitheftRepository antitheftRepository) { mAntitheftRepository = antitheftRepository; } @Override public Single<AntitheftModel> doAntitheftWork() { return mAntitheftRepository.doAntitheftLowLevelWork() .flatMap(this::doSomeLogic); } private Single<AntitheftModel> doSomeLogic(AntitheftModel antitheftModel) { return Single.timer(3000, TimeUnit.MILLISECONDS) .map(aLong -> antitheftModel); } }
@Component(dependencies = { CoreUtilsApi.class, CoreNetworkApi.class, CoreDbApi.class, PurchaseFeatureApi.class }) @PerFeature interface ScannerFeatureDependenciesComponent extends ScannerFeatureDependencies { }
@Component(dependencies = { CoreUtilsApi.class, CoreNetworkApi.class, CoreDbApi.class, PurchaseFeatureApi.class }) @PerFeature interface AntitheftFeatureDependenciesComponent extends AntitheftFeatureDependencies { }
@Component(dependencies = CoreNetworkApi.class) @PerFeature interface PurchaseFeatureDependenciesComponent extends PurchaseFeatureDependencies { }
@PerFeature @Binds public abstract PurchaseRepository providePurchaseRepository(PurchaseRepositoryImpl purchaseRepository);
@PerFeature @Binds public abstract AntitheftInteractor provideAntitheftInteractor(AntitheftInteractorImpl antitheftInteractor);
@PerFeature @Binds public abstract ScannerRepository provideScannerRepository(ScannerRepositoryImpl scannerRepository);
@PerFeature @Binds public abstract PurchaseInteractor providePurchaseInteractor(PurchaseInteractorImpl purchaseInteractor);
@PerFeature @Binds public abstract AntitheftRepository provideAntitheftRepository(AntitheftRepositoryImpl antitheftRepository);
@PerFeature @Binds public abstract ScannerStarter provideScannerStarter(ScannerStarterImpl scannerStarter);