// Path: TestApp/src/main/java/com/ivankocijan/TestApp/adapter/ExampleAdapter.java
// public class ExampleAdapter extends RecyclerView.Adapter<ExampleAdapter.ExampleViewHolder> {
// 
//     private Context context;
// 
//     private List<ExampleModel> exampleModelList;
// 
//     public ExampleAdapter(Context context, List<ExampleModel> exampleModelList) {
//         this.context = context;
//         this.exampleModelList = exampleModelList;
//     }
// 
//     @Override
//     public ExampleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//         return new ExampleViewHolder(LayoutInflater.from(context).inflate(R.layout.example_list_view, parent, false));
//     }
// 
//     @Override
//     public void onBindViewHolder(ExampleViewHolder holder, int position) {
//         holder.exampleListItemText.setText(context.getString(R.string.example_item_s, position));
//     }
// 
//     @Override
//     public int getItemCount() {
//         return exampleModelList.size();
//     }
// 
//     public class ExampleViewHolder extends RecyclerView.ViewHolder {
// 
//         @InjectView(R.id.example_list_item_text)
//         TextView exampleListItemText;
// 
//         public ExampleViewHolder(View itemView) {
//             super(itemView);
//             ButterKnife.inject(this, itemView);
//         }
//     }
// 
// }
// 
// Path: TestApp/src/main/java/com/ivankocijan/TestApp/model/ExampleModel.java
// public class ExampleModel {
// 
// 
// }
// 
// Path: MagicViews/src/main/java/com/ivankocijan/magicviews/views/MagicRecyclerView.java
// public class MagicRecyclerView extends RecyclerView {
// 
//     protected LoadMoreDataListener loadMoreDataListener;
// 
//     protected int firstVisibleItem;
// 
//     protected int visibleItemCount;
// 
//     protected int totalItemCount;
// 
//     private View emptyStateView;
// 
//     private final AdapterDataObserver observer = new AdapterDataObserver() {
//         @Override
//         public void onChanged() {
//             setRecyclerViewVisibility();
//         }
// 
//         @Override
//         public void onItemRangeInserted(int positionStart, int itemCount) {
//             setRecyclerViewVisibility();
//         }
// 
//         @Override
//         public void onItemRangeRemoved(int positionStart, int itemCount) {
//             setRecyclerViewVisibility();
//         }
//     };
// 
// 
//     public MagicRecyclerView(Context context) {
//         this(context, null);
//     }
// 
//     public MagicRecyclerView(Context context, @Nullable AttributeSet attrs) {
//         this(context, attrs, 0);
//     }
// 
//     public MagicRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
//         super(context, attrs, defStyle);
//         init();
//     }
// 
//     public interface LoadMoreDataListener {
//         void onLoadMoreData();
//     }
// 
//     protected void init() {
// 
//         this.addOnScrollListener(new OnScrollListener() {
//             @Override
//             public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
//                 super.onScrolled(recyclerView, dx, dy);
// 
//                 //Only check scroll down
//                 if (loadMoreDataListener != null && dy > 0 && getLayoutManager() != null
//                         && getLayoutManager() instanceof LinearLayoutManager) {
// 
//                     firstVisibleItem = ((LinearLayoutManager) getLayoutManager()).findFirstVisibleItemPosition();
//                     visibleItemCount = getLayoutManager().getChildCount();
//                     totalItemCount = getLayoutManager().getItemCount();
// 
//                     if ((visibleItemCount + firstVisibleItem) >= totalItemCount) {
//                         loadMoreDataListener.onLoadMoreData();
//                     }
// 
//                 }
// 
//             }
//         });
// 
//     }
// 
//     /**
//      * @param listener loadMoreDataListener which notifies when user scrolls down to the last item
//      */
//     public void setLoadMoreDataListener(LoadMoreDataListener listener) {
//         this.loadMoreDataListener = listener;
//     }
// 
//     @Override
//     public void setAdapter(Adapter adapter) {
//         final Adapter currentAdapter = getAdapter();
//         if (currentAdapter != null) {
//             currentAdapter.unregisterAdapterDataObserver(observer);
//         }
//         super.setAdapter(adapter);
//         if (adapter != null) {
//             adapter.registerAdapterDataObserver(observer);
//         }
// 
//         setRecyclerViewVisibility();
//     }
// 
//     /**
//      * @param emptyState empty state view which recycler view will show when the list is empty
//      */
//     public void setEmptyStateView(View emptyState) {
//         this.emptyStateView = emptyState;
//         setRecyclerViewVisibility();
//     }
// 
//     /**
//      * If adapter has no items {@link emptyStateView} is shown and RecyclerView visibility is set to GONE.
//      */
//     private void setRecyclerViewVisibility() {
// 
//         if (emptyStateView != null && getAdapter() != null) {
// 
//             boolean emptyViewVisible = getAdapter().getItemCount() == 0;
//             emptyStateView.setVisibility(emptyViewVisible ? VISIBLE : GONE);
//             setVisibility(emptyViewVisible ? GONE : VISIBLE);
// 
//         }
//     }
// 
// 
// }


import com.ivankocijan.TestApp.R;
import com.ivankocijan.TestApp.adapter.ExampleAdapter;
import com.ivankocijan.TestApp.model.ExampleModel;
import com.ivankocijan.magicviews.views.MagicRecyclerView;
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.widget.LinearLayout;
import java.util.ArrayList;
import java.util.List;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
package com.ivankocijan.TestApp.activites;





public class RecyclerViewExampleActivity extends Activity implements MagicRecyclerView.LoadMoreDataListener {

