// Path: privvy/src/main/java/com/metova/privvy/PrivvyHost.java
// public interface PrivvyHost {
// 
//     void initialize(RouteData... routes);
// 
//     void replace(RouteData oldComponent, RouteData newComponent);
// 
//     void goTo(RouteData newComponent);
// }
// 
// Path: sample/src/main/java/com/metova/privvy/sample/db/FakeDb.java
// @Singleton
// public class FakeDb {
// 
//     private PublishRelay<Number> numberRelay = PublishRelay.create();
// 
//     private Number number = new Number();
// 
//     @Inject
//     public FakeDb() {
//     }
// 
//     public Flowable<Number> getNumber() {
//         return Flowable.just(number);
//     }
// 
//     public void updateNumberBy(int value) {
//         number.value += value;
//         numberRelay.accept(this.number);
//     }
// 
//     public Flowable<Number> numberUpdates() {
//         return numberRelay.toFlowable(BackpressureStrategy.BUFFER);
//     }
// 
//     public Flowable<List<DescriptiveNumber>> getNumberList() {
//         List<DescriptiveNumber> list = new ArrayList<>();
// 
//         for (int i = 0; i < 10; i++) {
//             DescriptiveNumber num = new DescriptiveNumber();
//             num.description = "Number: ";
//             num.value = i;
//             list.add(num);
//         }
//         return Flowable.just(list);
//     }
// 
//     public void setNumberValue(int value) {
//         number.value = value;
//     }
// 
//     public Flowable<DescriptiveNumber> updateListItem(int position) {
//         //fake database interaction that flags the model somehow
//         DescriptiveNumber num = new DescriptiveNumber();
//         num.value = position;
//         num.description = "Magic Number: ";
// 
//         return Flowable.just(num);
//     }
// }


import com.metova.privvy.PrivvyHost;
import com.metova.privvy.sample.db.FakeDb;
import dagger.Module;
import dagger.Provides;
package com.metova.privvy.sample.ui.list;


@Module
public class ListModule {

    public ListModule() {

    }

    @Provides
    @ListScope
    ListContract.Presenter providePresenter(ListContract.Interactor interactor) {
        return new ListPresenter(interactor);
    }

    @Provides
    @ListScope
    ListContract.Interactor provideInteractor(FakeDb fakeDb, ListContract.Router router) {
        return new ListInteractor(fakeDb, router);
    }

    @Provides
    @ListScope
// Path: privvy/src/main/java/com/metova/privvy/PrivvyHost.java
// public interface PrivvyHost {
// 
//     void initialize(RouteData... routes);
// 
//     void replace(RouteData oldComponent, RouteData newComponent);
// 
//     void goTo(RouteData newComponent);
// }
// 
// Path: sample/src/main/java/com/metova/privvy/sample/db/FakeDb.java
// @Singleton
// public class FakeDb {
// 
//     private PublishRelay<Number> numberRelay = PublishRelay.create();
// 
//     private Number number = new Number();
// 
//     @Inject
//     public FakeDb() {
//     }
// 
//     public Flowable<Number> getNumber() {
//         return Flowable.just(number);
//     }
// 
//     public void updateNumberBy(int value) {
//         number.value += value;
//         numberRelay.accept(this.number);
//     }
// 
//     public Flowable<Number> numberUpdates() {
//         return numberRelay.toFlowable(BackpressureStrategy.BUFFER);
//     }
// 
//     public Flowable<List<DescriptiveNumber>> getNumberList() {
//         List<DescriptiveNumber> list = new ArrayList<>();
// 
//         for (int i = 0; i < 10; i++) {
//             DescriptiveNumber num = new DescriptiveNumber();
//             num.description = "Number: ";
//             num.value = i;
//             list.add(num);
//         }
//         return Flowable.just(list);
//     }
// 
//     public void setNumberValue(int value) {
//         number.value = value;
//     }
// 
//     public Flowable<DescriptiveNumber> updateListItem(int position) {
//         //fake database interaction that flags the model somehow
//         DescriptiveNumber num = new DescriptiveNumber();
//         num.value = position;
//         num.description = "Magic Number: ";
// 
//         return Flowable.just(num);
//     }
// }


// Path: sample/src/main/java/com/metova/privvy/sample/ui/list/ListModule.java
import com.metova.privvy.PrivvyHost;
import com.metova.privvy.sample.db.FakeDb;
import dagger.Module;
import dagger.Provides;

package com.metova.privvy.sample.ui.list;


@Module
public class ListModule {

    public ListModule() {

    }

    @Provides
    @ListScope
    ListContract.Presenter providePresenter(ListContract.Interactor interactor) {
        return new ListPresenter(interactor);
    }

    @Provides
    @ListScope
    ListContract.Interactor provideInteractor(FakeDb fakeDb, ListContract.Router router) {
        return new ListInteractor(fakeDb, router);
    }

    @Provides
    @ListScope
    ListContract.Router provideRouter(PrivvyHost host) {