// Path: app/src/main/java/leonardo2204/com/br/flowtests/di/component/ActivityComponent.java
// @DaggerScope(ActivityComponent.class)
// @Component(dependencies = AppComponent.class, modules = ActivityModule.class)
// public interface ActivityComponent extends AppComponent {
//     void inject(RootActivity rootActivity);
// 
//     ActionBarOwner actionBarOwner();
// }
// 
// Path: app/src/main/java/leonardo2204/com/br/flowtests/di/module/DetailScreenModule.java
// @Module
// public class DetailScreenModule {
// 
//     @Provides
//     @DaggerScope(DetailScreenComponent.class)
//     public GetDetailedContact providesGetDetailedContact(ContactsRepository contactsRepository, ThreadExecutor threadExecutor, PostExecutionThread postExecutionThread) {
//         return new GetDetailedContact(contactsRepository, threadExecutor, postExecutionThread);
//     }
// 
//     @Provides
//     @DaggerScope(DetailScreenComponent.class)
//     public DetailsScreenPresenter providesDetailsScreenPresenter(GetDetailedContact getDetailedContact, ActionBarOwner actionBarOwner) {
//         return new DetailsScreenPresenter(getDetailedContact, actionBarOwner);
//     }
// }
// 
// Path: app/src/main/java/leonardo2204/com/br/flowtests/flow/keys/DetailsKey.java
// public class DetailsKey extends ContactKey {
// 
//     protected DetailsKey(Contact contact) {
//         super(contact);
//     }
// }
// 
// Path: app/src/main/java/leonardo2204/com/br/flowtests/flow/keys/EditContactKey.java
// public final class EditContactKey extends ContactKey implements TreeKey {
// 
//     public EditContactKey(Contact contact) {
//         super(contact);
//     }
// 
//     @NonNull
//     @Override
//     public Object getParentKey() {
//         return new ContactsUIKey();
//     }
// }
// 
// Path: app/src/main/java/leonardo2204/com/br/flowtests/flow/serviceFactory/InjectionComponent.java
// public interface InjectionComponent<T> {
//     Object createComponent(T parent);
// }
// 
// Path: app/src/main/java/leonardo2204/com/br/flowtests/model/Contact.java
// @Parcel
// public class Contact {
// 
//     //Don't use private fields, due to reflection penalties using @Parcel
//     String id;
//     String name;
//     List<String> telephone;
// 
//     public Contact() {
//     }
// 
//     @ParcelConstructor
//     public Contact(String id, String name, List<String> telephone) {
//         this.id = id;
//         this.name = name;
//         this.telephone = telephone;
//     }
// 
//     public String getId() {
//         return id;
//     }
// 
//     public void setId(String id) {
//         this.id = id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public List<String> getTelephone() {
//         return telephone;
//     }
// 
//     public void setTelephone(List<String> telephone) {
//         this.telephone = telephone;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         Contact contact = (Contact) o;
// 
//         return id.equals(contact.id);
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         return id.hashCode();
//     }
// 
//     @Override
//     public String toString() {
//         return "Contact{" +
//                 "id='" + id + '\'' +
//                 ", name='" + name + '\'' +
//                 '}';
//     }
// }


import android.support.annotation.NonNull;
import org.parceler.Parcel;
import org.parceler.ParcelConstructor;
import flow.TreeKey;
import leonardo2204.com.br.flowtests.Layout;
import leonardo2204.com.br.flowtests.R;
import leonardo2204.com.br.flowtests.di.component.ActivityComponent;
import leonardo2204.com.br.flowtests.di.component.DaggerDetailScreenComponent;
import leonardo2204.com.br.flowtests.di.module.DetailScreenModule;
import leonardo2204.com.br.flowtests.flow.keys.DetailsKey;
import leonardo2204.com.br.flowtests.flow.keys.EditContactKey;
import leonardo2204.com.br.flowtests.flow.serviceFactory.InjectionComponent;
import leonardo2204.com.br.flowtests.model.Contact;
package leonardo2204.com.br.flowtests.screen;





/**
 * Created by Leonardo on 05/03/2016.
 */
@Parcel
@Layout(R.layout.screen_details)
public final class DetailsScreen extends DetailsKey implements InjectionComponent<ActivityComponent>, TreeKey {

