12fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa/* 22fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * Copyright (C) 2013 The Android Open Source Project 32fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * 42fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * Licensed under the Apache License, Version 2.0 (the "License"); 52fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * you may not use this file except in compliance with the License. 62fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * You may obtain a copy of the License at 72fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * 82fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * http://www.apache.org/licenses/LICENSE-2.0 92fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * 102fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * Unless required by applicable law or agreed to in writing, software 112fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * distributed under the License is distributed on an "AS IS" BASIS, 122fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * See the License for the specific language governing permissions and 142fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * limitations under the License. 152fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa */ 162fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 172fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasapackage com.android.inputmethod.keyboard.internal; 182fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 192fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasaimport android.os.Message; 202fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 212fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasaimport com.android.inputmethod.keyboard.Key; 222fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasaimport com.android.inputmethod.keyboard.internal.DrawingHandler.Callbacks; 232fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasaimport com.android.inputmethod.latin.SuggestedWords; 242fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasaimport com.android.inputmethod.latin.utils.LeakGuardHandlerWrapper; 252fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 262fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa// TODO: Separate this class into KeyPreviewHandler and BatchInputPreviewHandler or so. 272fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasapublic class DrawingHandler extends LeakGuardHandlerWrapper<Callbacks> { 282fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa public interface Callbacks { 292fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa public void dismissKeyPreviewWithoutDelay(Key key); 302fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa public void dismissAllKeyPreviews(); 312fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa public void showGestureFloatingPreviewText(SuggestedWords suggestedWords); 322fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa } 332fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 342fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa private static final int MSG_DISMISS_KEY_PREVIEW = 0; 352fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa private static final int MSG_DISMISS_GESTURE_FLOATING_PREVIEW_TEXT = 1; 362fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 372fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa public DrawingHandler(final Callbacks ownerInstance) { 382fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa super(ownerInstance); 392fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa } 402fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 412fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa @Override 422fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa public void handleMessage(final Message msg) { 432fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa final Callbacks callbacks = getOwnerInstance(); 442fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa if (callbacks == null) { 452fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa return; 462fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa } 472fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa switch (msg.what) { 482fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa case MSG_DISMISS_KEY_PREVIEW: 492fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa callbacks.dismissKeyPreviewWithoutDelay((Key)msg.obj); 502fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa break; 512fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa case MSG_DISMISS_GESTURE_FLOATING_PREVIEW_TEXT: 522fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa callbacks.showGestureFloatingPreviewText(SuggestedWords.EMPTY); 532fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa break; 542fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa } 552fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa } 562fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 572fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa public void dismissKeyPreview(final long delay, final Key key) { 582fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa sendMessageDelayed(obtainMessage(MSG_DISMISS_KEY_PREVIEW, key), delay); 592fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa } 602fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 612fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa private void cancelAllDismissKeyPreviews() { 622fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa removeMessages(MSG_DISMISS_KEY_PREVIEW); 632fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa final Callbacks callbacks = getOwnerInstance(); 642fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa if (callbacks == null) { 652fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa return; 662fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa } 672fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa callbacks.dismissAllKeyPreviews(); 682fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa } 692fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 702fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa public void dismissGestureFloatingPreviewText(final long delay) { 712fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa sendMessageDelayed(obtainMessage(MSG_DISMISS_GESTURE_FLOATING_PREVIEW_TEXT), delay); 722fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa } 732fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 742fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa public void cancelAllMessages() { 752fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa cancelAllDismissKeyPreviews(); 762fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa } 772fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa} 78