1d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi/* 2d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi * Copyright (C) 2012 The Android Open Source Project 3d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi * 48aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License"); 58aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * you may not use this file except in compliance with the License. 68aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * You may obtain a copy of the License at 7d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi * 88aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * http://www.apache.org/licenses/LICENSE-2.0 9d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi * 10d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi * Unless required by applicable law or agreed to in writing, software 118aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS, 128aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * See the License for the specific language governing permissions and 148aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * limitations under the License. 15d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi */ 16d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi 17d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bipackage com.android.inputmethod.keyboard.internal; 18d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi 19d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Biimport android.graphics.Canvas; 204987108f34c08825ccb1c859c971bf232438c4aaTadashi G. Takaokaimport android.view.View; 21d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi 22d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Biimport com.android.inputmethod.keyboard.PointerTracker; 23d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi 24d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi/** 25cf915ddc878699909365dd599a0e154552e244e2Tadashi G. Takaoka * Abstract base class for previews that are drawn on DrawingPreviewPlacerView, e.g., 26cf915ddc878699909365dd599a0e154552e244e2Tadashi G. Takaoka * GestureFloatingTextDrawingPreview, GestureTrailsDrawingPreview, and 27cf915ddc878699909365dd599a0e154552e244e2Tadashi G. Takaoka * SlidingKeyInputDrawingPreview. 28d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi */ 29d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bipublic abstract class AbstractDrawingPreview { 307fb630b2a83983ea42108969b82ca85886e19241Tadashi G. Takaoka private View mDrawingView; 31d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi private boolean mPreviewEnabled; 320c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka private boolean mHasValidGeometry; 33d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi 347fb630b2a83983ea42108969b82ca85886e19241Tadashi G. Takaoka public void setDrawingView(final DrawingPreviewPlacerView drawingView) { 354987108f34c08825ccb1c859c971bf232438c4aaTadashi G. Takaoka mDrawingView = drawingView; 367fb630b2a83983ea42108969b82ca85886e19241Tadashi G. Takaoka drawingView.addPreview(this); 374987108f34c08825ccb1c859c971bf232438c4aaTadashi G. Takaoka } 384987108f34c08825ccb1c859c971bf232438c4aaTadashi G. Takaoka 397fb630b2a83983ea42108969b82ca85886e19241Tadashi G. Takaoka protected void invalidateDrawingView() { 407fb630b2a83983ea42108969b82ca85886e19241Tadashi G. Takaoka if (mDrawingView != null) { 417fb630b2a83983ea42108969b82ca85886e19241Tadashi G. Takaoka mDrawingView.invalidate(); 427fb630b2a83983ea42108969b82ca85886e19241Tadashi G. Takaoka } 434987108f34c08825ccb1c859c971bf232438c4aaTadashi G. Takaoka } 444987108f34c08825ccb1c859c971bf232438c4aaTadashi G. Takaoka 450c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka protected final boolean isPreviewEnabled() { 460c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka return mPreviewEnabled && mHasValidGeometry; 47d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi } 48d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi 490c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka public final void setPreviewEnabled(final boolean enabled) { 500c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka mPreviewEnabled = enabled; 51d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi } 52d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi 530c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka /** 540c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka * Set {@link MainKeyboardView} geometry and position in the {@link SoftInputWindow}. 550c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka * The class that is overriding this method must call this super implementation. 560c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka * 570c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka * @param originCoords the top-left coordinates of the {@link MainKeyboardView} in 580c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka * {@link SoftInputWindow} coordinate-system. This is unused but has a point in an 590c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka * extended class, such as {@link GestureTrailsDrawingPreview}. 600c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka * @param width the width of {@link MainKeyboardView}. 610c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka * @param height the height of {@link MainKeyboardView}. 620c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka */ 630c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka public void setKeyboardViewGeometry(final int[] originCoords, final int width, 640c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka final int height) { 650c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka mHasValidGeometry = (width > 0 && height > 0); 664987108f34c08825ccb1c859c971bf232438c4aaTadashi G. Takaoka } 674987108f34c08825ccb1c859c971bf232438c4aaTadashi G. Takaoka 68afca1ddd233c03d79433931a0b6ba97ed22663edTadashi G. Takaoka public abstract void onDeallocateMemory(); 694987108f34c08825ccb1c859c971bf232438c4aaTadashi G. Takaoka 70d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi /** 71d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi * Draws the preview 72d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi * @param canvas The canvas where the preview is drawn. 73d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi */ 742ecbfe8e93f8d8fce0adc47659b5d2f52cb68849Tadashi G. Takaoka public abstract void drawPreview(final Canvas canvas); 75d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi 76d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi /** 77d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi * Set the position of the preview. 784987108f34c08825ccb1c859c971bf232438c4aaTadashi G. Takaoka * @param tracker The new location of the preview is based on the points in PointerTracker. 79d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi */ 804987108f34c08825ccb1c859c971bf232438c4aaTadashi G. Takaoka public abstract void setPreviewPosition(final PointerTracker tracker); 81d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi} 82