1 /*
2  * Copyright (C) 2014 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of 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,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.inputmethod.keyboard.internal;
18 
19 import com.android.inputmethod.keyboard.Key;
20 import com.android.inputmethod.keyboard.PointerTracker;
21 
22 import javax.annotation.Nonnull;
23 
24 public interface TimerProxy {
25     /**
26      * Start a timer to detect if a user is typing keys.
27      * @param typedKey the key that is typed.
28      */
startTypingStateTimer(@onnull Key typedKey)29     public void startTypingStateTimer(@Nonnull Key typedKey);
30 
31     /**
32      * Check if a user is key typing.
33      * @return true if a user is in typing.
34      */
isTypingState()35     public boolean isTypingState();
36 
37     /**
38      * Start a timer to simulate repeated key presses while a user keep pressing a key.
39      * @param tracker the {@link PointerTracker} that points the key to be repeated.
40      * @param repeatCount the number of times that the key is repeating. Starting from 1.
41      * @param delay the interval delay to the next key repeat, in millisecond.
42      */
startKeyRepeatTimerOf(@onnull PointerTracker tracker, int repeatCount, int delay)43     public void startKeyRepeatTimerOf(@Nonnull PointerTracker tracker, int repeatCount, int delay);
44 
45     /**
46      * Start a timer to detect a long pressed key.
47      * If a key pointed by <code>tracker</code> is a shift key, start another timer to detect
48      * long pressed shift key.
49      * @param tracker the {@link PointerTracker} that starts long pressing.
50      * @param delay the delay to fire the long press timer, in millisecond.
51      */
startLongPressTimerOf(@onnull PointerTracker tracker, int delay)52     public void startLongPressTimerOf(@Nonnull PointerTracker tracker, int delay);
53 
54     /**
55      * Cancel timers for detecting a long pressed key and a long press shift key.
56      * @param tracker cancel long press timers of this {@link PointerTracker}.
57      */
cancelLongPressTimersOf(@onnull PointerTracker tracker)58     public void cancelLongPressTimersOf(@Nonnull PointerTracker tracker);
59 
60     /**
61      * Cancel a timer for detecting a long pressed shift key.
62      */
cancelLongPressShiftKeyTimer()63     public void cancelLongPressShiftKeyTimer();
64 
65     /**
66      * Cancel timers for detecting repeated key press, long pressed key, and long pressed shift key.
67      * @param tracker the {@link PointerTracker} that starts timers to be canceled.
68      */
cancelKeyTimersOf(@onnull PointerTracker tracker)69     public void cancelKeyTimersOf(@Nonnull PointerTracker tracker);
70 
71     /**
72      * Start a timer to detect double tapped shift key.
73      */
startDoubleTapShiftKeyTimer()74     public void startDoubleTapShiftKeyTimer();
75 
76     /**
77      * Cancel a timer of detecting double tapped shift key.
78      */
cancelDoubleTapShiftKeyTimer()79     public void cancelDoubleTapShiftKeyTimer();
80 
81     /**
82      * Check if a timer of detecting double tapped shift key is running.
83      * @return true if detecting double tapped shift key is on going.
84      */
isInDoubleTapShiftKeyTimeout()85     public boolean isInDoubleTapShiftKeyTimeout();
86 
87     /**
88      * Start a timer to fire updating batch input while <code>tracker</code> is on hold.
89      * @param tracker the {@link PointerTracker} that stops moving.
90      */
startUpdateBatchInputTimer(@onnull PointerTracker tracker)91     public void startUpdateBatchInputTimer(@Nonnull PointerTracker tracker);
92 
93     /**
94      * Cancel a timer of firing updating batch input.
95      * @param tracker the {@link PointerTracker} that resumes moving or ends gesture input.
96      */
cancelUpdateBatchInputTimer(@onnull PointerTracker tracker)97     public void cancelUpdateBatchInputTimer(@Nonnull PointerTracker tracker);
98 
99     /**
100      * Cancel all timers of firing updating batch input.
101      */
cancelAllUpdateBatchInputTimers()102     public void cancelAllUpdateBatchInputTimers();
103 
104     public static class Adapter implements TimerProxy {
105         @Override
startTypingStateTimer(@onnull Key typedKey)106         public void startTypingStateTimer(@Nonnull Key typedKey) {}
107         @Override
isTypingState()108         public boolean isTypingState() { return false; }
109         @Override
startKeyRepeatTimerOf(@onnull PointerTracker tracker, int repeatCount, int delay)110         public void startKeyRepeatTimerOf(@Nonnull PointerTracker tracker, int repeatCount,
111                 int delay) {}
112         @Override
startLongPressTimerOf(@onnull PointerTracker tracker, int delay)113         public void startLongPressTimerOf(@Nonnull PointerTracker tracker, int delay) {}
114         @Override
cancelLongPressTimersOf(@onnull PointerTracker tracker)115         public void cancelLongPressTimersOf(@Nonnull PointerTracker tracker) {}
116         @Override
cancelLongPressShiftKeyTimer()117         public void cancelLongPressShiftKeyTimer() {}
118         @Override
cancelKeyTimersOf(@onnull PointerTracker tracker)119         public void cancelKeyTimersOf(@Nonnull PointerTracker tracker) {}
120         @Override
startDoubleTapShiftKeyTimer()121         public void startDoubleTapShiftKeyTimer() {}
122         @Override
cancelDoubleTapShiftKeyTimer()123         public void cancelDoubleTapShiftKeyTimer() {}
124         @Override
isInDoubleTapShiftKeyTimeout()125         public boolean isInDoubleTapShiftKeyTimeout() { return false; }
126         @Override
startUpdateBatchInputTimer(@onnull PointerTracker tracker)127         public void startUpdateBatchInputTimer(@Nonnull PointerTracker tracker) {}
128         @Override
cancelUpdateBatchInputTimer(@onnull PointerTracker tracker)129         public void cancelUpdateBatchInputTimer(@Nonnull PointerTracker tracker) {}
130         @Override
cancelAllUpdateBatchInputTimers()131         public void cancelAllUpdateBatchInputTimers() {}
132     }
133 }
134