// Path: ferro-mvp/src/main/java/com/agna/ferro/mvp/view/activity/MvpActivityView.java
// public abstract class MvpActivityView extends PSSActivity implements BaseView {
// 
//     /**
//      * @return unique screen name
//      */
//     public abstract String getName();
// 
//     /**
//      * @return layout resource of the screen
//      */
//     @LayoutRes
//     protected abstract int getContentView();
// 
//     /**
//      * @return screen component
//      */
//     protected abstract ScreenComponent createScreenComponent();
// 
//     @Override
//     protected final void onCreate(Bundle savedInstanceState) {
//         super.onCreate(savedInstanceState);
//         onPreCreate(savedInstanceState, isScreenRecreated());
//         setContentView(getContentView());
//         satisfyDependencies();
//         bindPresenter();
//         onCreate(savedInstanceState, isScreenRecreated());
//         getPresenter().onLoad(isScreenRecreated());
//         getPresenter().onLoadFinished();
//     }
// 
//     /**
//      * Override this instead {@link #onCreate(Bundle)}
//      * @param viewRecreated show whether view created in first time or recreated after
//      *                        changing configuration
//      */
//     protected void onCreate(Bundle savedInstanceState, boolean viewRecreated) {
// 
//     }
// 
//     /**
//      * Called before Presenter and ScreenScope are bound to the View and content view is created
//      * @param savedInstanceState
//      * @param viewRecreated
//      */
//     protected void onPreCreate(Bundle savedInstanceState, boolean viewRecreated) {
// 
//     }
// 
//     @Override
//     protected void onStart() {
//         super.onStart();
//         getPresenter().onStart();
//     }
// 
//     @Override
//     public Object onRetainCustomNonConfigurationInstance() {
//         return super.onRetainCustomNonConfigurationInstance();
//     }
// 
//     @Override
//     protected void onResume() {
//         super.onResume();
//         getPresenter().onResume();
//     }
// 
//     @Override
//     protected void onPause() {
//         super.onPause();
//         getPresenter().onPause();
//     }
// 
//     @Override
//     protected void onStop() {
//         super.onStop();
//         getPresenter().onStop();
//     }
// 
//     /**
//      * Satisfy dependencies
//      */
//     protected void satisfyDependencies() {
//         PersistentScreenScope screenScope = getPersistentScreenScope();
//         ScreenComponent component = getScreenComponent();
//         if (component == null) {
//             component = createScreenComponent();
//             screenScope.putObject(component, ScreenComponent.class);
//         }
//         component.inject(this);
//     }
// 
//     public ScreenComponent getScreenComponent() {
//         PersistentScreenScope screenScope = getPersistentScreenScope();
//         return screenScope.getObject(ScreenComponent.class);
//     }
// 
//     /**
//      * Bind presenter to this view
//      */
//     @Override
//     public final void bindPresenter() {
//         getPresenter().attachView(this);
//         if(!isScreenRecreated()) {
//             getPersistentScreenScope().addOnScopeDestroyListener(getPresenter());
//         }
//     }
// 
//     @Override
//     protected void onDestroy() {
//         super.onDestroy();
//         getPresenter().detachView();
//     }
// 
// }
// 
// Path: sample/src/main/java/com/agna/ferro/sample/app/App.java
// public class App extends Application {
// 
//     private AppComponent appComponent;
// 
//     @Override
//     public void onCreate() {
//         super.onCreate();
//         initInjector();
//         initLog();
//     }
// 
//     private void initLog() {
//         Timber.plant(new Timber.DebugTree());
//     }
// 
//     private void initInjector() {
//         appComponent = DaggerAppComponent.builder()
//                 .appModule(new AppModule(this))
//                 .build();
//     }
// 
//     public AppComponent getAppComponent() {
//         return this.appComponent;
//     }
// }
// 
// Path: sample/src/main/java/com/agna/ferro/sample/app/AppComponent.java
// @PerApplication
// @Component(modules = AppModule.class)
// public interface AppComponent {
// 
//     //Exposed to sub-graphs.
//     Context context();
// 
//     BookRepository bookRepository();
// 
// }


import com.agna.ferro.mvp.view.activity.MvpActivityView;
import com.agna.ferro.sample.app.App;
import com.agna.ferro.sample.app.AppComponent;
package com.agna.ferro.sample.ui.base;


/**
 * Base class for view, based on Activity
 */
public abstract class BaseActivityView extends MvpActivityView {

