package com.examples.dynamiclist;

    import android.content.Context;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    import android.view.ViewGroup;

    import com.examples.dynamiclist.core.AdapterItem;
    import com.examples.dynamiclist.core.DynamicViewAdapter;
    import com.examples.dynamiclist.core.ViewHolder;

    public class TestDynamicViewAdapter extends DynamicViewAdapter
    {
        private final TestDynamicModel _model;

        public TestDynamicViewAdapter(Context context, TestDynamicModel model)
        {
            super(context, R.layout.progress_item, R.layout.unavailable_item,
                    R.layout.empty_item);

            _model = model;
            _model.setLoadCompleted(new Handler()
            {
                @Override
                public void dispatchMessage(Message msg)
                {
                    setDataCompleted();
                }
            });
            submitDataRequest();
        }

        @Override
        public View onDataView(int position, AdapterItem item, View convertView,
                ViewGroup parent)
        {
            convertView = tryInflateView(convertView, ItemViewHolder.ResourceId,
                    parent);
            ViewHolder viewHolder = (ViewHolder) convertView.getTag();
            if (viewHolder == null)
            {
                viewHolder = new ItemViewHolder(convertView);
            }
            viewHolder.render(item);
            return convertView;
        }


        /*This method should return true if there is more data to load.
         * For instance it loads by 20 items, for list with 60 items it
         * should return true until it riches (60th) last item in the list;
         * */
        @Override
        protected boolean isMoreToLoad()
        {
            return _model.getCount() < 100;
        }

        /*This method is called when data item needs to be loaded from the model to the adapter;
         * Use addItem method to load every item from the model.*(non-Javadoc)
         * @see com.examples.dynamiclist.core.DynamicViewAdapter#isMoreToLoad()
         */
        @Override
        protected void onDataLoad()
        {
            for (int i = 0; i < _model.getCount(); i++)
            {
                addItem(_model.getItem(i), null);
            }
        }

        @Override
        protected void submitDataRequest()
        {
            _model.loadMore();
        }

    }