Skip to content

Commit baafdcb

Browse files
committed
Modularize Manager class
Seperated out the code thats used more then once and created 2 seperate subclasses called Adapter and Recycler based on the method of 'lists'.
1 parent 418898c commit baafdcb

File tree

8 files changed

+125
-208
lines changed

8 files changed

+125
-208
lines changed

demo/src/main/java/com/daimajia/swipedemo/adapter/RecyclerViewAdapter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public void onClick(View view) {
9090
});
9191
viewHolder.textViewPos.setText((position + 1) + ".");
9292
viewHolder.textViewData.setText(item);
93-
mItemManger.bind(viewHolder.itemView, position);
93+
mItemManger.bindView(viewHolder.itemView, position);
9494
}
9595

9696
@Override

library/src/main/java/com/daimajia/swipe/adapters/ArraySwipeAdapter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import android.widget.ArrayAdapter;
77

88
import com.daimajia.swipe.SwipeLayout;
9+
import com.daimajia.swipe.implments.SwipeItemAdapterMangerImpl;
910
import com.daimajia.swipe.implments.SwipeItemMangerImpl;
1011
import com.daimajia.swipe.interfaces.SwipeAdapterInterface;
1112
import com.daimajia.swipe.interfaces.SwipeItemMangerInterface;
@@ -15,7 +16,7 @@
1516

