aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMenny Even Danan <menny@evendanan.net>2016-03-08 15:20:30 +0000
committerMenny Even Danan <menny@evendanan.net>2016-03-08 15:20:30 +0000
commit967ba8260b320febdc0bfda1492530f77bcfaea6 (patch)
tree1a69c45d167451f7ab3822c56f2ec1e84d0c3532 /src
parente4462dc63cd1054d95e0d20af2777ae0c817b097 (diff)
downloadAnySoftKeyboard-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.java18
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) {