content: /*
   * Copyright 2013 Niek Haarman
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package com.haarman.listviewanimations.itemmanipulation;
  
  import android.widget.AbsListView;
  import android.widget.BaseAdapter;
  
  import com.haarman.listviewanimations.ArrayAdapter;
  import com.haarman.listviewanimations.BaseAdapterDecorator;
  
  /**
   * Adds an option to swipe items in a ListView away. This does nothing more than
   * setting a new SwipeDismissListViewTouchListener to the ListView.
   */
  public class SwipeDismissAdapter extends BaseAdapterDecorator {
  
  	protected OnDismissCallback mCallback;
  	protected SwipeDismissListViewTouchListener mSwipeDismissListViewTouchListener;
  
  	protected SwipeOnScrollListener mOnScroll;
  	
  	public SwipeDismissAdapter(BaseAdapter baseAdapter, OnDismissCallback callback) {
  		// add a default OnScrollListener
  		this(baseAdapter, callback, new SwipeOnScrollListener());
  	}
  
  	public SwipeDismissAdapter(BaseAdapter baseAdapter, OnDismissCallback callback, SwipeOnScrollListener onScroll) {
  		super(baseAdapter);
  		mCallback = callback;
  		mOnScroll = onScroll;
  	}
  	
  	/**
  	 * Override-able 
  	 * @param listView
  	 * @return SwipeDismissListViewTouchListener
  	 */
  	protected SwipeDismissListViewTouchListener createListViewTouchListener(AbsListView listView) {
  		return new SwipeDismissListViewTouchListener(listView, mCallback, mOnScroll);
  	}
  	
  	@Override
  	public void setAbsListView(AbsListView listView) {
  		super.setAbsListView(listView);
  		if (mDecoratedBaseAdapter instanceof ArrayAdapter<?>) {
  			// fix #35 dirty trick !
  			// if ArrayAdapter we assume that items manipulation will come from it
  			((ArrayAdapter<?>)mDecoratedBaseAdapter).propagateNotifyDataSetChanged(this);
  		}
  		mSwipeDismissListViewTouchListener = createListViewTouchListener(listView);
  		mSwipeDismissListViewTouchListener.setIsParentHorizontalScrollContainer(isParentHorizontalScrollContainer());
  		mSwipeDismissListViewTouchListener.setTouchChild(getTouchChild());
  		listView.setOnTouchListener(mSwipeDismissListViewTouchListener);
  	}
  
  	@Override
  	public void setIsParentHorizontalScrollContainer(boolean isParentHorizontalScrollContainer) {
  		super.setIsParentHorizontalScrollContainer(isParentHorizontalScrollContainer);
  		if (mSwipeDismissListViewTouchListener != null) {
  			mSwipeDismissListViewTouchListener.setIsParentHorizontalScrollContainer(isParentHorizontalScrollContainer);
  		}
  	}
  
  	@Override
  	public void notifyDataSetChanged() {
  		super.notifyDataSetChanged();
  		if (mSwipeDismissListViewTouchListener != null) {
  			mSwipeDismissListViewTouchListener.notifyDataSetChanged();
  		}
  	}
  
  	@Override
  	public void setTouchChild(int childResId) {
  		super.setTouchChild(childResId);
  		if (mSwipeDismissListViewTouchListener != null) {
  			mSwipeDismissListViewTouchListener.setTouchChild(childResId);
  		}
  	}
  }
  