1617
public abstract class ArraySwipeAdapter<T> extends ArrayAdapter implements SwipeItemMangerInterface,SwipeAdapterInterface {
1718

18-
private SwipeItemMangerImpl mItemManger = new SwipeItemMangerImpl(this);
19+
private SwipeItemAdapterMangerImpl mItemManger = new SwipeItemAdapterMangerImpl(this);
1920
{}
2021
public ArraySwipeAdapter(Context context, int resource) {
2122
super(context, resource);

library/src/main/java/com/daimajia/swipe/adapters/BaseSwipeAdapter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.widget.BaseAdapter;
66

77
import com.daimajia.swipe.SwipeLayout;
8+
import com.daimajia.swipe.implments.SwipeItemAdapterMangerImpl;
89
import com.daimajia.swipe.interfaces.SwipeAdapterInterface;
910
import com.daimajia.swipe.implments.SwipeItemMangerImpl;
1011
import com.daimajia.swipe.interfaces.SwipeItemMangerInterface;
@@ -14,7 +15,7 @@
1415

1516
public abstract class BaseSwipeAdapter extends BaseAdapter implements SwipeItemMangerInterface, SwipeAdapterInterface {
1617

17-
protected SwipeItemMangerImpl mItemManger = new SwipeItemMangerImpl(this);
18+
protected SwipeItemAdapterMangerImpl mItemManger = new SwipeItemAdapterMangerImpl(this);
1819

1920
/**
2021
* return the {@link com.daimajia.swipe.SwipeLayout} resource id, int the view item.

library/src/main/java/com/daimajia/swipe/adapters/CursorSwipeAdapter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import android.view.ViewGroup;
88

99
import com.daimajia.swipe.SwipeLayout;
10+
import com.daimajia.swipe.implments.SwipeItemAdapterMangerImpl;
1011
import com.daimajia.swipe.interfaces.SwipeAdapterInterface;
1112
import com.daimajia.swipe.implments.SwipeItemMangerImpl;
1213
import com.daimajia.swipe.interfaces.SwipeItemMangerInterface;
@@ -16,7 +17,7 @@
1617

1718
public abstract class CursorSwipeAdapter extends CursorAdapter implements SwipeItemMangerInterface, SwipeAdapterInterface {
1819

19-
private SwipeItemMangerImpl mItemManger = new SwipeItemMangerImpl(this);
20+
private SwipeItemAdapterMangerImpl mItemManger = new SwipeItemAdapterMangerImpl(this);
2021

2122
protected CursorSwipeAdapter(Context context, Cursor c, boolean autoRequery) {
2223
super(context, c, autoRequery);

library/src/main/java/com/daimajia/swipe/adapters/SimpleCursorSwipeAdapter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import android.view.ViewGroup;
88

99
import com.daimajia.swipe.SwipeLayout;
10+
import com.daimajia.swipe.implments.SwipeItemAdapterMangerImpl;
1011
import com.daimajia.swipe.implments.SwipeItemMangerImpl;
1112
import com.daimajia.swipe.interfaces.SwipeAdapterInterface;
1213
import com.daimajia.swipe.interfaces.SwipeItemMangerInterface;
@@ -16,7 +17,7 @@
1617

1718
public abstract class SimpleCursorSwipeAdapter extends SimpleCursorAdapter implements SwipeItemMangerInterface, SwipeAdapterInterface {
1819

19-
private SwipeItemMangerImpl mItemManger = new SwipeItemMangerImpl(this);
20+
private SwipeItemAdapterMangerImpl mItemManger = new SwipeItemAdapterMangerImpl(this);
2021

2122
protected SimpleCursorSwipeAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) {
2223
super(context, layout, c, from, to, flags);
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package com.daimajia.swipe.implments;
2+
3+
import android.view.View;
4+
import android.widget.BaseAdapter;
5+
6+
import com.daimajia.swipe.SimpleSwipeListener;
7+
import com.daimajia.swipe.SwipeLayout;
8+
import com.daimajia.swipe.interfaces.SwipeAdapterInterface;
9+
import com.daimajia.swipe.interfaces.SwipeItemMangerInterface;
10+
import com.daimajia.swipe.util.Attributes;
11+
12+
import java.util.ArrayList;
13+
import java.util.Arrays;
14+
import java.util.HashSet;
15+
import java.util.List;
16+
import java.util.Set;
17+
18+
/**
19+
* SwipeItemMangerImpl is a helper class to help all the adapters to maintain open status.
20+
*/
21+
public class SwipeItemAdapterMangerImpl extends SwipeItemMangerImpl{
22+
23+
protected BaseAdapter mAdapter;
24+
25+
public SwipeItemAdapterMangerImpl(BaseAdapter adapter) {
26+
super(adapter);
27+
this.mAdapter = adapter;
28+
}
29+
30+
@Override
31+
public void initialize(View target, int position) {
32+
int resId = getSwipeLayoutId(position);
33+
34+
OnLayoutListener onLayoutListener = new OnLayoutListener(position);
35+
SwipeLayout swipeLayout = (SwipeLayout) target.findViewById(resId);
36+
if (swipeLayout == null)
37+
throw new IllegalStateException("can not find SwipeLayout in target view");
38+
39+
SwipeMemory swipeMemory = new SwipeMemory(position);
40+
swipeLayout.addSwipeListener(swipeMemory);
41+
swipeLayout.addOnLayoutListener(onLayoutListener);
42+
swipeLayout.setTag(resId, new ValueBox(position, swipeMemory, onLayoutListener));
43+
44+
mShownLayouts.add(swipeLayout);
45+
}
46+
47+
@Override
48+
public void updateConvertView(View target, int position) {
49+
int resId = getSwipeLayoutId(position);
50+
51+
SwipeLayout swipeLayout = (SwipeLayout) target.findViewById(resId);
52+
if (swipeLayout == null)
53+
throw new IllegalStateException("can not find SwipeLayout in target view");
54+
55+
ValueBox valueBox = (ValueBox) swipeLayout.getTag(resId);
56+
valueBox.swipeMemory.setPosition(position);
57+
valueBox.onLayoutListener.setPosition(position);
58+
valueBox.position = position;
59+
}
60+
61+
@Override
62+
public void bindView(View target, int position){
63+
64+
}
65+
66+
}

library/src/main/java/com/daimajia/swipe/implments/SwipeItemMangerImpl.java

Lines changed: 43 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.daimajia.swipe.implments;
22

3+
import android.support.v7.widget.RecyclerView;
34
import android.view.View;
45
import android.widget.BaseAdapter;
56

@@ -18,7 +19,7 @@
1819
/**
1920
* SwipeItemMangerImpl is a helper class to help all the adapters to maintain open status.
2021
*/
21-
public class SwipeItemMangerImpl implements SwipeItemMangerInterface {
22+
public abstract class SwipeItemMangerImpl implements SwipeItemMangerInterface {
2223

2324
private Attributes.Mode mode = Attributes.Mode.Single;
2425
public final int INVALID_POSITION = -1;
@@ -28,7 +29,8 @@ public class SwipeItemMangerImpl implements SwipeItemMangerInterface {
2829
protected Set<Integer> mOpenPositions = new HashSet<Integer>();
2930
protected Set<SwipeLayout> mShownLayouts = new HashSet<SwipeLayout>();
3031

31-
protected BaseAdapter mAdapter;
32+
protected BaseAdapter mBaseAdapter;
33+
protected RecyclerView.Adapter mRecyclerAdapter;
3234

3335
public SwipeItemMangerImpl(BaseAdapter adapter) {
3436
if (adapter == null)
@@ -37,7 +39,17 @@ public SwipeItemMangerImpl(BaseAdapter adapter) {
3739
if (!(adapter instanceof SwipeItemMangerInterface))
3840
throw new IllegalArgumentException("adapter should implement the SwipeAdapterInterface");
3941

40-
this.mAdapter = adapter;
42+
this.mBaseAdapter = adapter;
43+
}
44+
45+
public SwipeItemMangerImpl(RecyclerView.Adapter adapter) {
46+
if (adapter == null)
47+
throw new IllegalArgumentException("Adapter can not be null");
48+
49+
if (!(adapter instanceof SwipeItemMangerInterface))
50+
throw new IllegalArgumentException("adapter should implement the SwipeAdapterInterface");
51+
52+
this.mRecyclerAdapter = adapter;
4153
}
4254

4355
public Attributes.Mode getMode() {
@@ -51,37 +63,22 @@ public void setMode(Attributes.Mode mode) {
5163
mOpenPosition = INVALID_POSITION;
5264
}
5365

54-
public void initialize(View target, int position) {
55-
int resId = getSwipeLayoutId(position);
56-
57-
OnLayoutListener onLayoutListener = new OnLayoutListener(position);
58-
SwipeLayout swipeLayout = (SwipeLayout) target.findViewById(resId);
59-
if (swipeLayout == null)
60-
throw new IllegalStateException("can not find SwipeLayout in target view");
66+
/* initialize and updateConvertView used for AdapterManagerImpl */
67+
public abstract void initialize(View target, int position);
6168

62-
SwipeMemory swipeMemory = new SwipeMemory(position);
63-
swipeLayout.addSwipeListener(swipeMemory);
64-
swipeLayout.addOnLayoutListener(onLayoutListener);
65-
swipeLayout.setTag(resId, new ValueBox(position, swipeMemory, onLayoutListener));
66-
67-
mShownLayouts.add(swipeLayout);
68-
}
69+
public abstract void updateConvertView(View target, int position);
6970

70-
public void updateConvertView(View target, int position) {
71-
int resId = getSwipeLayoutId(position);
71+
/* bindView used for RecyclerViewManagerImpl */
72+
public abstract void bindView(View target, int position);
7273

73-
SwipeLayout swipeLayout = (SwipeLayout) target.findViewById(resId);
74-
if (swipeLayout == null)
75-
throw new IllegalStateException("can not find SwipeLayout in target view");
76-
77-
ValueBox valueBox = (ValueBox) swipeLayout.getTag(resId);
78-
valueBox.swipeMemory.setPosition(position);
79-
valueBox.onLayoutListener.setPosition(position);
80-
valueBox.position = position;
81-
}
82-
83-
private int getSwipeLayoutId(int position) {
84-
return ((SwipeAdapterInterface) (mAdapter)).getSwipeLayoutResourceId(position);
74+
public int getSwipeLayoutId(int position) {
75+
if (mBaseAdapter != null) {
76+
return ((SwipeAdapterInterface) (mBaseAdapter)).getSwipeLayoutResourceId(position);
77+
} else if (mRecyclerAdapter != null) {
78+
return ((SwipeAdapterInterface) (mRecyclerAdapter)).getSwipeLayoutResourceId(position);
79+
} else {
80+
return -1;
81+
}
8582
}
8683

8784
@Override
@@ -92,7 +89,11 @@ public void openItem(int position) {
9289
} else {
9390
mOpenPosition = position;
9491
}
95-
mAdapter.notifyDataSetChanged();
92+
if (mBaseAdapter != null) {
93+
mBaseAdapter.notifyDataSetChanged();
94+
} else if (mRecyclerAdapter != null) {
95+
mRecyclerAdapter.notifyDataSetChanged();
96+
}
9697
}
9798

9899
@Override
@@ -103,7 +104,11 @@ public void closeItem(int position) {
103104
if (mOpenPosition == position)
104105
mOpenPosition = INVALID_POSITION;
105106
}
106-
mAdapter.notifyDataSetChanged();
107+
if (mBaseAdapter != null) {
108+
mBaseAdapter.notifyDataSetChanged();
109+
} else if (mRecyclerAdapter != null) {
110+
mRecyclerAdapter.notifyDataSetChanged();
111+
}
107112
}
108113

109114
@Override
@@ -116,6 +121,11 @@ public void closeAllExcept(SwipeLayout layout) {
116121

117122
@Override
118123
public void closeAllItems() {
124+
if (mode == Attributes.Mode.Multiple) {
125+
mOpenPositions.clear();
126+
} else {
127+
mOpenPosition = INVALID_POSITION;
128+
}
119129
for (SwipeLayout s : mShownLayouts) {
120130
s.close();
121131
}
@@ -199,7 +209,6 @@ public void onClose(SwipeLayout layout) {
199209
} else {
200210
mOpenPosition = INVALID_POSITION;
201211
}
202-
mShownLayouts.remove(layout);
203212
}
204213

205214
@Override
@@ -217,7 +226,6 @@ public void onOpen(SwipeLayout layout) {
217226
closeAllExcept(layout);
218227
mOpenPosition = position;
219228
}
220-
mShownLayouts.add(layout);
221229
}
222230

223231
public void setPosition(int position) {

0 commit comments

Comments
 (0)