PointerTrackerQueue.java revision 72934bd5967d0127f71fd4d66158b18b4e6ceefe
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 LinkedList<PointerTracker> mQueue = new LinkedList<PointerTracker>(); 25 26 public void add(PointerTracker tracker) { 27 mQueue.add(tracker); 28 } 29 30 public 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, true); 41 queue.remove(oldestPos); 42 } 43 } 44 } 45 46 public void releaseAllPointers(long eventTime) { 47 releaseAllPointersExcept(null, eventTime, true); 48 } 49 50 public void releaseAllPointersExcept(PointerTracker tracker, long eventTime, 51 boolean updateReleasedKeyGraphics) { 52 for (PointerTracker t : mQueue) { 53 if (t == tracker) 54 continue; 55 t.onPhantomUpEvent(t.getLastX(), t.getLastY(), eventTime, updateReleasedKeyGraphics); 56 } 57 mQueue.clear(); 58 if (tracker != null) 59 mQueue.add(tracker); 60 } 61 62 public void remove(PointerTracker tracker) { 63 mQueue.remove(tracker); 64 } 65 66 public boolean isInSlidingKeyInput() { 67 for (final PointerTracker tracker : mQueue) { 68 if (tracker.isInSlidingKeyInput()) 69 return true; 70 } 71 return false; 72 } 73 74 @Override 75 public String toString() { 76 StringBuilder sb = new StringBuilder("["); 77 for (PointerTracker tracker : mQueue) { 78 if (sb.length() > 1) 79 sb.append(" "); 80 sb.append(String.format("%d", tracker.mPointerId)); 81 } 82 sb.append("]"); 83 return sb.toString(); 84 } 85} 86