    @InjectView(R.id.recycler_view)
// Path: TestApp/src/main/java/com/ivankocijan/TestApp/adapter/ExampleAdapter.java
// public class ExampleAdapter extends RecyclerView.Adapter<ExampleAdapter.ExampleViewHolder> {
// 
//     private Context context;
// 
//     private List<ExampleModel> exampleModelList;
// 
//     public ExampleAdapter(Context context, List<ExampleModel> exampleModelList) {
//         this.context = context;
//         this.exampleModelList = exampleModelList;
//     }
// 
//     @Override
//     public ExampleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//         return new ExampleViewHolder(LayoutInflater.from(context).inflate(R.layout.example_list_view, parent, false));
//     }
// 
//     @Override
//     public void onBindViewHolder(ExampleViewHolder holder, int position) {
//         holder.exampleListItemText.setText(context.getString(R.string.example_item_s, position));
//     }
// 
//     @Override
//     public int getItemCount() {
//         return exampleModelList.size();
//     }
// 
//     public class ExampleViewHolder extends RecyclerView.ViewHolder {
// 
//         @InjectView(R.id.example_list_item_text)
//         TextView exampleListItemText;
// 
//         public ExampleViewHolder(View itemView) {
//             super(itemView);
//             ButterKnife.inject(this, itemView);
//         }
//     }
// 
// }
// 
// Path: TestApp/src/main/java/com/ivankocijan/TestApp/model/ExampleModel.java
// public class ExampleModel {
// 
// 
// }
// 
// Path: MagicViews/src/main/java/com/ivankocijan/magicviews/views/MagicRecyclerView.java
// public class MagicRecyclerView extends RecyclerView {
// 
//     protected LoadMoreDataListener loadMoreDataListener;
// 
//     protected int firstVisibleItem;
// 
//     protected int visibleItemCount;
// 
//     protected int totalItemCount;
// 
//     private View emptyStateView;
// 
//     private final AdapterDataObserver observer = new AdapterDataObserver() {
//         @Override
//         public void onChanged() {
//             setRecyclerViewVisibility();
//         }
// 
//         @Override
//         public void onItemRangeInserted(int positionStart, int itemCount) {
//             setRecyclerViewVisibility();
//         }
// 
//         @Override
//         public void onItemRangeRemoved(int positionStart, int itemCount) {
//             setRecyclerViewVisibility();
//         }
//     };
// 
// 
//     public MagicRecyclerView(Context context) {
//         this(context, null);
//     }
// 
//     public MagicRecyclerView(Context context, @Nullable AttributeSet attrs) {
//         this(context, attrs, 0);
//     }
// 
//     public MagicRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
//         super(context, attrs, defStyle);
//         init();
//     }
// 
//     public interface LoadMoreDataListener {
//         void onLoadMoreData();
//     }
// 
//     protected void init() {
// 
//         this.addOnScrollListener(new OnScrollListener() {
//             @Override
//             public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
//                 super.onScrolled(recyclerView, dx, dy);
// 
//                 //Only check scroll down
//                 if (loadMoreDataListener != null && dy > 0 && getLayoutManager() != null
//                         && getLayoutManager() instanceof LinearLayoutManager) {
// 
//                     firstVisibleItem = ((LinearLayoutManager) getLayoutManager()).findFirstVisibleItemPosition();
//                     visibleItemCount = getLayoutManager().getChildCount();
//                     totalItemCount = getLayoutManager().getItemCount();
// 
//                     if ((visibleItemCount + firstVisibleItem) >= totalItemCount) {
//                         loadMoreDataListener.onLoadMoreData();
//                     }
// 
//                 }
// 
//             }
//         });
// 
//     }
// 
//     /**
//      * @param listener loadMoreDataListener which notifies when user scrolls down to the last item
//      */
//     public void setLoadMoreDataListener(LoadMoreDataListener listener) {
//         this.loadMoreDataListener = listener;
//     }
// 
//     @Override
//     public void setAdapter(Adapter adapter) {
//         final Adapter currentAdapter = getAdapter();
//         if (currentAdapter != null) {
//             currentAdapter.unregisterAdapterDataObserver(observer);
//         }
//         super.setAdapter(adapter);
//         if (adapter != null) {
//             adapter.registerAdapterDataObserver(observer);
//         }
// 
//         setRecyclerViewVisibility();
//     }
// 
//     /**
//      * @param emptyState empty state view which recycler view will show when the list is empty
//      */
//     public void setEmptyStateView(View emptyState) {
//         this.emptyStateView = emptyState;
//         setRecyclerViewVisibility();
//     }
// 
//     /**
//      * If adapter has no items {@link emptyStateView} is shown and RecyclerView visibility is set to GONE.
//      */
//     private void setRecyclerViewVisibility() {
// 
//         if (emptyStateView != null && getAdapter() != null) {
// 
//             boolean emptyViewVisible = getAdapter().getItemCount() == 0;
//             emptyStateView.setVisibility(emptyViewVisible ? VISIBLE : GONE);
//             setVisibility(emptyViewVisible ? GONE : VISIBLE);
// 
//         }
//     }
// 
// 
// }


// Path: TestApp/src/main/java/com/ivankocijan/TestApp/activites/RecyclerViewExampleActivity.java
import com.ivankocijan.TestApp.R;
import com.ivankocijan.TestApp.adapter.ExampleAdapter;
import com.ivankocijan.TestApp.model.ExampleModel;
import com.ivankocijan.magicviews.views.MagicRecyclerView;
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.widget.LinearLayout;
import java.util.ArrayList;
import java.util.List;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;

package com.ivankocijan.TestApp.activites;





public class RecyclerViewExampleActivity extends Activity implements MagicRecyclerView.LoadMoreDataListener {

    @InjectView(R.id.recycler_view)
    MagicRecyclerView recyclerView;