Skip to content

Commit 72eee89

Browse files
committed
Fixed #565 - Confirm item deletion from list after the adapter is filtered.
1 parent f5542c3 commit 72eee89

File tree

2 files changed

+32
-12
lines changed

2 files changed

+32
-12
lines changed

flexible-adapter-ui/src/main/java/eu/davidea/flexibleadapter/helpers/UndoHelper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public class UndoHelper extends Snackbar.Callback implements FlexibleAdapter.OnD
7272
private boolean consecutive = false;
7373
private List<Integer> mPositions = null;
7474
private Object mPayload = null;
75-
private FlexibleAdapter mAdapter;
75+
private FlexibleAdapter<?> mAdapter;
7676
private OnActionListener mUndoListener;
7777
private Snackbar mSnackbar;
7878

@@ -230,7 +230,7 @@ public void onDeleteConfirmed(int event) {
230230
Log.v("onActionConfirmed event=%s", event);
231231
mUndoListener.onActionConfirmed(mAction, event);
232232
}
233-
mAdapter.emptyBin();
233+
mAdapter.confirmDeletion();
234234
// Trigger manual dismiss event
235235
// Avoid circular calls!
236236
if (mSnackbar.isShown() && (mAction == Action.REMOVE && !mAdapter.isRestoreInTime())) {

flexible-adapter/src/main/java/eu/davidea/flexibleadapter/FlexibleAdapter.java

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3501,6 +3501,9 @@ public void removeRange(@IntRange(from = 0) int positionStart,
35013501
}
35023502
// Remove item from internal list
35033503
mItems.remove(positionStart);
3504+
if (permanentDelete && mOriginalList != null) {
3505+
mOriginalList.remove(item);
3506+
}
35043507
removeSelection(position);
35053508
}
35063509

@@ -3680,10 +3683,24 @@ public void restoreDeletedItems() {
36803683
emptyBin();
36813684
}
36823685

3686+
/**
3687+
* Performs removal confirmation and cleans memory by synchronizing the internal list from deletion.
3688+
* <p><b>Note:</b> This method is automatically called after timer is over in UndoHelper.</p>
3689+
*
3690+
* @since 5.0.1
3691+
*/
3692+
public void confirmDeletion() {
3693+
log.d("confirmDeletion!");
3694+
if (mOriginalList != null) {
3695+
mOriginalList.removeAll(getDeletedItems());
3696+
}
3697+
emptyBin();
3698+
}
3699+
36833700
/**
36843701
* Cleans memory from items just removed.
3685-
* <p><b>Note:</b> This method is automatically called after timer is over and after a
3686-
* restoration.</p>
3702+
* <p><b>Note:</b> This method is automatically called after timer is over in UndoHelper
3703+
* and after a restoration.</p>
36873704
*
36883705
* @since 3.0.0
36893706
*/
@@ -3697,7 +3714,7 @@ public synchronized void emptyBin() {
36973714
* @return true if the restore list is not empty, false otherwise
36983715
* @since 4.0.0
36993716
*/
3700-
public final boolean isRestoreInTime() {
3717+
public synchronized final boolean isRestoreInTime() {
37013718
return mRestoreList != null && !mRestoreList.isEmpty();
37023719
}
37033720

@@ -5386,13 +5403,14 @@ protected void onPreExecute() {
53865403
log.w("Cannot filter while endlessLoading");
53875404
this.cancel(true);
53885405
}
5389-
// Note: In case some items are in pending deletion (Undo started),
5390-
// we commit the deletion before starting or resetting the filter.
5391-
if (isRestoreInTime() && mDeleteCompleteListener != null) {
5406+
// Note: In case of some deleted items, we commit the deletion in the original list
5407+
// and in the current list before starting or resetting the filter.
5408+
if (isRestoreInTime()) {
53925409
log.d("Removing all deleted items before filtering/updating");
53935410
newItems.removeAll(getDeletedItems());
5394-
if (mOriginalList != null) mOriginalList.removeAll(getDeletedItems());
5395-
mDeleteCompleteListener.onDeleteConfirmed(3); // Snackbar.Callback.DISMISS_EVENT_MANUAL = 3
5411+
if (mDeleteCompleteListener != null) {
5412+
mDeleteCompleteListener.onDeleteConfirmed(3); // Snackbar.Callback.DISMISS_EVENT_MANUAL = 3
5413+
}
53965414
}
53975415
}
53985416

@@ -5487,8 +5505,9 @@ private void prepareItemsForUpdate(List<T> newItems) {
54875505
@CallSuper
54885506
protected void onPostUpdate() {
54895507
// Call listener to update EmptyView, assuming the update always made a change
5490-
if (mUpdateListener != null)
5508+
if (mUpdateListener != null) {
54915509
mUpdateListener.onUpdateEmptyView(getMainItemCount());
5510+
}
54925511
}
54935512

54945513
/**
@@ -5500,8 +5519,9 @@ protected void onPostUpdate() {
55005519
@CallSuper
55015520
protected void onPostFilter() {
55025521
// Call listener to update FilterView, assuming the filter always made a change
5503-
if (mFilterListener != null)
5522+
if (mFilterListener != null) {
55045523
mFilterListener.onUpdateFilterView(getMainItemCount());
5524+
}
55055525
}
55065526

55075527
/**

0 commit comments

Comments
 (0)