1/* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 * use this file except in compliance with the License. You may obtain a copy of 6 * the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 * License for the specific language governing permissions and limitations under 14 * the License. 15 */ 16 17package com.android.inputmethod.keyboard.internal; 18 19import com.android.inputmethod.keyboard.PointerTracker; 20 21import java.util.LinkedList; 22 23public class PointerTrackerQueue { 24 private final LinkedList<PointerTracker> mQueue = new LinkedList<PointerTracker>(); 25 26 public synchronized void add(PointerTracker tracker) { 27 mQueue.add(tracker); 28 } 29 30 public synchronized void releaseAllPointersOlderThan(PointerTracker tracker, long eventTime) { 31 if (mQueue.lastIndexOf(tracker) < 0) { 32 return; 33 } 34 final LinkedList<PointerTracker> queue = mQueue; 35 int oldestPos = 0; 36 for (PointerTracker t = queue.get(oldestPos); t != tracker; t = queue.get(oldestPos)) { 37 if (t.isModifier()) { 38 oldestPos++; 39 } else { 40 t.onPhantomUpEvent(t.getLastX(), t.getLastY(), eventTime); 41 queue.remove(oldestPos); 42 } 43 } 44 } 45 46 public void releaseAllPointers(long eventTime) { 47 releaseAllPointersExcept(null, eventTime); 48 } 49 50 public synchronized void releaseAllPointersExcept(PointerTracker tracker, long eventTime) { 51 for (PointerTracker t : mQueue) { 52 if (t == tracker) { 53 continue; 54 } 55 t.onPhantomUpEvent(t.getLastX(), t.getLastY(), eventTime); 56 } 57 mQueue.clear(); 58 if (tracker != null) { 59 mQueue.add(tracker); 60 } 61 } 62 63 public synchronized void remove(PointerTracker tracker) { 64 mQueue.remove(tracker); 65 } 66 67 public synchronized boolean isAnyInSlidingKeyInput() { 68 for (final PointerTracker tracker : mQueue) { 69 if (tracker.isInSlidingKeyInput()) { 70 return true; 71 } 72 } 73 return false; 74 } 75 76 @Override 77 public String toString() { 78 StringBuilder sb = new StringBuilder("["); 79 for (PointerTracker tracker : mQueue) { 80 if (sb.length() > 1) 81 sb.append(" "); 82 sb.append(String.format("%d", tracker.mPointerId)); 83 } 84 sb.append("]"); 85 return sb.toString(); 86 } 87} 88