@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); } }
@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()); } }
@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); } }
@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 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); } }
@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); } }
@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 { }
@Component( dependencies = PurchaseFeatureDependencies.class, modules = PurchaseModule.class ) @PerFeature public abstract class PurchaseComponent implements PurchaseFeatureApi { private static volatile WeakReference<PurchaseComponent> sPurchaseComponentWeak; public static PurchaseComponent initAndGet(PurchaseFeatureDependencies purchaseFeatureDependencies) { if (sPurchaseComponentWeak == null || sPurchaseComponentWeak.get() == null) { synchronized (PurchaseComponent.class) { if (sPurchaseComponentWeak == null || sPurchaseComponentWeak.get() == null) { PurchaseComponent purchaseComponent = DaggerPurchaseComponent.builder() .purchaseFeatureDependencies(purchaseFeatureDependencies) .build(); sPurchaseComponentWeak = new WeakReference<>(purchaseComponent); } } } return sPurchaseComponentWeak.get(); } @Component(dependencies = CoreNetworkApi.class) @PerFeature interface PurchaseFeatureDependenciesComponent extends PurchaseFeatureDependencies { } }
@PerFeature @Provides Router provideRouter() { return mCicerone.getRouter(); }
@PerFeature @Provides Router provideRouter() { return mCicerone.getRouter(); }
@PerFeature @Provides NavigatorHolder provideNavigatorHolder() { return mCicerone.getNavigatorHolder(); }
@PerFeature @Provides NavigatorHolder provideNavigatorHolder() { return mCicerone.getNavigatorHolder(); }
@PerFeature @Binds public abstract PurchaseRepository providePurchaseRepository(PurchaseRepositoryImpl purchaseRepository);
AntitheftNavigationModule.class }, dependencies = AntitheftFeatureDependencies.class) @PerFeature public abstract class AntitheftFeatureComponent implements AntitheftFeatureApi {
ScreenNavigationModule.class }, dependencies = ScannerFeatureDependencies.class) @PerFeature public abstract class ScannerFeatureComponent implements ScannerFeatureApi {
@PerFeature @Binds public abstract AntitheftStarter provideAntitheftStarter(AntitheftStarterImpl antitheftStarter);