    protected AppComponent getAppComponent() {
// Path: ferro-mvp/src/main/java/com/agna/ferro/mvp/view/activity/MvpActivityView.java
// public abstract class MvpActivityView extends PSSActivity implements BaseView {
// 
//     /**
//      * @return unique screen name
//      */
//     public abstract String getName();
// 
//     /**
//      * @return layout resource of the screen
//      */
//     @LayoutRes
//     protected abstract int getContentView();
// 
//     /**
//      * @return screen component
//      */
//     protected abstract ScreenComponent createScreenComponent();
// 
//     @Override
//     protected final void onCreate(Bundle savedInstanceState) {
//         super.onCreate(savedInstanceState);
//         onPreCreate(savedInstanceState, isScreenRecreated());
//         setContentView(getContentView());
//         satisfyDependencies();
//         bindPresenter();
//         onCreate(savedInstanceState, isScreenRecreated());
//         getPresenter().onLoad(isScreenRecreated());
//         getPresenter().onLoadFinished();
//     }
// 
//     /**
//      * Override this instead {@link #onCreate(Bundle)}
//      * @param viewRecreated show whether view created in first time or recreated after
//      *                        changing configuration
//      */
//     protected void onCreate(Bundle savedInstanceState, boolean viewRecreated) {
// 
//     }
// 
//     /**
//      * Called before Presenter and ScreenScope are bound to the View and content view is created
//      * @param savedInstanceState
//      * @param viewRecreated
//      */
//     protected void onPreCreate(Bundle savedInstanceState, boolean viewRecreated) {
// 
//     }
// 
//     @Override
//     protected void onStart() {
//         super.onStart();
//         getPresenter().onStart();
//     }
// 
//     @Override
//     public Object onRetainCustomNonConfigurationInstance() {
//         return super.onRetainCustomNonConfigurationInstance();
//     }
// 
//     @Override
//     protected void onResume() {
//         super.onResume();
//         getPresenter().onResume();
//     }
// 
//     @Override
//     protected void onPause() {
//         super.onPause();
//         getPresenter().onPause();
//     }
// 
//     @Override
//     protected void onStop() {
//         super.onStop();
//         getPresenter().onStop();
//     }
// 
//     /**
//      * Satisfy dependencies
//      */
//     protected void satisfyDependencies() {
//         PersistentScreenScope screenScope = getPersistentScreenScope();
//         ScreenComponent component = getScreenComponent();
//         if (component == null) {
//             component = createScreenComponent();
//             screenScope.putObject(component, ScreenComponent.class);
//         }
//         component.inject(this);
//     }
// 
//     public ScreenComponent getScreenComponent() {
//         PersistentScreenScope screenScope = getPersistentScreenScope();
//         return screenScope.getObject(ScreenComponent.class);
//     }
// 
//     /**
//      * Bind presenter to this view
//      */
//     @Override
//     public final void bindPresenter() {
//         getPresenter().attachView(this);
//         if(!isScreenRecreated()) {
//             getPersistentScreenScope().addOnScopeDestroyListener(getPresenter());
//         }
//     }
// 
//     @Override
//     protected void onDestroy() {
//         super.onDestroy();
//         getPresenter().detachView();
//     }
// 
// }
// 
// Path: sample/src/main/java/com/agna/ferro/sample/app/App.java
// public class App extends Application {
// 
//     private AppComponent appComponent;
// 
//     @Override
//     public void onCreate() {
//         super.onCreate();
//         initInjector();
//         initLog();
//     }
// 
//     private void initLog() {
//         Timber.plant(new Timber.DebugTree());
//     }
// 
//     private void initInjector() {
//         appComponent = DaggerAppComponent.builder()
//                 .appModule(new AppModule(this))
//                 .build();
//     }
// 
//     public AppComponent getAppComponent() {
//         return this.appComponent;
//     }
// }
// 
// Path: sample/src/main/java/com/agna/ferro/sample/app/AppComponent.java
// @PerApplication
// @Component(modules = AppModule.class)
// public interface AppComponent {
// 
//     //Exposed to sub-graphs.
//     Context context();
// 
//     BookRepository bookRepository();
// 
// }


// Path: sample/src/main/java/com/agna/ferro/sample/ui/base/BaseActivityView.java
import com.agna.ferro.mvp.view.activity.MvpActivityView;
import com.agna.ferro.sample.app.App;
import com.agna.ferro.sample.app.AppComponent;

package com.agna.ferro.sample.ui.base;


/**
 * Base class for view, based on Activity
 */
public abstract class BaseActivityView extends MvpActivityView {

    protected AppComponent getAppComponent() {
        return ((App) getApplication()).getAppComponent();