Home | History | Annotate | Download | only in internal
      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 
     17 package com.android.inputmethod.keyboard.internal;
     18 
     19 import com.android.inputmethod.keyboard.PointerTracker;
     20 
     21 import java.util.LinkedList;
     22 
     23 public 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