    @ParcelConstructor
// Path: app/src/main/java/leonardo2204/com/br/flowtests/di/component/ActivityComponent.java
// @DaggerScope(ActivityComponent.class)
// @Component(dependencies = AppComponent.class, modules = ActivityModule.class)
// public interface ActivityComponent extends AppComponent {
//     void inject(RootActivity rootActivity);
// 
//     ActionBarOwner actionBarOwner();
// }
// 
// Path: app/src/main/java/leonardo2204/com/br/flowtests/di/module/DetailScreenModule.java
// @Module
// public class DetailScreenModule {
// 
//     @Provides
//     @DaggerScope(DetailScreenComponent.class)
//     public GetDetailedContact providesGetDetailedContact(ContactsRepository contactsRepository, ThreadExecutor threadExecutor, PostExecutionThread postExecutionThread) {
//         return new GetDetailedContact(contactsRepository, threadExecutor, postExecutionThread);
//     }
// 
//     @Provides
//     @DaggerScope(DetailScreenComponent.class)
//     public DetailsScreenPresenter providesDetailsScreenPresenter(GetDetailedContact getDetailedContact, ActionBarOwner actionBarOwner) {
//         return new DetailsScreenPresenter(getDetailedContact, actionBarOwner);
//     }
// }
// 
// Path: app/src/main/java/leonardo2204/com/br/flowtests/flow/keys/DetailsKey.java
// public class DetailsKey extends ContactKey {
// 
//     protected DetailsKey(Contact contact) {
//         super(contact);
//     }
// }
// 
// Path: app/src/main/java/leonardo2204/com/br/flowtests/flow/keys/EditContactKey.java
// public final class EditContactKey extends ContactKey implements TreeKey {
// 
//     public EditContactKey(Contact contact) {
//         super(contact);
//     }
// 
//     @NonNull
//     @Override
//     public Object getParentKey() {
//         return new ContactsUIKey();
//     }
// }
// 
// Path: app/src/main/java/leonardo2204/com/br/flowtests/flow/serviceFactory/InjectionComponent.java
// public interface InjectionComponent<T> {
//     Object createComponent(T parent);
// }
// 
// Path: app/src/main/java/leonardo2204/com/br/flowtests/model/Contact.java
// @Parcel
// public class Contact {
// 
//     //Don't use private fields, due to reflection penalties using @Parcel
//     String id;
//     String name;
//     List<String> telephone;
// 
//     public Contact() {
//     }
// 
//     @ParcelConstructor
//     public Contact(String id, String name, List<String> telephone) {
//         this.id = id;
//         this.name = name;
//         this.telephone = telephone;
//     }
// 
//     public String getId() {
//         return id;
//     }
// 
//     public void setId(String id) {
//         this.id = id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public List<String> getTelephone() {
//         return telephone;
//     }
// 
//     public void setTelephone(List<String> telephone) {
//         this.telephone = telephone;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         Contact contact = (Contact) o;
// 
//         return id.equals(contact.id);
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         return id.hashCode();
//     }
// 
//     @Override
//     public String toString() {
//         return "Contact{" +
//                 "id='" + id + '\'' +
//                 ", name='" + name + '\'' +
//                 '}';
//     }
// }


// Path: app/src/main/java/leonardo2204/com/br/flowtests/screen/DetailsScreen.java
import android.support.annotation.NonNull;
import org.parceler.Parcel;
import org.parceler.ParcelConstructor;
import flow.TreeKey;
import leonardo2204.com.br.flowtests.Layout;
import leonardo2204.com.br.flowtests.R;
import leonardo2204.com.br.flowtests.di.component.ActivityComponent;
import leonardo2204.com.br.flowtests.di.component.DaggerDetailScreenComponent;
import leonardo2204.com.br.flowtests.di.module.DetailScreenModule;
import leonardo2204.com.br.flowtests.flow.keys.DetailsKey;
import leonardo2204.com.br.flowtests.flow.keys.EditContactKey;
import leonardo2204.com.br.flowtests.flow.serviceFactory.InjectionComponent;
import leonardo2204.com.br.flowtests.model.Contact;

package leonardo2204.com.br.flowtests.screen;





/**
 * Created by Leonardo on 05/03/2016.
 */
@Parcel
@Layout(R.layout.screen_details)
public final class DetailsScreen extends DetailsKey implements InjectionComponent<ActivityComponent>, TreeKey {

    @ParcelConstructor
    public DetailsScreen(Contact contact) {