diff options
| author | Menny Even Danan <menny@evendanan.net> | 2016-03-08 15:20:30 +0000 |
|---|---|---|
| committer | Menny Even Danan <menny@evendanan.net> | 2016-03-08 15:20:30 +0000 |
| commit | 967ba8260b320febdc0bfda1492530f77bcfaea6 (patch) | |
| tree | 1a69c45d167451f7ab3822c56f2ec1e84d0c3532 /src | |
| parent | e4462dc63cd1054d95e0d20af2777ae0c817b097 (diff) | |
| download | AnySoftKeyboard-967ba8260b320febdc0bfda1492530f77bcfaea6.tar.gz AnySoftKeyboard-967ba8260b320febdc0bfda1492530f77bcfaea6.tar.bz2 | |
removing pointers AFTER the queue iteration is done. Fix for issue #5571.7-r1-beta
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/com/anysoftkeyboard/keyboards/views/AnyKeyboardBaseView.java | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/main/java/com/anysoftkeyboard/keyboards/views/AnyKeyboardBaseView.java b/src/main/java/com/anysoftkeyboard/keyboards/views/AnyKeyboardBaseView.java index 5e830c8ae..0b67f1893 100644 --- a/src/main/java/com/anysoftkeyboard/keyboards/views/AnyKeyboardBaseView.java +++ b/src/main/java/com/anysoftkeyboard/keyboards/views/AnyKeyboardBaseView.java @@ -81,9 +81,9 @@ import com.menny.android.anysoftkeyboard.BuildConfig; import com.menny.android.anysoftkeyboard.R; import java.lang.ref.WeakReference; +import java.util.ArrayList; import java.util.HashSet; import java.util.LinkedList; -import java.util.ListIterator; import java.util.Map; public class AnyKeyboardBaseView extends View implements @@ -332,16 +332,19 @@ public class AnyKeyboardBaseView extends View implements } public void releaseAllPointersOlderThan(final PointerTracker tracker, final long eventTime) { - final ListIterator<PointerTracker> iterator = mQueue.listIterator(); - while(iterator.hasNext()) { - final PointerTracker t = iterator.next(); - if (t == tracker) return; + ArrayList<PointerTracker> pointersToRemove = new ArrayList<>(); + for (PointerTracker t : mQueue) { + if (t == tracker) break; if (!t.isModifier()) { t.onUpEvent(t.getLastX(), t.getLastY(), eventTime); t.setAlreadyProcessed(); - iterator.remove(); + pointersToRemove.add(t); } } + + for (int i = 0, pointersToRemoveSize = pointersToRemove.size(); i < pointersToRemoveSize; i++) { + mQueue.remove(pointersToRemove.get(i)); + } } public void releaseAllPointersExcept(PointerTracker tracker, long eventTime) { @@ -352,8 +355,7 @@ public class AnyKeyboardBaseView extends View implements t.setAlreadyProcessed(); } mQueue.clear(); - if (tracker != null) - mQueue.add(tracker); + if (tracker != null) mQueue.add(tracker); } public void remove(PointerTracker tracker) { |
