/*
* 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);
}
}
}