// Path: app/src/main/java/com/lucilu/rxdynamicsearch/ui/adapter/CountryListItemComparator.java
// public final class CountryListItemComparator implements IListItemComparator {
// 
//     public boolean areItemsTheSame(final DisplayableItem item1, final DisplayableItem item2) {
//         return false;
//     }
// 
//     public boolean areContentsTheSame(final DisplayableItem item1, final DisplayableItem item2) {
//         return false;
//     }
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/ui/adapter/CountryListViewHolderBinder.java
// public final class CountryListViewHolderBinder implements IViewHolderBinder<DisplayableItem> {
// 
//     public CountryListViewHolderBinder() {
//     }
// 
//     @Override
//     public void bind(@NonNull final ViewHolder viewHolder,
//                      @NonNull final DisplayableItem displayableItem) {
//         switch (displayableItem.type()) {
//             case COUNTRY:
//                 CountryViewHolder countryViewHolder = CountryViewHolder.class.cast(viewHolder);
//                 Country country = Country.class.cast(displayableItem.model());
//                 countryViewHolder.bind(country);
//                 break;
//             case AD:
//                 AdViewHolder AdViewHolder = AdViewHolder.class.cast(viewHolder);
//                 Ad ad = Ad.class.cast(displayableItem.model());
//                 AdViewHolder.bind(ad);
//                 break;
//             default:
//                 throw new IllegalStateException("The type is not supported " + displayableItem
//                         .type());
//         }
//     }
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/ui/adapter/CountryListViewHolderFactory.java
// public final class CountryListViewHolderFactory implements IViewHolderFactory {
// 
//     @NonNull
//     private final Context mContext;
// 
//     public CountryListViewHolderFactory(@NonNull final Context context) {
//         mContext = context;
//     }
// 
//     @NonNull
//     @Override
//     public ViewHolder createViewHolder(@NonNull final ViewGroup parent, final int itemType) {
//         switch (itemType) {
//             case COUNTRY:
//                 return new CountryViewHolder(LayoutInflater.from(mContext)
//                                                            .inflate(R.layout.item_country, parent,
//                                                                     false));
//             case AD:
//                 return new AdViewHolder(LayoutInflater.from(mContext)
//                                                       .inflate(R.layout.item_ad, parent, false));
//             default:
//                 throw new IllegalStateException("Unknown type " + itemType);
//         }
//     }
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/ui/adapter/base/IListItemComparator.java
// public interface IListItemComparator {
// 
//     /**
//      * Decides whether two {@link DisplayableItem} represent the same Item.
//      * For example, if your items have unique ids, this method should check their id equality.
//      *
//      * @return True if the two items represent the same object or false if they are different.
//      */
//     boolean areItemsTheSame(final DisplayableItem item1, final DisplayableItem item2);
// 
//     /**
//      * Checks whether the visual representation of two {@link DisplayableItem}s is the same.
//      *
//      * This method is called only if {@link #areItemsTheSame(DisplayableItem, DisplayableItem)}
//      * returns {@code true} for these items. For instance, when the item is the same with different
//      * state, like selected.
//      *
//      * @return True if the visual representation for the {@link DisplayableItem}s are the same or
//      * false if they are different.
//      */
//     boolean areContentsTheSame(final DisplayableItem item1, final DisplayableItem item2);
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/ui/adapter/base/IViewHolderBinder.java
// public interface IViewHolderBinder<T> {
// 
//     /**
//      * Populates the passed {@link ViewHolder} with the details of the passed model.
//      */
//     void bind(@NonNull final ViewHolder viewHolder, @NonNull final T model);
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/ui/adapter/base/IViewHolderFactory.java
// public interface IViewHolderFactory {
// 
//     /**
//      * Creates a {@link ViewHolder} for the passed type
//      *
//      * @param parent The ViewGroup into which the new View will be added after it is bound to
//      *               an adapter position.
//      * @return the newly created {@link ViewHolder}
//      */
//     @NonNull
//     ViewHolder createViewHolder(@NonNull final ViewGroup parent, final int itemType);
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/viewmodel/pojo/DisplayableItem.java
// @AutoValue
// public abstract class DisplayableItem<T> {
// 
//     public abstract int type();
// 
//     @NonNull
//     public abstract T model();
// 
//     @SuppressWarnings("NullableProblems")
//     @AutoValue.Builder
//     public abstract static class Builder<T> {
// 
//         @NonNull
//         public abstract Builder<T> type(@NonNull int type);
// 
//         @NonNull
//         public abstract Builder<T> model(@NonNull T model);
// 
//         @NonNull
//         public abstract DisplayableItem<T> build();
//     }
// 
//     @NonNull
//     public static <T> Builder<T> builder() {
//         return new AutoValue_DisplayableItem.Builder<>();
//     }
// }


