// 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.content.ContentResolver;
import android.database.Cursor;
import android.provider.ContactsContract;
import java.util.ArrayList;
import java.util.List;
import leonardo2204.com.br.flowtests.domain.repository.ContactsRepository;
import leonardo2204.com.br.flowtests.model.Contact;
import rx.Observable;
import rx.Subscriber;
                else
                    queryContacts = contentResolver.query(ContactsContract.Contacts.CONTENT_URI,
                            null, null, null, ContactsContract.Contacts.DISPLAY_NAME + " ASC");

                if(queryContacts.getCount() > 0) {
                    List<Contact> contacts = new ArrayList<>(queryContacts.getColumnCount());

                    while (queryContacts.moveToNext()) {
                        Contact contact = new Contact();

                        String id = queryContacts.getString(
                                queryContacts.getColumnIndex(ContactsContract.Contacts._ID));
                        String name = queryContacts.getString(
                                queryContacts.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

                        contact.setId(id);
                        contact.setName(name);
                        contacts.add(contact);
                    }
                    subscriber.onNext(contacts);
                    subscriber.onCompleted();
                }else{
                    subscriber.onError(new Exception("No contacts were found"));
                    subscriber.onCompleted();
                }
                queryContacts.close();
            }
        });
    }

// 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/data/repository/ContactsRepositoryImpl.java
import android.content.ContentResolver;
import android.database.Cursor;
import android.provider.ContactsContract;
import java.util.ArrayList;
import java.util.List;
import leonardo2204.com.br.flowtests.domain.repository.ContactsRepository;
import leonardo2204.com.br.flowtests.model.Contact;
import rx.Observable;
import rx.Subscriber;

                else
                    queryContacts = contentResolver.query(ContactsContract.Contacts.CONTENT_URI,
                            null, null, null, ContactsContract.Contacts.DISPLAY_NAME + " ASC");

                if(queryContacts.getCount() > 0) {
                    List<Contact> contacts = new ArrayList<>(queryContacts.getColumnCount());

                    while (queryContacts.moveToNext()) {
                        Contact contact = new Contact();

                        String id = queryContacts.getString(
                                queryContacts.getColumnIndex(ContactsContract.Contacts._ID));
                        String name = queryContacts.getString(
                                queryContacts.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

                        contact.setId(id);
                        contact.setName(name);
                        contacts.add(contact);
                    }
                    subscriber.onNext(contacts);
                    subscriber.onCompleted();
                }else{
                    subscriber.onError(new Exception("No contacts were found"));
                    subscriber.onCompleted();
                }
                queryContacts.close();
            }
        });
    }

    @Override