import com.lucilu.rxdynamicsearch.dagger.Qualifiers.ForActivity;
import com.lucilu.rxdynamicsearch.ui.adapter.CountryListItemComparator;
import com.lucilu.rxdynamicsearch.ui.adapter.CountryListViewHolderBinder;
import com.lucilu.rxdynamicsearch.ui.adapter.CountryListViewHolderFactory;
import com.lucilu.rxdynamicsearch.ui.adapter.base.IListItemComparator;
import com.lucilu.rxdynamicsearch.ui.adapter.base.IViewHolderBinder;
import com.lucilu.rxdynamicsearch.ui.adapter.base.IViewHolderFactory;
import com.lucilu.rxdynamicsearch.viewmodel.pojo.DisplayableItem;
import android.content.Context;
import dagger.Module;
import dagger.Provides;
package com.lucilu.rxdynamicsearch.dagger.module;




@Module
public final class CountryListModule {

    @Provides
    IViewHolderFactory provideViewHolderFactory(@ForActivity Context context) {
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/ui/adapter/CountryListItemComparator.java
// public final class CountryListItemComparator implements IListItemComparator {
// 
//     public boolean areItemsTheSame(final DisplayableItem item1, final DisplayableItem item2) {
//         return false;
//     }
// 
//     public boolean areContentsTheSame(final DisplayableItem item1, final DisplayableItem item2) {
//         return false;
//     }
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/ui/adapter/CountryListViewHolderBinder.java
// public final class CountryListViewHolderBinder implements IViewHolderBinder<DisplayableItem> {
// 
//     public CountryListViewHolderBinder() {
//     }
// 
//     @Override
//     public void bind(@NonNull final ViewHolder viewHolder,
//                      @NonNull final DisplayableItem displayableItem) {
//         switch (displayableItem.type()) {
//             case COUNTRY:
//                 CountryViewHolder countryViewHolder = CountryViewHolder.class.cast(viewHolder);
//                 Country country = Country.class.cast(displayableItem.model());
//                 countryViewHolder.bind(country);
//                 break;
//             case AD:
//                 AdViewHolder AdViewHolder = AdViewHolder.class.cast(viewHolder);
//                 Ad ad = Ad.class.cast(displayableItem.model());
//                 AdViewHolder.bind(ad);
//                 break;
//             default:
//                 throw new IllegalStateException("The type is not supported " + displayableItem
//                         .type());
//         }
//     }
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/ui/adapter/CountryListViewHolderFactory.java
// public final class CountryListViewHolderFactory implements IViewHolderFactory {
// 
//     @NonNull
//     private final Context mContext;
// 
//     public CountryListViewHolderFactory(@NonNull final Context context) {
//         mContext = context;
//     }
// 
//     @NonNull
//     @Override
//     public ViewHolder createViewHolder(@NonNull final ViewGroup parent, final int itemType) {
//         switch (itemType) {
//             case COUNTRY:
//                 return new CountryViewHolder(LayoutInflater.from(mContext)
//                                                            .inflate(R.layout.item_country, parent,
//                                                                     false));
//             case AD:
//                 return new AdViewHolder(LayoutInflater.from(mContext)
//                                                       .inflate(R.layout.item_ad, parent, false));
//             default:
//                 throw new IllegalStateException("Unknown type " + itemType);
//         }
//     }
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/ui/adapter/base/IListItemComparator.java
// public interface IListItemComparator {
// 
//     /**
//      * Decides whether two {@link DisplayableItem} represent the same Item.
//      * For example, if your items have unique ids, this method should check their id equality.
//      *
//      * @return True if the two items represent the same object or false if they are different.
//      */
//     boolean areItemsTheSame(final DisplayableItem item1, final DisplayableItem item2);
// 
//     /**
//      * Checks whether the visual representation of two {@link DisplayableItem}s is the same.
//      *
//      * This method is called only if {@link #areItemsTheSame(DisplayableItem, DisplayableItem)}
//      * returns {@code true} for these items. For instance, when the item is the same with different
//      * state, like selected.
//      *
//      * @return True if the visual representation for the {@link DisplayableItem}s are the same or
//      * false if they are different.
//      */
//     boolean areContentsTheSame(final DisplayableItem item1, final DisplayableItem item2);
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/ui/adapter/base/IViewHolderBinder.java
// public interface IViewHolderBinder<T> {
// 
//     /**
//      * Populates the passed {@link ViewHolder} with the details of the passed model.
//      */
//     void bind(@NonNull final ViewHolder viewHolder, @NonNull final T model);
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/ui/adapter/base/IViewHolderFactory.java
// public interface IViewHolderFactory {
// 
//     /**
//      * Creates a {@link ViewHolder} for the passed type
//      *
//      * @param parent The ViewGroup into which the new View will be added after it is bound to
//      *               an adapter position.
//      * @return the newly created {@link ViewHolder}
//      */
//     @NonNull
//     ViewHolder createViewHolder(@NonNull final ViewGroup parent, final int itemType);
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/viewmodel/pojo/DisplayableItem.java
// @AutoValue
// public abstract class DisplayableItem<T> {
// 
//     public abstract int type();
// 
//     @NonNull
//     public abstract T model();
// 
//     @SuppressWarnings("NullableProblems")
//     @AutoValue.Builder
//     public abstract static class Builder<T> {
// 
//         @NonNull
//         public abstract Builder<T> type(@NonNull int type);
// 
//         @NonNull
//         public abstract Builder<T> model(@NonNull T model);
// 
//         @NonNull
//         public abstract DisplayableItem<T> build();
//     }
// 
//     @NonNull
//     public static <T> Builder<T> builder() {
//         return new AutoValue_DisplayableItem.Builder<>();
//     }
// }


// Path: app/src/main/java/com/lucilu/rxdynamicsearch/dagger/module/CountryListModule.java
import com.lucilu.rxdynamicsearch.dagger.Qualifiers.ForActivity;
import com.lucilu.rxdynamicsearch.ui.adapter.CountryListItemComparator;
import com.lucilu.rxdynamicsearch.ui.adapter.CountryListViewHolderBinder;
import com.lucilu.rxdynamicsearch.ui.adapter.CountryListViewHolderFactory;
import com.lucilu.rxdynamicsearch.ui.adapter.base.IListItemComparator;
import com.lucilu.rxdynamicsearch.ui.adapter.base.IViewHolderBinder;
import com.lucilu.rxdynamicsearch.ui.adapter.base.IViewHolderFactory;
import com.lucilu.rxdynamicsearch.viewmodel.pojo.DisplayableItem;
import android.content.Context;
import dagger.Module;
import dagger.Provides;

package com.lucilu.rxdynamicsearch.dagger.module;




@Module
public final class CountryListModule {

    @Provides
    IViewHolderFactory provideViewHolderFactory(@ForActivity Context context) {
        return new CountryListViewHolderFactory(context);